Docker搭建FRP内网穿透服务(花生壳、Ngrok平替)
内网穿透, 让局域网的服务在异地互联网状态依旧在线可用
frp,一个高性能的反向代理, 可以通过互联网(外网)访问内网(本地局域网)设备
灵活,TCP/IP底层逻辑应用广泛
2024.01 更新内容:如何家宽模式下使用(frp p2p模式 )
使用感受:P2P模式对于这种家宽自建的frp服务太实用
有什么用
映射出局域网,‘打洞‘,平替花生壳之类的功能
举例:远程scrcpy连接安卓设备的adb操作屏幕,说人话:远程控制机顶盒或电视等
1 | # 操作步骤 |
[概念]什么是FRP 内网穿透服务
https://github.com/fatedier/frp/blob/master/README_zh.md
1 | 为什么使用 frp ? |
实现方法
先自建一个frps服务器端(运行frps用的)
然后自控端A,被控端B;内网穿透服务器
https://zsxwz.com/2023/10/09/远程投屏控制安卓手机,不用-usb-不用-wifi-不用root/
https://zsxwz.com/2023/10/03/frp-使用-p2p-模式,点对点穿透,节约服务器带宽/
开启手机adb,然后用scrcpy
[done]TODO 自建docker的frps服务
https://github.com/fatedier/frp
方案就是开放特定的内网服务到外网直接访问(域名+端口),这个特定的内网服务是有控制功能的,比如路由的web页面,可ssh的端口,可以远程桌面的mstc等。
这样打洞以后,在洞上面架设的是可以远程操作协助的APP(比如远程桌面,ssh等)
从而实现远程协助的功能。
感觉frps,frpc才是王道,但愿受控端的操作会少一些,简单一下,步骤简易一些,通俗易懂一些。
docker-compose.yml
1 | version: '3.3' |
FRP服务器配置文件 frps.ini
1 | [common] |
7000映射到外网了,在主路由上已配置。
测试frpc 来链接。。。。
2023/12/01 08:35:34 [1;34m[I] [service.go:312] Dashboard listen on 0.0.0.0:9527[0m
无法正常连接, 原来是 配置文件dashboard_port= 7500,然后docker映射出来9527即可。
docker重启日志中:
2023/12/01 08:57:30 [1;34m[I] [service.go:533] [67b3d0c8dd4be924] client login info: ip [120.244.216.197:37895] version [0.52.3] hostname [] os [linux] arch [mipsle][0m
new proxy [web] type [http] error: subdomain is not supported because this feature is not enabled in server
https://github.com/fatedier/frp
FRPS 服务端如何反代?
修改了上面的配置:
network_mode: host
开启防火墙6002
太赞了,https://@@@@.carlzeng.com:@@@@/Advanced_Extensions_script.asp
比Zerotier强太多了!!!
K2P UI中的文本框编辑在Zerotier中无法使用,在frpc后反代以后都正常了!
https://@@@@.carlzeng.com:@@@@/ 反代到debian的6002端口,协议选择http
客户端frpc配置
frpc可以运行与各个平台,比如:Windows电脑、苹果电脑、Linux、Unix等系统的电脑,安卓手机端,苹果手机端等等…
设置应用2
FRP客户端配置文件 frpc.ini
1 | [common] |
设置到K2P里面去
[done]TODO:
开启debian防火墙的6003-6004,
NPM反代6003
设置应用3
去应用的docker中(比如独角数卡)加入frpc,然后反代出来
tar -xf frp_0.52.3_linux_amd64.tar.gz -C /usr/local/bin
1 | ./frpc -c frpc.ini |
客户端 frpc.ini
1 | [common] |
发现仍然无法解决,页面的操作携带端口的需求
设置应用4
远程控制adb,安卓设备远程控制
在路由器上,给192.168.123.189这个设备的5555端口映射出来
1 | ....#省略连接服务器部分的配置 [common] 都一样指定远程服务端的信息 |
如何家宽模式下使用(frp p2p模式 )
使用frp的p2p模式,点对点穿透,绝大多数数据无需经过服务端,加速了穿透访问
第三方接入FRP服务器,映射出特定的端口到本地:
服务器frps的配置,和上面一样无需做任何修改,只要是配置被控端和主控端的两个frpc配置文件:
2、被控端B配置文件 frpc.ini
1 | [common] |
3、主控端A 配置文件 frpc.ini
1 | [common] |
免费的FRP服务资源
如果暂时没有自建的条件,可以直接使用网络上开放免费的FRP服务,比如:
优点:所见即所得,马上就用
缺点:速度慢,适合用来学习测试
设置和应用太灵活了,以至于很难理解和变通到家宽部署的情况。
关键词:docker frps 反向代理
群晖中安装 frpc 脚本
1 | wget https://raw.githubusercontent.com/stilleshan/frpc/master/frpc_synology_install.sh && chmod +x frpc_synology_install.sh && ./frpc_synology_install.sh |
frpc toml stcp 格式: https://github.com/fatedier/frp/blob/dev/conf/frpc_full_example.toml
1 | nohup /usr/local/frp/frpc -c /usr/local/frp/frpc.ini >/dev/null 2>&1 & |
脚本再群晖中,自动安装 frpc
错误以及排除解决
custom listener for [] doesn’t exist
1 | 2024/08/18 17:53:42 [W] [visitor.go:149] [fa45c4fd20893d9b] [CTR_hby_k2p_web80] start new visitor connection error: custom listener for [hby_k2p_web80] doesn't exist |
ping frp.carlzeng.com 服务器的IP是正确的, 由于服务器的IP刚变, 现在不清楚是:
- 服务器docker的故障?
- 实时证明, 服务端非常稳定
- NAS中运行的frpc的故障?
- 由于没有frpc, 导致无法直接连接到NAS的ssh
- 通过开放的debian代理, 直接远程来访问k2p的局域网地址: http://192.168.6.243/Advanced_WOL_Content.asp
- 果然问题出现在这个层面了, 详见下方
- 本地的frpc故障?
- 重启一下MAC
原来在NAS中, ping frp.carlzeng.com 居然还是得到旧的IP地址(错误的), 难怪远程无法正常P2P连接过去.
优化(20240818):
- 把NAS中运行的frpc所连接的服务地址, 修改为局域网中的本地地址(192.168.*.*); 这样的好处就是, 不管外网IP怎么变(域名所解析带来的延迟效果, 错误解析等等) 都不会影响到, 本地局域网的frpc客户端上线.
- 检查了NAS的计划任务, 每次开机启动NAS, 会自动运行frpc
至此, 解决了NAS中的frpc 运行故障(DNS解析得到错误的IP地址)
进一步优化:
把这个命令添加到进程守护中去, 这样不管发生什么进程消失/退出了; 会自动重启起来.
灵感来源/感谢列表
家里没有公网IP?FRP+NPM+VPS = 随时随地用域名访问家里的任何设备!内网穿透,从未如此简单!
使用docker-compose来构筑NGINX、frp的HTTP内网穿透