Contents

FRP内网穿透

FRP内网穿透

内网穿透的方案,除了用Zerotier虚拟组网外,还可以使用FRP进行端口映射,实现内网穿透。FRP(Fast Reverse Proxy): FRP 是一种用于内网穿透的工具,它允许您通过公网访问位于私有网络内的服务器和服务。它支持多种协议,如 HTTP、HTTPS、TCP 和 UDP。

这种方式,不需要访问者设备上安装特别的应用程序,只需要在内网机和服务器上分别安装FPR服务端可客户端即可。访问者通过“服务器域名或IP+映射端口”号来访问内网特定端口。

下载安装FRP

方法1:使用Docker安装

分别在服务器和内网机的控制台中新建/opt/frps/目录和/opt/frpc/目录。 服务器端在/opt/frps/目录中新建frps.toml文件。 之后在服务器控制台运行以下命令:

docker run \
-d \
--name frps  \
--network host \
-v /opt/frps/frps.toml:/etc/frp/frps.toml \
snowdreamtech/frps

内网机在/opt/frpc/目录中新建frpc.toml文件。 之后在内网机的控制台运行以下命令:

docker run \
-d \
--name frpc  \
--network host \
-v /opt/frpc/frpc.toml:/etc/frp/frpc.toml \
snowdreamtech/frpc

方法2:直接安装

首先从Github上下载FRP的最新版,(fatedier/frp)[https://github.com/fatedier/frp/releases] ,解压缩后会有4个比较重要的文件:

frpc		客户端程序
frpc.toml		客户端配置文件

frps		服务端程序(公网主机用,比如VPS)
frps.toml		服务端配置文件

之后把frps、frps.toml上传到服务器;frpc、frpc.toml上传到要穿透的内网机。比方说分别放在服务器和内网机的/opt/frps//opt/frps/目录中。

PS:此方法后续需要额外设置frp程序跟随系统自启动。否则系统重启后,服务将停止。建议使用docker部署。

配置FRP服务端与客户端文件

服务端配置文件设置

修改服务端frps.toml:

[common]
bind_port = 7000 #frp通信用的监听端口
vhost_http_port = 7080 #frp在代理内网机http协议80端口时对应的映射端口
vhost_https_port = 7443 #frp在代理内网机https协议443端口时对应的映射端口
subdomain_host= on.hotine.wang #要绑定的子域名,需要在DNS中提前设置好这个域名解析到服务器上。同时,还需设置*.on.hotine.wang也解析到服务器上。

token = hotinefrp #frps和frpc建立连接时的密码

dashboard_port = 7001 #frps管理面板的对应端口。可以使用服务器IP:7001进行访问
dashboard_user = admin #管理面板的用户名
dashboard_pwd = password #管理面板的密码

保存并关闭配置文件。

如果是Docker部署的,直接重启容器即可docker restart frps

如果是直接安装的,在控制台中导航到 FRP 服务器端目录,运行 ./frps -c frps.toml 启动 FRP 服务器端。

修改frps.toml文件后,均需要重启frps。

客户端配置文件设置

比如想把内网SMB协议、SSH协议、9009端口的网页穿透到公网,则修改客户端frpc.ini为:

[common]
server_addr = 199.115.230.45 #服务器地址,可以用IP或者域名
server_port = 7000 #frp通信用的监听端口,需要和服务端设置一致
token = hotinefrp #frps和frpc建立连接时的密码,需要和服务端设置一致

log_file = /etc/frp/frpc.log
log_level = info
log_max_days = 3


# 客户端配置web页面,配置后可以在localhost:7001页面修改本地配置
admin_addr = 0.0.0.0
admin_port = 7001
admin_user = admin
admin_pwd = password

[ssh] #SSH连接所需设置。外网可通过server_addr指定的地址、端口号7022进行SSH连接内网机。
name = "SSH" #标识名称
type = "tcp"
local_ip = "127.0.0.1"
local_port = 22
remote_port = 7022

[sync] #http穿透演示
name = "test" #标识名称
type = "http"
local_ip = "127.0.0.1"
local_port = 8384 #内网中要穿透的端口号
subdomain = test #映射到subdomain_host(例如上文中的on.hotine.wang)时所用的子域名。之后可以通过test.on.hotine.wang:7080访问。

之后重启docker,docker restart frpc。 如果是直接安装的,在控制台中导航到 FRP 内网机目录,运行 ./frpc -c frpc.toml 启动 FRP 客户端。

修改frpc.toml文件后,均需要重启frpc。或者使用网页管理面板修改,可免除重启。

完成上述步骤后,就可以通过test.on.hotine.wang:7080访问内网对应资源了。

请确保网络配置正确,端口映射和防火墙设置没有问题。另外,务必考虑安全性和身份验证等问题,以确保共享文件不会暴露在公开网络中。

其他事项

  • 虽然说server_addr可以使用IP或者域名,但是如果启用了Cloudflare IP保护功能的话,使用域名将无法连接。

  • 上文中的子域名泛解析*.on.hotine.wang,也不能启动IP保护功能。