frp實(shí)現(xiàn)內(nèi)網(wǎng)穿透

一、準(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ī)器)

  1. 到 GitHub 項(xiàng)目: frp項(xiàng)目地址 中,根據(jù)自己的平臺下載最新的 release 包。例:在 Linux 環(huán)境下選擇后綴為 linux_amd64.tar.gz 。
  2. 將下載文件傳入待穿透的內(nèi)網(wǎng)機(jī)器中。
  3. 解壓文件。tar -zxvf **linux_amd64.tar.gz
  4. 使用 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
  1. 編輯 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
  1. 設(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ī)器)

  1. 將已經(jīng)下載frp文件傳入待穿透的公網(wǎng)機(jī)器中,解壓文件,使用 cd 方法訪問到 frp 項(xiàng)目文件的根目錄。
  2. 按下例配置 frps.ini 文件。vim frps.ini
[common]                    # 此項(xiàng)為設(shè)定客戶端訪問 frp 服務(wù)在公共 ip 中的端口
bind_port = 7000           # 公網(wǎng) frp 服務(wù)的端口號, 要同客戶端配置的相同
  1. 開啟服務(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
  1. 設(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ī)啟動。
  1. 查看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。

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容