智宇物聯(lián) 專注于提供高穩(wěn)定、高速率的三網(wǎng)物聯(lián)網(wǎng)卡
云陽使用frp實現(xiàn)內(nèi)網(wǎng)穿透管理物聯(lián)網(wǎng)設備
- 作者:智宇物聯(lián)
- 發(fā)表時間:2022年10月14日
- 來源:智宇物聯(lián)
1. 內(nèi)網(wǎng)穿透的概念及方法
由于IP資源數(shù)量限制以及防火墻等原因,一般來說,我們的物聯(lián)網(wǎng)設備和私有服務器都是沒有公網(wǎng)IP地址的,因此也無法通過外部網(wǎng)絡直接訪問,只有公有云服務商或者專線接入的用戶,才有有限的獨立的公網(wǎng)IP地址可供訪問。在這種情況下,如果我們要通過個人電腦、私人服務器提供網(wǎng)絡服務,或者需要從公共網(wǎng)絡訪問并管理我們的物聯(lián)網(wǎng)設備,就需要有內(nèi)網(wǎng)穿透的功能,使我們的服務器與物聯(lián)網(wǎng)設備提供的服務(如文件服務、FTP、網(wǎng)站服務或者SSH遠程管理功能等)可以穿過防火墻,能夠從公共網(wǎng)絡進行訪問。
實現(xiàn)跨網(wǎng)絡訪問的方法較多:
- 如果單純要進行windows桌面遠程管理,可以使用遠程桌面TeamViewer工具,但該軟件為商用軟件,并且功能有很多限制
- 也可以使用商用的蒲公英或者其他VPN工具搭建VPN,通過虛擬化的本地網(wǎng)絡進行訪問
- 也可以使用商用的花生殼軟件提供的內(nèi)網(wǎng)穿透功能,但是價格昂貴并且功能限制較多
- 此外,可以通過開源工具ngrok、frp等進行內(nèi)網(wǎng)穿透服務器搭建,由于ngrok自版本2之后不再開源,本文選擇了目前更為流行的frp工具。
要實現(xiàn)內(nèi)網(wǎng)穿透,你需要有一臺擁有公有IP地址的服務器,在目前云服務器價格持續(xù)走低的情況下,擁有一臺獨立的低配置的云服務器對個人來說并非難事,其成本也遠低于其他商用軟件如花生殼等。本文以下步驟均以擁有固定IP地址的公網(wǎng)云服務器以及在局域網(wǎng)內(nèi)的服務器為前提,其中,云服務器安裝了Ubuntu18.04版本的linux操作系統(tǒng),本地私有服務器安裝了Windows 10系統(tǒng),為了充分模擬各種情況,本地服務器還通過WSL運行了Ubuntu18.04系統(tǒng)。拓撲簡圖如下:

2. frp安裝與基礎(chǔ)配置
frp的安裝與配置很簡單,在frp項目官網(wǎng)(或者從我們的frp國內(nèi)鏡像)的release頁面下載需要的已經(jīng)編譯好的二進制文件,注意,下載好的frp是包括服務器frps和客戶端frpc的,在服務端只需要啟動frps而在客戶端只需要啟動frpc,在我們的服務器和客戶端操作分別如下。
由于一般云服務器供應商對服務器端口均進行了限制,為了保證本文后續(xù)配置順利進行,需要在云服務器安全組中開放以下端口,并在后續(xù)要提供其他服務時根據(jù)情況進行開放,如果服務器自身也啟用了防火墻服務,那么下列端口還需要在服務器防火墻配置中再配置一次以予以放行:
- 7000 用于frp服務器和客戶端之間進行數(shù)據(jù)交換
- 8000 用于提供http服務
- 7019~7021 用于提供被動式的ftp服務
- 7022 用于提供ssh遠程管理服務
- 7389 用于windows客戶端遠程桌面管理
本文后續(xù)配置中均假設云服務器ip地址為123.123.123.123,實際配置中需要根據(jù)真實ip地址修改,同時,本位假設已經(jīng)擁有一個域名通過A記錄解析至123.123.123.123,因此在配置時均通過域名代替ip地址。這樣的好處是如果服務器進行更換,不需要再在每臺客戶端中配置并更換服務器的ip地址。
2.1 服務器端frp安裝與配置(frps)
通過ssh方式遠程連接云服務器后,通過以下命令下載并安裝frps。
//下載安裝包
wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz
//解壓安裝包
tar -xvf frp_0.34.3_linux_amd64.tar.gz
//使用nano或者vim打開解壓后的frps.ini文件并做以下最簡單的配置以供測試
# frps.ini
[common]
bind_port = 7000
//通過以下命令啟動frps
./frps -c ./frps.ini
上述啟動方式僅用于調(diào)試,在斷開ssh連接后服務會自動關(guān)閉,服務器與客戶端自啟動方式見后文詳細配置說明。
2.2 Windows 客戶端frp安裝與訪問(frpc)
下載windows版本客戶端并解壓,打開 frpc.ini 文件進行配置。
- 在server_addr部分輸入域名或者ip地址均可,這里使用域名
- 為了進行測試,需要windows打開遠程管理服務功能,在windows文件資源管理器中,右鍵點擊此電腦選擇“管理”,選擇“高級系統(tǒng)設置”,選擇“遠程”,選擇“允許遠程連接到此電腦”。此功能僅用于windows 10專業(yè)版及以上,家庭版是不具備此功能的,可以通過后續(xù)方法搭建ftp服務器進行測試。
# frpc.ini
[common]
server_addr =
server_port = 7000
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7389
在當前目錄下打開 windows powershell 輸入以下命令以啟動客戶端,如果服務器連接成功,會有 start proxy successful 字樣提醒:
> .\frpc.exe -c .\frpc.ini
在第三臺電腦上,通過快捷鍵 win+R 啟動命令提示框,輸入 mstsc ,輸入 :7389 輸入用戶名和密碼(安裝了frpc客戶端電腦的用戶名和密碼),即可遠程打開windows客戶端電腦進行管理??梢钥吹剑谶@種條件下,第三方電腦通過公網(wǎng)云服務器的7389端口,訪問了windows客戶端的3389遠程桌面端口,實現(xiàn)了windows電腦端口的內(nèi)網(wǎng)穿透功能。
2.3 Linux客戶端frp安裝與訪問(frpc)
在windows10服務器的WSL子系統(tǒng)下(或者獨立的Linux系統(tǒng)亦可),安裝frp客戶端并進行訪問。需要注意的是,windows10的Ubuntu子系統(tǒng),默認沒有打開root用戶遠程ssh權(quán)限,需要先進性設置。
//打開ssh配置文件
sudo nano /etc/ssh/sshd_config
//修改以下位置,然后保存:
Port = 22 # 去掉前面的#號,啟用22端口
ListenAddress 0.0.0.0 #去掉前面的#號
PasswordAuthentication yes # 將 no 改為 yes 表示使用帳號密碼方式登錄
PermitRootLogin yes #允許root用戶遠程登錄
//重啟sshd服務:
dpkg-reconfigure openssh-server #用于安裝RSA_KEY,選擇使用現(xiàn)有配置文件keep old...
sudo service ssh restart #重啟SSH服務
sudo service ssh status #查看SSH服務狀態(tài),應為running
執(zhí)行以下命令下載并配置運行frp客戶端。
//下載安裝包
wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz
//解壓安裝包
tar -xvf frp_0.34.3_linux_amd64.tar.gz
//使用nano或者vim打開解壓后的frpc.ini文件并做以下配置以啟用ssh功能
# frpc.ini
[common]
server_addr =
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7022
//通過以下命令啟動frps
./frps -c ./frps.ini
通過第三方計算機終端訪問 ssh -p 7022 root@ ,輸入密碼后即可通過ssh方式訪問linux主機(此處為windows服務器的wsl子系統(tǒng))。
3. frp配置文件說明
在下載解壓后的文件中,分別有 frpc_full.ini 和 frps_full.ini 兩個配置文件示例,包括了大部分功能的配置方法,在frp官網(wǎng)中也提供了大量配置案例??晒﹨⒖?。
3.1 通過token加密frp
上文所述的frp是不安全的,在沒有加密的情況下,任何人都可以使用你的frp服務器進行內(nèi)網(wǎng)穿透服務。為此,frp提供了token和OpenID加密方式進行加密,要使用token加密,只需要在服務器端的 frps.ini 配置文件和客戶端的 frpc.ini 文件中增加同樣的token配置項即可。
#frps.ini
[common]
authentication_method = token
token = 12345678
#frpc.ini
[common]
token = 12345678
此外,也可以采用通過環(huán)境變量取代配置文件明文密碼的方式進行參數(shù)配置及加密,參考配置如下:
# frpc.ini
[common]
server_addr = {{ .Envs.FRP_SERVER_ADDR }}
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = {{ .Envs.FRP_SSH_REMOTE_PORT }}
3.2 配置http端口及域名服務
服務端配置http服務端口及域名主機。
# frps.ini
[common]
#http端口服務
vhost_http_port = 8000
#配置主機域名后,可以在客戶端配置子域名進行訪問
subdomain_host = domain.com
如果客戶端要配置http子域名,可以采用如下配置,這樣可以通過test.domain.com:8000訪問客戶機的80端口:
# frpc.ini
[web]
type = http
local_port = 80
subdomain = test
如果客戶端要配置獨立的域名,可以采用如下配置,并把 ? 域名解析到服務器的ip地址上,即可通過如下配置,以 ?:8000? 訪問客戶機80端口:
[web]
type = http
local_port = 80
custom_domains =
3.3 配置ftp服務(內(nèi)網(wǎng)ftp服務器被動模式)
對于在局域網(wǎng)中搭建的 ?ftp? 服務器,需要通過被動模式,才能穿過防火墻供外部 ?ftp? 客戶端訪問,以 ?FileZilla Server? 為例,在服務器配置時,需要配置以下被動模式,在本例中, ?ftp? 服務器使用21端口,被動端口定義為7018~7020。

在客戶端作如下配置,其中ftp用于配置ftp服務器,ftp1~3用于配置被動端口,配置后可以通過7021端口訪問客戶端21端口的ftp服務:
[ftp]
type = tcp
local_ip = 127.0.0.1
local_port = 21
remote_port=7021
[ftp1]
type = tcp
local_ip = 127.0.0.1
local_port = 7018
remote_port = 7018
[ftp2]
type = tcp
local_ip = 127.0.0.1
local_port = 7019
remote_port = 7019
[ftp3]
type = tcp
local_ip = 127.0.0.1
local_port = 7020
remote_port = 7020
3.4 配置管理頁面
frp可以通過程序內(nèi)置的管理頁面進行管理,要配置服務端管理頁面,需要配置相應的 ?dashboard? 參數(shù)。如下配置后,可以訪問frp服務器的7500端口,通過設置的用戶名和密碼管理frps服務器。
//frps.ini
[common]
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
要管理與配置客戶端參數(shù),需要對 ?frpc.ini? 做如下配置,配置后,可以通過在客戶端本地7400端口管理并配置frp客戶端。
//frpc.ini
[common]
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin
4.配置frp開機啟動
4.1 在Ubuntu通過systemd下配置frps為系統(tǒng)服務
新的Ubuntu系統(tǒng)通過systemd來管理服務以替代傳統(tǒng)的init,關(guān)于systemd的入門教程,可以參考阮一峰博客的文章要配置frps為系統(tǒng)服務,可以按照如下步驟進行操作.
//1. /usr/frp目錄并復制frps 和frps.ini 文件到其中,本步驟僅為后續(xù)操作方便。
//2. 在/lib/systemd/system/目錄下新建frps.service文件并寫入以下內(nèi)容,這也是service一類文件的標準寫法。
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/usr/frp/frps -c /usr/frp/frps.ini
[Install]
WantedBy=multi-user.target
//以上操作完成后,可以通過Ubuntu系統(tǒng)的systemctl命令操作frps服務
sudo systemctl enable frps.service # 設置開機啟動,根據(jù) install 建立軟鏈
sudo systemctl disable frps.service # 取消開機啟動,根據(jù) install 移除軟鏈
sudo systemctl daemon-reload # 重新加載配置,修改 systemd 配置執(zhí)行
systemctl status frps # 查看 frps 服務狀態(tài)
systemctl cat frps # 查看 frps 服務配置
sudo systemctl start frps # 啟動 frps 服務
sudo systemctl stop frps # 停止 frps 服務
4.2 在Windows系統(tǒng)下通過配置任務計劃來配置 ?frpc? 開機自啟動
利用批處理文件和任務計劃來啟動程序是windows下常規(guī)操作,在 ?frp? 目錄下新建一個 ?start.bat? 批處理文件。
@echo off
:home
frpc -c frpc.ini
goto home
上述腳本會在服務中斷后自動重啟服務(一旦frpc退出,就回到home行重新開始),一個簡單的方式是對上述腳本新建一個快捷方式并放置在以下目錄中,就可以開機自動啟動,但每次開機都會有windows命令行出現(xiàn)。
?C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp? 因此還是通過配置任務計劃更好一些。
搜索任務計劃程序,打開windows任務計劃程序。新建一個基本任務,“常規(guī)”欄名稱可以隨意填寫,在運行時選擇不管用戶是否登錄都運行,并且選擇使用最高權(quán)限運行和隱藏。在“觸發(fā)器”欄中選擇啟動時。在“操作”欄中選擇新建操作,程序指向 ?start.bat? 位置,起始位置指向腳本目錄。任務配置完成后,系統(tǒng)在開機時即可自動運行。



4.3 利用 ?WINSW? 將frp注冊為windows系統(tǒng)服務以實現(xiàn)自啟動
?WINSW? 是一個可以把任何(幾乎)windows程序注冊成windows系統(tǒng)服務的工具軟件,[下載WINSW] 并保存在frp目錄下,為了方便起見,將WINSW重命名為 ?myfrpc.ext? ,并在同一目錄下新建一個 ?myfrpc.xml? 文件,添加內(nèi)容如下:
<service>
<id>frpc</id>
<name>Frpc</name>
<description>This service runs frp client system with configuration</description>
<env name="JENKINS_HOME" value="%BASE%"/>
<executable>D:\services\frp\frpc.exe</executable>
<arguments>-c frpc.ini</arguments>
<onfailure action="restart" delay="15 sec"/>
<onfailure action="restart" delay="30 sec"/>
<log mode="roll"></log>
</service>
其中, ?executable? 指向 ?frpc.exe? 所在目錄, ?arguments? 為運行參數(shù), ?onfailure? 設置了兩次重啟機會,來保證服務可以正常啟動。在命令行中運行 ?myfrpc.exe(即重命名后的winsw.exe文件)? 來管理服務:
./myfrpc.exe install #注冊服務,winsw會自動找到同一目錄下的xml文件并注冊其中的程序
./myfrpc.exe uninstall #取消服務
./myfrpc.exe start #啟動服務
./myfrpc.exe stop #停止服務
./myfrpc.exe status #查看服務狀態(tài)
./myfrpc.exe restart #重啟服務
這樣就將frpc注冊為windows系統(tǒng)服務,在windows任務管理器的服務欄中可以看到該服務。
- 云陽物聯(lián)網(wǎng)卡嵌入式(什么是物聯(lián)網(wǎng)卡,有什么用)
- 云陽南京物聯(lián)網(wǎng)卡限制(如何看待南京大眾書局的聯(lián)名卡事件)
- 云陽自動售貨機物聯(lián)卡的核心功能與優(yōu)勢
- 云陽物聯(lián)卡:解鎖自動售貨機的智能進化密碼
- 云陽物聯(lián)卡:解鎖自動售貨機智能化的關(guān)鍵密鑰
- 云陽重構(gòu)無人零售的智慧引擎(物聯(lián)卡)
- 云陽智能終端革命:解碼自動售貨機重構(gòu)零售業(yè)的底層邏輯
- 云陽物聯(lián)卡賦能自動售貨機:智能化升級與價值釋放
- 云陽自動售貨機物聯(lián)卡:智能化、場景化與生態(tài)化演進?
- 云陽自動售貨機的數(shù)字化躍遷引擎?
- 云陽華為物聯(lián)網(wǎng)卡網(wǎng)速慢(華為手機流量網(wǎng)速慢怎么辦)
- 云陽醫(yī)院需要物聯(lián)網(wǎng)卡嗎(什么是物聯(lián)網(wǎng)卡,與手機卡有什么區(qū)別,能用在手機上嗎)
- 云陽智能穿戴物聯(lián)卡行業(yè)綜合解決方案
- 云陽安防監(jiān)控物聯(lián)卡行業(yè)綜合解決方案:智能化時代的“安全守護者”
- 云陽物聯(lián)卡是如何盤活自動售貨機市場的?
- 云陽車聯(lián)網(wǎng)物聯(lián)卡行業(yè)綜合解決方案:驅(qū)動智慧出行的“數(shù)字紐帶”
- 云陽POS機物聯(lián)卡行業(yè)綜合解決方案:驅(qū)動智能支付場景的數(shù)字化轉(zhuǎn)型
- 云陽智慧林業(yè):構(gòu)建全鏈路數(shù)字化生態(tài)系統(tǒng)的創(chuàng)新實踐
- 云陽智慧農(nóng)業(yè):重塑現(xiàn)代農(nóng)業(yè)的數(shù)字化革命?
- 云陽智慧醫(yī)療:生命科學革命下的醫(yī)療生態(tài)重構(gòu)