frp實現(xiàn)內(nèi)網(wǎng)穿透
項目地址:https://github.com/fatedier/frp/releases
此工具依賴一個有公網(wǎng) IP 的 PC 或服務(wù)器唐含。內(nèi)網(wǎng)穿透工具就是為了解決上述的沒有公網(wǎng) IP 的問題的。
文末可獲取百度云盤下載地址
下載:frp_windwos_amd64.zip這個(amd64是64系統(tǒng),386是32位系統(tǒng)沫浆,現(xiàn)在電腦基本64位了)觉壶,比如frp_0.33.0_windows_amd64.zip
frp 是一個可用于內(nèi)網(wǎng)穿透的高性能的反向代理應(yīng)用,支持 tcp, udp 協(xié)議件缸,為 http 和 https 應(yīng)用協(xié)議提供了額外的能力铜靶,且嘗試性支持了點對點穿透。名稱其實就是使用了 Fast Reverse Proxy 的首字母縮寫。架構(gòu)如下:
案例:將內(nèi)網(wǎng)Linux服務(wù)器上的web網(wǎng)站映射到公網(wǎng)上去
做具體的配置前争剿,根據(jù)對應(yīng)的操作系統(tǒng)及架構(gòu)已艰,從github 頁面下載最新版本的程序。
將 frps 及 frps.ini 放到具有公網(wǎng) IP 的機器上蚕苇。請注意配置防火墻或安全組放過配置文件中使用的端口哩掺。
將 frpc 及 frpc.ini 放到處于內(nèi)網(wǎng)環(huán)境的機器上。
在公網(wǎng)windows上部署frps
第一步:上傳frp_0.39.1_windows_386到公網(wǎng)上的Windows服務(wù)器上
第二步:修改文件frps.ini文件
第三步:在cmd中輸入以下命令啟動frps.exe程序
出現(xiàn) frps started successfully 代表frps啟動成功涩笤;
在內(nèi)網(wǎng)liunx上部署frpc
第四步:把frpc上傳到本地內(nèi)網(wǎng)的liunx服務(wù)器上并解壓此文件
第五步:編輯 frpc.ini (這里需要有一個自己的域名)
第六步:啟動frpc嚼吞,出現(xiàn)[web] start proxy success即可
在瀏覽器訪問
第七步:在瀏覽器上訪問成功
使用場景
1. 通過 rdp 訪問家里的機器
修改 frps.ini 文件,為了安全起見蹬碧,這里最好配置一下身份驗證舱禽,服務(wù)端和客戶端的 common 配置中的 token 參數(shù)一致則身份驗證通過:
# frps.ini
[common]
bind_port = 7000
# 用于身份驗證,請自行修改恩沽,要保證服務(wù)端與客戶端一致
token = password2022
啟動 frps:
Linux上啟動:
./frps -c ./frps.ini
windows上使用
frps.exe -c ./frps.ini
修改 frpc.ini 文件誊稚,假設(shè) frps 所在服務(wù)器的公網(wǎng) IP 為 x.x.x.x:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
用于身份驗證,請自行修改罗心,要保證服務(wù)端與客戶端一致
token = password2022
[rdp] type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 6000
啟動 frpc:
./frpc -c ./frpc.ini
frpc.exe -c ./frpc.ini
通過 rdp 訪問遠程的機器里伯,地址為:
x.x.x.x:6000
開機自啟
針對 Windows 系統(tǒng),為了便于使用渤闷,可以配置一下開機的時候靜默啟動疾瓮。
在 frpc.exe 的同級目錄創(chuàng)建一個 start_frpc.vbs:
start_frpc.vbs
請根據(jù)實際情況修改路徑
CreateObject("WScript.Shell").Run """D:\Program Files\frp_windows_amd64\frpc.exe""" & "-c" & """D:\Program Files\frp_windows_amd64\frpc.ini""",0
復(fù)制 start_frpc.vbs 文件,打開以下目錄飒箭,注意將 <USER_NAME>
改為你的用戶名:
`C:\Users\<USER_NAME>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup`
- 鼠標右擊狼电,粘貼為快捷方式即可。
2. 通過 SSH 訪問公司內(nèi)網(wǎng)機器
frps 的部署步驟同上补憾。
啟動 frpc漫萄,配置如下:
frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
用于身份驗證卷员,請自行修改盈匾,要保證服務(wù)端與客戶端一致
token = abcdefgh
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
通過 SSH 訪問內(nèi)網(wǎng)機器,假設(shè)用戶名為 test:
ssh -oPort=6000 test@x.x.x.x
3. 通過自定義域名訪問部署于內(nèi)網(wǎng)的 Web 服務(wù)
有時想要讓其他人通過域名訪問或者測試我們在本地搭建的 Web 服務(wù)毕骡,但是由于本地機器沒有公網(wǎng) IP削饵,無法將域名解析到本地的機器,通過 frp 就可以實現(xiàn)這一功能未巫,以下示例為 http 服務(wù)窿撬,https 服務(wù)配置方法相同, vhost_http_port 替換為 vhost_https_port叙凡, type 設(shè)置為 https 即可劈伴。
修改 frps.ini 文件,設(shè)置 http 訪問端口為 8080:
frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080
用于身份驗證握爷,請自行修改跛璧,要保證服務(wù)端與客戶端一致
token = abcdefgh
啟動 frps:
./frps -c ./frps.ini
修改 frpc.ini 文件严里,假設(shè) frps 所在的服務(wù)器的 IP 為 x.x.x.x,local_port 為本地機器上 Web 服務(wù)對應(yīng)的端口追城, 綁定自定義域名 `www.yourdomain.com`:
frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
用于身份驗證刹碾,請自行修改,要保證服務(wù)端與客戶端一致
token = abcdefgh
[web]
type = http
local_port = 80
custom_domains = ctf.caichuanqi.cn
啟動 frpc:
./frpc -c ./frpc.ini`
- 將 ctf.caichuanqi.cn 的域名 A 記錄解析到 IP x.x.x.x 座柱,如果服務(wù)器已經(jīng)有對應(yīng)的域名迷帜,也可以將 CNAME 記錄解析到服務(wù)器原先的域名。
- 通過瀏覽器訪問 http://ctf.caichuanqi.cn:8080 即可訪問到處于內(nèi)網(wǎng)機器上的 Web 服務(wù)色洞。
4. 對外提供簡單的文件訪問服務(wù)
通過 static_file 插件可以對外提供一個簡單的基于 HTTP 的文件訪問服務(wù)戏锹。
frps 的部署步驟同上。
啟動 frpc锋玲,啟用 static_file 插件景用,配置如下:
frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
用于身份驗證,請自行修改惭蹂,要保證服務(wù)端與客戶端一致
token = abcdefgh
[test_static_file]
type = tcp
remote_port = 6000
plugin = static_file
要對外暴露的文件目錄
plugin_local_path = /tmp/file
訪問 url 中會被去除的前綴伞插,保留的內(nèi)容即為要訪問的文件路徑
plugin_strip_prefix = static
plugin_http_user = abc
plugin_http_passwd = abc
通過瀏覽器訪問 來查看位于 /tmp/file 目錄下的 http://x.x.x.x:6000/static/ 文件,會要求輸入已設(shè)置好的用戶名和密碼盾碗。
常用功能
統(tǒng)計面板(Dashboard)
通過瀏覽器查看 frp 的狀態(tài)以及代理統(tǒng)計信息展示媚污。
注:Dashboard 尚未針對大量的 proxy 數(shù)據(jù)展示做優(yōu)化,如果出現(xiàn) Dashboard 訪問較慢的情況廷雅,請不要啟用此功能耗美。
需要在 frps.ini 中指定 dashboard 服務(wù)使用的端口,即可開啟此功能:
打開瀏覽器通過 http://[server_addr]:7500 訪問 dashboard 界面航缀,用戶名密碼默認為 admin 商架。
加密與壓縮
這兩個功能默認是不開啟的,需要在 frpc.ini 中通過配置來為指定的代理啟用加密與壓縮的功能芥玉,壓縮算法使用 snappy:
如果公司內(nèi)網(wǎng)防火墻對外網(wǎng)訪問進行了流量識別與屏蔽蛇摸,例如禁止了 SSH 協(xié)議等,通過設(shè)置 use_encryption = true
灿巧,將 frpc 與 frps 之間的通信內(nèi)容加密傳輸赶袄,將會有效防止流量被攔截。
如果傳輸?shù)膱笪拈L度較長抠藕,通過設(shè)置 use_compression = true
對傳輸內(nèi)容進行壓縮饿肺,可以有效減小 frpc 與 frps 之間的網(wǎng)絡(luò)流量,加快流量轉(zhuǎn)發(fā)速度盾似,但是會額外消耗一些 CPU 資源敬辣。
TLS
從 v0.25.0 版本開始 frpc 和 frps 之間支持通過 TLS 協(xié)議加密傳輸。通過在 frpc.ini 的 common
中配置 tls_enable = true 來啟用此功能,安全性更高溉跃。
為了端口復(fù)用汰聋,frp 建立 TLS 連接的第一個字節(jié)為 0x17。
注意: 啟用此功能后除 xtcp 外喊积,不需要再設(shè)置 use_encryption烹困。
代理限速
目前支持在客戶端的代理配置中設(shè)置代理級別的限速,限制單個 proxy 可以占用的帶寬乾吻。
在代理配置中增加 bandwidth_limit 字段啟用此功能髓梅,目前僅支持 MB
和 KB
單位。
范圍端口映射
在 frpc 的配置文件中可以指定映射多個端口绎签,目前只支持 tcp 和 udp 的類型枯饿。
這一功能通過 range:
段落標記來實現(xiàn),客戶端會解析這個標記中的配置诡必,將其拆分成多個 proxy奢方,每一個 proxy 以數(shù)字為后綴命名。
例如要映射本地 6000-6005, 6007 這 6 個端口爸舒,主要配置如下:
實際連接成功后會創(chuàng)建 8 個 proxy蟋字,命名為 test_tcp_0, test_tcp_1 ... test_tcp_7。
更多配置
由于 frp 目前支持的功能和配置項較多扭勉,完整的示例配置文件請參考:
frps 完整配置文件
frpc 完整配置文件
參考資料
[3]github 頁面:https://github.com/fatedier/frp/releases
[4]frps 完整配置文件:https://github.com/fatedier/frp/blob/master/conf/frps_full.ini
[5]frpc 完整配置文件:https://github.com/fatedier/frp/blob/master/conf/frpc_full.ini
本文由mdnice多平臺發(fā)布