frp內網穿透配置以及相關端口、過程解釋

介紹

假設現有外網筆記本、云服務器、內網工作站三臺設備,希望使用外網筆記本通過云服務器轉發,訪問內網工作站;這里使用frp進行內網穿透。

云服務器端配置

  • 登錄騰訊輕量型云服務器控制臺,開放轉發端口bind_port以及deshboad端口,其中deshboad端口用來測試,可以不寫。

在這里插入圖片描述

  • 測試與公網服務器ssh鏈接

    假設公網云服務器ip地址為xx.xxx.xxx.xxx,那么在外網筆記本的終端中,執行

    ssh ubuntu@xx.xxx.xxx.xxx
    
  • 公網服務器端安裝frp程序包

    ssh進入云服務器中之后,執行

    wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.37.1_linux_amd64.tar.gz
    tar -zxvf frp_0.37.1_linux_amd64.tar.gz
    cp -r frp_0.37.1_linux_amd64 frp
    
  • 查看文件

    cd frp
    tree
    

    frp文件夾中,他們的文件結構是

    .                                     
    ├── frpc              
    ├── frpc_full.ini      
    ├── frpc.ini           
    ├── frps        #云服務器中使用
    ├── frps_full.ini         
    ├── frps.ini    #云服務器中使用  
    ├── LICENSE                      
    ├── nohup.out                  
    └── systemd          ├── frpc.service     ├── frpc@.service    ├── frps.service          └── frps@.service          
    1 directory, 12 files 
    
  • 修改frps.ini文件

    vim frps.ini
    

    修改為如下內容,注意,其中的端口6871,6289都是提前已經在防火墻中自定義好了的

    [common]
    # 云服務器儀表盤端口的用戶
    dashboard_user = xxx
    # 云服務器儀表盤端口的密碼
    dashboard_pwd = xxxxx
    dashboard_port = 6289
    # 云服務器和內網工作站之間的連接建立端口
    bind_port = 6000
    # 通訊口令,寫復雜一些
    token = xxxxxx
    
  • 移動到系統文件夾下

    cd ..
    sudo mv frp  /usr/local/
    
  • 設置開機啟動云服務器frps服務

    sudo vim /etc/init.d/frps_start.sh
    

    寫入

    #!/bin/bash
    ### BEGIN INIT INFO
    # Provides:          tuzixini
    # Required-Start:    $local_fs $network
    # Required-Stop:     $local_fs
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: self define auto start
    # Description:       self define auto start
    ### END INIT INFO
    sudo nohup /usr/local/frp/frps -c /usr/local/frp/frps.ini &
    

    賦予權限

    sudo chmod 755 /etc/init.d/frps_start.sh
    

    設置自啟動

    cd /etc/init.d
    sudo update-rc.d frps_start.sh defaults 90
    
  • 啟動服務: 重啟云服務器,或者執行以下指令

    **需要注意的是,**如果重啟之后,云服務器的frp服務沒有打開,就會導致個人工作站的frp服務啟動失敗,因此保證在啟動內網工作站的時候,云服務器的frp一定要是打開的。

    cd /usr/local/frp
    sudo nohup ./frps -c frps.ini &
    
  • 查看服務,或者停止服務(optional)

    # 查看服務
    systemctl status frp
    # 或者以下,可以查看到剛才的任務的進程id,假設為32567
    ps -aux | grep frps
    # 殺掉進程
    kill -9 32567   
    
  • 測試

    在筆記本電腦中,打開瀏覽器輸入你的公網ip:6289 輸入賬戶密碼,如果看到儀表盤就說明服務啟動成功了

內網工作站配置

