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、代理完成