frp+proxifier實現內網socks5反向代理


本文為原創,轉載請附名出處。

 

客戶端:部署在需要穿透的內網服務所在的機器上(需要代理出來流量的內網機器)

frp客戶端為frpc

服務端: 部署在具有公網 IP 的機器上

frp服務端為frps

(最后附frpc和frps的一些詳細參數)

 

正向代理

正向代理類似一個跳板機,代理訪問外部資源(比如我們國內訪問谷歌,直接訪問訪問不到,我們可以通過一個正向代理服務器,請求發到代理服,代理服務器能夠訪問谷歌,這樣由代理去谷歌取到返回數據,再返回給我們,這樣我們就能訪問谷歌了)

 

反向代理

反向代理(Reverse Proxy)實際運行方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個服務器

 

 

frp 是什么? 

 

frp 是一個專注於內網穿透的高性能的反向代理應用,支持 TCP、UDP、HTTP、HTTPS 等多種協議。可以將內網服務以安全、便捷的方式通過具有公網 IP 節點的中轉暴露到公網。

 

 

 

為什么使用 frp?

通過在具有公網 IP 的節點上部署 frp 服務端,可以輕松地將內網服務穿透到公網,同時提供諸多專業的功能特性,這包括:

  • 客戶端服務端通信支持 TCP、KCP 以及 Websocket 等多種協議。
  • 采用 TCP 連接流式復用,在單個連接間承載更多請求,節省連接建立時間。
  • 代理組間的負載均衡。
  • 端口復用,多個服務通過同一個服務端端口暴露。
  • 多個原生支持的客戶端插件(靜態文件查看,HTTP、SOCK5 代理等),便於獨立使用 frp 客戶端完成某些工作。
  • 高度擴展性的服務端插件系統,方便結合自身需求進行功能擴展。
  • 服務端和客戶端 UI 頁面。

 

 

什么是Proxifier

 

 Proxifier是一款功能非常強大的socks5客戶端,可以讓不支持通過代理服務器工作的網絡程序能通過HTTPS或SOCKS代理或代理鏈。支持 64位系統,支持Xp,Vista,Win7,MAC OS ,支持socks4,socks5,http代理協議,支持TCP,UDP協議,可以指定端口,指定IP,指定域名,指定程序等運行模式,兼容性非常好,和之前介紹的SocksCap屬於同類軟件,不過SocksCap已經很久沒更新了。有許多網絡應用程序不支持通過代理服務器工作,Proxifier 解決了這些問題和所有限制,讓您有機會不受任何限制使用你喜愛的軟件。此外,它讓你獲得了額外的網絡安全控制,創建代理隧道,並添加使用更多網絡功能的權力。

 

 

 

使用frp+proxifier實現內網socks5反向代理

 

准備工作:

1、 被入侵內網主機:192.168.25.135

2、 內網其他帶有web界面的主機:192.168.25.129

3、 VPS公網服務器:0.0.0.0(ip為自己vps的ip)

4、攻擊主機:10.7.9.43

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

frp介紹文檔及各類參數詳解:https://gofrp.org/docs/

proxifier下載地址:https://www.proxifier.com/

(注:frp客戶端和服務端盡量使用最新版本或一致的版本,要不有可能出現兼容問題)

 

 

步驟:

 

1、frp是有一個客戶端,一個服務器端,首先配置服務器端的frp配置;frpc后面跟着一個c,大家應該知道是client的首字母,frps也是一樣server;這樣就容易理解所對應的文件是干嘛的了,frpc.ini和frps.ini分別對應客戶端和服務器端的配置文件;

 

 

2、在服務端上下載frp並配置frps.ini文件。

(1)下載不多說直接下載下來上傳上去就行。(上傳對應系統的frp壓縮包就好)

解壓壓縮包:tar -zxvf frp_0.30.0_linux_amd64.tar.gz

 

(2)配置frps.ini文件(其實命名可以隨便命名的只要是ini文件就好)

 

