背景
家里网络从联通更换到了移动,移动没有公网 IPv4 但是有公网 IPv6。联通时代搞定了 IPv4 之后停止了探索,这次目标搞定 IPv6。
IPv6 的知识来自于网络资料和 IPv6 和 IPv4 的主要区别?,配置过程主要参考 X86 软路由配置 IPv6 踩坑小记。
思路
目前的网络环境为:
移动光猫(桥接)
——> 小服务器(PPPoE 拨号及网关)
——> 其他设备(有线接入的台式机、无线AP的路由器)
小服务器负责 PPPoE 拨号,及使用 Dnsmasq 处理 IPv4 的 DHCP 和 DNS。其中 WAN 口接移动光猫,两个 LAN 口分别接台式机和无线路由器。无线路由器配置成 AP 模式作为一个有无线功能的交换机用。
IPv6 和 IPv4 区别很多,主要点是:
- 不需要 NAT,除开
fe80::
这类保留网段,其他都能当公网用 - 分配 IP 的方式很多,考虑兼容性
SLAAC
应该是最好的
查了一圈资料,按照现在的网络拓扑结构,实现目标需要完成的步骤是:
- 小服务开启 IPv6 的转发
- PPPoE 拨号支持 IPv6,这样小服务器本身支持 IPv6
- PPPoE 能正确申请 IPv6 的 PD,然后绑定到网桥上,这样 LAN 口的设备可以使用 IPv6
- 正确配置通告报文(Router Advertisement),这样内网的设备生成 IPv6 地址后知道去何处通知自己存在
操作
启用 IPv6 转发
在 /etc/sysctl.conf
添加上:
1 | net.ipv6.conf.all.forwarding=2 |
上述三段分别为开启转发、接受 RA 和支持临时地址
在 pppoeconf
启用 IPv6
在 /etc/ppp/options
添加上
1 | +ipv6 |
上述为在全局配置启用,也可以在拨号的配置文件 /etc/ppp/peers/dsl-provider
内添加。
使用 wide-dhcpv6-client 申请 PD
给内网设备也分配对应的 IPv6 地址使用 Prefix delegation(前缀代理),简称 PD。简单来说就是我们向我们的上级路由发送 PD 请求,上级路由会分给我们一个前缀长度小于等于64的网段,然后我们就能将个网段划分成一个或者一些 /64 的网段接着向局域网内的设备分配,此时局域网内的设备的上级路由就是我们的网关。
为了实现这个功能,我们需要使用 wide-dhcpv6-client
。
安装命令如下,因为使用 pppoeconf
拨号,所以安装 wide-dhcpv6-client
的时候要选择 ppp0
网卡作为申请 PD 的网卡
apt install wide-dhcpv6-client
如果开启了防火墙,需要开放 dhcpv6-client 服务对应的端口 546
。我使用的 ufw,命令如下:
ufw allow dhcpv6-client
编辑 /etc/wide-dhcpv6/dhcp6c.conf
,增加
1 | interface ppp0 { |
设置之后重启服务,检查 br 网卡是否分配到 Global 的 IPv6 地址
service wide-dhcpv6-client restart
使用 Dnsmasq 分配 IPv6 地址
最后需要向局域网设备发送 RA ,使用 SLAAC 来分配IP地址,这里我们使用了 Dnsmasq。在 Dnsmasq 的配置文件里加上:
1 | enable-ra |
重启服务使配置生效
service dnsmasq restart
测试
完成配置后,访问 https://ipw.cn/ipv6/ 或者 https://test-ipv6.com/ 测试 IPv6 连接情况