frp(內網穿透)

一、簡介

frp 是一個可用於內網穿透的高性能的反向代理應用,支援多種協議類型

  • frp 分 服務端 和 客戶端
  • 服務端 的配置文件名為 frps.ini (公網)
  • 客戶端 的配置文件名為 frpc.ini (內網)

下載地址:
//github.com/fatedier/frp/releases

官方文檔:
中文://gofrp.org/docs/
中文://github.com/fatedier/frp/blob/master/README_zh.md
英文://github.com/fatedier/frp#configuration-files

文件介紹

frpc		#  客戶端二進位文件
frpc_full.ini	#  客戶端配置文件完整示例
frpc.ini	#  客戶端配置文件

frps		#  服務端二進位文件
frps_full.ini	#  服務端配置文件完整示例
frps.ini	#  服務端配置文件

實驗環境
VMware 15

  • kali-1 IP:192.168.0.190(橋接模式,代替公網)
  • kali-2 IP:192.168.201.152(NAT模式,內網)

二、常用參數

frps.ini(服務端,用於公網)

[common]		#  共同配置,必需有該配置(請勿修改該代理名)
bind_addr = 0.0.0.0	#  綁定的 IP
bind_port = 7000	#  服務端監聽的埠
vhost_http_port = 80	#  為代理的 http 設置一個監聽埠(通過域名訪問網頁時須使用此處設置的埠訪問)
vhost_https_port = 443	#  為代理的 https 設置一個監聽埠(通過域名訪問網頁時須使用此處設置的埠訪問)

#  安全
token = 123		#  設置身份驗證
log_file = ./frps.log	#  指定日誌路徑
log_level = info	#  指定日誌級別(trace(跟蹤)、debug(調試)、info(資訊)、warn(警告)、error(錯誤)
log_max_days = 3	#  指定日誌記錄最大天數
max_ports_per_client = 0	#  最大埠可用(默認為 0 ,表示無限制)
allow_ports = 2000-3000,3001,3003,4000-5000	#  埠白名單

#  傳輸
tls_only = false	#  指定是否指接受 TLS 加密(默認為 false)
tcp_mux = true	#  開啟 tcp 流多路復用(默認為 true)

frpc.ini(客戶端,用於內網)

[common]		    #  共同配置,必需有該配置(請勿修改該代理名)
server_add = 192.168.0.190  #  服務端 IP(需和服務端的 IP 配置為一致)
server_port = 7000	    #  服務端埠(需和服務端的埠配置為一致)
dns_server = 8.8.8.8	    #  指定 DNS 伺服器
start = ssh,web		    #  啟用代理名稱為 ssh 跟 web 的代理(默認為空格,表示啟用所有代理)
user = test_name	    #  連接時在代理名稱前面添加 test_name. (如當前代理名稱為 common ,則 test_name.common)

#  安全
token = 123		    #  設置身份驗證(必須與服務端相同)
log_file = ./frpc.log	    #  指定日誌路徑(如指定了日誌文件,則控制台不會顯示相關資訊(會顯示在日誌文件里))
log_level = info	    #  指定日誌級別(trace(跟蹤)、debug(調試)、info(資訊)、warn(警告)、error(錯誤)
log_max_days = 3	    #  指定日誌記錄最大天數

#  傳輸
login_faile_exit = true     #  首次跟伺服器連接失敗時退出程式,如為 false 則失敗後重新嘗試連接(默認為 true)
protocol = tcp              #  用於連接伺服器的通訊協議(支援 tcp、kcp、websocket,默認為 tcp)
tls_enable = true	    #  通過 tls 連接服務端
tcp_mux = true		    #  開啟 tcp 流多路復用(默認為 true,必須與服務端相同)

[ssh]			    #  代理名稱
type = tcp		    #  協議型
local_ip = 127.0.0.1
local_port = 22		    #  需代理的埠
remote_port = 6000	    #  遠程埠(遠程訪問時使用此埠,如為 0 則服務端隨機分配一個埠)
bandwidth_limit = 1MB	    #  限制此代理的寬頻(單位為 KB 和 MB)
use_encryption = true	    #  如為 true 則與服務端的通訊會被加密(默認為 false)
use_compression = false	    #  如為 true 則消息將被壓縮

[web]			    #  代理名稱
type = http		    #  類型
local_ip = 127.0.0.1
local_port = 80		    #  需代理的埠
use_encryption = true	    #  如為 true 則與服務端的通訊會被加密(默認為 false)
use_compression = false	    #  如為 true 則消息將被壓縮
http_user = admin	    #  訪問網頁時需要的用戶名
http_pwd = passwd	    #  密碼
subdomain = test.com        #  子域名
custom_domains = www.test.com	#  域名

三、基於 SSH

1、由於是基於 ssh 的,所以需開啟內網的 ssh 確保能正常連接( kali 默認關閉 ssh )

  • 1)ssh 配置文件默認路徑為 /etc/ssh/sshd_config
    找到圖中的兩個地方,並修改為一樣的即可

  • 2)修改完後需重啟服務:sudo systemctl restart ssh

2、配置服務端 frps.ini

[common]            #  共同配置,必需有該配置(請勿修改該代理名)
bind_port = 7000    #  frps 監聽的埠

啟動服務:sudo ./frps -c ./frps.ini

3、配置客戶端 frpc.ini

[common]          #  共同配置,必需有該配置(請勿修改該代理名)
server_addr = 192.168.0.190     #  服務端 IP(需和服務端的 IP 配置為一致)
server_port = 7000              #  服務端埠(需和服務端的埠配置為一致)

[ssh]                   #  代理名稱
type = tcp              #  協議類型
local_ip = 127.0.0.1
local_port = 22         #  需代理的本地埠(需能正常訪問)
remote_port = 6000      #  遠程埠(遠程訪問時使用的埠)

啟動服務 sudo ./frpc -c ./frpc.ini

4、使用 xshell 進行連接



四、基於 WEB

1、提供簡單的文件訪問服務

  • 1)配置服務端 frps.ini
[common]            #  共同配置,必需有該配置(請勿修改該代理名)
bind_port = 7000    #  frps 監聽的埠

啟動服務:sudo ./frps -c ./frps.ini

  • 2)配置客戶端 frpc.ini
[common]        #  共同配置,必需有該配置(請勿修改該代理名)
server_addr = 192.168.0.190 #  服務端 IP(需和服務端的 IP 配置為一致)
server_port = 7000          #  服務端埠(需和服務端的埠配置為一致)

[plugin_static_file]        #  代理名稱
type = tcp                  #  協議類型
remote_port = 6002          #  遠程埠(遠程訪問時使用的埠)
plugin = static_file        #  載入 static_file 插件
plugin_local_path = /var    #  須訪問的路徑
plugin_http_user = admin    #  用戶名
plugin_http_passwd = passwd #  密碼

啟動服務:sudo ./frpc -c ./frpc.ini

  • 3)服務端使用瀏覽器訪問

2、基於 IP 訪問 http

  • 1)配置服務端 frps.ini
[common]            #  共同配置,必需有該配置(請勿修改該代理名)
bind_port = 7000    #  frps 監聽的埠
vhost_http_port = 2333      #  為代理的 http 設置一個監聽埠(通過域名訪問網頁時須使用此處設置的埠訪問)

啟動服務:sudo ./frps -c ./frps.ini

  • 2)配置客戶端 frpc.ini
[common]            #  共同配置,必需有該配置(請勿修改該代理名)
server_addr = 192.168.0.190     #  服務端 IP(需和服務端的 IP 配置為一致)
server_port = 7000              #  服務端埠(需和服務端的埠配置為一致)

[web]                   #  代理名稱
type = tcp              #  協議類型
local_ip = 127.0.0.1
local_port = 80         #  需代理的本地埠(需能正常訪問)
remote_port = 7890      #  遠程埠(通過 IP 訪問網頁時須使用此處設置的埠訪問)

啟動服務:sudo ./frpc -c ./frpc.ini

或客戶端 frpc.ini 配置文件內容為

[common]            #  共同配置,必需有該配置(請勿修改該代理名)
server_addr = 192.168.0.190     #  服務端 IP(需和服務端的 IP 配置為一致)
server_port = 7000              #  服務端埠(需和服務端的埠配置為一致)

#  訪問時使用服務端 vhost_http_port 參數設置的埠進行訪問
[web]                   #  代理名稱
type = http             #  協議類型
local_ip = 127.0.0.1
local_port = 80         #  需代理的本地埠(需能正常訪問)
custom_domains = 192.168.0.190  #  服務端 IP
  • 3)服務端使用瀏覽器訪問

3、基於域名訪問 http

  • 1)配置服務端 frps.ini
[common]            #  共同配置,必需有該配置(請勿修改該代理名)
bind_port = 7000    #  frp 監聽的埠
vhost_http_port = 2333      #  為代理的 http 設置一個監聽埠(通過域名訪問網頁時須使用此處設置的埠訪問)

啟動服務:sudo ./frps -c ./frps.ini

  • 2)配置客戶端 frpc.ini
[common]        #  共同配置,必需有該配置(請勿修改該代理名)
server_addr = 192.168.0.190     #  服務端 IP(需和服務端的 IP 配置為一致)
server_port = 7000              #  服務端埠(需和服務端的埠配置為一致)

[web]                   #  代理名稱
type = http             #  協議類型
local_ip = 127.0.0.1
local_port = 80         #  需代理的本地埠(需能正常訪問)
remote_port = 7890      #  遠程埠(通過 IP 訪問網頁時須使用此處設置的埠訪問)
custom_domains = www.test.com   #  設置需代理的域名(需能正常訪問)

啟動服務:sudo ./frps -c ./frps.ini

  • 3)由於是基於域名訪問的所以須在服務端創建相應的域名記錄

  • 4)服務端使用瀏覽器訪問

4、基於域名訪問 https
此處環境更改為:
VMware 15

  • kali-1(服務端) IP:192.168.0.190(橋接模式,代替公網)
  • Centos(客戶端,搭建了 DNS、https 服務) IP:192.168.201.152(NAT模式,內網)

  • 1)配置服務端 frps.ini
[common]            #  共同配置,必需有該配置(請勿修改該代理名)
bind_port = 7000            #  服務端 frp 監聽的埠
vhost_https_port = 4433     #  為代理的 https 設置一個監聽埠(通過域名訪問網頁時須使用此處設置的埠訪問)

啟動服務:sudo ./frps -c ./frps.ini

  • 2)配置客戶端 frpc.ini
[common]            #  共同配置,必需有該配置(請勿修改該代理名)
server_addr = 192.168.0.190     #  服務端 IP(需和服務端的 IP 配置為一致)
server_port = 7000              #  服務端埠(需和服務端的埠配置為一致)

[https]                         #  代理名稱
type = https                    #  協議類型
custom_domains = www.test.com   #  設置需代理的域名(需能正常訪問)
plugin = https2http             #  載入 https2http 插件
plugin_local_addr = 127.0.0.1
plugin_crt_path = /etc/pki/tls/certs/localhost.crt      #  設置本地證書
plugin_key_path = /etc/pki/tls/private/localhost.key    #  設置本地密鑰
plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp

啟動服務:sudo ./frpc -c ./frpc.ini

  • 3)由於是基於域名訪問的所以須在服務端創建相應的域名記錄

  • 4)在服務端使用瀏覽器進行訪問

5、儀錶盤(檢查 frp 狀態和代理資訊的統計)

  • 1)配置服務端 frps.ini
[common]       #  共同配置,必需有該配置(請勿修改該代理名)
bind_port = 7000            #  服務端 frp 監聽的埠
dashboard_port = 7500       #  儀錶盤監聽的埠
dashboard_user = admin      #  儀錶盤的用戶名
dashboard_pwd = passwd      #  儀錶盤的密碼
max_pool_count = 5          #  創建地址池連接上限
vhost_http_port = 2333      #  為代理的 http 設置一個監聽埠

啟動服務:sudo ./frps -c ./frps.ini

  • 2)使用瀏覽器訪問並輸入用戶名跟密碼

6、管理介面(用於管理客戶端,可實現熱載入)

  • 1)配置服務端 frps.ini
[common]            #  共同配置,必需有該配置(請勿修改該代理名)
bind_port = 7000    #  frp 監聽的埠

啟動服務 sudo ./frps -c ./frps.ini

  • 2)配置客戶端 frpc.ini
[common]        #  共同配置,必需有該配置(請勿修改該代理名)
server_addr = 192.168.0.190     #  服務端 IP(需和服務端的 IP 配置為一致)
server_port = 7000              #  服務端埠(需和服務端的埠配置為一致)
admin_addr = 127.0.0.1          #  管理地址
admin_port = 7400               #  監聽的埠
admin_user = admin              #  訪問時的用戶名
admin_pwd = passwd              #  訪問時的密碼

#  管理介面默認只能本地訪問,所以需將埠代理出去實現公網訪問
[web_admin]                   #  代理名稱
type = tcp                    #  協議類型
local_ip = 127.0.0.1      
local_port = 7400             #  需代理的本地埠(需能正常訪問)
remote_port = 7400            #  遠程埠(訪問時使用的埠)

啟動服務 sudo ./frpc -c ./frpc.ini

  • 3) 在服務端使用瀏覽器進行訪問

五、基於 DNS

1、配置服務端 frps.ini

[common]        #  共同配置,必需有該配置(請勿修改該代理名)
bind_port = 7000        #  服務端 frp 監聽的埠

啟動服務:sudo ./frps -c ./frps.ini

2、配置客戶端 frpc.ini

[common]            #  共同配置,必需有該配置(請勿修改該代理名)
server_addr = 192.168.0.190     #  服務端 IP(需和服務端的 IP 配置為一致)
server_port = 7000              #  服務端埠(需和服務端的埠配置為一致)

[ssh]                   #  代理名稱
type = tcp              #  協議類型
local_ip = 127.0.0.1
local_port = 22         #  需代理的本地埠(需能正常訪問)
remote_port = 6000      #  遠程埠(訪問時使用的埠)

[DNS]                   #  代理名稱
type = udp              #  協議類型
local_ip = 127.0.0.1
local_port = 53         #  需代理的本地埠(需能正常訪問)
remote_port = 5333      #  遠程埠(訪問時使用的埠)

啟動服務:sudo ./frpc -c ./frpc.ini

3、在服務端使用 dig @192.168.0.190 -p 5333 -x 192.168.201.147 查看與 192.168.201.147 相關的域名解析


六、socks5

1、配置服務端 frps.ini

[common]            #  共同配置,必需有該配置(請勿修改該代理名)
bind_port = 7000    #  frp 監聽的埠

啟動服務:sudo ./frps -c ./frps.ini

2、配置客戶端 frpc.ini

[common]                  #  共同配置,必需有該配置(請勿修改該代理名)
server_addr = 192.168.0.190 #  服務端 IP(需和服務端的 IP 配置為一致)
server_port = 7000          #  服務端埠(需和服務端的埠配置為一致)

[plugin_socks]              #  代理名稱
type = tcp                  #  協議類型
remote_port = 8899          #  遠程埠(服務端連接時使用此埠,如為 0 則服務端隨機分配一個埠)
plugin = socks5             #  載入 socks5 插件
plugin_user = admin         #  用戶名
plugin_passwd = passwd      #  密碼
use_encryption = true       #  如為 true 則與服務端的通訊會被加密(默認為 false)
use_compression = true      #  如為 true 則消息將被壓縮

啟動服務:sudo ./frpc -c ./frpc.ini

3、使用 Proxifier 進行連接

4、點擊檢查測試是否能正常連接

5、代理完成

Tags: