内网穿透配置(FRP)
目錄
0、內(nèi)網(wǎng)穿透的一般場景
1、內(nèi)網(wǎng)穿透配置
a、frp軟件下載
b、frp 的配置
3、通過 frp 實現(xiàn)遠程連接
4、設(shè)置 frpc / frps 開機啟動的方法
5、設(shè)置frp安全連接的方法
0、內(nèi)網(wǎng)穿透的一般場景
放假回家怎么遠程連接學校實驗室的服務(wù)器?
先分析一波:首先家里的電腦與學校服務(wù)器主機分屬不同的局域網(wǎng)(內(nèi)網(wǎng))中,也就是說家里網(wǎng)絡(luò)設(shè)備上層的公網(wǎng)IP不同于學校服務(wù)器上層的公網(wǎng)IP,因此這種情況下就不能僅僅使用 SSH 來遠程連接學校的服務(wù)器了,還需要借助一種叫做內(nèi)網(wǎng)穿透的技術(shù)實現(xiàn)連接。如下面這幅圖。
公網(wǎng)的IP是獨一無二的,而局域網(wǎng)IP在從屬不同公網(wǎng)的前提下可以是一樣的,
內(nèi)網(wǎng)穿透需要第三臺電腦作為中轉(zhuǎn)站,這個中轉(zhuǎn)站需要有一個公網(wǎng)IP,一般來說可以用云服務(wù)器(一般都有公網(wǎng)IP)來作為中轉(zhuǎn)站,可以租用阿里云騰訊云華為云這些平臺中的云服務(wù)器。
1、內(nèi)網(wǎng)穿透配置
使用的系統(tǒng):云服務(wù)器(中轉(zhuǎn)站)和實驗室服務(wù)器(需要向公網(wǎng)暴露IP的本地主機)都是Ubuntu,個人電腦是Windows10.
a、frp軟件下載
這里使用的內(nèi)網(wǎng)穿透的工具是 FRP,GitHub地址:https://github.com/fatedier/frp。下載壓縮包解壓之后會看到下面的內(nèi)容。這里以Windows版的為例,frp?含有 frps 和 frpc?兩種配置文件,frps 是內(nèi)網(wǎng)穿透服務(wù)端service(也就是中轉(zhuǎn)站)的配置文件,作為內(nèi)網(wǎng)穿透的橋梁。frpc 是內(nèi)網(wǎng)穿透中需要向公網(wǎng)暴露IP的本地主機(也就是示例場景中的實驗室服務(wù)器)。
b、frp 的配置
云服務(wù)器(后面稱做A)作為內(nèi)網(wǎng)穿透的橋梁,是內(nèi)網(wǎng)穿透的服務(wù)端,需要使用?frps。實驗室服務(wù)器(后面稱做B)屬于內(nèi)網(wǎng)穿透中的服務(wù)端client,需要使用?frpc。可以通過分別修改?frps.ini?和?frpc.ini?來配置服務(wù)端和客戶端。
A?中需要配置 frps.ini,這個文件原始內(nèi)容如下:
[common] bind_port = 7000保持默認參數(shù)即可。如果想配置其他內(nèi)容,可以查看 frps_full.ini 文件的內(nèi)容,里面有全部的配置語句。bind_port 表示將 B 與 A 的 7000 端口綁定,具體的端口號可以自定義修改。如果想配置其他內(nèi)容,可以查看frps_full.ini文件的內(nèi)容,里面有全部的配置語句。例如可以加一行 token=xxxx,類似于密鑰,需兩邊都一樣才能訪問:
[common] bind_port = 7000 # 可以加一行 token=xxxx,類似于密碼,需兩邊都對上才能訪問,此時客戶端也需要有同樣的設(shè)置 token=12345主機 B?需要配置 frpc.ini,這個文件原始內(nèi)容如下:
[common] # server_addr需要改成公網(wǎng)IP地址 server_addr = x.x.x.x server_port = 7000 # 如前所述,可以加一行 token=xxxx,類似于密匙-密鑰對,需兩邊都一樣才能訪問 token=12345 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 # 這個端口可以自由設(shè)置,設(shè)置完后在云服務(wù)器中開啟相應(yīng)的端口即可 remote_port = 6000server_addr 參數(shù)修改為公網(wǎng)IP,server_port?用于frps與frpc之間交換數(shù)據(jù)的端口,local_port?是ssh服務(wù)端口,remote_port?是在frp服務(wù)器上公開的供外部設(shè)備連接的端口,6000 與 7000 端口的作用可以參照博客開頭的那張圖。接下來需要在云服務(wù)器的端口管理中添加相應(yīng)的端口 6000 和 7000 并開放即可。比如我用的阿里云服務(wù)器,是在“服務(wù)器安全設(shè)置”選項中添加端口的:
3、通過 frp 實現(xiàn)遠程連接
在上述配置都修改完成后,,在云服務(wù)器 A 上執(zhí)行以下指令運行frps端:
./frps -c ./frps.ini在本地服務(wù)器 B 上執(zhí)行以下指令運行 frpc 端:
./frpc -c ./frpc.ini然后本地主機就可以使用內(nèi)網(wǎng)穿透來遠程訪問本地服務(wù)器了,在本地主機上執(zhí)行以下指令:
ssh [username]@[ip] -p [port_num]- 其中:
- username 是 B 中的用戶名,后面需要輸入的密碼也是該賬戶的密碼。
- ip 是 A 的公網(wǎng) ip 地址。這里注意!是 A 的公網(wǎng) ip 地址,不是 B 的!
- port_num 是 frpc.ini 中設(shè)置的?remote_port 。
例如,要連接 實驗室服務(wù)器(B)中的名為 abc 的用戶,中轉(zhuǎn)賬云服務(wù)器的公網(wǎng)ip為123.0.0.3,remote_port 設(shè)置為 6000,則指令如下:
ssh abc@123.0.0.3 -p 6000同樣也可以借助?VSCode 中的?Remote-SSH 插件,方便遠程連接后的文件管理,方法可以看這篇博客 :SSH遠程連接實例_地球被支點撬走啦的博客-CSDN博客_ssh連接實例
4、設(shè)置 frpc / frps 開機啟動的方法
如果想讓遠程服務(wù)器 B 與本地服務(wù)器 A 開機自動啟動 frps 和 frpc 這兩個服務(wù),就需要用到 systemd 文件夾中的文件了。內(nèi)容如下:
Linux 系統(tǒng)下的開機啟動需要使用 frps.service 與 frpc.service 這兩個文件,將這兩個文件分別拷貝到對應(yīng)機器的 /lib/systemd/system 文件夾下。需要修改其中的 User?字段,改為當前主機用戶的用戶名,還需要修改 ExecStart?字段,把其中的 frps/frps?的路徑改成你實際 frpc/frpc?所在的絕對路徑。
在云服務(wù)器主機?A 中修改如下:
這里運行 frps 的云服務(wù)器的用戶名為 admin,frps 的路徑為 /home/admin/frp/frps,因此將原始的
frps.service 中的: [Unit] Description=Frp Server Service After=network.target[Service] Type=simple User=nobody Restart=on-failure RestartSec=5s ExecStart=/usr/bin/frps -c /etc/frp/frps.ini LimitNOFILE=1048576[Install] WantedBy=multi-user.target ExecStart=/usr/bin/frps -c /etc/frp/frps.ini改為:
[Unit] Description=Frp Server Service After=network.target[Service] Type=simple User=admin Restart=on-failure RestartSec=5s ExecStart=/home/admin/frp/frps -c /home/admin/frp/frps.ini LimitNOFILE=1048576[Install] WantedBy=multi-user.target ExecStart=/usr/bin/frps -c /etc/frp/frps.ini?然后運行 frpc 的本地服務(wù)器 B 中也是類似的設(shè)置:
[Unit] Description=Frp Client Service After=network.target[Service] Type=simple User=nobody Restart=on-failure RestartSec=5s ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini LimitNOFILE=1048576[Install] WantedBy=multi-user.target# 改為:====================================================[Unit] Description=Frp Client Service After=network.target[Service] Type=simple User=ocean Restart=on-failure RestartSec=5s ExecStart=/home/pathto/frp/frpc -c /home/pathto/frp/frpc.ini ExecReload=/home/pathto/frp/frpc reload -c /home/pathto/frp/frpc.ini LimitNOFILE=1048576[Install] WantedBy=multi-user.target然后在 B 中依次執(zhí)行以下四條指令啟動 service 服務(wù),實現(xiàn)開機啟動:
systemctl daemon-reload # 重新加載 systemctl enable frpc.service # 使能開機啟動 systemctl start frpc.service # 開啟服務(wù) systemctl status frpc.service # 查看服務(wù)狀態(tài)如果開啟成功,則會顯示如下界面 Activate 會顯示綠色的 running。
云服務(wù)器 A 中的開機啟動方式也是類似的,就不再贅述了。
5、設(shè)置frp安全連接的方法
如果直接將服務(wù)器暴露到公網(wǎng)上可能會有安全隱患,如果別人知道了公網(wǎng)中轉(zhuǎn)站的 ip 和轉(zhuǎn)接端口,就相當于知道了內(nèi)網(wǎng)服務(wù)器的 ssh 端口,如果知道密碼的話就可以隨意登陸了。因此,登陸密碼可以復(fù)雜一些以保證安全。另外一點,可以使用安全ssh登錄,這個是官網(wǎng)的方法GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet. - GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.https://github.com/fatedier/frp#expose-your-service-privately
frp 服務(wù)端主機 A 的 frps.ini 不需要修改,這要修改 frp 客戶端主機 B 的 frpc.ini 的配置,這里移除了?remote_port 的設(shè)置。
[common] server_addr = x.x.x.x server_port = 7000 token = 12345 [secret_ssh] # secret tcp type = stcp # security key,只有 sk 一致的用戶才能訪問到此服務(wù) sk = abcdefg # 向外部暴露的本地SSH服務(wù)端口 local_ip = 127.0.0.1 local_port = 22另外,需要遠程連接內(nèi)網(wǎng)服務(wù)器的個人PC也需要運行 frpc,此時 frpc.ini 的配置為:
[common] server_addr = x.x.x.x server_port = 7000 token = 12345 [secret_ssh_visitor] type = stcp role = visitor server_name = secret_ssh # secret key,必須與目標主機的 frpc.ini 中的 sk 一樣 sk = abcdefg # 綁定本地端口用于訪問 SSH 服務(wù) bind_addr = 127.0.0.1 bind_port = 6000使用安全連接的情況下,在遠程連接時,需要先在個人電腦上(這里是Windows)運行以下命令:
frpc.exe -c frpc.ini然后再執(zhí)行ssh命令實現(xiàn)遠程連接
ssh [username]@127.0.0.1 -p [port_num]總結(jié)
以上是生活随笔為你收集整理的内网穿透配置(FRP)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Github上8个很棒的Vue项目
- 下一篇: 正向有功正向无功_电表的正向有功和反向无