IPv6 Rapid Deployment, IPv6 6rd初探

IPv6 Rapid Deployment: Provide IPv6 Access to Customers over an IPv4-Only Network

原文地址:https://www.cisco.com/c/en/us/products/collateral/ios-nx-os-software/enterprise-ipv6-solution/whitepaper_c11-665758.htmlhtml

1、你將會學到什麼?

IPv6 rapid deployment(6rd)(RFC 5969)是一種無狀態隧道機制,它容許一個服務商在不要求升級已存在的IPv4接入網絡基礎設施的狀況下,輕巧安全的快速部署IPv6。固然這裏有一系列方法經過IPv4來承載IPv6,6rd的方式尤爲成功,其主要在於他的實施是一個輕巧、天然地可擴展、有彈性且易於配置的無感知模式。6rd提供的服務是生產質量,使得全部的客戶和整個Internet看起彷佛是原生的本地IPv6網絡。linux

  1. 本文提出:
    • 6rd技術描述
    • 6rd部署場景
1.1 6rd做業概述:


圖 1提供一個6rd做業的視圖
6rd由兩個主要的硬件組件組成,CE(Customer Equipment)路由器和BR(Border Relay)路由器。ios

1.2 CE路由器(客戶邊緣路由器):

CE路由器位置在服務商提供IPv4接入基礎設施的邊緣和爲這些終端用戶網絡提供IPv6通訊。來自於這些終端用戶的原生IPv6流量經過CE路由器封裝成IPv4,隧道鏈接到BR路由器和或直接送到相同6rd域的其餘CE路由器。反過來,經過BR路由器從Internet網接收到的封裝的6rd流量和來自其餘CE路由器的6rd流量將會被解封裝後,並轉發到最終用戶節點。算法

1.3 BR路由器

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

1.4 6rd做業詳述:

  • 6rd的CE LAN側接口承載IPv6主機來回的流量
  • 多點隧道接口承載隧道封裝的往返於IPv6主機的流量
  • 用於6rd隧道封裝的是直接的IPv6-in-IPv4的封裝。IPv4協議字段被設置爲協議號:41。
6rd委託前綴

圖2展現的網絡中,CE路由器給他的網站提供一個範圍的前綴。這些前綴稱做6rd委託前綴和IPv6域主機配置協議(DHCPv6)的PD前綴類似。一個6rd委託前綴有如下幾個元素組成:安全

  • 服務商選擇一個IPv6前綴用於給定6rd部署的通用6rd服務提供前綴;
  • 爲CE路由器分配的IPv4地址,這個地址能夠是私有的也能夠是全局的;6rd不會必須使用IPv4地址整個32bit(在後面的文檔中進行解釋)。
    思考圖3中的示例:

    圖3的示例顯示了一下內容:
  • 服務提供商選擇的前綴是:2001:DB8::/32
  • 每個6rd CE路由器從10.0.0./8塊中使用一個IPv4地址。在6rd中,你能夠嵌入少於32bit的IPv4地址到6rd委託前綴。經過引入如下兩個概念使該動做成爲可能:
    1. IPv4通用前綴:在6rd域中的全部6rd CE路由器和BR路由器能夠共享一個通用IPv4前綴用於他們的IPv4地址塊。這個通用前綴已分配給6rd域中全部節點,所以不須要IPv6地址攜帶以標識隧道終點。在圖3的示例中,IPv4的通用前綴是10.0.0.0/8。
    2. IPv4通用後綴:全部6rd CE路由器和BR路由器能夠統一一個通用的IPv4地址尾部來標識隧道終點。例如,在這個示例中,假設IPv4的通用後綴是0.0.0.1/8。後綴的實現經過隧道傳輸終點將會使用(在CE路由器上,在6rd CE WAN側的接口地址是一個典型的IPv4地址,將被用做隧道源地址):
      • CE1:10.1.1.1
      • CE2:10.1.2.1
      • BR: 10.1.3.1
  • IPv4地址塊中的這些bit數是獨立的,在一個域中不一樣的6rd CE路由器和BR路由器能夠按照如下方式計算:
    32 bits - (IPv4通用前綴長度)-(IPv4通用後綴長度)
    在前面的示例中,值將會是:
    32 - 16 – 8 = 8。
    這8bit須要嵌入在6rd委託前綴中。
  • 所以,6rd委託前綴長度是服務商選擇的前綴長度和同一域中6rd CE路由器和BR路由器IPv4地址塊中不相同的bit數之和;在前面的示例中,這個長度是:
    32 + 8 = 40
  • 6rd的參數在表1中顯示

示例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

  • 肯定IPv6頭中攜帶的IPv4地址bit數,以下所示:
    (32bits)-(IPv4 通用前綴長度)-(IPv4通用後綴長度)
  • 肯定這些bit在IPv6頭中的位置。圖4展現了6rd域的前綴長度
  • 提取IPv6目的地址頭中攜帶的IPv4地址。如今知道6rd域地址和通用前綴長度就能夠執行提取。
  • 起始是IPv4的通用前綴,而後拼接從IPv6頭中提取的bit,最後拼接IPv4通用後綴。

    如今應用以前的算法到先前介紹的6rd網絡中。思考一個報文的目的主機是2001:DB8:0100::11,它是CE網站1的一個主機。
  • IPv6頭中攜帶的bit數是:
    (32bits)-(IPv4通用前綴長度)-(IPv4通用後綴長度)
    這兒,值是:32 – 16 = 8
  • 肯定了位於IPv6頭中的這些bit後,6rd本地域前綴長度是32
  • 提取IPv6頭中攜帶的IPv4地址的bit。如今你知道了位置和長度既可執行提取。結果是8位介於33至40bit之間的二進制值。示例以下:
    從2001:DB8:0100::11中32bit開始提取8bit,產生16進制0x01(IPv6地址是十六進制的)。二進制值是:00000001,在十進制編號系統中是1。
    • 重建遠程6rd CE路由器地址,以IPv4通用前綴開始,拼接從IPv6頭中提取的bit數,在拼接IPv4通用後綴。
      結果是:10.1.1.1,這個是CE1的地址。
      每當CE路由器收到目的地爲第六本地域內的目的地的IPv6數據包時,都會運行前面的第六隧道端點肯定。
      若是收到本地IPv6報文發往超出了6rd本地域的IPv6 Internet網,6rd BR路由器的IPv4地址將由手動輸入提供。
路由考慮:

本地路由用於同一6rd域的CE和BR路由器之間。爲了實現高可用性,能夠配置一個以上的BR路由器。爲了達到這個目的,BR路由器必須使用在IPv4內部網關協議(IGP)中通告IPv4任播地址,致使6rd域中有多個6rd BR路由器。CE路由器將會基於IGP的選舉規則使用最近的BR路由器。
服務提供商必須向IPv6 Internet宣佈已註冊的IPv6地址範圍(第6個委託前綴),以實現全球可達性。oop

2、一個6rd報文的生命週期

本節逐步說明數據包如何從CE路由器發送到另外一個CE路由器或IPv6 Internet並返回(圖7)。
測試

2.1 CE到CE:

若是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目標地址去。

2.2 CE到IPv6 Internet網

在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目標地址。

2.3 IPv6 Internet到CE

在從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目標地址。

3、配置:

6rd CE路由器委派的IPv6地址是從本地WAN接口IPv4地址與第六個前綴組合得出的。 能夠手動配置地址。可是,一般會經過DHCPv4從鏈接的服務提供商接收IPv4地址。
除了此IPv4地址,還必須配置其餘信息。

  • 6rd前綴:這是在整個6rd域中使用的通用前綴,它肯定數據包是針對6rd域內部仍是外部的目的地;
  • 6rd前綴長度:此參數提供有關第6個前綴中的值位的信息;
  • IPv4掩碼長度:此參數指定在全部6rd CE和BR路由器IPv4地址中共有多少位,所以能夠在站點的6rd前綴內壓縮。 在Cisco IOS軟件內,能夠壓縮來自IPv4前綴和後綴的位。
3.1 Cisco的基本配置:
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
3.2 Linux的配置步驟:

三臺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:

4、其餘考慮:

  • 最大傳輸單元和分片
  • 6rd和6to4
    6rd是自動6to4隧道機制(RFC 3056)的通常化。 它克服了6to4自動隧道機制最大的缺點:對全部6to4站點使用衆所周知的固定前綴2002 :: / 16。 該IPv6前綴由IPv6 Internet上的許多路由器(也稱爲6to4中繼路由器)注入。 直接後果是,流量可能不對稱,服務提供商沒法控制返回路徑的6to4中繼,而且當本機IPv6可用時,站點必須從新編號。 第六種機制經過容許每一個服務提供商爲每一個客戶使用惟一的IPv6前綴來消除這些缺點,從而有助於確保不須要其餘不受信任的第三方中繼。

參考連接:
https://blog.51cto.com/enderjoe/2367434?source=dra
https://blog.csdn.net/qq_39628285/article/details/105230013?utm_medium=distribute.pc_relevant

相關文章
相關標籤/搜索