不买服务器,docker安装frp实现内网穿透
FRP 是 Github 上开源的一款内网穿透工具,点击前往项目地址,frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。该项目分为 frps 服务端和 frpc 客户端,通过在拥有公网 IP 的服务器上搭建服务端,然后在被穿透的机器上安装客户端,配置好后就可以实现通过公网 IP 访问内网的内容了。
先说一下我的部署情况,公司拥有非固定公网IP,公网下安装了一个飞牛NAS用于公司日常存储,家里的NAS是没有公网的,之前通过IPv6做了域名绑定,时常会连接不上,发现是IPV6有两个地址,域名解析的TTL时间没设置或设置长了,后面将DNS和DDNS同时设置成10分钟后连接不上的概率确实少了很多。但是要求访问端必须也是具有IPV6的环境。所以想着利用一下公司的网络来做了内网穿透。
因为我的公网IP不是固定的,首先买了一个阿里云的域名,在飞牛NAS上用DDNS-GO做了动态域名解析,步骤这里就不多说了。如果你是买了个服务器,那要简单很多,也可以直接IP地址访问。
一、服务端搭建 frps
1.连接到服务器(我这里是飞牛NAS,通过FinalShell远程工具连接),在合适的位置创建frps目录。
#切换到root权限
sudo -i
# 创建 frps 目录作为工作空间,我这里创建在root目录下
mkdir root/frps
# 创建服务端配置文件
touch root/frps/frps.toml
# 编辑服务端配置文件
nano root/frps/frps.toml
2.将以下配置内容插入到frps.toml文件中
# 服务器的公网IP监听地址
bindAddr = "0.0.0.0"
# 与客户端建立连接的端口
bindPort = 7000
# 服务端控制面板,(如果上层做了DDNS指向主机,填写成路由器下局域网的IP)
#这点卡了很久,配置完docker容器就是启动不了
webServer.addr = "192.168.X.XX" #服务器的公网IP
# 访问控制面板的端口号
webServer.port = 7500
# 控制面板的用户名和密码,暴露在公网的服务请使用严谨一些的用户名密码
webServer.user = "admin"
webServer.password = "12345678" #用于服务端登录,自定义
# 配置服务端的鉴权,这里使用Token进行鉴权,客户端必须用指定的Token才可以与服务端建立连接,防止滥用
auth.method = "token"
auth.token = "token" #自定义
# 配置服务端只打印warn级别的日志,并将日志输出到指定目录(注意这个目录指向的是容器内的目录)
log.level = "warn"
log.to = "/opt/frps/frps.log"
3.配置完成后进入docker中拉取FRP镜像,目前最新版本是v0.64.0,直接拉取latest(最新)一直拉不下来,所以指定了版本可以拉了。如果还拉不了,请考虑一下换源。
# 下载Docker镜像,拉不来考虑一下换源
docker pull fatedier/frps:v0.64.0
# 启动服务端 frps,推荐网桥用 host 类型,将刚刚创建的工作空间目录映射到容器中并指定配置文件启动
docker run --name frps
--restart always
--network host
-p 7500:7500
-p 7000:7000
-e TZ=Asia/Shanghai
-v /root/frps:/opt/frps
-d fatedier/frps:v0.64.0 -c /opt/frps/frps.toml
执行命令后如果容器正常运行,没有自动停止,就算启动成功了。
可以先从局域网ip:192.168.X.XX:7500访问一下试试。

能访问说明服务端已经配置完成,这里的账号密码就是frps.toml文件中的webServer.user = "admin";webServer.password = "12345678"输入进去后

二、防火墙端口放行
如果是在服务器中,找到安全组,配置需要放行的端口。
我这里是在路由器中,用的是华为路由器。

找到更多功能,选择安全设置--NAT服务--添加端口映射。


分别配置7500和7000端口,然后试下用域名或公网IP访问7500端口,页面应该和上面通过局域网IP进入一样。
三、客户端搭建 frpc
在飞牛中,应用中心自带FRPS服务端和FRPC客户端,服务端可以自行研究一下,我这里客户端直接用了飞牛自带的FRPC应用

打开客户端

这里我举了两个例子,*注意serverAddr后面一定要填写你的公网IP或域名,serverPort跟服务端中7000端口号对应,auth.token是服务端中配置的自定义的值,localPort为你客户端跑了服务的端口号(比如飞牛NAS是5666就填写5666),remotePort为你想用公网访问映射到你客户端的端口号。
#这里一定要写服务端的公网IP或域名
serverAddr = "XX.XX.com"
serverPort = 7000
#不能删除, 否则连接不上会闪退
loginFailExit=false
#和服务端自定义的token保持一致
auth.token = "token"
[[proxies]]
name = "tv" #名字自定义
type = "tcp"
localIP = "127.0.0.1"
localPort = 3003 #你本地跑了服务的主地端口,跟我的肯定不一样
remotePort = 7001 #你需要公网映射到你本地的端口,自定义
[[proxies]]
name = "navidrome"
type = "tcp"
localIP = "127.0.0.1"
localPort = 4533 #你本地跑了服务的主地端口,跟我的肯定不一样
remotePort = 7002 #你需要公网映射到你本地的端口,自定义
填写好内容后点击提交,回到服务端的7500端口页面,可以看到TCP中出现了两项连接

**win电脑如何配置frpc
如果你是win电脑需要到frp github官网(github国内访问可能需要配置代理)下载对应系统的软件包

解压后把上面内容添加到frpc.toml文件中,在存放frpc.toml文件的目录下运行cmd终端
./frpc -c ./frpc.toml
四、服务端、客户端防火墙端口放行
重复步骤二,在服务器端路由器中放行7001和7002端口(根据自定义的端口号放行,和我的可能不一致),在客户端路由器中放行7000、3003和4533(根据自定义的端口号放行,和我的可能不一致)。
五、正常访问
下面可以正常输入公网IP或域名+remotePort端口号访问客户端的服务了。








