IPv6 rapid deployment(6rd)(RFC 5969)是一種無狀態隧道機制,它容許一個服務商在不要求升級已存在的IPv4接入網絡基礎設施的狀況下,輕巧安全的快速部署IPv6。固然這裏有一系列方法經過IPv4來承載IPv6,6rd的方式尤爲成功,其主要在於他的實施是一個輕巧、天然地可擴展、有彈性且易於配置的無感知模式。6rd提供的服務是生產質量,使得全部的客戶和整個Internet看起彷佛是原生的本地IPv6網絡。linux
圖 1提供一個6rd做業的視圖
6rd由兩個主要的硬件組件組成,CE(Customer Equipment)路由器和BR(Border Relay)路由器。ios
CE路由器位置在服務商提供IPv4接入基礎設施的邊緣和爲這些終端用戶網絡提供IPv6通訊。來自於這些終端用戶的原生IPv6流量經過CE路由器封裝成IPv4,隧道鏈接到BR路由器和或直接送到相同6rd域的其餘CE路由器。反過來,經過BR路由器從Internet網接收到的封裝的6rd流量和來自其餘CE路由器的6rd流量將會被解封裝後,並轉發到最終用戶節點。算法
BR路由器提供CE路由器和IPv6網絡(公有網絡或私有網絡)二者之間的通訊。CE和BR路由二者都是雙棧(IPv4和IPv6)設備,在BR和CE二者之間能夠僅是IPv4。
在CE路由器,若是IPv6報文的目的地址和本地配置的6rd前綴匹配,這個報文會被認爲是本地6rd域的一部分,須要被轉發到其餘CE路由器。在這種狀況下,IPv4地址嵌入在IPv6的目的地址中,做爲6rd隧道的目的地址使用。本地WAN接口的IPv4地址將被用做6rd隧道的源地址,這個IPv6報文直接封裝成IPv4。若是IPv6目的地址和本地配置的6rd前綴不匹配就另說,若是這個報文不屬於本地6rd域,這個報文將會經過6rd隧道隧穿到BR路由器。在這種狀況下,在CE路由器本地配置的BR IPv4地址將被用做封裝做報文的目的地址。api
圖2展現的網絡中,CE路由器給他的網站提供一個範圍的前綴。這些前綴稱做6rd委託前綴和IPv6域主機配置協議(DHCPv6)的PD前綴類似。一個6rd委託前綴有如下幾個元素組成:安全
示例2:
很常見的是挑戰服務提供商受限於現有服務提供者,致使在6rd地址空間壓縮IPv4地址是不行的。由於這個,整個IPv4地址的32bit須要插入6rd IPv6地址,以下圖4所示:
區域註冊機構(RIPE、ARIN等)正在研究一種模型,其中一個服務提供商經過6rd提供IPv6服務能夠得到一個/29的IPv6地址分配,來替代小於 /32的地址分配。這將爲每位終點用戶網提供3bit用於分割本地網絡,從而爲每一個終點用戶提供8個子網。網絡
6rd地址隧道終點的肯定:
當目的地是6rd域地址的本機IPv6報文到達一個6rd CE路由器,它將被送到適當的目標CE路由器。6rd隧道的目的IPv4地址經過如下規則來獲取:ide
本地路由用於同一6rd域的CE和BR路由器之間。爲了實現高可用性,能夠配置一個以上的BR路由器。爲了達到這個目的,BR路由器必須使用在IPv4內部網關協議(IGP)中通告IPv4任播地址,致使6rd域中有多個6rd BR路由器。CE路由器將會基於IGP的選舉規則使用最近的BR路由器。
服務提供商必須向IPv6 Internet宣佈已註冊的IPv6地址範圍(第6個委託前綴),以實現全球可達性。oop
本節逐步說明數據包如何從CE路由器發送到另外一個CE路由器或IPv6 Internet並返回(圖7)。
測試
若是IPv6目標地址落在本地配置的6rd域前綴的範圍內,而後須要轉發到另外一個6rd CE路由器,則將在面向客戶的接口上本地接收IPv6流量(圖8)。
這個IPv6報文封裝在IPv4標記頭中。嵌入的IPv4地址複製到IPv4目的地址中。本地配置的隧道源地址複製爲IPv4源地址。IPv4的隧道頭的協議字段的類型被設置爲41(IPv6 in IPv4)。
隧道化IPv6數據包的IPv4數據包經過遵循IPv4路由表的IPv4域轉發到目標CE路由器。
目的CE路由器接收這個隧道化的IPv6報文,而後將IPv4頭移除。出於安全措施,IPv4頭中的源地址將要和嵌入在IPv6頭中的IPv4地址作比較。若是不匹配,報文將會被丟棄。若是匹配,這個IPv6報文將會被視爲一個本地IPv6報文轉發到CE LAN側的IPv6目標地址去。
在CE到IPv6 Internet的場景中,IPv6流量在面向用戶側的接口時本地接收的。IPv6目的地址沒有填入本地配置的6rd前綴的範圍,這意味着它不針對本地6rd域內的目標。在這種狀況下,報文須要被轉發到6rd BR路由器。
在CE到CE的場景中,IPv6頭封裝在IPv4頭中。然而,不一樣之處在於本地配置的BR IPv4地址複製到IPv4的目的地址。此外,本地配置的隧道源地址複製到IPv4源地址。協議字段設置爲41(IPv4中的IPv6),而後,按照正常的IPv4路由表將封裝的數據包經過IPv4域轉發到BR路由器。
BR路由器接收IPv4數據包並刪除IPv4標頭封裝。 將IPv4標頭源地址與嵌入在IPv6源地址中的IPv4地址進行比較。 若是地址不匹配,則丟棄該數據包。 不然,IPv6數據包將本地轉發到IPv6目標地址。
在從IPv6 Internet到CE的場景中,BR路由器從其面向IPv6網絡的接口之一接收本地IPv6數據包。 IPv6目標地址屬於本地配置的6rd前綴的範圍,這意味着它以本地第6個域內的目標爲目標。 在這種狀況下,須要將數據包轉發到適當的CE路由器(圖9)。
6rd BR路由器會將IPv6數據包封裝在IPv4標頭中。 IPv6標頭中嵌入的IPv4地址用做IPv4目標地址。 隧道的源地址將是在6rd BR路由器的6rd隧道接口上配置的IPv4地址。 標頭中的IPv4數據包的協議字段設置爲41(IPv4中的IPv6)。 而後,數據包由第六BR路由器使用傳統的IPv4轉發路徑轉發到第六CE路由器。
當CE路由器接收到隧道化的6rd IPv4報文,爲了暴露封裝的IPv6報文將會移除IPv4頭。首先,IPv4頭源地址將和本地配置的6rd BR IPv4地址進行比較。若是地址不匹配報文將被丟棄。若是匹配,則6rd CE路由器經過IPv6將IPv6報文本地轉發到IPv6目標地址。
6rd CE路由器委派的IPv6地址是從本地WAN接口IPv4地址與第六個前綴組合得出的。 能夠手動配置地址。可是,一般會經過DHCPv4從鏈接的服務提供商接收IPv4地址。
除了此IPv4地址,還必須配置其餘信息。
BR Router IPv6 general-prefix DELEGATED_PREFIX 6rd Tunnel0 interface Loopback0 ip address 10.0.0.1 255.255.255.0 ! interface Tunnel0 tunnel source Loopback0 tunnel mode IPv6ip 6rd tunnel6rd IPv4 prefix-len 8 tunnel6rd prefix 2001:db80::/32 IPv6 address DELEGATED_PREFIX::/128 anycast ! IPv6 route 2001:db80::/32 Tunnel0 IPv6 route ::/0 2001:babe::1 CE Router IPv6 general-prefix DELEGATED_PREFIX6rd Tunnel0 interface Dialer0 ip address dhcp ! (10.1.1.1) ! interface Tunnel0 tunnel source Dialer0 tunnel mode IPv6ip 6rd tunnel 6rd IPv4 prefix-len 8 tunnel 6rd prefix 2001:db80::/32 tunnel 6rd br 10.1.3.1 IPv6 address DELEGATED_PREFIX ::/128 anycast ! interface Ethernet0 IPv6 address DELEGATED_PREFIX ::/64 eui-64 ! IPv6 route 2001:db80::/28 Tunnel0 IPv6 route ::/0 Tunnel0, 2001:db80:a000:0010:: IPv6 route 2001:db80:0:A00::/56 Null0
三臺Linux虛擬構建網絡拓撲。
#配置CE設備 ip address add 192.168.110.27 dev eth0 ip link set eth0 up ip tunnel add kali006rd mode sit local 192.168.110.27 ip tunnel 6rd dev kali006rd 6rd-prefix 2012:db8::/32 6rd-relay_prefix 192.168.147.136/32 ip link set kali006rd up ip -6 addr add 2012:db8:c0a8:6e1b::1/64 dev kali006rd ip -6 route add 2012:db8::/32 dev kali006rd ip -6 route add default via ::192.168.147.136 #配置ISP ip address add 192.168.147.1 dev eth0 ip link set eth0 up ip address add 192.168.110.1 dev eth1 ip link set eth1 up #配置BR設備 ip address add 192.168.147.136 dev eth0 ip link set eth0 up ip tunnel add kali006rd mode sit local 192.168.147.136 ip tunnel 6rd dev kali006rd 6rd-prefix 2012:db8::/32 ip link set kali006rd up ip -6 addr add 2012:db8:c0a8:9388::1/64 dev kali006rd ip -6 route add 2012:db8::/32 dev kali006rd #在CE設備測試連通性: root@kalimk:~# ping6 2012:db8:c0a8:9388::1 -c 5 PING 2012:db8:c0a8:9388::1(2012:db8:c0a8:9388::1) 56 data bytes 64 bytes from 2012:db8:c0a8:9388::1: icmp_seq=1 ttl=64 time=0.759 ms 64 bytes from 2012:db8:c0a8:9388::1: icmp_seq=2 ttl=64 time=1.64 ms 64 bytes from 2012:db8:c0a8:9388::1: icmp_seq=3 ttl=64 time=0.769 ms 64 bytes from 2012:db8:c0a8:9388::1: icmp_seq=4 ttl=64 time=0.606 ms 64 bytes from 2012:db8:c0a8:9388::1: icmp_seq=5 ttl=64 time=0.710 ms --- 2012:db8:c0a8:9388::1 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4065ms rtt min/avg/max/mdev = 0.606/0.897/1.642/0.376 ms #在BR設備建立一個IPv6/IPv4 Internet ip link del kaliBr0 ip link add dev kaliBr0 type bridge ip link set kaliBr0 up ip -6 addr add 2233:ccc::1/64 dev kaliBr0 #在CE設備測試連通性: root@kalimk:~# ping6 2233:ccc::1 PING 2233:ccc::1(2233:ccc::1) 56 data bytes 64 bytes from 2233:ccc::1: icmp_seq=1 ttl=64 time=0.723 ms 64 bytes from 2233:ccc::1: icmp_seq=2 ttl=64 time=0.424 ms 64 bytes from 2233:ccc::1: icmp_seq=3 ttl=64 time=0.722 ms 64 bytes from 2233:ccc::1: icmp_seq=4 ttl=64 time=1.69 ms 64 bytes from 2233:ccc::1: icmp_seq=5 ttl=64 time=0.887 ms 64 bytes from 2233:ccc::1: icmp_seq=6 ttl=64 time=1.62 ms 64 bytes from 2233:ccc::1: icmp_seq=7 ttl=64 time=0.603 ms 64 bytes from 2233:ccc::1: icmp_seq=8 ttl=64 time=0.642 ms 64 bytes from 2233:ccc::1: icmp_seq=9 ttl=64 time=0.596 ms 64 bytes from 2233:ccc::1: icmp_seq=10 ttl=64 time=0.677 ms --- 2233:ccc::1 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 9138ms rtt min/avg/max/mdev = 0.424/0.858/1.687/0.413 ms
注意:CE和BR之間,只能存在IPv4網絡,須要將網卡的IPv6都禁用掉。
個人環境是KaliLinux:
參考連接:
https://blog.51cto.com/enderjoe/2367434?source=dra
https://blog.csdn.net/qq_39628285/article/details/105230013?utm_medium=distribute.pc_relevant