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