试着从已分配的掩码为/64的网段中划出一段掩码为/96的网段,并通过DHCPv6在另一机器上对该网段分配地址并公告默认网关,配置路由,实现网络的互联。

基本链路连接如下:

Subnet/64|———VMA<——–Tunnel——–>VMB———|Subnet/96

要完成的任务如下:

1、VMA需要开启对Subnet/96的NDP代理,并配置到Subnet/96段的路由

2、VMB需要在某个接口分配网段并公告默认网关,并配置默认路由

假设/64段为2001:db8:a:b::/64,被划分的/96段为2001:db8:a:b:c:d::/96,VMA在隧道上的地址为2001:db8:a:b:e::1/120,VMB在隧道上的地址为2001:db8:a:b:e::2/120,而实际中隧道上地址的设置可以随意,也可选择在公网上未被分配的地址

具体配置如下

VMA

1
2
3
#开启ndp proxy并配置ndppd
sysctl -w net.ipv6.conf.all.forwarding=1
sysctl -w net.ipv6.conf.all.proxy_ndp=1
1
2
3
4
5
6
7
8
#在/etc/ndppd.conf中加入下面配置
proxy eth0 {
...
rule 2001:db8:a:b:c:d::/96 {
static
}
...
}
1
2
#加入路由项
ip -6 route add 2001:db8:a:b:c:d::/96 via 2001:db8:a:b:e::2 dev tunnel

VMB

1
2
3
#配置地址及路由
ip -6 addr add 2001:db8:a:b:c:d::1/96 dev eth0
ip -6 route add ::/0 via 2001:db8:a:b:e::1 dev tunnel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#在/etc/dhcp/dhcpd.conf中加入下面配置,分配网段并设置DNS服务器
option dhcp6.next-hop code 242 = ip6-address;
subnet6 2001:db8:a:b:c:d::/96 {
range6 2001:db8:a:b:c:d::2 2001:db8:a:b:c:d:ffff:fffe;
option dhcp6.next-hop 2001:db8:a:b:e::1;
option dhcp6.name-servers 2001:db8:a:b:e::1;
allow unknown-clients;
}
#在/etc/radvd.conf中加入如下配置,使在dhcpd中公告的默认网关得以在客户端中应用
interface eth0
{
...
AdvOtherConfigFlag on;
AdvManagedFlag on;
...
}

通过上述配置,并在VMB启动dhcpd与radvd之后,客户端可以获得掩码为/128的地址,并正确地设置了网关和DNS。

若缺少radvd的辅助,客户端在获得地址后不能得到网关地址,从而在连接任意的地址之前均会发出Neighbor Solicitation报文。

另外,Android缺少对于DHCPv6客户端的支持,需要另外到商店中下载应用,然而并不是很好用。