用frp建立时空隧道

前言

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。 可以将内网服务以安全、便捷的方式通过具有公网IP节点的中转暴露到公网。

由于frp本身的定位并不是用来建立时空隧道,因此只在开发群体中流行,也没有多少人往这个方向探索,只有极少数人使用frp给他们的ssr等连接加一层壳来减少干扰和增强稳定性。

使用 frp 要求至少有一台服务器或者具备公网 IP 接入的电脑,用于建立连接做中转服务。 其中frps是服务器端,frpc是客户端,建立时空隧道的核心在于利用好多个客户端。

前面的验证方案,我们采用简单的命令行来实施。 其实 frps 是跨平台的,无论是 Linux、FreeBSD、macOS 或者 Windows 操作系统,还是 X86、AMD64、ARM、MIPS 等处理器架构,都有相应等版本,当然如果动手能力足够,可以自己编译如 OpenWrt 版本。

服务器端(中转)

通过官方下载相应平台的程序,我找了台 Linux 主机测试:

下载程序包,用 wget 或者 curl 下载无妨,或者 GUI 下用浏览器下载均可。

wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz

解压缩程序,若 Windows、macOS、Linux 主机在图形节目下解压缩亦可。

tar xvfz frp_0.38.0_linux_amd64.tar.gz

进入子目录,屡次传授经验证明,菜鸟容易卡壳的地方,因没接触过命令行。

cd frp_0.38.0_linux_amd64

服务器配置,我们用的 s.ini 配置如下,可以用 vi 编辑,或使用 sftp 客户端上传配置文件,核心是端口(bind_port)和令牌(token)参数,修改为你自己的设定,日志看需要,也可以删除,前面增加分号为注释。

[common]

bind_port = 28888

; log_file = /tmp/frps.log

; log_level = trace

token = ZDRX8WL

运行服务器,正常启动可以看到端口监听、服务启动成功等字样。

./frps -c s.ini

其他,若不写配置文件,也可以直接使用命令行启动服务。

./frps –bind_port 28888 –log_level trace –token ZDRX8WL

以上方法即建立了一个frp中转服务器,他除了监听服务,可做中转之外,其他什么事情都不干,这是frp最纯粹、最独特的地方所在。

由于只是为了验证,所以不用 &挂起服务,也不用 nohup 挂起服务,按 CTRL + C 可中断服务。

另外,需要注意,若主机有防火墙,请打开相应端口,特别是某些云主机,本机和路由都有防火墙安全策略,需要完全关闭或开启白名单。

客户端(落地端)

接下来我们启用第一个客户端来落地,此为落地端,开一个新终端登陆同一台 Linux 主机:

进入子目录,因为在同一台设备落地,前面到下载、解压省略,其实可以分布式,比如这部分在海外到主机完成,刚才那个中转服务器在国内。

cd frp_0.38.0_linux_amd64

客戶端配置,我們用的 c.ini 配置如下,和服務器端的差異,在通用配置(common)部分,除了令牌(token)需要保持一致,需要填寫正確的中轉服務器地址(server_addr)和服務器端口(server_port),因為我們在同一台 Linux 主機落地,因此示範配置的主機為 0.0.0.0 或寫127.0.0.1 也可以,如果落地主機在海外,需要填寫海外主機的 IP 地址。另外4個段落,事實上是開啟了2種代理服務器插件,包括 http 代理服務器和 socks 代理服務器,這也是最常見的代理服務協議,以及建立了2個時空隧道和2種代理服務呼應,前者有插件的用戶名(user)和密碼(password)需要修改,後者有個密鑰(sk)參數需要修改。

[common]

server_addr = 0.0.0.0

server_port = 28888

;log_file = /tmp/frpc.log

;log_level = trace

token = ZDRX8WL

[http_proxy]

type = tcp

remote_port = 8080

plugin = http_proxy

plugin_http_user = lin

plugin_http_passwd = 1997

[sock_proxy]

type = tcp

remote_port = 1080

plugin = socks5

plugin_user = lin

plugin_passwd = 1997

[secret_http_proxy]

type = stcp

sk = ZHSKIHW

local_ip = 127.0.0.1

local_port = 8080

[secret_sock_proxy]

type = stcp

sk = ZHSKIHW

local_ip = 127.0.0.1

local_port = 1080

運行客戶端,正常可以看到啟動成功等字樣。

./frpc -c c.ini

以上方法即建立了一個 frp 落地客戶端,他除了與服務器端建立連接做中轉之外,還建立了2種代理服務協議,以及2個時空隧道。

事實上,前面這2種代理服務,也是互聯網最早期的代理方法,不過現在這類方法已經失效。如果監聽端口在防火牆白名單上,也可以作為普通代理服務器軟件來使用,但是傳輸敏感信息不安全,即便增加了用戶名和密碼也一樣會被攔截,密碼的作用只是避免被某些爬蟲、蠕蟲、木馬程序等掃描到當肉機使用,很多服務依然無法順暢中轉。

和服務器端一樣,由於只是為了驗證,所以不用 & 掛起服務,也不用 nohup 掛起服務,按 CTRL + C 可中斷服務。雖然是4個服務,但其實只啟動了2個端口監聽,並且在本地進行,因此無需將監聽端口列入防火牆白名單也可以正常使用。

客戶端(起飛端)

真正的客戶端,也可以叫起飛端,可以是你的電腦或者局域網內任何一台計算機,同樣支持 Linux、FreeBSD、macOS 和 Windows 等操作系統,我們的測試環境為 macOS,操作方法基本上和 Linux、FreeBSD 基本一致:

下載程序包,這裡示範的是蘋果最新的 M1 系列,舊型號應為 darwin_amd64。 

wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_darwin_arm64.tar.gz

解壓縮程序,服務器端配置都能搞定的你,客戶端顯然不是問題,不過如果你打算分享給其他菜鳥用戶共享,哪你可能需要多一點耐心。

tar xvfz frp_0.38.0_darwin_arm64.tar.gz

進入子目錄,一定要有耐心,很多人奔潰這這裏,我們快成功了。

cd frp_0.38.0_darwin_arm64

客戶端配置,我們用的 i.ini 配置如下,和服務器端及落地端均有差異,在通用配置(common)部分,除了令牌(token)保持一致,填寫正確的中轉服務器地址(server_addr)和服務器端口(server_port),示範配置的主機為 1.2.4.8。另外2個段落,表示本機將透過中轉服務器連接另外那個落地端的時空隧道,即以訪客(visitor)的角色(role)連接其相呼應的服務名稱(server_name),並且在本機通過主機地址(bind_addr)和主機端口(bind_port)來監聽服務,其中密鑰(sk)參數需要和落地端保持一致。其中主機地址寫成 0.0.0.0,表示本機可以提供給其他局域網內的設備當代理服務器,如果只供本機使用可填寫 127.0.0.1。

[common]

server_addr = 1.2.3.4

server_port = 28888

;log_file = frpc.log

;log_level = trace

token = ZDRX8WL

[secret_http_proxy_visitor]

type = stcp

role = visitor

server_name = secret_http_proxy

sk = ZHSKIHW

bind_addr = 0.0.0.0

bind_port = 8080

[secret_sock_proxy_visitor]

type = stcp

role = visitor

server_name = secret_sock_proxy

sk = ZHSKIHW

bind_addr = 0.0.0.0

bind_port = 1080

運行客戶端,這是3個 frp 端中最輕的部分,因為只是搭上飛船就可以出去看世界。

./frpc -c i.ini

運行客戶端,Windows 版本,不需要在命令行前面增加 ./ 當前路徑,一般習慣加 .exe 後綴。

frpc.exe -c i.ini

驗證客戶端,在本機把瀏覽器或操作系統的 HTTP 代理服務器地址設置為 127.0.0.1,端口 8080,帳號 lin,密碼 1997。電報等只支持 SOCKS5 代理服務器,端口 1080,帳號 lin,密碼 1997,以下包括3种 curl 快速驗證方法,成功的話會返回 Google 網站的重定向信息,其中 socks5h 透過服務器解析域名。

curl -x http://lin:1997@127.0.0.1:8080 -I google.com

curl -x socks5://lin:1997@127.0.0.1:1080 -I google.com

curl -x socks5h://lin:1997@127.0.0.1:1080 -I google.com

其他,如果開放局域網訪問,可以填寫該起飛端的內網 IP 地址做為代理服務器地址。如手機或其他電腦,把 127.0.0.1 改成起飛端的局域網 IP 地址。

進階

前面講了最基本的工作原理,可以實現兩岸三地的時空隧道。通常來講,作為中轉作用的服務器端,可以和落地端一起部署在海外的服務器上,這樣可以節省一台機器。不過,其安全性和穩定性有可能會略微降低,如果能做到落地端在海外,中轉服務器在國內,是比較完美的方案,因為審查裝置一般都部署在海關環節。

如果你是只掌握了一般的計算機操作技能,不太擅長網絡服務器的管理和維護,前面提到的運行服務器、運行客戶端部分,可以在前面增加 nohup 命令並且在後面增加 & 號來作為守護進程使用,一般有問題的話,通過重啟雲服務器對你應該是沒有什麼太大壓力。

運行服務器,改為以下命令來啟動,終端不再輸出日誌,可通過 tail s.log 來觀察。

nohup ./frps -c s.ini >> s.log &

運行客戶端,改為以下命令來啟動,終端不再輸出日誌,可通過 tail c.log 來觀察。

nohup ./frpc -c c.ini >> c.log &

以上则是中转服务器端和落地端的启动方法,起飞端在 macOS、Linux 等设备上可以采用相似端方法,但在 Windows 下就不能用这个方法挂起服务,需要启动命令后,把终端最小化在背景运行,当然也可以借助其他第三方工具隐藏,但不在本教程但范围之内。

如果你是有着 Linux 经验的工程师,想必你多多少少对 systemd 有些了解,把压缩包里 systemd 目录下的 frp*.service 文件拷贝到系统 systemd 配置目录下,修改配置文件或把 frps.ini 和 frpc.ini 当模板去修改,然后再使用 systemctl enable frps 和 systemctl enable frpc 来部署, 使用 systemctl start frps 和 systemctl start frpc 来启动,你但时空隧道将可以稳定可靠的运行。

备注

  • 官方下载

https://github.com/fatedier/frp/releases

  • 官方文档

https://gofrp.org/docs/

  • 令牌(演示)

坐地日行八万里(ZDRX8WL)

  • 密钥(示范)

纵横时空瀛海威(ZHSKIHW)

  • 常见默认的 HTTP 代理服务器端口

8080

  • 常见默认的 SOCKS 代理服务器端口

1080

https://telegra.ph/%E7%94%A8-frp-%E5%BB%BA%E7%AB%8B%E6%99%82%E7%A9%BA%E9%9A%A7%E9%81%93-12-29

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