[common]

Bind_addr = 0.0.0.0   #服務端監聽地址 默認0.0.0.0

bind_port = 7000    #服務端監聽端口

dashboard_port = 7500  #狀態以及代理統計信息展示,vpsip:7500可查看詳情

dashboard_user = admin     #訪問用戶

dashboard_pwd = password    # dashboard_pwd訪問密碼

log_file = ./frps.log    #log_file日志文件

 

log_level = info    # log_level記錄的日志級別

log_max_days = 3     # log_max_days日志留存3天

authentication_timeout = 0     #authentication_timeout超時時間

#max_pool_count最大鏈接池,每個代理預先與后端服務器建立起指定數量的最大鏈接數

max_pool_count = 50

allow_ports = 40000-50000  #允許代理綁定的服務端端口

 

 

(3)執行命令開啟frps等待連接

./frps -c frps.ini

 

 

3、在客戶端上下載frp並配置frpc.ini文件

(1)配置frpc.ini文件

 

[common]
server_addr = vps的ip地址     #連接服務端的地址
server_port = 7000     #連接服務端的端口
tls_enable = ture      #啟用 TLS 協議加密連接
pool_count = 5    #連接池大小

[plugin_socks]
type = tcp
remote_port = 46075
plugin = socks5
plugin_user = admin
plugin_passwd = admin123
use_encryption = true
use_compression = true

 

 

(2)執行命令連接vps

./frpc -c frp.ini

 

 

(3)訪問VPS:7500查看是否連接成功(或看vps的執行完frps界面有沒有報錯,有報錯的話按照報錯提示去修改就好了。)

 

 

(4)連接成功后服務端顯示

 

 

 

4、配置proxifier

(1)配置ip、端口、連接方式、賬號密碼

l  點擊Proxy Server按鈕

l  Add

l  輸入本地shadowshocks的ip(默認127.0.0.1)和端口(默認1080)

l  選擇SHOCKS Versin 5

l  然后點擊check

l  OK

 

 

 

(2)配置通過該代理的IP

l  點擊Proxification Rule

l  選中localhost,點擊Edit

l  Target hosts處添加允許通過的IP(一般內網我都會只讓內網的IP通過,防止流量過大)

l  Action選擇剛才配置的連接方式

l  OK

 

 

(3)      代理成功后訪問vps:7500

 

 

 

5、訪問內網192.168.25.129主機成功訪問即證明代理成功。

 

 

代理成功服務端截圖

 

 

 

 

 

 

 

服務端frps配置文件參數:

# [common] 是必需的
[common]
# ipv6的文本地址或主機名必須括在方括號中
# 如"[::1]:80", "[ipv6-host]:http" 或 "[ipv6-host%zone]:80"
bind_addr = 0.0.0.0
bind_port = 7000

# udp nat 穿透端口
bind_udp_port = 7001

# 用於 kcp 協議 的 udp 端口,可以與 "bind_port" 相同
# 如果此項不配置, 服務端的 kcp 將不會啟用
kcp_bind_port = 7000

# 指定代理將偵聽哪個地址,默認值與 bind_addr 相同
# proxy_bind_addr = 127.0.0.1

# 如果要支持虛擬主機,必須設置用於偵聽的 http 端口(非必需項)
# 提示:http端口和https端口可以與 bind_port 相同
vhost_http_port = 80
vhost_https_port = 443

# 虛擬 http 服務器的響應頭超時時間(秒),默認值為60s
# vhost_http_timeout = 60

# 設置 dashboard_addr 和 dashboard_port 用於查看 frps 儀表盤
# dashboard_addr 默認值與 bind_addr 相同
# 只有 dashboard_port 被設定,儀表盤才能生效
dashboard_addr = 0.0.0.0
dashboard_port = 7500

# 設置儀表盤用戶密碼,用於基礎認證保護,默認為 admin/admin
dashboard_user = admin
dashboard_pwd = admin

