本文首发于只抄博客,欢迎点击原文链接了解更多内容。
前言
如今 IPv6 网络越来越普及,也是时候开启 IPv6 网络了,特别是对于 NAS 玩家,开启 IPv6 后,NAS 可以获取到公网 IPv6 用于外网访问,通过 ZeroTier 或者 Tailscale 组建虚拟局域网时,也能提高打洞的成功率;而对于 VPS 玩家,IPv6 的路由与 IPv4 不同,使用 IPv6 连接也许能获得更低的延迟体验以及降低丢包率。
既然要开启 IPv6,最重要的前提自然是设备需要支持 IPv6,目前来说除了远古的百兆路由器,基本上所有的家用路由器都能够支持,并且现在运营商对 IPv6 的支持也比较好,如果家里是光猫拨号的,一般来说默认就已经开启了 IPv6。而对于手机、电脑就更不用说了,自然是早早的就支持 IPv6 了。
在开始之前,首先要访问 https://ipw.cn 看看自己现在有没有 IPv6,如果已经能获取到 IPv6 了,那么说明下面的教程就不需要再设置了。
本文将以梅林、Padavan、OpenWRT 为例,分别演示光猫桥接下如何开启 IPv6,其余路由器可以参考梅林或者 Padavan 进行设置,但由于不同路由器的界面以及操作步骤区别较大,再加上部分家用路由器对 IPv6 支持程度有限,可能部分设置无法找到。
开启 IPv6 后,设备将获取到公网 IPv6,意味着设备直接暴露在公网中,建议开启 IPv6 防火墙,放行自己需要的端口,具体可以参考梅林、Padavan 和 OpenWRT 设置 IPv6 防火墙并开放指定端口
光猫拨号
虽然说开启 IPv6 建议光猫桥接,通过路由器拨号上网,但如果你家的光猫的超级密码不好获取,不方便改桥接,其实光猫拨号也不是不能用。对于光猫拨号的用户,前言里面已经提到了,大部分运营商在设置光猫拨号的同时,就已经为你开启了 IPv6,如果你的路由器为 AP 模式,理论上直接就能获取到 IPv6 了;如果路由器为动态 IP 模式,那么还需要单独设置 IPv6。
- Bridge:部分路由器可以单独将 IPv6 设置为 Bridge 或者 Passthrough(如图中的桥模式)
- Native:如果路由器获取到的是 IPv6 前缀,那么也可以通过开启 DHCP-DP 前缀委派,为局域网的设备分配 IPv6 地址(如图中的自动获取 IP 地址)
- NAT6(不建议):如果路由器既不能设置为 Bridge,路由器获取到的又是 IPv6 地址而非前缀,那么只能通过 NAT6 来分配私有 IPv6 地址
光猫桥接
对于光猫桥接的用户,IPv6 分为 Stateless 无状态(SLAAC)和 Stateful 有状态,家用场景建议选择 Stateless,一方面是 Android 设备至今仍不支持 Stateful,无法获取到 IPv6 地址;另一方面如果当地运营商会定期重新拨号,导致 IPv6 前缀改变,而路由器租期还没到,会导致 IPv6 断网,详细可以看宽带 IPv6 过段时间自动掉线要如何解决?
梅林
- 联机类型:Native
- DHCP-PD:启用
- 自动配置设置:Stateless
Padavan
- IPv6 连接类型:Native DHCPv6
- 获取 IPv6 外网地址:Stateless: RA
- 启用 LAN DHCPv6 服务器:Stateless
OpenWRT
OpenWRT 的设置虽然看着多,但现在的固件大部分设置默认就已经开启了,拨号完成就可以使用 IPv6 了
OpenWRT 一般来说 WAN 口 PPPoE 拨号成功后,会自动生成一个虚拟动态接口,获取到 IPv6 以及 IPv6-PD
如果没有出现虚拟动态接口也没有关系,可以将 wan6 (没有的话手动添加,协议为 DHCPv6 客户端)的设备修改为 @wan,效果也是一样的
然后来到 lan 的高级设置,勾选委托 IPv6 前缀 ,并将 IPv6 分配长度 从禁用修改为 64 或更小
接着再点击 lan 的 DHCP 服务器中的 IPv6 设置,将 RA 服务 与 DHCPv6 服务 都设置为服务器模式
最后再来到 lan 的 DHCP 服务器中的 IPv6 RA 设置,勾选启用 SLAAC ,RA 标记看自己的需求是否需要同时开启 DHCPv6,需要的话勾选受管配置(M)和其他配置(O) ,不需要则只勾选其他配置(O)
Windows
- 依次点击
右键网络->属性->更改适配器设置->双击对应的网络->属性
- 在新弹出的窗口中勾选
Internet 协议版本 6(TCP/IPv6)
- 在命令行输入
ipconfig
查看是否获取到 IPv6 地址
Linux
- 编辑
/etc/sysctl.conf
文件 - 将以下代码添加至
/etc/sysctl.conf
文件中
ini
net.ipv6.conf.all.disable_ipv6=0 # 整个系统所有网卡
# 单个 interface
net.ipv6.conf.[interface].disable_ipv6=0 # 填写具体的[interface]
net.ipv6.conf.default.disable_ipv6=0 # 默认网卡
# 如需关闭 IPv6 则将上述值改为 1
- 加载内核参数
sh
sysctl -p
Docker
- 在
/etc/docker/daemon.json
文件中填下 IPv6 相关配置
json
{
"ipv6": true,
"ipv6tables": true,
"experimental": true,
"fixed-cidr-v6": "2001:db8::/64"
}
- 重启 Docker
sh
systemctl restart docker
Nginx
- 域名添加
AAAA
解析 - Nginx 监听 IPv6 的
80
443
端口
nginx
server {
listen [::]:80;
listen [::]:443 ssl http2;
}