介绍
公网访问家庭宽带服务的技术无非就是:内网穿透、IPv6
最近发现 Cloudflare 的 Cloudflare Tunnel 产品也能实现类似功能。
下面看看它们都是些什么鬼吧。
内网穿透
国内家庭宽带分配的地址(内网)一般没法从外网主动访问。
所谓内网穿透就是用来这个问题的: 让外网请求能被内网服务接收到。
下面多种内网穿透方案,一一介绍。
frp
为了解决内网地址不固定问题,frp(fast reverse proxy,快速的反向代理) 设计成 C/S 模式。由 IP 固定的 frp 服务器将流量代理到 IP 不固定的 frp 客户端上,从而实现外网的访问。
💡这种设计与由服务器端配置的反向代理(nginx)不同,frp 服务器代理的目的地由 frp 客户端决定。
根据传输层协议的不同,代理方式可能也会改变。这就需要 frp 程序的支持,现在 frp 支持 TCP、UDP、P2P mode、等协议。
nps
看原理上跟 frp 差不多。
但它的流程是:
- 服务端监听
- 客户端连接(不像 frp 由客户端配置)
- 服务端配置(代理具体规则由服务端指定)
服务端的管理界面
other
其他内网穿透技术有很多,参考这位老哥的视频: https://space.bilibili.com/1628437657;这位老哥的文章: https://www.jianshu.com/u/859a42ec7c8f
总结
内网穿透固然可以在外网访问内网资源,但是其速率受到转发服务器带宽的限制。再加上国内云服务器带宽实在贵(2023年02月28日 100多块 1Mbps)。
这种方式只能用来做内网渗透,没法用做大流量服务。
服务器资料:
虚拟私人网段
使用 虚拟私人网段(Virtual Private Network) 固然可以在外网访问内网资源,但是仅限加入了相应虚拟网段的客户端而言。
💡相比起做流量代理的内网穿透而言,虚拟私人网段 不做流量转发,因此公网的带宽费用可以忽略不计,虚拟私人网段 服务器流量不再作为瓶颈。
Zerotier使用参考: 通过 Zerotier 管理服务器(行星) + Moon 流量服务器(卫星)实现流畅的 P2P 连接
- 短小 https://www.bilibili.com/video/BV1hT4y1E78k/
- 精悍 https://www.bilibili.com/video/BV1dr4y147aq/
IPv6
随着 IPv6 普及,通过 DDNS 把域名绑上动态的 IPv6 地址也能实现外网访问的需求。
操作参考:
- https://www.bilibili.com/video/BV19V4y1p7Xt/
- https://lawsssscat.blog.csdn.net/article/details/104443072
安全考虑,需要加个防火墙(否则别人通过观察你的 IPv6 地址,猜就能把你家里设备其他的 IPv6 地址给猜出来)
防火墙加的位置放在光猫或者光猫后既可。(防火墙配置参考:https://lawsssscat.blog.csdn.net/article/details/102834488)
防火墙开放后,外网访问就受阻了。需要开放端口。
开放端口有两种策略:
- (👎🏻不推荐)一般终端服务用哪种端口,开放哪种端口
- (👍🏻推荐)在防火墙后加个反向代理。防火墙仅开放反向代理的端口。反向代理再根据情况将流量代理给终端服务。
架构图大致如下:
代理应用一般有- nginx ── http 流量
- nps ── 各种流量
OpenWRT 配置 Cloudflare DDNS
https://blog.crstian.me/en/post/2022-01-19-openwrt-ddns/
Cloudflare Tunnel
通过 Cloudflare Tunnel (以前的 Argo Tunnel) 实现云与设备之间打通一条加密通道,这样用户可以通过 Cloudflare 的 CDN 访问到部署在内网的服务,包括 Web、SSH 等。
主要是:免费。
Cloudflared
Cloudflared 是 Cloudflare Tunnel 的客户端(以前的 Argo Tunnel)
具体操作参考: https://www.bilibili.com/video/BV1WG4y1W7HR/
当然,这个产品愿意并不是给你内网穿透的,而是希望构建零信任云网络架构。
零信任
-
古代:看门大院,防火墙是看门狗
防火墙前不信任,防火墙后一切信任
-
现代:云技术发展,设备不集中管理,一个防火墙管不过来,到处设置防火墙管不过来
“永不信任,始终验证” ── 理念
基于零信任理念,不同场景有不同方案
- 边界接入:SDP 方案
- 工业设备接入:哑终端防仿冒零信任方案
- 边缘云服务场景:SASE(Secure Access Service Edge,安全访问服务边缘)方案
- 边界接入:SDP 方案
问题
延迟高
其他:通过零信任搭建的 ssh 聊天室 (好玩的应用)
https://www.dejavu.moe/posts/ssh-chat-over-cloudflare-tunnel/
总结
- 通过 frp、nps 流量代理的方式优点是稳定,缺点是成本高(需要一台宽带高、离你进、流量多的公网主机)(💡针对这个问题,网上有提供流量转发的服务商,可以降一部分成本,但个人感觉终归不踏实)。至于安全问题,见仁见智。
引用链接
- Github: cloudflared by cloudflare
- Speedtest by LibreSpeed
内网穿透工具总结 by CSeroad- 免费的Cloudflared实现外网访问群晖 by 老苏的blog
- 没有公网IP?使用Cloudflare Tunnel实现免费内网穿透
相关链接
frp
- Github: frp by fatedier ── 专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。
go
- Github: frpMgr by Zo3i ── Frp快速配置面板。
java
/docker
- 神卓 https://www.shenzhuohl.com/
2v 反向代理
- https://toutyrater.github.io/app/reverse.html
- 快照 https://web.archive.org/web/20230228023040/https://toutyrater.github.io/
- 快照 https://web.archive.org/web/20230228023047/https://toutyrater.github.io/app/reverse.html
cloudflare
- Cloudflare API by cloudflare
测速
- Github: LibreSpeed by LibreSpeed
vps
- 快云 https://www.kuaiyun.cn/
树莓派
- Raspbian https://www.raspbian.org/
- Debian-Pi
安全