内网穿透技术目前已经有很多开源工具,因为要开发微信公众号的项目为了方便调试就想到了这个技术,之前都是用ngrok
,但是微信不让用了,就自己搭建了。这里只是说一下使用Docker的方式实现而已,为啥要用docker呢,当然是因为穷了,买的云服务器尽量不折腾环境(防止出现不必要的麻烦,之前在.net core 早期出现过Runntime无法正常安装也无法卸载,到最后直接恢复系统,所以我现在始终坚持应用全部容器化)。
frp在容器内对网络的托管,至少是80端口吧,但是我的80已经给了nginx,于是我将指定的网络服务又用nginx转发给了Frp,这样解决了80端口的复用问题。而Frp自身的应用端口放开系统网络限制就可以了,我在容器里使用了Host的网络模式,因为那可怜的配置。
这里我写一下自己的配置。
nginx
容器部署就省略了,说一下配置,转发要代理的网络请求,切记 server_name abc.xxxx.com;
是你要代理的服务外网访问域名,而转发后的proxy_pass 127.0.0.1:7102;
是你的frp服务地址,要注意你的容器网络部署方式,我是Host所以怎么配都可以,如果你不是你可以填写你的系统内网ip,防止容器网络不通。
server { server_name abc.xxxx.com; listen 80 ; access_log /var/log/nginx/ih.xiaowanghu.com.access.log; error_log /var/log/nginx/ih.xiaowanghu.com.error.log; underscores_in_headers on; ignore_invalid_headers off; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass 127.0.0.1:7102; } }
frp
分Server端和客户端,
服务端:FRPS Docker
客户端:FRPC
服务端部署,最简单就是
docker run --restart=always --network host -d -v /etc/frp/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps
或者使用dockercompose
version: "3.1" services: frps: image: snowdreamtech/frps network_mode: host restart: always volumes: - /gzl/apps/frp/data/frp/frps.ini:/etc/frp/frps.ini
frps的服务端配置文件frps.ini
[common] # frp服务端口 bind_port = 7100 # 启用面板 dashboard_port = 7101 # 面板登录名和密码 dashboard_user = gzl dashboard_pwd = gzl521314 # 使用http代理并使用7102端口进行穿透 vhost_http_port = 7102 # 使用https代理并使用7103端口进行穿透 vhost_https_port = 7103 # 代理的服务外网访问域名 subdomain_host = abc.xxx.com # 服务token(根据实际情况修改),相当于连接密码,建议设置 token = token521314
接下来是客户都安,下载的文件内打开如下
Frpc.exe
是客户端,frpc.ini
是客户端配置文件
[common] server_addr = frp地址 server_port = 7100 token = token521314 [abc] type=http local_port= 80 subdomain = wx
因为Frpc.exe
直接双击启动是不行的,智能通过cmd启动,可以建一个bat文件,代码如下,
xxx/xxx/frpc.exe
frp 官方地址 https://github.com/fatedier/frp/blob/dev/README_zh.md
docker frp官方文档网址 https://www.itcoder.tech/posts/docker-frp/