一、準(zhǔn)備工作
使用場景
因?yàn)橐咔榈脑颍罱诩覠o法返校。無法訪問實(shí)驗(yàn)室的工作站的話就沒法干活了(跑深度學(xué)習(xí)實(shí)驗(yàn))。因此希望能夠利用frp進(jìn)行內(nèi)網(wǎng)穿透,這樣就可以用終端訪問實(shí)驗(yàn)室的機(jī)器了,結(jié)合vscode或pycharm等軟件就可以實(shí)現(xiàn)遠(yuǎn)程開發(fā)了。
優(yōu)勢(相比teamviewer等)
- 不需要訪問圖形界面,節(jié)約帶寬。
- 掉線自動重連。只要目的主機(jī)不down,即使有斷網(wǎng)情況,網(wǎng)絡(luò)恢復(fù)后會自動重連。無需人工干預(yù)。
- 如果將啟動腳本設(shè)置為開機(jī)自啟動,可實(shí)現(xiàn)無人工干預(yù)的永久不掉線。
- 常用場景:轉(zhuǎn)發(fā)內(nèi)網(wǎng)機(jī)的22端口。可以像在本機(jī)一樣的使用遠(yuǎn)程bash。
- 配置簡單。配合vscode等軟件實(shí)現(xiàn)遠(yuǎn)程開發(fā)。
- 數(shù)據(jù)傳輸安全:可選加密,公網(wǎng)機(jī)只做解析,實(shí)際數(shù)據(jù)并不直接經(jīng)過外網(wǎng)機(jī)器。
特殊需要
- 一臺公網(wǎng)機(jī)(有公網(wǎng)ip的vps, 比如阿里云服務(wù)器)
- frp 端口轉(zhuǎn)發(fā)軟件 Github地址
公網(wǎng)服務(wù)器購買推薦
我自己使用的是阿里云的國內(nèi)學(xué)生主機(jī),價(jià)格是 114 一年。
購買方式:先訪問 阿里云主頁 拖到底,在最后一行的“更多推薦”里選擇“學(xué)生機(jī)”,選擇“輕量應(yīng)用服務(wù)器”。因?yàn)槿绻闶鞘褂?frp 業(yè)務(wù)的話,網(wǎng)絡(luò)帶寬還是很重要?!拜p量應(yīng)用服務(wù)器”相較“云服務(wù)器 ECS”的帶寬大。ECS 的 1M 帶寬,對于遠(yuǎn)程訪問來說會有點(diǎn)卡頓。輕量應(yīng)用服務(wù)器的 5M 帶寬就完全不存在網(wǎng)絡(luò)延遲的問題。然后修改一下服務(wù)器配置:根據(jù)自己的所在位置選擇比較近的服務(wù)器,可以選上?;蛘弑本H缓蠓?wù)器鏡像,可以修改為自己使用順手的系統(tǒng)服務(wù)器鏡像。別的不需要修改。

二、配置方法
配置方法——客戶端(內(nèi)網(wǎng)機(jī)器)
- 到 GitHub 項(xiàng)目: frp項(xiàng)目地址 中,根據(jù)自己的平臺下載最新的 release 包。例:在 Linux 環(huán)境下選擇后綴為
linux_amd64.tar.gz。 - 將下載文件傳入待穿透的內(nèi)網(wǎng)機(jī)器中。
- 解壓文件。
tar -zxvf **linux_amd64.tar.gz - 使用 cd 方法訪問到 frp 項(xiàng)目文件的根目錄,將會看到如下結(jié)構(gòu):
$ cd frp_0.33.0_linux_amd64/
$ ls
frpc frpc_aliyun.ini frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE systemd
- 編輯 frpc.ini (
vim frpc.ini)文件為想要的配置并保存,簡單的配置文件介紹如下:
(注意:填入的時(shí)候?qū)⒆⑨屓サ?,否則可能會引發(fā)格式錯誤)
# 必選項(xiàng),這里填入公網(wǎng)服務(wù)端的端口信息
# 下文為測試用公網(wǎng) frp 服務(wù)器參數(shù)
[common]
server_addr = xxxx # 公網(wǎng)服務(wù)器 ip,可填入域名
server_port = 7000 # 公網(wǎng) frp 服務(wù)的端口號
# 這里是配置要裝發(fā)的端口,本例為內(nèi)網(wǎng) SSH 端口
[ssh] # frp 服務(wù)器上的識別名,此名要求在 frp 服務(wù)器上唯一
type = tcp # 要裝發(fā)的服務(wù)連接類型,默認(rèn)為 tcp,也可省略不寫
local_ip = 127.0.0.1 # 要轉(zhuǎn)發(fā)的內(nèi)網(wǎng)服務(wù) IP,可以填寫其他能在內(nèi)網(wǎng)訪問的服務(wù)器 IP
local_port = 22 # 要轉(zhuǎn)發(fā)的內(nèi)網(wǎng)服務(wù)端口,可以為 22(SSH)、6006(tensorboard)等
remote_port = 6000 # 在 frp 服務(wù)器上的訪問端口,在外網(wǎng)訪問時(shí),使用外網(wǎng) IP + 這個外網(wǎng)端口即可訪問內(nèi)網(wǎng)對應(yīng)服務(wù),該端口要求在 frp 服務(wù)器上未使用。
# 如需一個配置中裝發(fā)多個端口,可以復(fù)制上面的 titan-ssh 端口的配置,來重復(fù)配置其他端口,如下:
[tensorboard] # 本例定義為內(nèi)網(wǎng)機(jī)的 tensorboard 服務(wù)端口
local_ip = 127.0.0.1
local_port = 6006
remote_port = 6006
# 下面是其他的端口配置,你可以隨意增加
[jupyterbook] # 配置jupyter notebook
local_ip = 127.0.0.1
local_port = 8888
remote_port = 8888
[http_prxy]
type = tcp
remote_port = 9000
plugin = http_proxy
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 8000
- 設(shè)置開機(jī)啟動和后臺運(yùn)行
vim /etc/systemd/system/frpc.service命令新建文件并寫入以下內(nèi)容:
[Unit]
Description=frpc daemon
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/usr/frp/frp_0.16.0_linux_amd64/frpc -c /usr/frp/frp_0.16.0_linux_amd64/frpc.ini
Restart= always
RestartSec=1min
[Install]
WantedBy=multi-user.target
- 注意:
ExecStart中要配置成自己的路徑.
然后使用systemctl start frpc即可啟動frpc, 用systemctl enable frpc即可將frpc設(shè)置為開機(jī)啟動。 - 其它相關(guān)命令
systemctl daemon-reload重載所有修改過的配置文件,systemctl stop frpc停止服務(wù),systemctl restart frpc重啟服務(wù)。
配置方法——服務(wù)端(公網(wǎng)機(jī)器)
- 將已經(jīng)下載frp文件傳入待穿透的公網(wǎng)機(jī)器中,解壓文件,使用 cd 方法訪問到 frp 項(xiàng)目文件的根目錄。
- 按下例配置 frps.ini 文件。
vim frps.ini
[common] # 此項(xiàng)為設(shè)定客戶端訪問 frp 服務(wù)在公共 ip 中的端口
bind_port = 7000 # 公網(wǎng) frp 服務(wù)的端口號, 要同客戶端配置的相同
-
開啟服務(wù)器端口:
注意阿里云的服務(wù)器,要在設(shè)置頁面,安全-->防火墻里面把相應(yīng)的端口打開,我是選擇比較粗暴的將所有UDP,TCP端口都打開(如上圖所示)。騰訊云記憶中好像無需類似的操作。以下操作是ubuntu系統(tǒng)中的設(shè)置。
- 查看已經(jīng)開放的端口:
firewall-cmd --list-ports
- 開啟端口(根據(jù)客戶端實(shí)際開啟的端口設(shè)定)
firewall-cmd --zone=public --add-port=6000/tcp --permanent
firewall-cmd --zone=public --add-port=7000/tcp --permanent
firewall-cmd --zone=public --add-port=8000/tcp --permanent
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --zone=public --add-port=6006/tcp --permanent
- 命令含義:
–zone #作用域
–add-port=80/tcp #添加端口,格式為:端口/通訊協(xié)議
–permanent #永久生效,沒有此參數(shù)重啟后失效
- 重啟防火墻
firewall-cmd --reload #重啟firewall
- 設(shè)置開機(jī)啟動和后臺運(yùn)行
上一步中的frps占據(jù)了整個命令窗口,所以接下來要考慮如何讓它在后臺運(yùn)行并且開機(jī)自啟:
首先通過vim /etc/systemd/system/frps.service命令新建文件并寫入以下內(nèi)容:
[Unit]
Description=frps daemon
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/usr/frp/frp_0.16.0_linux_amd64/frps -c /usr/frp/frp_0.16.0_linux_amd64/frps.ini
Restart= always
RestartSec=1min
[Install]
WantedBy=multi-user.target
- 注意:
ExecStart中要配置成自己的路徑。然后使用systemctl start frps即可啟動frps, 用systemctl enable frps即可將frps設(shè)置為開機(jī)啟動。
- 查看frp相關(guān)進(jìn)程
ps -aux|grep frp| grep -v grep
三、SSH連接
然后你就可以在windows上用Xshell等軟件愉快的遠(yuǎn)程連接了。IP就是你的阿里云服務(wù)器公網(wǎng)ip,端口就是你指定的[ssh]里的那項(xiàng)remote_port。