# 儀表板資產目錄(僅用於 debug 模式下)
# assets_dir = ./static
# 控制台或真實日志文件路徑,如./frps.log
log_file = ./frps.log

# 日志級別,分為trace(跟蹤)、debug(調試)、info(信息)、warn(警告)、error(錯誤)
log_level = info

# 最大日志記錄天數
log_max_days = 3

# 認證 token
token = 12345678

# 心跳配置, 不建議對默認值進行修改
# heartbeat_timeout 默認值為 90
# heartbeat_timeout = 90

# 允許 frpc(客戶端) 綁定的端口,不設置的情況下沒有限制
allow_ports = 2000-3000,3001,3003,4000-50000

# 如果超過最大值,每個代理中的 pool_count 將更改為 max_pool_count
max_pool_count = 5

# 每個客戶端可以使用最大端口數,默認值為0,表示沒有限制
max_ports_per_client = 0

# 如果 subdomain_host 不為空, 可以在客戶端配置文件中設置 子域名類型為 http 還是 https
# 當子域名為 test 時, 用於路由的主機為 test.frps.com
subdomain_host = frps.com

# 是否使用 tcp 流多路復用,默認值為 true
tcp_mux = true

# 對 http 請求設置自定義 404 頁面
# custom_404_page = /path/to/404.html

 

 

 

客戶端frpc配置文件參數

 

# [common] 是必需的
[common]
# ipv6的文本地址或主機名必須括在方括號中
# 如"[::1]:80", "[ipv6-host]:http" 或 "[ipv6-host%zone]:80"
server_addr = 0.0.0.0
server_port = 7000

# 如果要通過 http 代理或 socks5 代理連接 frps,可以在此處或全局代理中設置 http_proxy
# 只支持 tcp協議
# http_proxy = http://user:passwd@192.168.1.128:8080
# http_proxy = socks5://user:passwd@192.168.1.128:1080

# 控制台或真實日志文件路徑,如./frps.log
log_file = ./frpc.log

# 日志級別,分為trace(跟蹤)、debug(調試)、info(信息)、warn(警告)、error(錯誤)
log_level = info

# 最大日志記錄天數
log_max_days = 3

# 認證 token
token = 12345678

# 設置能夠通過 http api 控制客戶端操作的管理地址
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin

# 將提前建立連接,默認值為 0
pool_count = 5

# 是否使用 tcp 流多路復用,默認值為 true,必需與服務端相同
tcp_mux = true

# 在此處設置用戶名后,代理名稱將設置為 {用戶名}.{代理名}
user = your_name

# 決定第一次登錄失敗時是否退出程序,否則繼續重新登錄到 frps
# 默認為 true
login_fail_exit = true

# 用於連接到服務器的通信協議
# 目前支持 tcp/kcp/websocket, 默認 tcp
protocol = tcp

# 如果 tls_enable 為 true, frpc 將會通過 tls 連接 frps
tls_enable = true

# 指定 DNS 服務器
# dns_server = 8.8.8.8

# 代理名, 使用 ',' 分隔
# 默認為空, 表示全部代理
# start = ssh,dns

# 心跳配置, 不建議對默認值進行修改
# heartbeat_interval 默認為 10 heartbeat_timeout 默認為 90
# heartbeat_interval = 30
# heartbeat_timeout = 90

# 'ssh' 是一個特殊代理名稱
[ssh]
# 協議 tcp | udp | http | https | stcp | xtcp, 默認 tcp
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 是否加密, 默認為 false
use_encryption = false
# 是否壓縮
use_compression = false
# 服務端端口
remote_port = 6001
# frps 將為同一組中的代理進行負載平衡連接
group = test_group
# 組應該有相同的組密鑰
group_key = 123456
# 為后端服務開啟健康檢查, 目前支持 'tcp' 和 'http'
# frpc 將連接本地服務的端口以檢測其健康狀態
health_check_type = tcp
# 健康檢查連接超時
health_check_timeout_s = 3
# 連續 3 次失敗, 代理將會從服務端中被移除
health_check_max_failed = 3
# 健康檢查時間間隔
health_check_interval_s = 10

[ssh_random]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 如果 remote_port 為 0 ,frps 將為您分配一個隨機端口
remote_port = 0

# 如果要暴露多個端口, 在區塊名稱前添加 'range:' 前綴
# frpc 將會生成多個代理,如 'tcp_port_6010', 'tcp_port_6011'
[range:tcp_port]
type = tcp
local_ip = 127.0.0.1
local_port = 6010-6020,6022,6024-6028
remote_port = 6010-6020,6022,6024-6028
use_encryption = false
use_compression = false

[dns]
type = udp
local_ip = 114.114.114.114
local_port = 53
remote_port = 6002
use_encryption = false
use_compression = false

[range:udp_port]
type = udp
local_ip = 127.0.0.1
local_port = 6010-6020
remote_port = 6010-6020
use_encryption = false
use_compression = false

# 將域名解析到 [server_addr] 可以使用 http://web01.yourdomain.com 訪問 web01
[web01]
type = http
local_ip = 127.0.0.1
local_port = 80
use_encryption = false
use_compression = true
# http 協議認證
http_user = admin
http_pwd = admin
# 如果服務端域名為 frps.com, 可以通過 http://test.frps.com 來訪問 [web01]
subdomain = web01
custom_domains = web02.yourdomain.com
# locations 僅可用於HTTP類型
locations = /,/pic
host_header_rewrite = example.com
# params with prefix "header_" will be used to update http request headers
header_X-From-Where = frp
health_check_type = http
# frpc 將會發送一個 GET http 請求 '/status' 來定位http服務
# http 服務返回 2xx 狀態碼時即為存活
health_check_url = /status
health_check_interval_s = 10
health_check_max_failed = 3
health_check_timeout_s = 3

[web02]
type = https
local_ip = 127.0.0.1
local_port = 8000
use_encryption = false
use_compression = false
subdomain = web01
custom_domains = web02.yourdomain.com
# v1 或 v2 或 空
proxy_protocol_version = v2

[plugin_unix_domain_socket]
type = tcp
remote_port = 6003
plugin = unix_domain_socket
plugin_unix_path = /var/run/docker.sock

[plugin_http_proxy]
type = tcp
remote_port = 6004
plugin = http_proxy
plugin_http_user = abc
plugin_http_passwd = abc

[plugin_socks5]
type = tcp
remote_port = 6005
plugin = socks5
plugin_user = abc
plugin_passwd = abc

[plugin_static_file]
type = tcp
remote_port = 6006
plugin = static_file
plugin_local_path = /var/www/blog
plugin_strip_prefix = static
plugin_http_user = abc
plugin_http_passwd = abc

[plugin_https2http]
type = https
custom_domains = test.yourdomain.com
plugin = https2http
plugin_local_addr = 127.0.0.1:80
plugin_crt_path = ./server.crt
plugin_key_path = ./server.key
plugin_host_header_rewrite = 127.0.0.1

[secret_tcp]
# 如果類型為 secret tcp, remote_port 將失效
type = stcp
# sk 用來進行訪客認證
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
use_encryption = false
use_compression = false

# 訪客端及服務端的用戶名應該相同
[secret_tcp_visitor]
# frpc role visitor -> frps -> frpc role server
role = visitor
type = stcp
# 要訪問的服務器名稱
server_name = secret_tcp
sk = abcdefg
# 將此地址連接到訪客 stcp 服務器
bind_addr = 127.0.0.1
bind_port = 9000
use_encryption = false
use_compression = false

[p2p_tcp]
type = xtcp
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
use_encryption = false
use_compression = false

[p2p_tcp_visitor]
role = visitor
type = xtcp
server_name = p2p_tcp
sk = abcdefg
bind_addr = 127.0.0.1
bind_port = 9001
use_encryption = false
use_compression = false

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM