如果有部署在内网上的 web 服务,想要通过公网进行访问(比如本地部署的测试),可以借助公有或自建的内网穿透完成。本文使用 frp 进行内网穿透服务的搭建。
根据 GitHub 上的描述,frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
在 Release 页面下载客户端和服务端,由于云服务器和个人设备的系统不一致,需要分别下载两个系统上的安装包(安装包内有客户端和服务端的程序)。
服务端保留 frps
和 frps.toml
配置文件(linux),而客户端保留 frpc.exe
和 frpc.toml
文件(windows)。
安装完成之后就可以在命令行中启动了。有一点需要注意,由于程序的需要在命令行中启动,我希望在我的 Tabby 终端中添加一个 frp 启动配置,因此配置项应该写成如下形式。
cmd.exe /k frpc.exe -c frpc.toml
由 cmd.exe
接收要执行的程序,以及该程序的参数(这里是 -c frpc.toml
)。使用 /k
或 /c
参数设置要执行的程序,前者在执行的程序退出后命令行继续保留,而后者命令行会退出。
在 Ubuntu 中就直接设置以下命令即可:
./frpc -c frpc.toml
根据用途的不同,官网给出了不同的配置示例。我们的需求是访问内网的 Web 服务。
注意:
-c
参数服务端配置文件
tomlbindPort = 7000
vhostHTTPPort = 8090
服务端设置内网穿透服务端监听端口 bindPort
和 HTTP 类型代理监听的端口 vhostHTTPPort
。
客户端配置文件
tomlserverAddr = "xxx.xxx.xxx.xxx"
serverPort = 7000
[[proxies]]
name = "web"
type = "http"
localPort = 8090
customDomains = ["frp-test.zerolacqua.top"]
客户端设置连接服务端的地址 serverAddr
和端口 serverPort
(与服务端 bindPort
一致)。
每个 [[proxies]]
表示一个代理项,要设置代理的类型、本地端口,customDomains
用于设置 http
类型,可通过 customDomains
访问本地的 localPort
。
frp 可以在指定端口开启管理界面,包括服务端的面板和客户端的管理界面。auth.token
用于验证客户端。webServer
则是相应的面板设置。
tomlauth.token = "token"
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "user_name"
webServer.password = "password"
tomlauth.token = "token"
webServer.addr = "127.0.0.1"
webServer.port = 7400
webServer.user = "user_name"
webServer.password = "password"
[[proxies]]
name = "admin_ui"
type = "tcp"
localPort = 7400
remotePort = 7400
如果需要访问客户端(本地)的管理界面,只需将其也进行内网穿透。注意这里使用 tcp
类型。tcp
类型可以配置多端口。
如果想让服务端在会话结束后继续运行,可以使用 tmux 进行管理。
本文作者:Zerol Acqua
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!