為什么要內網穿透?
我們使用jetson設備時,一般都是在局域網內的電腦去ssh局域網內的jetson設備,但是這種ssh或者VNC僅限于局域網之間的設備。
如果你出差了,或者不在jetson設備的局域網內,想再去ssh或者VNC我們的jetson設備,就需要對jetson設備做內網穿透。內網穿透后,我們不管在哪里,主要有網絡,就可以直接ssh或者VNC到我們處在局域網內的jetson設備。
一:frp簡介
frp 采用 Golang 編寫,支持跨平臺,僅需下載對應平臺的二進制文件即可執行,沒有額外依賴。
frp 是一個專注于內網穿透的高性能的反向代理應用,支持 TCP、UDP、HTTP、HTTPS 等多種協議。可以將內網服務以安全、便捷的方式通過具有公網 IP 節點的中轉暴露到公網。
市面上一些主流的內網穿透工具有:Ngrok,Natapp,花生殼,Ssh、autossh,Frp,Lanproxy,Spike。
使用frp只需要自己有一臺公網IP的云主機即可,成本相對很低。我自己使用的是華為云的38元/年的機器,很便宜。而且frp速度快。
二:安裝frp
1:準備
一臺公網服務器(配置無要求網絡穩定就行),服務器端,如公網IP:123.32.12.32。
內網客戶端(就是我們的jetson設備),客戶端,如內網IP:192.168.152.103。
2.下載和安裝frp
2.1 linux x86公網服務器安裝和配置
對于linux x86平臺的公網服務器,需要下載amd64平臺版本,可以使用wget下載。
# 下載
wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz
# 解壓
tar -zxvf frp_0.44.0_linux_amd64.tar.gz
cd frp_0.44.0_linux_amd64/
進入文件夾,有兩個名稱文件frpc(c結尾代表client)和frps(s結尾代表server),分別是服務端程序和服務端配置程序。在這里我們只需要使用frps服務器端文件即可。
下面配置服務器端
這里是為服務端配置frp 只關注frps和frps.ini即可,原始最簡單配置為。
cat frps.ini
[common]
#隧道通道,服務器和客戶端通過此端口通訊
bind_port = 7000
對于服務器端,這樣就可以用。先不配置其他的。
接下來要啟動服務器端,在啟動之前,要開啟對應端口的防火墻,這里我們要開啟7000和6000兩個端口。這個需要從云服務廠商的UI界面上開啟,例如我的華為云界面。
啟動服務器端
./frps -c frps.ini
可以看到已經開啟成功。
2.2 jetson arm64平臺內網設備安裝和配置
因為jetson設備是arm64架構,和服務器的x86_64不一樣,因此我們這里也要下載arm64版本的frp。
wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_arm64.tar.gz
# 解壓
tar -zxvf frp_0.44.0_linux_arm64.tar.gz
cd frp_0.44.0_linux_arm64
jetson作為frp的客戶端,在jetson上要使用frpc的程序。
下面只需要修改server_addr就可以
vim frpc.ini
[common]
server_addr = 123.32.12.32
server_port = 7000[ssh]
type = tcp
#本機IP
local_ip = 127.0.0.1
#本機需要映射的端口22(此端口為ssh端口,WSL2有可能設置為2222或其他端口,這里需要注意)
local_port = 22
#遠程服務器映射的端口為6000
remote_port = 6000
啟動客戶端
./frpc -c frpc.ini
客戶端也正常啟動成功。
2.3 測試能否通過公網ssh到局域網的jetson
我們用另外一臺設備,在局域網也可,手機用數據網絡也可。這時候的ssh路徑是 個人設備 -> 公網服務器 -> jetson。
例如我的jetson用戶名是yan,上面我們配置了遠程服務器映射的端口為6000,這個6000是指我們ssh到公網機器的端口,7000是frps和frpc通信的端口。
所以我的ssh指令是:
#ssh -p <frp配置的遠程端口> <jetson的用戶名><公網的IP>
ssh -p 6000 yan@123.32.12.32
密碼為jetson的yan用戶的密碼。 注意密碼不是公網云機器的密碼,用戶名也不是公網云機器的用戶名。這里用戶名和密碼都要使用jetson設備的。
三、額外配置(可不選)
原始配置簡單,但是如果需要其他功能,可自行添加,如下:
1:服務器端配置
vim frps.ini
修改如下:
[common]
bind_port = 7000
#http服務端口
vhost_http_port = 8088
#https服務端口
vhost_https_port = 8443
# dashboard網頁管理界面,以及設置賬戶密碼(非必須,未配置則直接進入)
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
#客戶端需要設置一樣的token值才能鑒權通過
token = 12345678
2:客戶端配置
vim frpc.ini
修改如下:
[common]
server_addr = 123.32.12.32
server_port = 7000
#token和服務器一致
token = 12345678[ssh]
type = tcp
#本機IP
local_ip = 127.0.0.1
#本機需要映射的端口22(此端口為ssh端口,WSL2有可能設置為2222或其他端口,這里需要注意)
local_port = 22
#遠程服務器映射的端口為6000
remote_port = 6000[web]
type = http
#本地http服務端口,默認80,按需配置
local_port = 80
# 綁定域名,注:配置http,必須需要域名,否則報錯。如沒有,可采用普通的tcp模式映射。
custom_domains = xxx[zabbix]
type = tcp
local_ip = 127.0.0.1
#本機需要映射的端口22
local_port = 10050
#遠程服務器映射的端口為6000
remote_port = 11050
3:啟動測試
分別啟動客戶端和服務器端
./frps -c frps.ini
客戶端運行啟動:
./frpc -c frpc.ini
瀏覽器打開web管理界面,http://123.32.12.32:7500/,輸入賬戶密碼,可查看端口映射相關情況。
同時訪問:http://123.32.12.32:8088,即可訪問跳轉到到內網192.168.152.103機器的http服務。
四、后臺啟動和開機自動啟動
后臺跑直接使用nohup
服務器
nohup ./frps -c frps.ini >/dev/null 2>&1 &
jetson客戶端
nohup ./frpc -c ./frpc.ini >/dev/null 2>&1 &
想要終止進程的話,
先找到進程:
ps -aux|grep frp| grep -v grep
然后再殺掉進程即可:
kill -9 進程號
設置自動啟動
1、服務端配置frps.ini
[common]
bind_port = 7000
# tls_enable=true # recommend add
在/etc/systemd/system/目錄下創建服務文件
cd /etc/systemd/system/
sudo vim frps.service
填入以下信息,ExecStart自行替換為你自己的frp啟動命令
[Unit]
Description=frpc
After=network.target
Wants=network.target[Service]
Restart=on-failure
RestartSec=5
ExecStart=/home/username/Software/frp/frps -c /home/username/Software/frp/frps.ini[Install]
WantedBy=multi-user.target
# 刷新服務列表
systemctl daemon-reload
# 設置開機自啟
systemctl enable frps.service
# 啟動服務
systemctl start frps.service
# 查看服務狀態
systemctl status frps.service
2、客戶端配置frpc.ini
在/etc/systemd/system/目錄下創建服務文件
cd /etc/systemd/system/
sudo vim frpc.service
填入以下信息,ExecStart自行替換為你自己的frp啟動命令
[Unit]
Description=frpc
After=network.target
Wants=network.target[Service]
Restart=on-failure
RestartSec=5
ExecStart=/data/module/frp_0.48.0_linux_amd64/frpc -c /data/module/frp_0.48.0_linux_amd64/frpc.ini[Install]
WantedBy=multi-user.target
# 刷新服務列表
systemctl daemon-reload
# 設置開機自啟
systemctl enable frpc.service
# 啟動服務
systemctl start frpc.service
# 查看服務狀態
systemctl status frpc.service
執行上述命令服務就可以設置開機自啟并啟動服務
服務可能會在開機時啟動失敗。因此在設置開機自啟命令時,最好在[Service]中定義Restart和RestartSec。
下面是一些常用的systemctl命令
# 關閉開機自啟
systemctl disable frpc.service
# 停止服務
systemctl stop frpc.service
# 重啟服務
systemctl restart frpc.service
# 查看狀態
systemctl status frpc.service
# 查看是否設置開機自啟
systemctl is-enabled frpc.service
五、一臺服務器內網穿透多臺jetson或者其他客戶端
單個ssh配置成功,想配置多個,一樣的操作,在另一臺機器進行下載frp,之后只需要修改frpc.ini文件,修改格式如下:
[common]
server_addr = 39.105.97.50
server_port = 7000[ssh001] # 不能重復
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6009 # 不能重復
主要就是注釋#不能重復 部分進行修改就可以。