直接打開命令終端,或者你自己ssh進去,

  • 同樣下載安裝frp

    wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.37.1_linux_amd64.tar.gz
    tar -zxvf frp_0.37.1_linux_amd64.tar.gz
    cp -r frp_0.37.1_linux_amd64 frp
    
  • 修改frpc.ini文件

    [common]
    # 你的云服務器公網ip
    server_addr = xx.xxx.xxx.xxx
    # 云服務器端與工作站建立連接的端口,與bind_port一致
    server_port = 6000
    # 通信口令,與frps.ini文件中定義的一致
    token = xxxxxx[ssh]   
    type = tcp
    # 內網工作站在局域網中的ip,填寫127.0.0.1就行,不用管具體的值
    local_ip = 127.0.0.1
    # 設置內網工作站 要監聽ssh的端口
    local_port = 22
    # 云服務器監聽外部訪問的端口,即轉發端口
    remote_port = 7000
    
  • 移動到系統文件夾下

    cd ..
    sudo mv frp  /usr/local/
    
  • 設置開機啟動內網工作站frpc

    sudo vim /etc/init.d/frpc_start.sh
    

    寫入

    #!/bin/bash
    ### BEGIN INIT INFO
    # Provides:          tuzixini
    # Required-Start:    $local_fs $network
    # Required-Stop:     $local_fs
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: self define auto start
    # Description:       self define auto start
    ### END INIT INFO
    sudo nohup /usr/local/frp/frpc -c /usr/local/frp/frpc.ini &
    

    賦予權限

    sudo chmod 755 /etc/init.d/frpc_start.sh
    

    設置自啟動

    cd /etc/init.d
    sudo update-rc.d frpc_start.sh defaults 90
    
  • 重啟內網工作站,或者執行以下指令啟動服務

    **需要注意的是,**如果重啟之后,云服務器的frp沒有打開,就會導致個人工作站的frp服務啟動失敗,因此保證在啟動內網工作站的時候,云服務器的frp一定要是打開的。

    cd /usr/local/frp
    sudo nohup ./frpc -c frpc.ini &
    
  • 查看服務,或者停止服務(optional)

    # 查看服務
    systemctl status frp
    # 或者以下,可以查看到剛才的任務的進程id,假設為32567
    ps -aux | grep frpc
    # 殺掉進程
    kill -9 32567   
    

第二個內網工作站

云服務器端

和第一個工作站配置相似,只是它的frps.ini中的bind_port和第一個工作站不相同,需要在云服務器上面手動開放對應的端口號

  • 重新創建一個新的frps.ini文件,假設為frps1.ini,里面寫上新的口,再使用frps運行它

    # 隨便設置一個不同的端口
    bind_port = 1212
    # 通信口令,可以跟第一個內網工作站不同,但是要和自己的相同
    token = XXXXXXX
    

內網工作站端

和第一個工作站配置相似,只是它的frpc.ini中的server_portremote_port都和第一個工作站不相同,需要在云服務器上面手動開放對應的端口號

  • 重新創建一個新的frpc.ini文件,假設為frpc1.ini,里面寫上新的口,再使用frpc運行它

    # 隨便設置一個不同的端口(需要提前在云服務器上手動開放)
    server_port = 1212
    # 通信口令,可以跟第一個內網工作站不同,但是要和自己的相同
    token = XXXXXXX[ssh]   
    type = tcp
    # 內網工作站在局域網中的ip,填寫127.0.0.1就行,不用管具體的值
    local_ip = 127.0.0.1
    # 設置內網工作站frp要監聽的端口
    local_port = 22
    # 不同的轉發端口,同樣需要提前在云服務器上手動開放
    remote_port = 5101
    
  • 自動啟動方式,和第一個內網工作站相同。

使用

  • 在外網筆記本的終端中,輸入

    ssh -p [轉發端口][用戶名]@[ip]
    

    其中,用戶名是想要訪問的內網工作站的對應賬戶名稱,ip是云服務器公網ip;輸入的密碼也是內網工作站的密碼,轉發端口是上面提到的remote_port

內部基本流程和解釋

基本概念

外網筆記本、云服務器、內網工作站,在frp穿透方法中,需要在云服務器和內網工作站上進行部署;在frp穿透方法中,將會在云服務器上部署frps(frp服務端),內網工作站上部署frpc(frp客戶端);其中涉及到幾個概念:

  • bind_port:定義在frps的配置文件中,用于指定云服務器上的一個端口,該端口用于監聽內網工作站與該端口的連接請求,內網工作站會通過云服務器公網ip地址,向云服務器該端口發送連接請求,通過該端口發送token后建立與云服務器的連接。 (但是云服務端并不通過這個口向內網工作站轉發外部數據)
  • server_port: 定義在frpc的配置文件中,用處是,告訴內網工作站:“應該向云服務器的哪個端口發送建立連接請求?” 本質上和bind_port相同,都指的是云服務器上的一個端口,只是定義位置不同。
  • remote_port: 定義在frpc的配置文件中,用于指定云服務器上的一個端口(即轉發端口),假設remote_port=7000,它的作用是,在內網工作站和云服務器建立和保持連接之后,內網工作站根據自己配置文件中指定的remote_port=7000 告訴云服務器:“我要聽傳輸到你7000端口的數據,請把你7000端口接收到的數據轉發給我”,為什么定義到frpc配置中?
  • local_port:定義在frpc的配置文件中,假設local_port=22,它用于告訴云服務器:“你把7000端口接收的數據轉發給我的22端口,我在那里聽著”。
    在這里插入圖片描述

基本流程

在云服務器上預先開放兩個端口,一個7000端口作為bind_port,以及另一個6000端口作為接受外網訪問的轉發端口。

  1. 內網工作站通過frpc配置中的server_port和云服務器ip,通過一個隨機端口發送token和連接請求;
  2. 建立連接后,內網工作站根據frpc配置中的remote_port=6000指向云服務器中已經開放的6000端口,告訴云服務器請求將該6000端口數據轉發給自己的local_port端口;
  3. 云服務器隨即監聽請求中的6000端口接收到的數據,并通過自己的隨機端口,將接收到的外部訪問數據轉發給內網工作站frpc配置中定義的local_port端口。
  4. 內網工作站根據轉發的數據,判斷是否通過ssh密碼驗證,是否建立ssh通訊。

注意點

  • 建立連接后,云服務器,一律將訪問remote_port的ssh類型數據轉發到內網工作站local_port端口上;內網工作站local_port不管,也不知道是云服務器上到底哪個port跟自己通訊的,甚至不知道是從云服務器上過來的數據,還是同一個內網的訪問數據,local_port 只是接收請求,但是能不能進一步建立ssh連接還需要進行密碼驗證。
  • bind_port 端口和remote_port端口的設定不用擔心安全問題;bind_port 端口的通訊建立需要通過frpc以及frps配置文件中的token相互匹配驗證。云服務器remote_port端口本身就是要暴露在外部接收外部訪問的,它只是轉發remote_port端口的接受數據,與內網工作站的ssh建立需要通過內網工作站自身的賬戶密碼驗證。
  • 通過內網穿透的方式,實現了將自己內網工作站的賬戶暴露在公網中,此時知道公網ip、轉發端口的人,都可以使用常見的“用戶名+密碼”組合嘗試登錄你的內網工作站,因此自己內網工作站的密碼需要非常復雜,否則可能會被外部暴力嘗試攻破。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161213.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161213.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161213.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

opencv-圖像輪廓

輪廓可以簡單認為成將連續的點(連著邊界)連在一起的曲線,具有相同的顏色或者灰度。輪廓在形狀分析和物體的檢測和識別中很有用。 ? 為了更加準確,要使用二值化圖像。在尋找輪廓之前,要進行閾值化處理或者 Canny 邊界檢…

uni-app小程序 swiper 分頁器樣式修改

小程序中使用 wx-swiper-dot和wx-swiper-dot-active選擇器 H5中使用uni-swiper-dot和uni-swiper-dot-active選擇器 .swiper {height: 408px;margin-bottom: 28rpx;::v-deep .uni-swiper-dot {background: #e7e7e7;&.uni-swiper-dot-active {background: #b1b1b1;}}// #ifde…

php文件上傳例子

目錄結構&#xff1a; index.html代碼&#xff1a; <!DOCTYPE html> <html><head><title>文件上傳</title><meta charset"utf-8"></head><body><form action"./up.php" method"post" encty…

PHP基礎與安全

基礎 1. 簡介概述 ●PHP是腳本語言-是一門弱類型語言&#xff0c;不需要事先編譯 ●PHP 腳本在服務器上執行&#xff0c;然后向瀏覽器發送回純文本的 HTML 結果 ●超文本預處理器&#xff0c;服務器端腳本語 2.創建&#xff08;聲明&#xff09;PHP變量 ● 變量以 $ 符號開…

安防視頻EasyCVR平臺太陽能供電+4G攝像頭視頻監控方案的建設

在工地、光伏、風電站、水庫河道等場景中&#xff0c;以及一些偏遠地區的項目現場&#xff0c;會存在無網無電情況&#xff0c;大大制約了視頻監控系統建設的效率及可行性。在這種場景中&#xff0c;我們也可以通過太陽能供電4G監控攝像機的方案&#xff0c;滿足偏遠地區無網無…

【bug 回顧】上傳圖片超時

測試 bug 問題分析 - 上傳圖片超時 最近在測試上遇到一個莫名奇妙的問題&#xff0c;最后也沒有得到具體是哪塊的原因&#xff0c;看各位大佬有沒有思路&#xff1f;&#xff1f; 一 、背景 現在我們有三臺服務器&#xff0c;用來布兩套環境。其中另外一臺服務器3配置的 tom…

JVM中判斷對象是否需要回收的方法

在堆里面存放著Java 世界中幾乎所有的對象實例&#xff0c;垃圾收集器在對堆進行回收前&#xff0c;第一件事情就是要確定這些對象之中哪些還“ 存活 ” 著&#xff0c;哪些已經 “ 死去 ”。 引用計數算法 引用計數法是一種內存管理技術&#xff0c;它是通過對每個對象進行引用…

likeshop單商戶商城系統 任意文件上傳漏洞復現

0x01 產品簡介 likeshop單商戶標準商城系統適用于B2C、單商戶、自營商城場景。完美契合私域流量變現閉環交易使用。 系統擁有豐富的營銷玩法&#xff0c;強大的分銷能力&#xff0c;支持電子面單和小程序直播等功能。無論運營還是二開都是性價比極高的100%開源商城系統。 0x02…

java--飛翔的小鳥

游戲玩法&#xff1a;通過鼠標點擊使小鳥上下移動穿過柱子并完成得分&#xff0c;小鳥碰到柱子或掉落到地面上都會結束游戲。 游戲內圖片 Brid類&#xff1a; package bird;import org.omg.CORBA.IMP_LIMIT;import javax.imageio.ImageIO; import java.awt.image.BufferedIma…

前置聲明避免循環依賴

當你有兩個類互相引用的情況時&#xff0c;使用前置聲明可以幫助你避免循環依賴。以下是一個簡單的例子&#xff0c;其中包含兩個頭文件、兩個源文件以及一個 main 函數的示例 Toolnterface.h #pragma once#include <QString>// Forward declaration of QToolBase clas…

Eclipse常用設置-亂碼

在用Eclipse進行Java代碼開發時&#xff0c;經常會遇到一些問題&#xff0c;記錄下來&#xff0c;方便查看。 一、properties文件亂碼 常用的配置文件properties里中文的亂碼&#xff0c;不利于識別。 處理流程&#xff1a;Window -> Preferences -> General -> Ja…

golang學習筆記——羅馬數字轉換器

文章目錄 羅馬數字轉換器代碼 參考LeetCode 羅馬數字轉整數代碼 羅馬數字轉換器 編寫一個程序來轉換羅馬數字&#xff08;例如將 MCLX 轉換成 1,160&#xff09;。 使用映射加載要用于將字符串字符轉換為數字的基本羅馬數字。 例如&#xff0c;M 將是映射中的鍵&#xff0c;其值…

Qt+sqlite3使用事務提升插入效率

參考&#xff1a; 【精選】SQLite批量插入效率_sqlite 批量插入_PengX_Seek的博客-CSDN博客 (1)不使用事務時&#xff1a; clock_t t_start clock();QSqlQuery query(db);QString sql("insert into test(col1,col2) values(1,2);");for (int i 0; i < 1000; i…

c++學習之哈希

目錄 1.關于unordered系列關聯式容器 2.關于unordered_map 3.哈希&#xff08;散列&#xff09;表的實現 一&#xff0c;直接定址法 二&#xff0c;除留余數法 方法一&#xff1a;閉散列&#xff1a;開放定址法 方法二&#xff1a;閉散列&#xff1a;哈希桶/拉鏈法 4.哈希…

機器學習/sklearn 筆記:K-means,kmeans++

1 K-means介紹 1.0 方法介紹 KMeans算法通過嘗試將樣本分成n個方差相等的組來聚類&#xff0c;該算法要求指定群集的數量。它適用于大量樣本&#xff0c;并已在許多不同領域的廣泛應用領域中使用。KMeans算法將一組樣本分成不相交的簇&#xff0c;每個簇由簇中樣本的平均值描…

hadoop shell操作 hdfs處理文件命令 hdfs上傳命令 hadoop fs -put命令hadoop fs相關命令 hadoop(十三)

hadoop fs -help rm 查看rm命令作用 hadoop fs 查看命令 1. 創建文件夾&#xff1a; # hdfs前綴也是可以的。更推薦hadoop hadoop fs -mkdir /sanguo 2.上傳至hdfs命令&#xff1a; 作用&#xff1a; 從本地上傳hdfs系統 &#xff08;本地文件被剪切走&#xff0c;不存在了&…

論防火墻的體系結構

防火墻的體系結構 防火墻的體系結構 雙重宿主主機體系結構。屏蔽主機體系結構。屏蔽子網體系結構。 雙重宿主主機體系結構 雙重宿主主機體系結構是指以一臺具有雙重宿主的主機計算機作為防火墻系統的主體&#xff0c;執行分離外部網絡與內部網絡的任務。該計算機至少有兩個…

【NGINX--4】大規模可擴展的內容緩存

1、緩存區 緩存內容并定義緩存的存儲位置。 使用 proxy_cache_path 指令定義共享內存緩存區和內容的位置&#xff1a; proxy_cache_path /var/nginx/cachekeys_zoneCACHE:60m levels1:2inactive3h max_size20g; proxy_cache CACHE;上述緩存定義示例在文件系統 /var/nginx/ca…

為什么要用多線程?

提高響應速度&#xff1a;對于耗時操作&#xff0c;使用多線程可以使得應用程序更快地響應用戶的請求&#xff0c;從而提高用戶體驗。實現并行計算&#xff1a;多線程可以同時執行多個任務&#xff0c;從而實現并行計算&#xff0c;提高程序的運行效率。提高CPU利用率&#xff…

html屬性值可以不用引號嗎,實例驗證

html屬性值可以不用引號 HTML元素的屬性值可以不適用引號來包裹&#xff0c;瀏覽器一樣可以將其進行渲染。不過&#xff0c;如果這樣寫HTML的代碼的話&#xff0c;屬性與屬性值之間需要用空格來進行隔開&#xff0c;避免后面的屬性變成前面屬性的屬性值。 提示&#xff1a;雖…