一、內網穿透介紹
內網穿透是什么意思? - 花生殼內網穿透的回答 - 知乎 https://www.zhihu.com/question/63098230/answer/697954117
內網穿透,也即 NAT 穿透,進行 NAT 穿透是為了使具有某一個特定源 IP 地址和源端口號的數據包不被 NAT 設備屏蔽而正確路由到內網主機。下面就相互通信的主機在網絡中與 NAT 設備的相對位置介紹內網穿透方法。 [1]
UDP 內網穿透的實質是利用路由器上的NAT 系統。NAT 是一種將私有(保留)地址轉化為合法IP地址的轉換技術,它被廣泛應用於各種類型 Internet 接入方式和各種類型的網絡中。NAT可以完成重用地址,並且對於內部的網絡結構可以實現對外隱蔽。 [2]
二、frp內網穿透
frp實現內網穿透,需要在服務器端配置frps,開放相應端口,實現一個可以提供訪問的外網ip;客戶端(樹莓派、ros機器人、windows電腦)需要配置frpc,開啟端口對應,讓本地ip和外網ip對應起來。
不管是內網穿透樹莓派、ros、windows電腦,阿里雲服務器端的frps配置都是一樣的,需要開啟7000端口。而客戶端依照系統不同和端口的實際開放需求不同,frpc文件都要有不同。注意客戶端的22端口都可以開放,只需要配置中session名稱(即[]中的名字)不同,以及映射到阿里雲服務器的端口不同即可。
- frp下載地址
frp的github下載地址:Releases · fatedier/frp (github.com)
github加速下載:下載 (serctl.com)
有時候在 github
上下載安裝包的時候需要選擇自己 CPU
的架構情況了。會提供不同操作系統的三種架構, x86
的 32
位架構和 64
位架構,以及 arm
架構。
阿里雲服務器(ubuntu系統)下載的是:frp_0.41.0_linux_amd64.tar.gz
樹莓派下載的是:注意是arm版本,frp_0.34.3_linux_arm
windows下載的是:frp_0.37.0_windows_amd64
ros下載的是:也是arm版本。frp_0.41.0_linux_arm.tar.gz
在linux上可以通過uname -a查看是amd還是arm版本。如果是aarch64就是ARM架構。 下圖為ros:
- Windows下載文件存放位置
frp的linux_amd版本放在:D:\Program\frp\frp-linux ,該版本通常用於阿里雲服務器
frp的windows版本放在:D:\Program\frp\frp_0.37.0_windows_amd64
frp的linux_arm版本放在:D:\Program\frp\frp-linux-arm,該版本通常用於樹莓派或者ros機器人系統
- 相關教程
曾經的ECS服務器,公網47.113.98.18
樹莓派使用frp實現內網穿透 | 樹莓派小無相系列 這篇成功了
https://www.jianshu.com/p/a921e85280ed
如果沒有公網ip,但又想隨時隨地都能連接到樹莓派,我們可以使用 frp 來實現。
通過代理實現在校園外使用校園網內的服務 (frp內網穿透) 這兩篇結合我成功了
https://www.cnblogs.com/FSHOU/p/12382155.html
樹莓派搭建個人服務器
https://www.cnblogs.com/zhaopei/p/11736135.html
隨筆分類 - frp
https://www.cnblogs.com/sanduzxcvbnm/category/1171545.html
樹莓派使用frp進行內網穿透
https://www.jianshu.com/p/6eff8b8c493a
wget https://github.com/fatedier/frp/releases/download/v0.17.0/frp_0.17.0_linux_amd64.tar.gz
tar -zxvf frp_0.17.0_linux_amd64.tar.gz
cd frp_0.17.0_linux_amd64
nano frps.ini
買了一台雲服務器到底能干嘛? - 葯師的回答 - 知乎 https://www.zhihu.com/question/27205559/answer/772271922
x86,x64,x86-64,amd64,arm指令集架構之間的關系 - 知乎 (zhihu.com)
三、樹莓派實現內網穿透
(一)在服務端(阿里雲服務器ubuntu)配置frps
步驟1,到GitHub下載frp_0.34.3_linux_amd64,然后通過xftp傳送到阿里雲。注意linux下載的是amd64.wget
https://github.com/fatedier/frp/releases
https://github.com/fatedier/frp/releases/download/v0.17.0/frp_0.17.0_linux_amd64.tar.gz
網上有直接在linux或者樹莓派直接命令行下載的方法,但很慢不推薦。
cd /home/huang/frp
wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_linux_amd64.tar.gz
步驟2,找到下載的文件夾,
cd /opt#
tar -zxvf frp_0.22.0_linux_amd64.tar.gz
解壓tar -zxvf frp_0.34.3_linux_amd64.tar.gz
步驟3,可以直接用ftp進入到frp_0.34.3_linux_amd64目錄或者命令行到/home/huang/frp/frp_0.22.0_linux_amd64進行修改,找到frps.ini。注意服務端是frps,客戶端時frpc。vi frps.ini修改
步驟4,修改frps.ini 內容,保存即可。token是自定義的,port記得在阿里雲安全組開放端口。
[common]
bind_port = 7000
token = 1234567890
5,在xshell里面cd /opt/frp_0.34.3_linux_amd64
#請確保在 frp_0.34.3_linux_amd64 目錄下運行
./frps -c ./frps.ini
啟動frps。完成配置。
(二)在樹莓派配置frpc
1,下載frp_0.34.3_linux_arm。注意是arm不是amd64。
2,在vnc打開/home/pi/Downloads。解壓tar -zxvf frp_0.34.3_linux_arm
3,進入frp_0.34.3_linux_arm目錄,修改frpc.ini文件。
[common]
server_addr = 47.113.98.18
server_port = 7000
token = 1234567890
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[vnc]
type = tcp
local_ip = 127.0.0.1
local_port = 5900
remote_port = 6001
[camara]
type = tcp
local_ip = 127.0.0.1
local_port = 8081
remote_port = 6003
4,在xshell中,cd /home/pi/Downloads/frp_0.34.3_linux_arm
./frpc -c ./frpc.ini
樹莓派開機自啟動frpc
https://www.cnblogs.com/hxun/p/10877828.html
frpc.service
sudo systemctl enable frpc
sudo systemctl enable frpc
sudo systemctl start frpc
查看服務是否生效
sudo systemctl list-units |grep frpc
查看日志信息 sudo systemctl status frpc
#刷新服務列表:
systemctl daemon-reload
#設置開機自啟
systemctl enable frpc
#關閉開機自啟
systemctl disable frpc
#啟動服務
systemctl start frpc
#停止服務
systemctl stop frpc
#下載程序
wget https://github.com/fatedier/frp/releases/download/v0.17.0/frp_0.17.0_linux_amd64.tar.gz
frp進行內網穿透 給雲服務器進行內網穿透
github谷歌插件
https://github.com/XIU2/UserScript
github release文件下載
有的時候下載一些軟件,這些軟件是放在github上的,而由於國內的github網速非常慢,所以可以采用代理的方式
github下載release文件:https://d.serctl.com
可以使用這個網站
原來的frp
[common]
server_addr = 127.0.0.1
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
四、通過內網穿透實現ipad遠程連接windows電腦
前提條件:windows要用專業版,不然沒有遠程功能。開放電腦的3389端口,並允許遠程電腦的連接。阿里雲服務器需要開放對應的端口的訪問權限。ipad下一個RD client,然后,阿里雲服務器配置好frps,windows電腦配置好frpc,之后出門打開寢室的電腦連上路由器,並運行frpc。遠程ipad輸入阿里雲ip+端口號即可遠程訪問電腦。
(一)阿里雲服務器配置frps
教程:https://blog.csdn.net/haofanaaa2/article/details/112710963
步驟1:下載frp的linux_amd64版本
可以用指令wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_linux_amd64.tar.gz
實現,
或者從github下載后使用xftp上傳至服務器,下載地址為:Releases · fatedier/frp (github.com)
步驟2:cd /home/huang/frp/frp_0.22.0_linux_amd64
,解壓:tar -zxvf frp_0.22.0_linux_amd64.tar.gz
步驟3:解壓之后,我們主要需要對frps進行配置。frpc frpc.ini 這兩個文件沒有用,是可以刪去的。
我們來配置frps.ini
文件 vi frps.ini
或者在軟件xftp上直接記事本打開。
[common]
bind_port = 7000
dashboard_port = 7001
token = 123456
dashboard_user = huang
dashboard_pwd = 123456
然后:wq
退出保存即可,之后./frps -c frps.ini
就可以運行frps服務端了,屏幕顯示如下即為運行正常
步驟4:使用nohup指令使之后台運行:nohup ./frps -c frps.ini &
,因為如果Ctrl+C可將frps停止運行,因而我們需要使用 nohup命令將其運行在后台。輸出如下內容即表示正常運行:nohup: ignoring input and appending output to 'nohup.out'。用jobs命令查看后台運行的程序會看到。
步驟5:服務器端frps的配置成功之后,可以看dashboard且可以看token對應了。此時訪問x.x.x.x(你的ip地址或域名):7500
輸入之前設置的dashboard_user
和dashboard_pwd
即可訪問儀表盤界面。我的是http://8.136.195.245:7500/
(二)Windows配置frpc
步驟1:下載windows版本的frp,存放路徑為:D:\Program\frp\frp_0.37.0_windows_amd64
步驟2:在win10上需要修改配置文件frpc.ini,網上有千奇百怪的寫法,需要依照自身的配置情況進行相應修改。
以下是一個成功的配置代碼,token要寫token而不能寫auto_token。下面那個username 3390端口是遠程連接的配置。且需要在阿里雲開放3390端口。作用就是把默認的遠程端口的3389映射到阿里雲ip的3390端口,這樣就可以通過外網ip遠程訪問。(Windows系統自帶了遠程桌面連接【Win+R 運行,輸入mstsc 打開】,也非常好用,系統自帶遠程服務默認端口是【3389】)
[common]
server_addr = 8.136.195.245
bind_port = 7000
token = 123456
tls_enable = true
[username]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 3390
步驟3:保存后在此路徑下cmd運行下.\frpc.exe -c frpc.ini,輸出為下圖即成功
D:\Program\frp\frp_0.37.0_windows_amd64\frpc.exe -c D:\Program\frp\frp_0.37.0_windows_amd64\frpc.ini
步驟4:開啟frpc功能需要聯網,通常使用室內路由器,開機自動連接wifi。 如果win10沒有寫自啟動的命令,那么需要有人通過終端執行命令開啟frpc。這樣才能讓ipad遠程連接上win10電腦。
在電腦上先win+R,輸入cmd,在命令行輸入:
D:\Program\frp\frp_0.37.0_windows_amd64\frpc.exe -c D:\Program\frp\frp_0.37.0_windows_amd64\frpc.ini
如果出現login to server success字樣就表明成功了。
(ps:該指令我已經用記事本記錄下,放在電腦桌面,如果有需要可以讓人幫人執行下該命令。每次重啟電腦都需要重新執行該命令。)
問題:frpc客戶端連接會提示 login to server failed: EOF;解決辦法:在frpc的配置文件加一句:tls_enable = true
(三)阿里雲ubuntu FRP 設置開機自啟動
位置是這篇說的位置/lib並不是/usr/lib
https://www.tunnelnat.com/help.html?id=19
按照下面這篇成功了
我們使用 ubuntu Linux下常用的進程管理器supervisor來管理FRP服務。
安裝systemd請運行:
apt-get update
apt-get install systemd
apt-get install systemd-sysv
# 啟動 frp 並設置開機啟動 每次開機后輸入第二條語句即可,第三條查看狀態
systemctl enable frps
systemctl start frps
systemctl status frps
------------------------------------------------------------
linux阿里雲服務器centos8操作系統安裝mysql8.0詳細教程
https://blog.csdn.net/qq_41688840/article/details/104699628
用navicat連接數據庫報錯:1130-host ... is not allowed to connect to this MySql server如何處理
https://blog.csdn.net/dabao87/article/details/80571877
--------------------------
一款輕量級、高性能、功能強大的內網穿透代理服務器。支持tcp、udp、socks5、http等幾乎所有流量轉發,可用來訪問內網網站、本地支付接口調試、ssh訪問、遠程桌面,內網dns解析、內網socks5代理等等……,並帶有功能強大的web管理端。
https://github.com/ehang-io/nps
五、ROS機器人內網穿透
ros機器人內網穿透的目的:ros機器人提供了AP模式和wifi模式,我使用的是wifi模式,這就要求電腦和ros需要連接到同一個wifi時,才能通過ssh連接到ros系統。一般情況這個共同wifi是路由器或者手機熱點。由於有時候人帶着手機出門,電腦的xshell就會斷網從而xshell的連接也就斷開了。為了讓電腦或手機的ssh工具在不連接同一個wifi的情況下,即可通過ssh工具連接到ros機器人系統中,那么就需要內網穿透,將ros的ssh和vnc端口映射到阿里雲服務器的外網ip端口上,我就可以直接使用外網ip連接到ros。ros機器人經常開機關機,每次重啟都需要手動運行frpc,於是有需要通過配置開機自啟動service讓frpc能夠在開機的時候自動執行。
(一)阿里雲服務器上配置frps
步驟1:下載frp的linux_amd版本
frp下載地址:Releases · fatedier/frp (github.com)
frp的linux版本放在:D:\Program\frp\frp-linux-amd64,文件名為frp_0.41.0_linux_amd64.tar.gz
步驟2:解壓tar -zxvf frp_0.41.0_linux_amd64.tar.gz
。

步驟3:配置frps.ini。cd /home/huang/frp/frp_0.22.0_linux_amd64
[common]
bind_port = 7000
dashboard_port = 7001
token = 123456
dashboard_user = huang
dashboard_pwd = 123456
然后:wq
退出保存即可,之后./frps -c frps.ini
就可以運行frps服務端了,屏幕顯示如下即為運行正常
步驟4:使用nohup指令使之后台運行:nohup ./frps -c frps.ini &
,因為如果Ctrl+C可將frps停止運行,因而我們需要使用 nohup命令將其運行在后台。輸出如下內容即表示正常運行:nohup: ignoring input and appending output to 'nohup.out'。用jobs命令查看后台運行的程序會看到。
步驟5:服務器端frps的配置成功之后,可以看dashboard且可以看token對應了。此時訪問x.x.x.x(你的ip地址或域名):7500
輸入之前設置的dashboard_user
和dashboard_pwd
即可訪問儀表盤界面。我的是frps dashboard
查看某個端口占用:netstat -ap | grep 7001
frp用一個服務器進程frps連接多個客戶端frpc - wangyuyu - 博客園 (cnblogs.com)
(二)ROS機器人系統中配置frpc
步驟1:下載frp的linux_arm版本。
github上的下載路徑為:https://github.com/fatedier/frp/releases/download/v0.41.0/frp_0.41.0_linux_arm.tar.gz
電腦端的已下載文件的存放路徑:D:\Program\frp\frp-linux-arm,文件名為frp_0.41.0_linux_arm.tar.gz
機器人端的存放路徑為:cd /home/bingda/hrobot/frp
步驟2:解壓 tar -zxvf frp_0.41.0_linux_arm.tar.gz
步驟3:配置frps。cd /home/bingda/hrobot/frp/frp_0.41.0_linux_arm
,tls_enable = true是為了解決登錄eof的問題(一開始是在ipad遠程連接win10報錯),login_fail_exit = false。11311是默認的app控制端口,映射到7004.
[common]
server_addr = 42.192.80.10
bind_port = 7000
token = 123456
tls_enable = true
login_fail_exit = false
[ssh_robot]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7002
[vnc_ros]
type = tcp
local_ip = 127.0.0.1
local_port = 4000
remote_port = 7003
[app_control]
type = tcp
local_ip = 127.0.0.1
local_port = 11311
remote_port = 7004
步驟4:在xshell中,cd /home/bingda/hrobot/frp/frp_0.41.0_linux_arm
輸入命令./frpc -c ./frpc.ini
nohup ./frpc -c ./frpc.ini &
(三)ROS機器人中讓frpc開機自啟動
樹莓派4B 開機自啟實現Frpc 內網穿透連接,linux延時啟動服務詳細介紹實現_-CSDN博客
步驟1: Ubuntu 18 不再使用initd管理系統,而是使用systemd。新建一個service用於開啟frpc服務。
cd /etc/systemd/system
sudo touch rosfrpc.service
sudo vim rosfrpc.service
以下為rosfrpc.service的內容
[Unit]
Description=rosfrp
After=network.target
Wants=network.target
[Service]
TimeoutStartSec= 30
ExecStart=/home/bingda/hrobot/frp/frp_0.41.0_linux_arm/frpc -c /home/bingda/hrobot/frp/frp_0.41.0_linux_arm/frpc.ini
Restart=1
[Install]
WantedBy=multi-user.target
After=network.target和Wants=network.target意思是這個服務在網絡環境下啟動,然而測試發現並沒有什么用。
步驟2:開啟、關閉、重啟service的相關指令,以及查看service運行狀態的指令。
sudo service rosfrpc start 啟動service。輸入該指令后還需輸入密碼
sudo service rosfrpc stop
sudo service xxx status
sudo service rosfrpc restart
sudo systemctl start rosfrpc.service 啟用service的另一種指令
systemctl status rosfrpc.service 查看service運行狀態。當執行出現錯誤,可以用該指令查看何處出錯
service rosfrpc status 查看service運行狀態
如果運行成功,會顯示為active。
步驟3:啟動frpc的service服務寫好后,我們自己手輸命令是能夠成功運行的。但是這樣就需要每次開機都手動輸一次命令,較為繁瑣。因此可以通過sudo systemctl enable rosfrpc.service
讓該service開機自啟動。
步驟4:正常而言,到步驟3已經完成frpc的開機自啟動。因為我的ros機器人是設置了開機自動連接手機熱點,只有當機器人聯網后,我才通過xshell輸入外網ip進入ros機器人系統中。這是因為我經常讓ros機器人使用我的手機熱點,其連接速度很快。
(特殊情況,是我從樹莓派內網穿透那邊得到的經驗,由於要成功開啟frpc服務需要ros機器人先聯網,所以開機時熱點未連上,就先開啟了service服務,那么自啟動服務就無法生效。網上的解決辦法是再寫一個腳本,讓ros系統延遲60s再開啟service服務。依照2022年4月7日的情況,我覺得應該是配置到步驟3即可完成。為了以后出問題有得查詢,特此做了記錄。)
cd /home/bingda/hrobot/frp/frp_0.41.0_linux_arm
touch delaystartfrpc.sh
sudo vim delaystartfrpc.sh
以下為腳本內容,就兩行
sleep 60
service rosfrpc start
sudo service --status-all 查看全部服務列表
systemctl reboot 重啟機器
修改指定位置文件sudo vim /etc/rc.local,添加我們的命令,注意位置,在exit 0前面的命令都會被順次執行。
_IP=$(hostname -I)||true
if["$_IP"]; then
printf "My IP address is %s\n" "$_IP"
fi
/home/bingda/hrobot/frp/frp_0.41.0_linux_arm/delaystartfrpc.sh
exit 0
(四)問題處理
2022.04.06 我用自己的阿里雲服務器跑frps出現了bug,無法成功執行,而我在去年用同樣的命令成功了,可能是期間服務器到期又續費造成的一些問題,之后有時間再排查。而同樣的frps配置,在同學的騰訊雲服務器上可以運行,說明配置文件本身沒問題,確實是我的服務器出了意外。
同學ip:42.192.80.10
cd /root/frp/frp_0.41.0_linux_amd64
2022.04.06
ipad遠程連接windows時,windows開啟frpc服務時報EOF錯誤,可以在frpc.ini文件中的[common]中添加一句tls_enable = true。
2022.04.14解決問題
解決:阿里雲服務器添加安全組端口映射后仍無法訪問_wshanshi的博客-CSDN博客_阿里雲配置安全組還是無法訪問的、
阿里雲開放端口后,外部還無法訪問,問題就在於沒有開放防火牆。
firewall-cmd --list-all
firewall-cmd --zone=public --add-port=7500/tcp --permanent 開放某個端口
firewall-cmd --reload 重新啟用防火牆

添加之后,我的frp的dashboard就可以正常啟用了。

在Ubuntu 18.04/Ubuntu 16.04上安裝Firewalld的方法
在Ubuntu 18.04/16.04系統上安裝和使用Firewalld的方法_Linux安全_雲網牛站 (ywnz.com)
Ubuntu系統的默認防火牆系統是ufw(參考:在Ubuntu 18.04系統中使用UFW設置防火牆),但是可以安裝和使用Firewalld,Firewalld對我來說很好,因為我以前是一個CentOS 7用戶。
通過運行命令在Ubuntu 18.04/Ubuntu 16.04上安裝Firewalld:
sudo apt-get install firewalld
默認情況下,應該啟動服務,如果沒有運行,則啟動並啟用它以在啟動時啟動:
sudo systemctl enable firewalld
sudo systemctl start firewalld
確認該服務正在運行:
$ sudo firewall-cmd --state
running
如果已啟用ufw,請將其禁用以使firewalld成為你的默認防火牆:
sudo ufw disable