拓扑如下所示,CE(Customer Edge)和BR(Border Relay)使用两台Ubuntu系统的虚拟机。
|----------| |----------|
| | ens33 ens33 | |
| CE |--------------------------------| BR |
| | 192.168.3.47 192.168.3.49 | |
|----------| |----------|
6rd-prefix
2001:db8::/32
6rd必须的几个参数取值如下:
6rdCEIPv4Address - 192.168.3.47
IPv4MaskLen - 32
6rdPrefix - 2001:db8::
6rdPrefixLen - 32
6rdBRIPv4Address - 192.168.3.49
按照RFC5969的定义,CE设备可通过DHCPv4协议的选项OPTION_6RD (212)来获取这些信息,其中6rdBRIPv4Address地址可为多个。但是,这需要CE的DHCP客户端在请求报文的Parameter Request List Option中,明确包括对OPTION_6RD参数的请求。
这里全部6rd信息都为手动配置。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_6RD | option-length | IPv4MaskLen | 6rdPrefixLen |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| 6rdPrefix |
| (16 octets) |
| |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 6rdBRIPv4Address(es) |
. .
. .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
6rd地址的格式如下,这里我们使用IPv4的掩码长度为32,即全部的IPv4地址都包括在6rd代理前缀中。
| n bits | o bits | m bits | 128-n-o-m bits |
+---------------+--------------+-----------+------------------------+
| 6rd prefix | IPv4 address | subnet ID | interface ID |
+---------------+--------------+-----------+------------------------+
|<--- 6rd delegated prefix --->|
CE配置:
# printf "%02x%02x:%02x%02x\n" 192 168 3 47
c0a8:032f
#
# ip address add 192.168.3.47 dev ens33
# ip link set ens33 up
#
# ip tunnel add 6rd-vif mode sit local 192.168.3.47
# ip tunnel 6rd dev 6rd-vif 6rd-prefix 2001:db8::/32 6rd-relay_prefix 192.168.3.49/32
# ip link set 6rd-vif up
#
# ip -6 addr add 2001:db8:c0a8:032f::1/64 dev 6rd-vif
#
# ip -6 route add 2001:db8::/32 dev 6rd-vif
# ip -6 route add default via ::192.168.3.49
6rd需要使用到以下的内核模块。
# lsmod | grep sit
sit 32768 0
tunnel4 16384 1 sit
ip_tunnel 32768 1 sit
查看CE的6rd相关配置:
# ip -d tunnel show 6rd-vif
6rd-vif: ipv6/ip remote any local 192.168.3.47 ttl inherit 6rd-prefix 2001:db8::/32 6rd-relay_prefix 192.168.3.49/32
#
# ip address
6: 6rd-vif@NONE: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
link/sit 192.168.3.47 brd 0.0.0.0
inet6 2001:db8:c0a8:32f::1/64 scope global
valid_lft forever preferred_lft forever
inet6 ::192.168.3.47/96 scope global
valid_lft forever preferred_lft forever
#
# ip -6 route
::/96 dev 6rd-vif proto kernel metric 256 pref medium
2001:db8:c0a8:32f::/64 dev 6rd-vif proto kernel metric 256 pref medium
2001:db8::/32 dev 6rd-vif metric 1024 pref medium
default via ::192.168.3.49 dev 6rd-vif metric 1024 pref medium
BR配置:
# printf "%02x%02x:%02x%02x\n" 192 168 3 49
c0a8:0331
# ip address add 192.168.3.49 dev ens33
# ip link set ens33 up
#
# ip tunnel add 6rd-vif mode sit local 192.168.3.49
# ip tunnel 6rd dev 6rd-vif 6rd-prefix 2001:db8::/32
# ip link set 6rd-vif up
#
# ip -6 addr add 2001:db8:c0a8:0331::1/64 dev 6rd-vif
#
# ip -6 route add 2001:db8::/32 dev 6rd-vif
查看BR的6rd相关配置:
# ip tunnel show 6rd-vif
6rd-vif: ipv6/ip remote any local 192.168.3.49 ttl inherit 6rd-prefix 2001:db8::/32
#
$ ip address
6: 6rd-vif@NONE: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
link/sit 192.168.3.49 brd 0.0.0.0
inet6 2001:db8:c0a8:331::1/64 scope global
valid_lft forever preferred_lft forever
inet6 ::192.168.3.49/96 scope global
valid_lft forever preferred_lft forever
#
# ip -6 route
::/96 dev 6rd-vif proto kernel metric 256 pref medium
2001:db8:c0a8:331::/64 dev 6rd-vif proto kernel metric 256 pref medium
2001:db8::/32 dev 6rd-vif metric 1024 pref medium
在CE设备上ping6设备BR的6rd地址。
# ping6 2001:db8:c0a8:0331::1 -c 3
PING 2001:db8:c0a8:0331::1(2001:db8:c0a8:331::1) 56 data bytes
64 bytes from 2001:db8:c0a8:331::1: icmp_seq=1 ttl=64 time=0.192 ms
64 bytes from 2001:db8:c0a8:331::1: icmp_seq=2 ttl=64 time=0.318 ms
64 bytes from 2001:db8:c0a8:331::1: icmp_seq=3 ttl=64 time=0.186 ms
--- 2001:db8:c0a8:0331::1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2045ms
rtt min/avg/max/mdev = 0.186/0.232/0.318/0.060 ms
查看报文,ICMP请求如下,注意IPv4头部协议号为41,表面封装为IPv6报文:
ICMP回复报文如下:
在CE设备上ping6设备BR的其他IPv6地址,首先在BR上创建一个虚拟的网桥接口,并配置IPv6地址2003::1。之后在CE上ping6此地址,这里使用配置的默认路由。
BR # ip link add dev br0 type bridge
BR # ip link set br0 up
BR # ip -6 addr add 2003::1/64 dev br0
CE # ping6 2003::1 -c 3
PING 2003::1(2003::1) 56 data bytes
64 bytes from 2003::1: icmp_seq=1 ttl=64 time=0.255 ms
64 bytes from 2003::1: icmp_seq=2 ttl=64 time=0.247 ms
64 bytes from 2003::1: icmp_seq=3 ttl=64 time=0.219 ms
--- 2003::1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2037ms
rtt min/avg/max/mdev = 0.219/0.240/0.255/0.015 ms
以下为ICMP请求报文:
以下为ICMP回复报文: