内网穿透,使用 IPv6 公网访问内网设备踩坑指南

17,575 阅读16分钟

本文是开启宽带 IPv6 功能并使用公网 IPv6 地址访问内网设备的踩坑指南。IPv6 是目前个人体验最优的内网访问方案,个人体验远胜过 ZeroTier,frp 等方案。

场景

将个人设备暴露于公网有许多典型场景,如私有云、游戏服务器等。这里挑选一个最大众的场景:云游戏,即显卡串流,大多数人都有设备和需求尝试,相关的社区讨论度也较高,完成后也有成就感。

可能你没有设备支持 Moonlight (需 Nvida 显卡),则将应用层替换为自己喜欢的即可,比如部署个 WordPress 暴露于公网也行。

最终效果

使用个人拥有的域名,即可使用手机或PC设备,使用公网通过 moonlight 客户端链接到家用 PC,串流进行游戏。

理想场景:手机可以移动网串流PC,如果手机为满血 USB3.0 接口,则支持视频传输。手机插上 typec-HDMI 的线,即可投屏到任何显示器,比如商超的电视/专卖店的笔记本上。在商场里背包中拉根线出来就能在大电视上玩赛博朋克2077,非常酷炫。

当然上述场景的最短路径实现也没啥难度,所以等什么,搞起吧。

本次放假回老家,用随身带的公司电脑串流异地 PC 也毫无压力,实现游戏自由。

最短路径

最短路径的完成应用层的设备连接,使用局域网地址互连。

在局域网走通应用层逻辑,Moonlight 教程 (10min)

里程碑1

手机使用 moonlight 客户端输入 PC 局域网地址(如 192.168.31.x) 可串流 PC

最短路径介绍

如何最短路径地将 PC 暴露于公网?把 PC 插在光猫上就行。公网 IPv4 的意义只在于决定能否从公网访问到你的光猫。但大概率没有一个公网 IPv4 地址,只有一个 NAT 内网地址。

公网 IPv4

确认自己有无公网 IP

公网 IPv4 电信大概率可以要到,只需提供光猫的拨号,可找房东要。更推荐的是自己破解光猫管理后台(个人电信和移动都操作过,比较简单,搜一搜相关信息即可)。个人租房电信两次成功要到过公网 IPv4。

破解光猫管理后台是比较关键的一步,最好个人来完成。搜索${运营商名}光猫管理后台破解 即可,比较简单,且百分百可破解,虽然客服可能忽悠你不能。

设备防火墙

是否直接使用公网 IPv4 找到光猫就能访问内网设备了?链路上的每个设备:光猫,路由器,PC 都有防火墙,需要开放对应端口和转发(配置本身繁琐但不复杂)。Moonlight 有脚本一键自动配置,这一步在之前配置 Moonlight 本地访问的过程中也应该做过。

光猫也是路由器,后台管理页面有个设置 DMZ 主机功能,嫌暴露端口麻烦,或想先体验走通链路,可直接把插在光猫上的 PC 设置为 DMZ 主机(肉鸡预定)。或者一个自用路由插光猫上设置 DMZ 主机,然后设置 PC 为路由器的 DMZ 也可。

最短路径里程碑

假如持有公网 IPv4 , 在上述配置后可验证效果:手机移动网(非WIFI)打开 moonlight 客户端,输入公网IPv4,即可公网串流 PC 。

DDNS 使用

记录 IPv4 地址并不优雅,且它可能定期变化。DDNS(Dynamic DNS)简单来说就是在某台机器上跑个定时任务,调用域名解析服务商( 如CloudFlare ) 的 OpenAPI,更新具体域名解析记录值为本机最新的 IP 地址 。实现方式非常多,个人使用 github.com/jeessy2/ddn… 配合 CloudFlare 。 配置成功后即可使用个人持有域名来访问内网设备。

阶段总结

如果能要到公网 IPv4 ,此时已能使用域名公网访问个人设备。折腾到这一步掌握的通用技能包括:

  • 如何破解光猫管理员后台,并已获取宽带拨号信息
  • 如何配置光猫和设备的防火墙,至少已经知道链路有这个关键点
  • (可选)DDNS 是什么,如何使用 DDNS

如果你无法要到公网 IPv4 (长远来看国内将逐渐停止提供公网 IPv4 ),或者单纯只是想升级 IPv6 ,或者有更进一步的折腾要求,请看下文。

