frp內網穿透


一、內網穿透介紹

內網穿透是什么意思? - 花生殼內網穿透的回答 - 知乎 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 的架構情況了。會提供不同操作系統的三種架構, x8632 位架構和 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:

image-20220406190635026

  • 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進行內網穿透 給雲服務器進行內網穿透

https://blog.csdn.net/qq_36552489/article/details/111560871?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase

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 這兩個文件沒有用,是可以刪去的。

img

我們來配置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服務端了,屏幕顯示如下即為運行正常

img

步驟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_userdashboard_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

img

步驟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

按照下面這篇成功了

https://blog.csdn.net/weixin_34208185/article/details/88940402?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.control

我們使用 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

image-20220406201802371

步驟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服務端了,屏幕顯示如下即為運行正常

image-20220406202652296

步驟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_userdashboard_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

image-20220406203758643

步驟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。

image-20220407201235142

步驟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配置,在同學的騰訊雲服務器上可以運行,說明配置文件本身沒問題,確實是我的服務器出了意外。

image-20220406220031550

同學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 重新啟用防火牆

image-20220414135504681

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

image-20220414135800720

在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM