最近对家里的网络做了一次升级,用上了 Native IPv6。这里分享一下过程和体验。

ISP 是南加州的某大型 cable Internet 公司,他们针对家庭宽带用户的服务目前已经完全支持 IPv6,因此只要家里的设备也支持并且配置正确的话,过程是很简单的。

我用的是全套的 UniFi 设备:

  • 1 个 UniFi Security Gateway
  • 2 个 AC HD
  • 2 个 USW-8-150W 和 1 个 USW-16-150W
  • 1 个 AC In-Wall Pro

UniFi Controller 是跑在一个 UniFi Cloud Key 上。

这里的一个关键是 UniFi Controller 软件最近的一次升级,具体可见这里:

UniFi 5.7.20 Stable Release Notes

在 5.7.20 版本中提供了对 IPv6 的支持,使得打开 IPv6 非常简单——只需要在 2 个地方点一下鼠标即可。

第一步是在 USG 的 WAN 设置中打开 IPv6,类似下面这样:

第二步是在 UniFi Controller 的 Settings / Networks 里为 LAN 打开 IPv6。只要在 IPv6 Interface Type 那里选 Prefix Delegation 即可,其他什么都不用改:

以上两步完成之后,网络里的设备就会获得 IPv6 的地址。比如 macOS 的话,可以把 WiFi 关掉又打开一次,就可以获得 IPv6 地址了。之后 macOS 在对外通信的时候,会优先使用 IPv6 网络。

这个时候如果访问 bgp.he.net 就可以看到自己的 IPv6 地址。这就是 IPv6 有意思的一点——在 Native IPv6 网络里,你的 IPv6 地址就是公网地址,如果没有任何防火墙规则的话,别人是可以直接连上你的 IPv6 地址的。也就是说,我上面那几步做完之后的效果就是,家里每一台支持 IPv6 的设备,都有了自己的公网地址。比如如果我在家里测试 V2EX 的开发版本,我可以直接把我本地机的 IPv6 地址加端口发给朋友,朋友就可以访问了。

这样听起来很不安全对不对?其实还好,因为 USG 默认防火墙规则的存在,使得虽然这些设备都有了公网地址,但是外面是无法连上这些设备的。

如果你希望把整个网络对外打开(不推荐这么做),那么最简单的方法就是在 UniFi Controller 的 Settings / Routing & Firewall / Firewall / Rules IPv6 里为 WAN-IN 添加一条这样的规则:

当然,更安全的做法是,添加一些你确实需要的,同时又有足够安全考虑的规则。

比如你可以在 WAN-IN 里添加允许 ICMPv6,这样的效果是,外面可以 ping 所有的设备:

这里推荐一个可以测试你的 IPv6 网络类型的网站:

IPv6 Test

然后发现,任何的动态网站,如果要提供 IPv6 支持,有一些细节是需要改的。比如如果之前数据库里某张表有一个 ip 字段规划为了 varchar(15) 或者 int 的话,那么就是一个需要改的坑了。