使用 IPv6

为什么使用 IPv6

IPv6是大势所趋,目前陆续有各地服务商对家庭宽带不再提供 IPv4地址的新闻。同时因为历史原因 CN 持有的 IPv4 数量并不多,强推 IPv6 建设,CN 已然是 IPv6 强国。所有手机移动网默认已开启 IPv6 , 且入户光纤也全面下发了 IPv6 支持,只需要设备配置即可使用 IPv6。

设备需求

需要拥有一台支持 IPv6 的路由器来代替光猫拨号,个人第一次折腾 IPv6 时使用 MI router 4A 千兆版 (110元)入门级路由器,为最低配置。

这一步的体验和路由器设备的关系较大,持有路由器需大于等于这个配置才能获得正常体验。如果租房需保留原有的路由器,防止影响他人上网。

设置步骤

请参考 ipw.cn/doc/ipv6/us… ,非常详细专业,同时会用到上文破解光猫管理员后台的步骤。这里给出一点踩坑指南:

光猫桥接路由拨号

第一步就是最危险的一步,正常人应该很少摆弄过光猫管理后台,而这一步操作不慎就会导致宽带上不了网,所以在操作前弄清楚回正方法非常重要。

在修改桥接的过程中会短暂中断宽带网络,如果租房,可以考虑半夜三点操作,防止影响他人。

image.png

这一步简单来说就是找到光猫后台,选择当前拨号的这个连接,将它修改为桥接。之后进入直连光猫的路由器后台拨号即可。

这里的风险点在于进入光猫后台为 192.168.1.1 , 修改桥接,点保存/应用后直接生效将无法再访问后台地址。假如后续路由拨号受阻,就需要快速回正防止惊慌失措。

这里给出简要回正步骤:

  • PC 网线直插光猫
  • 修改 PC 网络连接 IP 。 以 win10 为例,右键网络连接=>编辑=>IPv4 地址(自动)=>改手动=> 输入 192.168.1.4(192.168.1.*)=>连接属性查看是否修改成功=> 访问 192.168.1.1 回到管理后台=>修改连接信息为原拨号即可回正。这个过程可预先 PC 直插光猫来预演一遍。
  • 有些光猫会开启一个管理 wifi , 手机连接这个wifi 也可访问 192.168.1.1 后台。

验证 IPv 6

访问 testipv6.cn/ 验证,之后的步骤中,非常多的情况会中断设备 IPv6 的支持状态,需要多次访问这个地址来验证。手机移动网访问一定会通过验证,因为移动网默认开启 IPv6 。

潜在问题

个人使用这个入门的 小米4a 和后来的路由器开启 IPv6 后,网速未有明显的变化,访问测速网站和视频网站也未见网速异常,理论上 IPv6 在多人游戏延迟方面也会有体验优化,半年来个人全网络环境都开启 IPv6。

但存在一定可能是开启 IPv6 后正常拨号,网络连接正常,但网速受影响较为明显的情况(比如网速降到三分之一)。个人也曾复现过一次,在切换网络环境(搬家)后再未复现过,猜测和链路层有关,可能是黑心房东的宽带质量较差。也有可能是测速网站是单独测 IPv4/IPv6 速度,开启IPv6 后 IPv4 的测速数据受影响,可以考虑用百度盘下载速度的峰值来参考网络是否真的受影响。 如果切换拨号后网络受影响较明显,建议及时回正。

里程碑2

成功配置 IPv6 ,PC 访问 6.ipw.cn/ 可返回本机的 IPv6 公网地址。如访问不了则说明 当前 PC 的网络连接未正常支持 IPv6 ,不一定是路由未成功拨号 IPv6。路由后台拨号界面如果正常显示 IPv6 地址,则一般不是拨号问题。

个人实践已知几种情况会导致 Win10 链接掉 IPv6

  • 路由重新拨号(重启必重播),且重启会导致 IPv6 公共前缀变化(涉及 DDNS)
  • 网络连接配置信息变化,如修改路由器默认网关信息。可以认为任何会让 Win10 把当前连接识别成一个新连接的操作,都会掉 IPv6

解决方式很简单,禁用启用网络连接即可,或重启电脑即可。

对于其他设备如 NAS 、软路由系统也是一样,折腾光猫导致的反复拨号会添加多个 IPv6 地址可能导致 IPv6 连通性丢失,建议重启设备即可。

特别注意手机验证时, Cl**h 这种软件会阻断 IPv6 , 注意关掉再验证。但 PC Cl**h 不会阻断 IPv6。

IPv6 公网访问

本质上和上文最短路径一节里 IPv4 公网访问的关键节点差不多,而配置 IPv6 的过程中我们可以更深入的学习这些点。

这里先列出目标里程碑

里程碑3

手机使用移动网,开启 moonlight 客户端,输入 PC 的公网 IPv6 地址,可成功串流,即能从公网 IPv6地址访问内网设备。

这里的关键节点有以下四个:

路由器 IPv6 防火墙

这一步比较幽默。假如你当前的路由器管理后台直接有【关闭 IPv6 防火墙】的选项,则关闭即可。本步骤完成。

(理论上详细配置 IPv6 更安全,但内网设备也有自己的 IPv6 防火墙所以也还好。)

假如你当前路由器后台没有这个选项,则需要剑走偏锋破解路由器系统,SSH 连接到路由器来修改 IPv6 防火墙(需搜索当前型号路由器有没有公共的破解方案)。

(如果你的设备支持破解,但心生畏惧因此就想购买新路由器,如何原谅如此麻瓜的自己?(笑))

如果你的路由器以上两种都不支持,那可能真要买新的路由器了(概率较低)。

路由器 SSH 连接

以我第一次折腾时的入门级 MI router 4a千兆版为例,这里有开源项目支持了这个型号的破解

github.com/acecilia/Op…

这一步我跟随 www.right.com.cn/forum/threa… 步骤开启了 telnet 并设置 IPv6 防火墙。

这一步的折腾让我们 get 了几个有用知识点:

  • 路由器 SSH 连接,厂商一般会封禁防止刷机,这一点和手机刷机类似。
  • 小米路由器的固件系统 fork 的是一个名叫 OpenWRT 的开源系统,也是一个 linux 。如果在折腾之路上走的更远的话,我们将和 OpenWRT 产生更多更深远的交集。

设备防火墙(PC)

对 Win10 实践 moonlight 而言,前面脚本一键自动配置已经设置好了 IPv6 防火墙,如果不确定可以单独搜索 Win10 防火墙的配置方法,或先关闭防火墙走通链路。

双端 IPv6 连通性

任何一次测试里程碑3之前,请先在双端验证 IPv6 连通性,即访问testipv6.cn/

如果 PC 不通,参考里程碑2。

手机移动网在任何时候都是通的,但可能因此掉以轻心,Cl**h 之类的软件会导致手机 IPv6 支持失效。个人就曾经忘了关,在这卡住大把时间反复排查链路,非常尴尬。

配置 DDNS

上面的关键节点都走通后,里程碑3应该不成问题。距离我们的理想状态已然完成 95% 了!

这里的明显问题在于 IPv4 还可以勉强记住, IPv6 最长有8节,且重新拨号会必然发生变化,不配合 DDNS 使用就太不优雅了。

还是推荐上文使用的 github.com/jeessy2/ddn… 简单好用。

如果你从未配置过域名解析这里简述一下域名配置步骤:

  • 购买便宜域名,任意域名网站都可。像阿里云这种好像解析就要备案,小牌一点的不需要备案解析使用 CloudFlare 就行
  • 使用 CloudFlare,在购买域名的网站上将域名解析服务器配置成 CloudFlare 的服务器。或其他域名解析服务。
  • 使用 ddns-go , 按步骤配置 CloudFlare 的 token 即可,或其他域名解析服务。解析服务需关闭代理,使用 dns only(如 CloudFlare )
image.png

域名解析需几分钟生效,实际上比较快,体感大部分时候新解析1分钟内就能生效,也可将 TTL 配小一些。

远程开机

一般个人 PC 耗电量大,需要远程开关机。

这一步比较简单:

  • PC bios 设置通电开机
  • 购买智能插座,可使用 APP 远程通电
  • PC 电源插到专用插座上即可

里程碑4

此时我们已经可以用个人域名公网访问内网设备。对于PC 串流这种场景,我们通过智能插座远程开关机,形成闭环。

更新 :开启 IPv6 后的潜在问题和解决思路

最近移动开启千兆后客服联系来换了个新的光猫,未曾想这竟然是一波 Gank , 同时复现了上文提到的开启 IPv6 后网速下降的问题,这里给出一些解决思路。

桥接拨号后限速变化

换新的这个光猫写着 10G 新设备,固件也比较新,原生支持 WIFI6,比较高大上。但同样配置桥接后,路由器的下行速度由千兆变为严格 500M 。

搜索相关问题,似乎是光猫运营商逻辑,也无从排查, 反正只有光猫拨号才能达到千兆。

解决

原本桥接拨号是为了解决老旧光猫的性能问题,但现在新的光猫来 IPv6 拨号已经绰绰有余了,则还原为光猫拨号解决,下行恢复千兆速度。但光猫拨号IPv6引出了新问题:

光猫拨号 IPv6 DHCP 连接主路由,主路由网速受到限制

表现为主路由网速大幅下降。实际上的问题是 IPv4 IPv6的带宽流量被区分开了。

IPv4 测速变为严格 200m , IPv6 测速达千兆。

但网盘下载速度和视频网站加载速度也被严格限制到了 200m,表现为网速下降,和上文桥接章节时提到的 潜在问题 表现一致。

解决

这个问题可能是链路上有多个 DHCP 服务导致。DHCP 服务简单来说就是给连入局域网的设备自动发内网地址的服务。理论上有多个也没问题,但光猫这一层运营商潜在的逻辑比较多,可以按以下关键点排查:

  • 关闭光猫的 WIFI

  • 修改光猫当前拨号的连接设置,注意图中红框部分,全局地址获取方式不是默认值

image.png
  • 主路由的 IPv6 DHCPv6 服务改为桥模式
image.png

个人在排查以上三点后解决问题,全局IPv4 IPv6下行都达到稳定千兆。

更新2:portair 搭建中的 IPv6 体验

All in one 搭建完毕后半个月没事干,折腾的瘾又按捺不住了,点齐文档准备在一个周末折腾 port<->air。

之前对这个有很多夸张的想象,觉得它是个人运维难度的巅峰,充满敬畏。实际搭下来发现根本没啥难度,因为大伙都在标准化的云服务器上操作(可见只要不和硬件/驱动沾边的折腾都是低难度)。相关的前后端逻辑其实也并不复杂且已经被高度封装,一个周末就搭了三台个人用前端和五台节点后端,专门申请了 Visa , AWS, GCP 都体验了一把。

值得一提的是云服务器的 IPv6 并不是一键开启的,实际上开启非常麻烦,G 家的 IPv6 体验不好,A 家直接对实例规格有要求(即要收米)。可见国内 ISP 默认双栈网络是很难得的,基建强大的体现,赢!

而单纯想开启云服务器的 IPv6 连通性,则有神作: github.com/P3TERX/warp… ,使用 CloudFlare WRAP 一键开启 IPv6 , 魔法般的体验。需要对 udp 不限速的网络环境,场景下正合适。

总结

个人也实践过许多内网穿透方案,比如 ZeroTier 在自己的应用服务器自搭 moon 服务,或自搭 frp 等,只能说打洞成功率过低(可能是运营商 UDP 限制),最后还是降级走流量转发了。

IPv6 号称可以为地球上每一粒沙提供 IP 地址,它使得网络上的设备能重新对等,也是一种理想的内网穿透方案,点对点连接,无需任何中转流量。

关于折腾的意义,每次一次折腾都会给自己留下有用的遗产。前年年末入坑了一段时间手机刷机,遗产是至今个人的移动设备是root了的欧版安卓系统,已稳定主力使用(单手机)一年半,对移动设备的信息安全性及操作习惯有了较大的提升。距离《看门狗》里用那样用手机操作黑入摄像头近了一步。

而本次折腾我们完成了 IPv6 公网访问内网设备,一个新世界的大门立即敞开,它属于一系列折腾中最难也是最简单的一步。能够公网访问设备后, NAS,软路由,一套私有云的部署落地已经呼之欲出。个人在开始写本文时刚刚搞定 IPv6 公网访问,而写完本文时已经搭建完毕 All in one 主机,OpenWRT,群晖等组合的一套私有云服务已经成为日用套件的一部分,距离理想中的极客又近了一步。

写文章本身也是一个学习的过程,也请读者能指出文章中的疏忽错漏之处。如果本文对你有所帮助,欢迎点赞收藏。