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