這篇文章簡單的介紹一下IPv6技術,其中會涉及到IPv6的表示格式(格式和IPv4有很大不同,剛開始可能不習慣)、在Cisco路由接口上配 置IPv6地址(普通靜態配置和靜態EUI-64配置)、IPv6靜態和動態路由配置,最後會介紹一個IPv4到IPv6過渡階段的技術(IPv6- Over-IPv4隧道)。
文章目錄
- [*1*].IPv6概述
- IPv6地址格式
- IPv6地址類型
- [*2*].Cisco路由器配置IPv6地址
- 手工靜態配置
- 靜態EUI-64配置
- [*3*].IPv6路由配置實例
- 如何配置IPv6靜態路由
- 如何配置IPv6 RIPng
- [*4*].配置IPv6-Over-IPv4隧道實例
[*1*].IPv6概述
* IPv6地址格式
IPv6地址一共有128位長度(IPv4一共是32位長度),每16位為一個分組,每個16位分組寫成4個十六進制數,一共分為8組,中間用冒號分隔,下面舉個例子:
|
|
|
上面這個就是一個完整的IPv6地址格式,一共用冒號分為8組,每組4個十六進制數,每個十六進制數佔4位,那麼4個十六進制數字就是4X4=16位,即每組是16位,8組就是128位。
從上面這個例子看起來IPv6地址非常冗長,不過IPv6有下面幾種簡寫形式:
1.IPv6地址中每個16位分組中前導零位可以去除做簡化表示,但每個分組必須保留一位數字,請看下面的例子。
1
/*完整版的IPv6地址*/
2
2001:3CA1:010F:001A:121B:0000:0000:0010
3
4
/*
5
* 簡寫去除前導0簡寫形式,可以看到第三個和第四個分組去除了前導0,
6
* 第七個和第八個分組因為全部是0,但必須保留一位數字。
7
* 這還不是最簡寫形式,請接着往下看。
8
*/
9
2001:3CA1:10F:1A:121B:0:0:10
2.可以將冒號十六進制格式中相鄰的連續零位合併,用雙冒號表示”::”,並且雙冒號在地址格式中只能出現一次,請看下面的例子。
1
/*完整版的IPv6地址*/
2
2001:3CA1:010F:001A:121B:0000:0000:0010
3
4
/*去除前導零並將連續的零位合併。*/
5
2001:3CA1:10F:1A:121B::10
6
7
/*另一個完整的IPv6地址*/
8
2001:0000:0000:001A:0000:0000:0000:0010
9
10
/*
11
* 可以看到雖然第二組和第三組也是連續的零位,
12
* 但雙冒號只能在IPv6的簡寫中出現一次,運用到了後面更長的連續零位上。
13
* 這個地址還可以簡寫成這樣2001::1A:0:0:0:10。
14
*/
15
2001:0:0:1A::10
16
17
/*
18
* 需要將上面這個地址還原也很簡單,只要看存在數字的分組有幾個,
19
* 然後就能推測出雙冒號代表了多少個連續的零位分組。
20
* 一共有5個保留了數字的分組,那麼連續冒號就代表了3個連續的零位分組。
21
*/
22
23
/*
24
* 需要注意的是,只有前導零位可以去除,如果這個地址寫成下面這樣就是錯誤的,
25
* 注意最後一組,不能去除1後面的那個0。
26
*/
27
2001:0:0:1A::1 /*這是錯誤的寫法*/
* IPv6地址類型
IPv6中的地址有單播地址(Unicast)、組播地址(Multicast)、任意播地址(Anycast)除此之外還包含一些特殊的地址,下面將介紹到。
1.全局單播地址
全局單播地址是全球可路由的,可以分配給任何個人和機構,IANA組織當前規定全局單播地址是2000::/3,然後IANA再將這個地址空間逐級分下去,/23是註冊機構前綴,/32是ISP運營商前綴,/48是站點前綴,/64是子網前綴。
有一點很重要,IPv6中沒有廣播地址。
2.組播地址
IPv6組播地址的格式是FF00::/8,其作用與IPv4中的組播地址相同。
3.私有地址
IPv6中的私有地址和IPv4的私有地址意義相同,都是用作本地使用,只具有本地意義,IPv6中有兩種私有地址:
- 鏈路本地地址(Link-local addresses):當兩個支持IPv6特性的路由器直連時,直連的接口會自動給自己分配一個鏈路本地地址,其主要作用是在沒有管理員配置時設備就能互 相通信。鏈路本地地址中的前10bit是FE80(轉換成二進制就是1111 1110 10,一共十位),後54bit全0,最後64bit是EUI-64地址(稍後會介紹到),也就是説鏈路本地地址的前綴是FE80::/64。
- 站點本地地址(Site-local addresses):站點本地地址現在已經被廢除。出於歷史原因,這裏還是簡單的介紹一下,站點本地地址的前10bit是FEC0,後54位是0,最後 64位是EUI-64地址,因為IPv6地址空間很大,所以這種類型的私有地址沒有了存在的必要。
4.迴環地址
IPv6中只有一個迴環地址”0:0:0:0:0:0:0:1″,簡寫成”::1″,IPv6的迴環地址功能和IPv4的127.0.0.0/8網段的迴環地址功能是一樣的。
5.不確定地址
IPv4中的不確定地址是用”0.0.0.0″表示,在IPv6中不確定地址使用”0:0:0:0:0:0:0:0″表示,簡寫成”::”。
[*2*].Cisco路由器配置IPv6地址
* 手工靜態配置
在GNS3中用一個小實例來簡單演示一下的IPv6手工靜態配置(必須在模擬器中給每個路由器添加至少一個快速以太網模塊,否則兩端會無法ping通,稍後介紹為什麼):
R1配置:
1
R1(config)#int s 0/0
2
/*
3
* 後面的/64代表子網掩碼位,這是簡寫形式,這個地址的完整形式應該是:
4
* 2008:0012:0012:0012:0000:0000:0000:0001/64
5
*/
6
R1(config-if)#ipv6 address 2008:12:12:12::1/64
7
R1(config-if)#no shut
8
R1(config-if)#end
9
R1#
R2配置:
1
R2(config)#int s 0/1
2
R2(config-if)#ipv6 address 2008:12:12:12::2/64
3
R2(config-if)#no shut
4
R2(config-if)#end
5
6
/*Ping測試,Ping一下R1*/
7
R2#ping 2008:12:12:12::1
8
9
Type escape sequence to abort.
10
Sending 5,100-byte ICMP Echos to 2008:12:12:12::1,timeout is 2seconds:
11
!!!!! /*成功Ping通*/
12
13
/*查看IPv6路由表*/
14
R2#show ipv6 route
15
IPv6 Routing Table - 4 entries
16
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
17
U - Per-user Static route
18
....
19
C 2008:12:12:12::/64 [0/0]
20
via ::, Serial0/1
21
L 2008:12:12:12::2/128 [0/0]
22
via ::, Serial0/1
23
L FE80::/10 [0/0]
24
via ::, Null0
25
L FF00::/8 [0/0]
26
via ::, Null0
27
R2#
* 靜態EUI-64配置
首先還是通過一個實例來配置一下EUI-64,然後再介紹EUI-64是怎麼得來的。
注意:在GNS3中配置EUI-64的時候,必須給兩個路由添加上至少一個快速以太網接口。這是GNS3的一個小缺陷,因為真實路由器默認都是存在以太網接口的,而EUI-64地址需要使用以太網接口的MAC地址。
R1配置:
1
R1(config)#int s 0/0
2
/*
3
* 靜態EUI-64的配置方法,前64位手工指定,
4
* 後64位地址使用eui-64地址來代替。
5
*/
6
R1(config-if)#ipv6 add 2008:12:12:12::/64 eui-64
7
R1(config-if)#no shut
8
R1(config-if)#end
9
R1#
R2配置:
1
R2(config)#int s 0/1
2
R2(config-if)#ipv6 add 2008:12:12:12::/64 eui-64
3
R2(config-if)#no shut
4
R2(config-if)#end
5
R2#
配置完成後,查看一下R2的S0/1接口到底被分配了一個什麼樣的地址:
1
R2#show ipv6 interface s 0/1
2
Serial0/1 is up, line protocol is up
3
/*這裏是這個接口的鏈路本地地址*/
4
IPv6 is enabled, link-local address is FE80::CE01:6FF:FE04:10
5
6
/*這個地方顯示的就是我們配置的靜態EUI-64地址*/
7
Global unicast address(es):
8
2008:12:12:12:CE01:6FF:FE04:10, subnet is 2008:12:12:12::/64 [EUI]
9
Joined group address(es):
10
FF02::1
11
FF02::2
12
FF02::1:FF04:10
13
MTU is 1500 bytes
14
ICMP error messages limited to one every 100 milliseconds
15
ICMP redirects are enabled
16
ND DAD is enabled, number of DAD attempts: 1
17
ND reachable time is 30000 milliseconds
18
R2#
從上面的輸出中可以看到R2的S0/1接口的IPv6地址是:
2008:12:12:12:CE01:6FF:FE04:10/64
這個地址的前64位是我們靜態指定的(2008:12:12:12),後面64位(CE01:6FF:FE04:10)是按照下面的方法得到的:
假設給路由器的fa1/0配置靜態EUI-64地址,fa1/0接口的MAC地址是CE0106040010,前64位我們靜態指定了 (2008:12:12:12),後面的64位會使用這個接口的MAC地址中間插入FFFE得出(CE0106 FFFE 040010),用冒號按4位十六進制一組分隔就是(CE01:06FF:FE04:0010),寫成簡寫形式就是 (CE01:6FF:FE04:10),這就是上面的IPv6地址的由來。
但是細心的朋友可能發現了,我們配置的R1和R2之間的連線是串行線路s0/0-s0/1,串行接口是沒有MAC地址的,實際上,串行接口上配置 IPv6地址時,串行接口會使用路由器上最小的那個以太網接口的MAC地址來計算EUI-64地址(這就是為什麼我要在GNS3中給R1和R2分別添加一 個fa1/0接口的原因,經過我的測試,如果不添加這個以太網接口,兩邊的路由會出現”鏈路本地地址”衝突的情況。也就是説,在GNS3中路由器沒有添加 以太網接口時,默認情況下會兩邊使用相同的MAC地址計算EUI-64地址,這種情況在真實環境是不會發生的)
[*3*].IPv6路由配置實例
* 如何配置IPv6靜態路由
使用GNS3配置下面的拓撲(R1、R2、R3上面都必須添加一個以太網接口,這是GNS3的一個小缺陷,上面”靜態EUI-64配置”中已經解釋過。):
圖中,R1開啓了一個迴環接口,這個迴環接口下配置了4個IPv6地址,和IPv4不同的是,IPv6在一個接口下配置多個IP地址的時候不需要添 加Secondary參數;R3也開啓了一個迴環接口;在R1和R3上使用默認路由指向R2,在R2上使用路由匯聚,將去往R1迴環接口的4個IPv6地 址匯聚成一條靜態路由,R2上另外一條靜態路由去往R3的迴環接口。請看下面的配置:
R1配置:
1
/*路由默認不支持IPv6路由,需要用這條命令開啓*/
2
R1(config)#ipv6 unicast-routing
3
4
/*配置與R2相連的串口IPv6地址*/
5
R1(config)#int s 0/0
6
R1(config-if)#ipv6 add 2008:12:12:12::1/64
7
R1(config-if)#no shut
8
9
/*在R1的lo0接口上配置了4個IPv6地址*/
10
R1(config)#int lo 0
11
R1(config-if)#ipv6 add 2008:1:1:8::1/64
12
R1(config-if)#ipv6 add 2008:1:1:9::1/64
13
R1(config-if)#ipv6 add 2008:1:1:A::1/64
14
R1(config-if)#ipv6 add 2008:1:1:B::1/64
15
R1(config-if)#no shut
16
R1(config-if)#exit
17
18
/*
19
* 使用默認路由指向R2,
20
* 其中的::/0等價於0:0:0:0:0:0:0:0/0。
21
*/
22
R1(config)#ipv6 route ::/0 2008:12:12:12::2
23
R1(config)#end
24
R1#
R2配置:
1
R2(config)#ipv6 unicast-routing
2
R2(config)#int s 0/0
3
R2(config-if)#ipv6 add 2008:12:12:12::2/64
4
R2(config-if)#no shut
5
R2(config-if)#int s 0/1
6
R2(config-if)#ipv6 add 2008:23:23:23::2/64
7
R2(config-if)#no shut
8
R2(config-if)#exit
9
10
/*指向R3迴環接口的靜態路由*/
11
R2(config)#ipv6 route 2008:3:3:3::/64 2008:23:23:23::3
12
13
/*
14
* 指向R1迴環接口的匯聚靜態路由,路由的匯聚和IPv4是一樣的,
15
* R1的迴環接口上面的4個IPv6地址中的8、9、A、B都是十六進制數,
16
* 將他們轉換成二進制就是:
17
* 8=10 00
18
* 9=10 01
19
* A=10 10
20
* B=10 11
21
* 二進制中前面兩位是相同的,所以前綴長度64減去後面兩位不同的,就是62了。
22
*/
23
R2(config)#ipv6 route 2008:1:1:8::/62 2008:12:12:12::1
24
R2(config)#end
25
R2#
R3配置:
1
R3(config)#ipv6 unicast-routing
2
R3(config)#int s 0/1
3
R3(config-if)#ipv6 add 2008:23:23:23::3/64
4
R3(config-if)#no shut
5
R3(config-if)#int lo 0
6
R3(config-if)#ipv6 add 2008:3:3:3::1/64
7
R3(config-if)#no shut
8
R3(config-if)#exit
9
/*使用默認靜態路由指向R2*/
10
R3(config)#ipv6 route ::/0 2008:23:23:23::2
11
R3(config)#end
12
R3#
13
14
/*測試Ping R1迴環接口任意一個IP都可以通*/
15
R3#ping 2008:1:1:A::1
16
17
Type escape sequence to abort.
18
Sending 5, 100-byte ICMP Echos to 2008:1:1:A::1, timeout is 2 seconds:
19
!!!!!
配置完成後全網測試都能Ping通。不要關閉這個實驗,我們在這個實驗的基礎上繼續配置下面的RIPng動態路由。
* 如何配置IPv6 RIPng
RIPng(Routing Information Protocol Next Generation,RIP下一代版本),是針對IPv6的RIP版本,和RIPv2非常相似,是一個距離矢量的路由協議,最大跳數是15,使用水平分 隔和毒性反轉來阻止路由環路。RIPng使用多播地址FF02::9作為目的更新地址,發送更新使用UDP協議的521端口。
在上面一個實例的基礎上,刪除R1、R2、R3上面配置的靜態路由,然後配置RIPng。
R1配置:
1
/*刪除上一個實例中配置的默認路由*/
2
R1(config)#no ipv6 route ::/0
3
4
/*啓用RIPng協議,後面的test1是自定義的名稱,只具有本地意義*/
5
R1(config)#ipv6 router rip test1
6
R1(config-rtr)#exit
7
8
R1(config)#int lo 0
9
10
/*和IPv4的RIP不同,RIPng是直接在接口下開啓RIPng*/
11
R1(config-if)#ipv6 rip test1 enable
12
R1(config-if)#int s 0/0
13
R1(config-if)#ipv6 rip test1 enable
14
R1(config-if)#end
15
R1#
R2配置:
R3配置:
1
R2(config)#no ipv6 route 2008:1:1:8::/62
2
R2(config)#no ipv6 route 2008:3:3:3::/64
3
R2(config)#ipv6 router rip test2
4
R2(config-rtr)#int s 0/0
5
R2(config-if)#ipv6 rip test2 enable
6
R2(config-if)#int s 0/1
7
R2(config-if)#ipv6 rip test2 enable
8
R2(config-if)#end
9
R2#
|
|
|
|
|
|
網絡收斂後,在R3上查看IPv6路由表:
3
R3(config-rtr)#int s 0/1
4
R3(config-if)#ipv6 rip test3 enable
5
R3(config-if)#int lo 0
6
R3(config-if)#ipv6 rip test3 enable
7
R3(config-if)#end
8
R3#
[*4*].配置IPv6-Over-IPv4隧道實例
1
R3#show ipv6 route
2
IPv6 Routing Table - 12 entries
3
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
4
U - Per-user Static route
5
....
6
/*這四條R開頭的是R1的迴環接口路由條目*/
7
R 2008:1:1:8::/64 [120/3]
8
via FE80::CE01:DFF:FE4C:10, Serial0/1
9
R 2008:1:1:9::/64 [120/3]
10
via FE80::CE01:DFF:FE4C:10, Serial0/1
11
R 2008:1:1:A::/64 [120/3]
12
via FE80::CE01:DFF:FE4C:10, Serial0/1
13
R 2008:1:1:B::/64 [120/3]
14
via FE80::CE01:DFF:FE4C:10, Serial0/1
15
16
C 2008:3:3:3::/64 [0/0]
17
via ::, Loopback0
18
L 2008:3:3:3::1/128 [0/0]
19
via ::, Loopback0
20
21
/*這裏是R1和R2相連的那個網段的路由條目*/
22
R 2008:12:12:12::/64 [120/2]
23
via FE80::CE01:DFF:FE4C:10, Serial0/1
24
C 2008:23:23:23::/64 [0/0]
25
via ::, Serial0/1
26
L 2008:23:23:23::3/128 [0/0]
27
via ::, Serial0/1
28
L FE80::/10 [0/0]
29
via ::, Null0
30
L FF00::/8 [0/0]
31
via ::, Null0
32
R3#
33
34
/*
35
* RIPng的條目和RIP有很大不同,其中跳數比IPv4下運行RIP多1,
36
* 在默認情況下,進入路由表之前RIPng度量值就已經加了1。
37
*
38
* 另外可以看到,via也就是下一跳地址不是鄰居的接口IPv6地址,
39
* 這個地址是鄰居接口的本地鏈路地址,本地鏈路地址上面有介紹到,
40
* 是使用FE80::/64前綴加上EUI-64地址得到的。
41
*/
在下面這個拓撲圖中,R1和R3上面開啓了迴環接口來模擬IPv6網絡,R1-R2-R3相連的串行接口運行的是IPv4網絡,各設備的IP地址如圖所示。
(同上面幾個實例一樣,一定不要忘記在GNS3中給各個路由添加一個以太網接口,雖然這裏並沒有使用這個以太網接口,但是鏈路本地地址的EUI-64部分需要這個以太網接口的MAC地址)
對於這樣的拓撲結構,兩端運行的是IPv6網絡,中間是IPv4網絡,可以使用一種叫做Tunneling(隧道)的技術,來實現兩端的IPv6網絡能夠跨越IPv4網絡進行通信:
R1配置:
1
/*開啓IPv6支持*/
2
R1(config)#ipv6 unicast-routing
3
R1(config)#int lo 0
4
R1(config-if)#ipv6 add 2008:1:1:1::1/64
5
R1(config-if)#no shut
6
R1(config-if)#int s 0/0
7
R1(config-if)#ip add 12.1.1.1 255.255.255.0
8
R1(config-if)#no shut
9
R1(config-if)#exit
10
11
/*配置去往R2的IPv6默認路由*/
12
R1(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.2
13
14
/*創建一個隧道接口*/
15
R1(config)#int tunnel 0
16
17
/*隧道的源IP地址是R1的s0/0*/
18
R1(config-if)#tunnel source 12.1.1.1
19
20
/*
21
* 隧道的目的IP地址是R3的s0/1,為了保證隧道兩端能夠正常通信,
22
* 隧道的源和目的必須是路由可達的(IPv4的路由要可達)。
23
*/
24
R1(config-if)#tunnel destination 23.1.1.3
25
26
/*
27
* 配置隧道模式,ipv6ip就是IPv6-Over-IPv4模式,
28
* 也就是將IPv6的包封裝在IPv4的包中。
29
*/
30
R1(config-if)#tunnel mode ipv6ip
31
32
/*給隧道接口配置一個IPv6地址*/
33
R1(config-if)#ipv6 add 2008:13:13:13::1/64
34
R1(config-if)#exit
35
36
/*配置IPv6默認路由,指向R3上面的隧道接口地址*/
37
R1(config)#ipv6 route ::/0 2008:13:13:13::3
38
R1(config)#end
39
R1#
R2配置:
1
R2(config)#int s 0/0
2
R2(config-if)#ip add 12.1.1.2 255.255.255.0
3
R2(config-if)#no shut
4
R2(config-if)#int s 0/1
5
R2(config-if)#ip add 23.1.1.2 255.255.255.0
6
R2(config-if)#no shut
7
R2(config-if)#end
8
R2#
R3配置:
1
R3(config)#ipv6 unicast-routing
2
R3(config)#int s 0/1
3
R3(config-if)#ip add 23.1.1.3 255.255.255.0
4
R3(config-if)#no shut
5
R3(config-if)#int lo 0
6
R3(config-if)#ipv6 add 2008:3:3:3::3/64
7
R3(config-if)#no shut
8
R3(config-if)#exit
9
R3(config)#ip route 0.0.0.0 0.0.0.0 23.1.1.2
10
R3(config)#int tunnel 0
11
R3(config-if)#tunnel source 23.1.1.3
12
R3(config-if)#tunnel destination 12.1.1.1
13
R3(config-if)#tunnel mode ipv6ip
14
R3(config-if)#ipv6 add 2008:13:13:13::3/64
15
R3(config-if)#exit
16
R3(config)#ipv6 route ::/0 2008:13:13:13::1
17
R3(config)#end
18
R3#
配置完成後在R3上面Ping測試:
1
/*Ping R1的隧道地址,成功*/
2
R3#ping 2008:13:13:13::1
3
4
Type escape sequence to abort.
5
Sending 5, 100-byte ICMP Echos to 2008:13:13:13::1, timeout is 2 seconds:
6
!!!!!
7
Success rate is 100 percent (5/5), round-trip min/avg/max = 28/59/76 ms
8
9
/*Ping R1的迴環接口地址,成功*/
10
R3#ping 2008:1:1:1::1
11
12
Type escape sequence to abort.
13
Sending 5, 100-byte ICMP Echos to 2008:1:1:1::1, timeout is 2 seconds:
14
!!!!!
15
Success rate is 100 percent (5/5), round-trip min/avg/max = 56/92/148 ms
16
17
/*Ping R1的串口地址,成功*/
18
R3#ping 12.1.1.1
19
20
Type escape sequence to abort.
21
Sending 5, 100-byte ICMP Echos to 12.1.1.1, timeout is 2 seconds:
22
!!!!!
23
Success rate is 100 percent (5/5), round-trip min/avg/max = 48/91/140 ms
24
R3#
IPv6-Over-IPv4隧道實驗完成,兩端的IPv6網絡可以穿越IPv4網絡進行通信。