中国移动原生IPv6配置

Posted on December 18, 2018

上峰拍了桌子, 要求 2018 年底之前商用 ipv6. 移动响应非常积极,已经可以用了. ipv6 带来的第一个好处就是削除了NAT, 对万恶的私网ip地址说再见!

在继续之前,首先讲下,ipv6 同 ipv4 在配置上的不同。

对于家庭宽带,ipv4 是 pppoe 拨号的时候自动配置的。isp 给且仅给一个 ipv4 地址。 如果有多台设备需要上网,就需要使用一种叫 NAT 的技术进行网址共享。由于NAT隐藏了内网的细节, 在 isp 看来,所有的数据都是来自同一个 ip 地址的. 因此isp和家庭网关之间不需要什么路由协议. 但是 ipv6 得益于超长地址,不再需要节约地址了,于是内网仍然分配全球可路由地址. 这个时候, isp 其实就需要分配两次地址,一次是给家庭网关的WAN口,另一次是给家庭网关的 LAN 口.

第一次分配,给 WAN 口分配, ipv4 和 ipv6 是一样的. 都是在 PPPoE 拨号完成后动态分配.

只是, ipv4 时代, LAN 口地址是固定的一个内网地址. 而 ipv6 时代, 即使 ip地址再丰富, 运营商也不会给用户分配固定的 ip 地址, 因此, 需要一种 动态的给 LAN 口分配地址(准确的说是分配前缀)的协议.

这个协议就是 DHCP-PD. LAN 口分配好前缀后, 整个子网就分配下来了, 至于这个子网里哪个机器用哪个地址, 那就和 isp 没有关系了. 而且实际上 isp 下发子网前缀后, 路由器其实是可以把 下发的子网再细分的, 这个适用于有多个 LAN 的情况.

ipv6 因为有 RA 协议, 所以只要路由器的 LAN 口分配了前缀, LAN 口下的在同一个交换域里的主机就都可以自动分配ipv6地址.

那么, EdgeRouter 里如何使用 dhcp-pd 为 LAN 口分配地址呢?

那么,配置的办法其实很简单, 就是

ubnt@ubnt:~$ configure
[edit]
ubnt@ubnt# set interfaces ethernet eth0 pppoe 0 ipv6 address autoconf
ubnt@ubnt# set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 1 prefix-length /56
ubnt@ubnt# set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 1 interface switch0 prefix-id 1
ubnt@ubnt# set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 1 interface switch0 host-address ::7788
ubnt@ubnt# set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 1 interface switch0 service slaac
ubnt@ubnt# commit; save; exit
ubnt@ubnt:~$ reboot

解析:

set interfaces ethernet eth0 pppoe 0 ipv6 address autoconf 启用了 pppoe 的 ipv6 地址配置, pppoe 认证通过后, 路由器即从 isp 为 pppoe 链接分配 ipv6 地址. 这时候, 路由器本身就可以通过 ipv6 上网了.

ubnt@ubnt# set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 1 prefix-length /56 这个命令就是启用了 dhcp-pd 的总开关, 向 isp 申请 /56 长度的前缀. 不同的 isp 这个数字是不同的, 大多数运营商都是 /56. 也有少数运营商是分配的 /60 的前缀, 这个自己尝试即可. 因为 edgerouter 是多功能的路由器, 不限定为一个wan口的,所以 dhcp-pd 客户端需要编号. 这里我就用编号1了. 如果有第二个 pppoe 链接(多isp的话) 就可以在别的 pppoe 下再创建 pd 2 了.

ubnt@ubnt# set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 1 interface switch0 prefix-id 1

这条命令创建第一个子前缀. 如果家里只划分了一个 LAN 那就只有这一条 prefix-id 为 1 的子前缀了. 如果有多个 LAN 网络, 就可以用 perfix-id 区分不同的 lan. 这里 switch0 的意思, 就是这个子前缀是为 switch0 分的. 如果你有多个子网, 可能就没有把 eth1234 聚合成 swtich0, 可以在这里使用 eth1 eth2 eth3 分别配置3条子网下去. 当然可可能是通过 VLAN 划分子网的话, 那就是 switch0.vlanid 了. 具体自己灵活即可.

``` ubnt@ubnt# set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 1 interface switch0 host-address ::7788


这条命令, 就是在这个 子池里, 选一个 ::7788 作为主机号. 加入 isp 分配下来的是 abcd:1234:1234:1200::/56 这样的前缀, 那么这个子池就是 abcd:1234:1234:1201::/64 注意这里的 1201/64 , 就是在 1200/56 里划分的子池, 子池的 id 就是那个  ```interface switch0 prefix-id 1``` 确定的.

然后, LAN 口的地址将会是 abcd:1234:1234:1201::7788. 


ubnt@ubnt# set interfaces ethernet eth0 pppoe 0 dhcpv6-pd pd 1 interface switch0 service slaac ``` 最后的这条配置, 就是启用 RA 广播, 局域网的机器收到后, 就会为自己生成 abcd:1234:1234:1201:????:????:????:???? 这样的地址了. 局域网的机器就能通过 ipv6 访问世界了.

Comments