Next Previous Contents

9. Configuring IPv6-in-IPv4 tunnels(設定遂道)

9.1 遂道的類型

將IPv6數據包傳輸到IPv4連結不只有一種可能.

Static point-to-point tunneling: 6bone (以點對點方式構建的遂道)

IPv6和IPv4的遂道定義在 RFC 2893 / Transition Mechanisms for IPv6 Hosts and Routers

必備條件:

Automatically tunneling(遂道操作自動化)

當一個節點直接同另一個節點進行連結,在得到節點IPv4地址之前,節點就會執行遂道操作自動化.

6to4-Tunneling(遂道操作)

它使用一個簡單的機制實行Tunneling(遂道操作) RFC 3056 / Connection of IPv6 Domains via IPv4 Clouds. 每個節點的global unique IPv4 (唯一全局地址)可以成為 6to4 tunnel 的終點(如果沒有IPv4防火牆限制通訊). 6to4-Tunneling(遂道操作)不是專用於一對一的遂道, 這個案例可以分開針對upstream and downstream (上級和下級)的遂道操作. 同樣,一個特別的IPv6地址會指出這個節點使用6to4-Tunnel同全世界的 IPv6 網路進行連結.

Generation of 6to4 prefix(產生6to4的前綴).

6to4 的地址像下面這樣定義:(源自 RFC 3056 / Connection of IPv6 Domains via IPv4 Clouds)


__________________________________________________________________ 
|   3+13   |    32     |    16  |            64 bits             | 
+---+------+-----------+--------+--------------------------------+ 
|  FP+TLA  |  V4ADDR   | SLA ID |           Interface ID         | 
|  0x2002  |           |        |                                | 
+---+------+-----------+--------+--------------------------------+
  

FP是global addresses(全局地址)的前綴. TLA是top level aggregator(最高層集) V4ADDR是IPv4全局唯一地址((in hexadecimal notation). SLA是子網路標緻(65536 local subnets possible). 這些前綴產生時的SLA 為"0000" 後綴是 "::1" 並分配到6to4 tunnel interface(界面).

6to4 upstream tunneling(上級遂道操作)

節點知道向哪裡發送含有IPv6數據包的IPv4數據包. 早期的6to4遂道,必需設定一個專用的上級路由器接受這種操作. 參照 NSayer's 6to4 information 裡的路由列印. 現在 6to4上級路由器可以使用anycast address 192.88.99.1 它由後台的路由協議控制. 參照 RFC 3068 / An Anycast Prefix for 6to4 Relay Routers

6to4 downstream tunneling(下級遂道操作)

The downstream (6bone -> your 6to4 enabled node) is not really fix and can vary from foreign host which originated packets were send to. There exist two possibilities: 它還沒有正式修正對數據包來源的確定, 存在以下兩種可能:

Possible 6to4 traffic(6to4的幾種通訊方法)

9.2 列印現存的tunnels(遂道)

使用 "ip"

用法:


# /sbin/ip -6 tunnel show [<device>] 

例子:


# /sbin/ip -6 tunnel show 
sit0: ipv6/ip remote any local any ttl 64 nopmtudisc 
sit1: ipv6/ip remote 195.226.187.50 local any ttl 64

使用 "route"

用法:


# /sbin/route -A inet6 

例子:只列印從sit0界面通過的遂道.


# /sbin/route -A inet6 | grep "\Wsit0\W*$" 
::/96      ::               U   256  2  0  sit0 
2002::/16  ::               UA  256  0  0  sit0 
2000::/3   ::193.113.58.75  UG    1  0  0  sit0 
fe80::/10  ::               UA  256  0  0  sit0 
ff00::/8   ::               UA  256  0  0  sit0

9.3 Setup of point-to-point tunnel(設定點對點的遂道)

有3種方法可以加入/移除point-to-point tunnel

Add point-to-point tunnels (加入)

使用 "ip"

目前針對少量tunnels的方法

設定tunnel device (它不會立既啟用.TTL必需指定, 因為初始值是0)


# /sbin/ip tunnel add < device > mode sit ttl < ttldefault > remote
? < ipv4addressofforeigntunnel > local < ipv4addresslocal >

用法(這個例子中有三個遂道)


# /sbin/ip tunnel add sit1 mode sit ttl <ttldefault> remote
? <ipv4addressofforeigntunnel1> local <ipv4addresslocal>
# /sbin/ip set dev sit1 up
# /sbin/ip -6 route add <prefixtoroute1> dev sit1 metric 1
# /sbin/ip tunnel add sit2 mode sit ttl <ttldefault>
? <ipv4addressofforeigntunnel2> local <ipv4addresslocal>
# /sbin/ip set dev sit2 up
# /sbin/ip -6 route add <prefixtoroute2> dev sit2 metric 1
# /sbin/ip tunnel add sit3 mode sit ttl <ttldefault>
? <ipv4addressofforeigntunnel3> local <ipv4addresslocal>
# /sbin/ip set dev sit3 up
# /sbin/ip -6 route add <prefixtoroute3> dev sit3 metric 1

使用 "ifconfig" and "route" (deprecated)

不推薦一次就 Non Broadcast Multiple Access (NBMA)這麼多,因為您如果只想關閉第一個但又要讓其它的繼續運行,有點難啊.只加一個是沒有問題的.


# /sbin/ifconfig sit0 up
# /sbin/ifconfig sit0 tunnel <ipv4addressofforeigntunnel1>
# /sbin/ifconfig sit1 up
# /sbin/route -A inet6 add <prefixtoroute1> dev sit1
# /sbin/ifconfig sit0 tunnel <ipv4addressofforeigntunnel2>
# /sbin/ifconfig sit2 up
# /sbin/route -A inet6 add <prefixtoroute2> dev sit2
# /sbin/ifconfig sit0 tunnel <ipv4addressofforeigntunnel3>
# /sbin/ifconfig sit3 up
# /sbin/route -A inet6 add <prefixtoroute3> dev sit3

警告:這樣做有很大的風險, 因為任何人可以從Internet的任何地點使用"automatic tunneling"同您進行連結.我不推薦您這樣做.

使用 "route" only

當然可以設定tunnel使用 Non Broadcast Multiple Access (NBMA)非多地址廣播的方式 這種方法可以一次就加入很多tunnel. 使用方法 (三個tunnel的基本例子):


# /sbin/ifconfig sit0 up
# /sbin/route -A inet6 add <prefixtoroute1> gw
? ::<ipv4addressofforeigntunnel1> dev sit0
# /sbin/route -A inet6 add <prefixtoroute2> gw
? ::<ipv4addressofforeigntunnel2> dev sit0
# /sbin/route -A inet6 add <prefixtoroute3> gw
? ::<ipv4addressofforeigntunnel3> dev sit0

警告:這樣做有很大的風險, 因為任何人可以從Internet的任何地點使用"automatic tunneling"同您進行連結.我不推薦您這樣做.

Removing point-to-point tunnels(移除遂道)

手工方式不經常使用,可以用scripts移除/重新設定IPv6tunnels

使用 "ip"

移除遂道設備的用法:


# /sbin/ip tunnel del <device>

Usage (三個tunnel的基本例子):


# /sbin/ip -6 route del <prefixtoroute1> dev sit1
# /sbin/ip set sit1 down
# /sbin/ip tunnel del sit1
# /sbin/ip -6 route del <prefixtoroute2> dev sit2
# /sbin/ip set sit2 down
# /sbin/ip tunnel del sit2
# /sbin/ip -6 route del <prefixtoroute3> dev sit3
# /sbin/ip set sit3 down
# /sbin/ip tunnel del sit3

使用 "ifconfig" and "route" (因為不怎麼有趣所以不贊成這麼做)

Usage (三個tunnel的基本例子):您必需反向移除它們, 也就是先建立的必需先移除.


# /sbin/route -A inet6 del <prefixtoroute3> dev sit3
# /sbin/ifconfig sit3 down
# /sbin/route -A inet6 del <prefixtoroute2> dev sit2
# /sbin/ifconfig sit2 down
# /sbin/route -A inet6 add <prefixtoroute1> dev sit1
# /sbin/ifconfig sit1 down
# /sbin/ifconfig sit0 down

使用 "route"

移除IPv6路由. 使用方法 (三個tunnel的基本例子):


# /sbin/route -A inet6 del <prefixtoroute1> gw
? ::<ipv4addressofforeigntunnel1> dev sit0
# /sbin/route -A inet6 del <prefixtoroute2> gw
? ::<ipv4addressofforeigntunnel2> dev sit0
# /sbin/route -A inet6 del <prefixtoroute3> gw
? ::<ipv4addressofforeigntunnel3> dev sit0
# /sbin/ifconfig sit0 down

Numbered point-to-point tunnels(有限的點對點遂道)

有時需要設定一個point-to-point 遂道 和IPv6地址, 但方法中只有第一個(ifconfig+route - deprecated)和第三個(ip+route)可行. 在這些案例中您可以加入一個IPv6地址到 tunnel interface(用於遂道操作的那個界面)

9.4 Setup of 6to4 tunnels (設定 IPv6至IPv4的遂道)

注意:6to4 tunnels 目前缺乏vanilla 2.2.x系列核心的支持. 同樣要注意的是6to4地址的前綴長度是16 所有的 6to4 主機都在相同的第二層.

Add a 6to4 tunnel(增加一個 6to4 遂道)

首先, 您必需用可路由的本地IPv4 global 地址來計算 6to4 的前綴. (如果您的主機沒有可路由的本地IPv4 global 地址, 在閘道邊緣的NAT地址也行 in special cases NAT on border gateways is possible):

假定您的IPv4地址為:


1.2.3.4
 

產生的6to4 prefix(前綴)為 :


2002:0102:0304::
 

本地的 6to4 閘道需要手工設定後綴為"::1", 因此您的6to4地址就成為:


2002:0102:0304::1
 

以下依據指定的IPv4地址產生6to4地址:


ipv4="1.2.3.4"; printf "2002:%02x%02x:%02x%02x::1" `echo $ipv4 | tr "." " "`
 

目前有兩種方法可以設定6to4遂道

使用 "ip" 和專用的遂道設備.

這是被推薦的做法. 創建一個遂道設備.


# /sbin/ip tunnel add tun6to4 mode sit remote any local <localipv4address>
 

Bring interface up(激活它)


# /sbin/ip link set dev tun6to4 up 
 

將本地6to4地址加入到界面.(注意:它的前綴長度必需是16)


# /sbin/ip -6 addr add <local6to4address>/16 dev tun6to4 
 

加入一個用all-6to4-routers IPv4 anycast 地址作為到達global IPv6 網路的路由(缺省的路由)


# /sbin/ip -6 route add 2000::/3 via ::192.88.99.1 dev tun6to4 metric 1
 

使用 "ifconfig" and "route" and generic tunnel device "sit0" (不被推薦的做法)

不被推薦是因為tunnel device sit0 不支持特別的過慮器應用在每個設備上.

Bring generic tunnel interface sit0 up(將界面sit0激活)


# /sbin/ifconfig sit0 up 
 

Add local 6to4 address to interface(向界面添加本地 6to4 地址)


# /sbin/ifconfig sit0 add <local6to4address>/16
 

加入一個用all-6to4-relays IPv4 anycast地址作為到達global IPv6 網路的路由(缺省的路由)


# /sbin/route -A inet6 add 2000::/3 gw ::192.88.99.1 dev sit0
 

Remove a 6to4 tunnel(移除 6to4 遂道)

使用 "ip" and a 專用遂道設備

從dedicated tunnel device 移除所有路由


# /sbin/ip -6 route flush dev tun6to4
 

Shut down interface(關閉界面)


# /sbin/ip link set dev tun6to4 down
 

Remove created tunnel device(移除遂道設備)


# /sbin/ip tunnel del tun6to4 
 

使用 "ifconfig" and "route" and generic tunnel device "sit0" (不被推薦的做法)

移除 6to4 界面上遂道的路由


# /sbin/route -A inet6 del 2000::/3 gw ::192.88.99.1 dev sit0 

Remove local 6to4 address to interface(從界面移除本地 6to4 地址)


# /sbin/ifconfig sit0 del <local6to4address>/16
 

並閉 generic tunnel device (當心, 可能它還在使用當中)


# /sbin/ifconfig sit0 down 


Next Previous Contents