14-隧道配置
本章节下载: 14-隧道配置 (676.87 KB)
目 录
1.4.8 开启Tunnel接口的UPDOWN日志助记符带Tunnel标签功能
1.4.9 配置VXLAN模式Tunnel接口所属的VXLAN隧道组
2.3.3 IPv6 over IPv4手动隧道典型配置举例
3.5.1 IPv4 over IPv4隧道基本组网配置举例
5.7.1 IPv6 over IPv6隧道基本组网配置举例
本章仅介绍隧道接口的配置,有关隧道模式的介绍请参见后续章节。
隧道技术是一种封装技术,即一种网络协议将其他网络协议的数据报文封装在自己的报文中,然后在网络中传输。封装后的数据报文在网络中传输的路径,称为隧道。隧道是一条虚拟的点对点连接,隧道的两端需要对数据报文进行封装及解封装。隧道技术就是指包括数据封装、传输和解封装在内的全过程。
目前支持的隧道技术包括:
· GRE(Generic Routing Encapsulation,通用路由封装)隧道,GRE的相关介绍和配置请参见“三层技术-IP业务配置指导”中的“GRE”。
· VXLAN(Virtual eXtensible LAN,可扩展虚拟局域网络)隧道,VXLAN的相关介绍和配置请参见“VXLAN配置指导”中的“VXLAN”。
· IPv6 over IPv4隧道、IPv4 over IPv4隧道、IPv4 over IPv6隧道和IPv6 over IPv6隧道。
同一台设备上,多个Tunnel接口不要同时配置完全相同的目的端地址和源端地址。
通过ip address命令,为VXLAN模式的隧道接口配置的IP地址无实际意义,不建议为此类型的隧道接口配置IP地址。有关ip address命令的详细介绍,请参见“三层技术-IP业务命令参考”中的“IP地址”。
配置隧道模式为GRE over IPv4隧道、GRE over IPv6隧道、IPv4 over IPv4隧道、IPv6隧道、IPv6 over IPv4隧道、MPLS TE隧道时,不需要配置业务环回组。配置隧道模式为6to4隧道和ISATAP隧道时,需要配置业务环回组。
隧道两端的设备上,需要创建虚拟的三层接口,即Tunnel接口,以便隧道两端的设备利用Tunnel接口发送报文、识别并处理来自隧道的报文。
Tunnel接口配置任务如下:
(1) 创建Tunnel接口
(2) (可选)配置处理接口流量的slot
(3) (可选)配置封装后隧道报文的属性
(4) (可选)配置隧道目的端地址所属的VPN实例
(5) (可选)恢复当前Tunnel接口的缺省配置
(6) (可选)开启Tunnel接口的UPDOWN日志助记符带Tunnel标签功能
(7) (可选)配置VXLAN模式Tunnel接口所属的VXLAN隧道组
(8) (可选)隧道出方向超长报文的分片/丢弃功能配置
(9) (可选)配置隧道模块的告警功能
(1) 进入系统视图。
system-view
(2) 创建Tunnel接口,指定隧道模式,并进入Tunnel接口视图。
interface tunnel number mode { gre [ ipv6 ] | ipv4-ipv4 | ipv6 | ipv6-ipv4 [ 6to4 | isatap ] | mpls-te | vxlan }
在隧道的两端应配置相同的隧道模式,否则可能造成报文传输失败。
(3) 设置隧道的源端地址或源接口。
source { ipv4-address | ipv6-address | interface-type interface-number }
缺省情况下,未设置隧道的源端地址和源接口。
如果设置的是隧道的源端地址,则该地址将作为封装后隧道报文的源IP地址;如果设置的是隧道的源接口,则该接口的主IP地址将作为封装后隧道报文的源IP地址。
(4) 设置隧道的目的端地址。
destination { ipv4-address | ipv6-address }
缺省情况下,未设置隧道的目的端地址。
隧道的目的端地址是对端接收报文的接口的地址,该地址将作为封装后隧道报文的目的地址。
(5) (可选)配置接口描述信息。
description text
缺省情况下,接口描述信息为“该接口的接口名 Interface”。
(6) (可选)配置Tunnel接口的MTU值。
mtu size
缺省情况下,隧道接口的状态始终为Down时,隧道的MTU值为64000;隧道接口的状态当前为Up时,隧道的MTU值为根据隧道目的地址查找路由而得到的出接口的MTU值减隧道封装报文头长度。
ip mtu、ipv6 mtu和mtu(对IPv4和IPv6类型隧道均生效)命令均可以配置Tunnel接口的MTU值,ip mtu和ipv6 mtu的优先级高于mtu。当几条命令同时配置时,MTU值以ip mtu和ipv6 mtu命令为准,此时若将ip mtu或ipv6 mtu命令恢复至缺省值,MTU值以mtu命令为准;当以上命令均未配置时,隧道的MTU值为根据隧道目的地址查找路由而得到的出接口的MTU值减隧道封装报文头长度。
由于6to4隧道模式不需要配置隧道的目的端地址,因此本类型的隧道不具备根据出接口改变MTU值的能力。
(7) (可选)配置Tunnel接口的期望带宽。
bandwidth bandwidth-value
缺省情况下,接口的期望带宽=接口的最大速率÷1000(kbit/s)。
期望带宽供业务模块使用,不会对接口实际带宽造成影响。
(8) 开启Tunnel接口。
undo shutdown
缺省情况下,Tunnel接口处于开启状态。
当要求同一个Tunnel接口的流量必须在同一个slot上进行处理时,可以在Tunnel接口下配置处理接口流量的slot。
(1) 进入系统视图。
system-view
(2) 进入Tunnel接口视图。
interface tunnel number
(3) 配置处理接口流量的slot。
service slot slot-number
缺省情况下,未配置处理接口流量的slot。
(1) 进入系统视图。
system-view
(2) 进入Tunnel接口视图。
interface tunnel number
(3) 设置封装后隧道报文的ToS。
tunnel tos tos-value
缺省情况下,封装后隧道报文的ToS值与封装前原始IP报文的ToS值相同。
本命令仅对软件转发的报文生效,对硬件转发的报文不生效。
(4) 设置封装后隧道报文的TTL值。
tunnel ttl ttl-value
缺省情况下,封装后隧道报文的TTL值为255。
隧道的源端地址和目的端地址必须属于相同的VPN实例,否则隧道接口链路状态无法UP。在隧道的源接口上通过ip binding vpn-instance命令可以指定隧道源端地址所属的VPN实例。ip binding vpn-instance命令的详细介绍,请参见“MPLS命令参考”中的“MPLS L3VPN”。
(1) 进入系统视图。
system-view
(2) 进入Tunnel接口视图。
interface tunnel number
(3) 配置隧道目的端地址所属的VPN实例。
tunnel vpn-instance vpn-instance-name
缺省情况下,隧道目的端地址属于公网,设备查找公网路由表转发隧道封装后的报文。
接口下的某些配置恢复到缺省情况后,会对设备上当前运行的业务产生影响。建议您在执行本配置前,完全了解其对网络产生的影响。
您可以在执行default命令后通过display this命令确认执行效果。对于未能成功恢复缺省的配置,建议您查阅相关功能的命令手册,手工执行恢复该配置缺省情况的命令。如果操作仍然不能成功,您可以通过设备的提示信息定位原因。
(1) 进入系统视图。
system-view
(2) 进入Tunnel接口视图。
interface tunnel number
(3) 恢复当前接口的缺省配置。
default
本功能针对Tunnel接口UPDOWN日志信息增加Tunnel标签,以便于用户通过正则表达式区分Tunnel口的信息,例如:
· 开启该功能前的日志信息
%Jan 8 18:45:33:621 2011 Sysname IFNET/3/PHY_UPDOWN: Physical state on the interface Tunnel1 changed to down.
· 开启该功能后的日志信息
%Jan 8 18:45:33:621 2011 Sysname IFNET/3/TUNNEL_PHY_UPDOWN: Physical state on the interface Tunnel1 changed to down
(1) 进入系统视图。
system-view
(2) 开启Tunnel接口的UPDOWN日志助记符带Tunnel标签功能。
tunnel log updown with-tag
缺省情况下,Tunnel接口的UPDOWN日志助记符带Tunnel标签功能处于关闭状态,UPDOWN日志助记符不带Tunnel标签。
设备上的VXLAN隧道组是指若干个VXLAN模式的Tunnel接口的集合。VXLAN隧道组通过与流量重定向功能配合使用,实现将报文引流到VXLAN隧道组,并在VXLAN隧道组内的多条隧道上进行复制转发。有关流量重定向功能的详细介绍,请参见“ACL和QoS命令参考”中的“QoS”。
一个VXLAN模式Tunnel接口只允许同时加入一个VXLAN隧道组。如果需要将当前接口加入其他VXLAN隧道组,请首先在VXLAN模式Tunnel接口视图下使用undo group命令将当前接口退出已加入的VXLAN隧道组。
一个VXLAN隧道组中最多允许添加32个VXLAN模式Tunnel接口。
(1) 进入系统视图。
system-view
(2) 进入模式为VXLAN隧道的Tunnel接口视图。
interface tunnel number [ mode vxlan ]
(3) 配置Tunnel接口所属的VXLAN隧道组。
group group-id
缺省情况下,未配置VXLAN模式Tunnel接口所属的VXLAN隧道组。
对于硬件转发的设备,硬件不检查报文的MTU值,隧道原始报文长度(隧道内层报文头携带的报文总长度值)超出接口MTU值的报文不会被分片。配置隧道出方向超长报文分片/丢弃功能后,对隧道出方向报文做如下处理:
· 隧道原始报文长度小于Tunnel接口MTU,以硬件转发的方式处理。
· 隧道原始报文长度超出Tunnel接口MTU值,以软件转发的方式处理。
¡ 若报文DF(Don’t Fragment,不分片)置位,则将报文丢弃。执行ip unreachables enable命令,开启ICMP目的不可达报文发送功能后,丢弃DF置位的报文时,设备会向源端发送目的不可达类型的ICMP差错报文。
¡ 若报文DF(Don’t Fragment,不分片)不置位,则按照fragment或drop参数的配置,将报文以软件转发的方式分片转发,或丢弃。
· 对于不携带VLAN tag的报文,长度大于MTU 18个字节以上时,以软件转发的方式处理。
· 对于带有VLAN tag的报文,长度大于MTU 22个字节以上时,以软件转发的方式处理。
执行undo tunnel exceed-mtu命令恢复缺省情况后,设备恢复为硬件转发。
ip mtu、ipv6 mtu和mtu(对IPv4和IPv6类型隧道均生效)命令均可以配置Tunnel接口的MTU值,ip mtu和ipv6 mtu的优先级高于mtu。当几条命令同时配置时,MTU值以ip mtu和ipv6 mtu命令为准,此时若将ip mtu或ipv6 mtu命令恢复至缺省值,MTU值以mtu命令为准;当两条命令均未配置时,隧道的MTU值为根据隧道目的地址查找路由而得到的出接口的MTU值减隧道封装报文头长度。
(1) 进入系统视图。
system-view
(2) 开启隧道出方向超长报文的分片/丢弃功能。
tunnel exceed-mtu { fragment | drop }
缺省情况下,隧道出方向超长报文的分片/丢弃功能处于关闭状态。
用户可根据业务需求开启指定隧道类型的告警功能:
· 开启了VXLAN隧道配置下发失败的告警功能后,设备会将配置下发失败的Tunnel接口编号信息作为告警信息发送到设备的SNMP模块。
· 开启了解封装VXLAN报文失败的告警功能后,设备会将解封装失败的VXLAN报文的源地址IP类型、源地址IP、目的地址IP类型、目的地址IP等信息作为告警信息发送到设备的SNMP模块。
· 开启了Tunnel接口数量告警功能后,当设备上的Tunnel接口个数超过了告警阈值,即设备允许创建数量的80%时,设备会将超出的Tunnel接口的框号和板号信息作为告警信息发送到设备的SNMP模块。
· 开启了VXLAN over IPv4隧道状态的告警功能后,设备上的VXLAN over IPv4隧道状态发生变化时,设备会将此隧道信息记录在告警信息中,生成的告警信息将发送到设备的SNMP模块,通过设置SNMP中告警信息的发送参数,来决定告警信息输出的相关特性。
当不指定任何参数时,设备将开启隧道模块的所有告警功能。
有关告警信息的详细介绍,请参见“网络管理和监控配置指导”中的“SNMP”。
(1) 进入系统视图。
system-view
(2) 开启隧道模块的告警功能。
snmp-agent trap enable tunnel [ max-threshold-reached | vxlan-config-failure | vxlan-decap-failure | vxlan-tunnel-status ] *
缺省情况下,隧道模块的告警功能处于关闭状态。
在任意视图下执行display命令可以显示隧道配置后的运行情况,通过查看显示信息验证配置的效果。
在用户视图下执行reset命令可以清除Tunnel接口的统计信息。
表1-1 隧道显示和维护
操作 |
命令 |
显示Tunnel接口的相关信息 |
display interface [ tunnel [ number ] ] [ brief [ description | down ] ] |
显示Tunnel接口的IPv6相关信息(本命令的详细介绍,请参见“三层技术-IP业务命令参考”中的“IPv6基础”) |
display ipv6 interface [ tunnel [ number ] ] [ brief ] |
清除Tunnel接口的统计信息 |
reset counters interface [ tunnel [ number ] ] |
清除Tunnel接口的IPv6统计信息(本命令的详细介绍,请参见“三层技术-IP业务命令参考”中的“IPv6基础”) |
reset ipv6 statistics [ slot slot-number ] |
在Tunnel接口上配置了相关的参数后(例如隧道的源端地址、目的端地址和隧道模式),Tunnel接口仍未处于up状态。
Tunnel接口未处于up状态的原因可能是隧道起点的物理接口没有处于up状态,或隧道的目的端地址不可达。
使用display interface和display ipv6 interface命令查看隧道起点的物理接口状态为up还是down。如果物理接口状态是down的,请检查网络连接。
使用display ipv6 routing-table和display ip routing-table命令查看是否目的端地址通过路由可达。如果路由表中没有保证隧道通信的路由表项,请配置相关路由。
如图2-1所示,IPv6 over IPv4隧道是在IPv6数据报文前封装上IPv4的报文头,通过隧道使IPv6报文穿越IPv4网络,实现隔离的IPv6网络互通。IPv6 over IPv4隧道两端的设备必须支持IPv4/IPv6双协议栈,即同时支持IPv4协议和IPv6协议。
图2-1 IPv6 over IPv4隧道原理图
IPv6 over IPv4隧道对报文的处理过程如下:
(1) IPv6网络中的主机发送IPv6报文,该报文到达隧道的源端设备Device A。
(2) Device A根据路由表判定该报文要通过隧道进行转发后,在IPv6报文前封装上IPv4的报文头,通过隧道的实际物理接口将报文转发出去。IPv4报文头中的源IP地址为隧道的源端地址,目的IP地址为隧道的目的端地址。
(3) 封装报文通过隧道到达隧道目的端设备(或称隧道终点)Device B,Device B判断该封装报文的目的地是本设备后,将对报文进行解封装。
(4) Device B根据解封装后的IPv6报文的目的地址处理该IPv6报文。如果目的地就是本设备,则将IPv6报文转给上层协议处理;否则,查找路由表转发该IPv6报文。
根据隧道终点的IPv4地址的获取方式不同,隧道分为“配置隧道”和“自动隧道”。
· 如果IPv6 over IPv4隧道终点的IPv4地址不能从IPv6报文的目的地址中自动获取,需要进行手工配置,这样的隧道称为“配置隧道”。
· 如果IPv6报文的目的地址中嵌入了IPv4地址,则可以从IPv6报文的目的地址中自动获取隧道终点的IPv4地址,这样的隧道称为“自动隧道”。
根据对IPv6报文的封装方式的不同,IPv6 over IPv4隧道分为以下几种模式。
IPv6 over IPv4手动隧道是点到点之间的链路。建立手动隧道需要在隧道两端手工指定隧道的源端和目的端地址。
手动隧道可以建立在连接IPv4网络和IPv6网络的两个边缘路由器之间,实现隔离的IPv6网络跨越IPv4网络通信;也可以建立在边缘路由器和IPv4/IPv6双栈主机之间,实现隔离的IPv6网络跨越IPv4网络与双栈主机通信。
· 普通6to4隧道
6to4隧道是点到多点的自动隧道,主要建立在边缘路由器之间,用于通过IPv4网络连接多个IPv6孤岛。
6to4隧道两端采用特殊的6to4地址,其格式为:2002:abcd:efgh:子网号::接口ID/48。其中:2002表示固定的IPv6地址前缀;abcd:efgh为用16进制表示的IPv4地址(如1.1.1.1可以表示为0101:0101),用来唯一标识一个6to4网络(如果IPv6孤岛中的主机都采用6to4地址,则该IPv6孤岛称为6to4网络),6to4网络的边缘路由器上连接IPv4网络的接口地址需要配置为此IPv4地址;子网号用来在6to4网络内划分子网;子网号和接口ID共同标识了一个主机在6to4网络内的位置。通过6to4地址中嵌入的IPv4地址可以自动确定隧道的终点,使隧道的建立非常方便。
6to4地址中采用一个全球唯一的IPv4地址标识了一个6to4网络,克服了IPv4兼容IPv6自动隧道的局限性。
ISATAP隧道是点到多点的自动隧道技术,为IPv6主机通过IPv4网络接入IPv6网络提供了一个解决方案。
使用ISATAP隧道时,IPv6报文的目的地址要采用特殊的ISATAP地址。ISATAP地址格式为:Prefix:0:5EFE:abcd:efgh/64。其中,64位的Prefix为任何合法的IPv6单播地址前缀;abcd:efgh为用16进制表示的32位IPv4地址(如1.1.1.1可以表示为0101:0101),该IPv4地址不要求全球唯一。通过ISATAP地址中嵌入的IPv4地址可以自动确定隧道的终点,使隧道的建立非常方便。
ISATAP隧道主要用于跨越IPv4网络在IPv6主机与边缘路由器之间、两个边缘路由器之间建立连接。
图2-2 ISATAP隧道原理图
IPv6 over IPv4隧道配置任务如下:
(5) 配置IPv6 over IPv4隧道
请选择以下一项任务进行配置:
¡ 配置6to4隧道
(6) (可选)配置丢弃含有IPv4兼容IPv6地址的IPv6报文
· 在本端设备上为隧道指定的目的端地址,应该与在对端设备上为隧道指定的源端地址相同;在本端设备上为隧道指定的源端地址,应该与在对端设备上为隧道指定的目的端地址相同。
· 在同一台设备上,隧道模式相同的Tunnel接口建议不要同时配置完全相同的源端地址和目的端地址。
· 如果封装前IPv6报文的目的IPv6地址与Tunnel接口的IPv6地址不在同一个网段,则必须配置通过Tunnel接口到达目的IPv6地址的转发路由,以便需要进行封装的报文能正常转发。用户只能配置静态路由,指定到达目的IPv6地址的路由出接口为本端Tunnel接口或下一跳为对端Tunnel接口地址,不支持动态路由。在隧道的两端都要进行转发路由的配置,配置的详细情况请参见“三层技术-IP路由配置指导”中的“IPv6静态路由”。
(1) 进入系统视图。
system-view
(2) 进入模式为IPv6 over IPv4手动隧道的Tunnel接口视图。
interface tunnel number [ mode ipv6-ipv4 ]
(3) 设置Tunnel接口的IPv6地址。
详细配置方法,请参见“三层技术-IP业务配置指导”中的“IPv6基础”。
(4) 设置隧道的源端地址或源接口。
source { ipv4-address | interface-type interface-number }
缺省情况下,未设置隧道的源端地址和源接口。
如果设置的是隧道的源端地址,则该地址将作为封装后隧道报文的源IP地址;如果设置的是隧道的源接口,则该接口的主IP地址将作为封装后隧道报文的源IP地址。
(5) 设置隧道的目的端地址。
destination ipv4-address
缺省情况下,未设置隧道的目的端地址。
隧道的目的端地址是对端接收报文的接口的地址,该地址将作为封装后隧道报文的目的地址。
(6) (可选)设置封装后隧道报文的DF(Don’t Fragment,不分片)标志。
tunnel dfbit enable
缺省情况下,未设置隧道报文的不分片标志,即转发隧道报文时允许分片。
如图2-3所示,两个IPv6网络分别通过Switch A和Switch B与IPv4网络连接,要求在Switch A和Switch B之间建立IPv6 over IPv4隧道,使两个IPv6网络可以互通。由于隧道终点的IPv4地址不能从IPv6报文的目的地址中自动获取,因此,需要配置IPv6 over IPv4手动隧道。
图2-3 IPv6 over IPv4手动隧道组网图
在开始下面的配置之前,请确保Switch A和Switch B上已经创建相应的VLAN接口,且两者之间IPv4报文路由可达。
(1) 配置Switch A
# 配置接口HundredGigE1/0/2(隧道的实际物理接口)加入VLAN100。
<SwitchA> system-view
[SwitchA] vlan 100
[SwitchA-vlan100] port hundredgige 1/0/2
[SwitchA-vlan100] quit
# 配置接口Vlan-interface100的IP地址。
[SwitchA] interface vlan-interface 100
[SwitchA-Vlan-interface100] ip address 192.168.100.1 255.255.255.0
[SwitchA-Vlan-interface100] quit
# 配置接口HundredGigE1/0/1加入VLAN101。
[SwitchA] vlan 101
[SwitchA-vlan101] port hundredgige 1/0/1
[SwitchA-vlan101] quit
# 配置接口Vlan-interface101的IPv6地址。
[SwitchA] interface vlan-interface 101
[SwitchA-Vlan-interface101] ipv6 address 3002::1 64
[SwitchA-Vlan-interface101] quit
# 创建模式为IPv6 over IPv4手动隧道的接口Tunnel0。
[SwitchA] interface tunnel 0 mode ipv6-ipv4
# 配置Tunnel0接口的IPv6地址。
[SwitchA-Tunnel0] ipv6 address 3001::1/64
# 配置Tunnel0接口的源接口为Vlan-interface100。
[SwitchA-Tunnel0] source vlan-interface 100
# 配置Tunnel0接口的目的端地址(Switch B的Vlan-interface100的IP地址)。
[SwitchA-Tunnel0] destination 192.168.50.1
[SwitchA-Tunnel0] quit
# 配置从Switch A经过Tunnel0接口到IPv6 network 2的静态路由。
[SwitchA] ipv6 route-static 3003:: 64 tunnel 0
(2) 配置Switch B
# 配置接口HundredGigE1/0/2(隧道的实际物理接口)加入VLAN100。
<SwitchB> system-view
[SwitchB] vlan 100
[SwitchB-vlan100] port hundredgige 1/0/2
[SwitchB-vlan100] quit
# 配置接口Vlan-interface100的IP地址。
[SwitchB] interface vlan-interface 100
[SwitchB-Vlan-interface100] ip address 192.168.50.1 255.255.255.0
[SwitchB-Vlan-interface100] quit
# 配置接口HundredGigE1/0/1加入VLAN101。
[SwitchB] vlan 101
[SwitchB-vlan101] port hundredgige 1/0/1
[SwitchB-vlan101] quit
# 配置接口Vlan-interface101的IPv6地址。
[SwitchB] interface vlan-interface 101
[SwitchB-Vlan-interface101] ipv6 address 3003::1 64
[SwitchB-Vlan-interface101] quit
# 创建模式为IPv6 over IPv4手动隧道的接口Tunnel0。
[SwitchB] interface tunnel 0 mode ipv6-ipv4
# 配置Tunnel0接口的IPv6地址。
[SwitchB-Tunnel0] ipv6 address 3001::2/64
# 配置Tunnel0接口的源接口为Vlan-interface100。
[SwitchB-Tunnel0] source vlan-interface 100
# 配置Tunnel0接口的目的端地址(Switch A的Vlan-interface100的IP地址)。
[SwitchB-Tunnel0] destination 192.168.100.1
[SwitchB-Tunnel0] quit
# 配置从Switch B经过Tunnel0接口到IPv6 network 1的静态路由。
[SwitchB] ipv6 route-static 3002:: 64 tunnel 0
# 完成上述配置后,在Switch A和Switch B上分别执行display ipv6 interface命令,可以看出Tunnel0接口处于up状态。(具体显示信息略)
# 从Switch A和Switch B上可以Ping通对端的Vlan-int101接口的IPv6地址。下面仅以Switch A为例。
[SwitchA] ping ipv6 3003::1
Ping6(56 data bytes) 3001::1 --> 3003::1, press CTRL+C to break
56 bytes from 3003::1, icmp_seq=0 hlim=64 time=45.000 ms
56 bytes from 3003::1, icmp_seq=1 hlim=64 time=10.000 ms
56 bytes from 3003::1, icmp_seq=2 hlim=64 time=4.000 ms
56 bytes from 3003::1, icmp_seq=3 hlim=64 time=10.000 ms
56 bytes from 3003::1, icmp_seq=4 hlim=64 time=11.000 ms
--- Ping6 statistics for 3003::1 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 4.000/16.000/45.000/14.711 ms
· 6to4隧道不需要配置隧道的目的端地址,因为隧道的目的端地址可以通过6to4 IPv6地址中嵌入的IPv4地址自动获得。
· 对于自动隧道,隧道模式相同的Tunnel接口建议不要同时配置完全相同的源端地址。
· 如果封装前IPv6报文的目的IPv6地址与Tunnel接口的IPv6地址不在同一个网段,则必须配置通过Tunnel接口到达目的IPv6地址的转发路由,以便需要进行封装的报文能正常转发。对于自动隧道,用户只能配置静态路由,指定到达目的IPv6地址的路由出接口为本端Tunnel接口或下一跳为对端Tunnel接口地址,不支持动态路由。在隧道的两端都要进行转发路由的配置,配置的详细情况请参见“三层技术-IP路由配置指导”中的“IPv6静态路由”。
(1) 进入系统视图。
system-view
(2) 进入模式为6to4隧道的Tunnel接口视图。
interface tunnel number [ mode ipv6-ipv4 6to4 ]
(3) 设置Tunnel接口的IPv6地址。
详细配置方法,请参见“三层技术-IP业务配置指导”中的“IPv6基础”。
(4) 设置隧道的源端地址或源接口。
source { ipv4-address | interface-type interface-number }
缺省情况下,未设置隧道的源端地址和源接口。
如果设置的是隧道的源端地址,则该地址将作为封装后隧道报文的源IP地址;如果设置的是隧道的源接口,则该接口的主IP地址将作为封装后隧道报文的源IP地址。
(5) (可选)设置封装后隧道报文的DF(Don’t Fragment,不分片)标志。
tunnel dfbit enable
缺省情况下,未设置隧道报文的不分片标志,即转发隧道报文时允许分片。
如图2-4所示,两个6to4网络通过网络边缘6to4 switch(Switch A和Switch B)与IPv4网络相连。在Switch A和Switch B之间建立6to4隧道,实现6to4网络中的主机Host A和Host B之间的互通。
图2-4 6to4隧道组网图
为了实现6to4网络之间的互通,除了配置6to4隧道外,还需要为6to4网络内的主机及6to4 switch配置6to4地址。
· Switch A上接口Vlan-interface100的IPv4地址为2.1.1.1/24,转换成6to4地址后的前缀为2002:0201:0101::/48,Host A的地址必须使用该前缀。
· Switch B上接口Vlan-interface100的IPv4地址为5.1.1.1/24,转换成6to4地址后的前缀为2002:0501:0101::/48,Host B的地址必须使用该前缀。
在开始下面的配置之前,请确保Switch A和Switch B上已经创建相应的VLAN接口,且两者之间IPv4报文路由可达。
(1) 配置Switch A
# 配置接口HundredGigE1/0/2(隧道的实际物理接口)加入VLAN100。
<SwitchA> system-view
[SwitchA] vlan 100
[SwitchA-vlan100] port hundredgige 1/0/2
[SwitchA-vlan100] quit
# 配置接口Vlan-interface100的IP地址。
[SwitchA] interface vlan-interface 100
[SwitchA-Vlan-interface100] ip address 2.1.1.1 24
[SwitchA-Vlan-interface100] quit
# 配置接口HundredGigE1/0/1加入VLAN101。
[SwitchA] vlan 101
[SwitchA-vlan101] port hundredgige 1/0/1
[SwitchA-vlan101] quit
# 配置接口Vlan-interface101的地址为6to4地址2002:0201:0101:1::1/64。
[SwitchA] interface vlan-interface 101
[SwitchA-Vlan-interface101] ipv6 address 2002:0201:0101:1::1/64
[SwitchA-Vlan-interface101] quit
# 创建业务环回组1,并配置服务类型为tunnel。
[SwitchA] service-loopback group 1 type tunnel
# 将接口HundredGigE1/0/3加入业务环回组1。
[SwitchA] interface hundredgige 1/0/3
[SwitchA-HundredGigE1/0/3] port service-loopback group 1
[SwitchA-HundredGigE1/0/3] quit
# 创建模式为6to4隧道的接口Tunnel0。
[SwitchA] interface tunnel 0 mode ipv6-ipv4 6to4
# 配置Tunnel0接口的IPv6地址。
[SwitchA-Tunnel0] ipv6 address 3001::1/64
# 配置Tunnel0接口的源接口为Vlan-interface100。
[SwitchA-Tunnel0] source vlan-interface 100
[SwitchA-Tunnel0] quit
# 配置到目的地址2002::/16,下一跳为Tunnel接口的静态路由。
[SwitchA] ipv6 route-static 2002:: 16 tunnel 0
(2) 配置Switch B
# 配置接口HundredGigE1/0/2(隧道的实际物理接口)加入VLAN100。
<SwitchB> system-view
[SwitchB] vlan 100
[SwitchB-vlan100] port hundredgige 1/0/2
[SwitchB-vlan100] quit
# 配置接口Vlan-interface100的IP地址。
[SwitchB] interface vlan-interface 100
[SwitchB-Vlan-interface100] ip address 5.1.1.1 24
[SwitchB-Vlan-interface100] quit
# 配置接口HundredGigE1/0/1加入VLAN101。
[SwitchB] vlan 101
[SwitchB-vlan101] port hundredgige 1/0/1
[SwitchB-vlan101] quit
# 配置接口Vlan-interface101的地址为6to4地址2002:0501:0101:1::1/64。
[SwitchB] interface vlan-interface 101
[SwitchB-Vlan-interface101] ipv6 address 2002:0501:0101:1::1/64
[SwitchB-Vlan-interface101] quit
# 创建业务环回组1,并配置服务类型为tunnel。
[SwitchB] service-loopback group 1 type tunnel
# 将接口HundredGigE1/0/3加入业务环回组1。
[SwitchB] interface hundredgige 1/0/3
[SwitchB-HundredGigE1/0/3] port service-loopback group 1
[SwitchB-HundredGigE1/0/3] quit
# 创建模式为6to4隧道的接口Tunnel0。
[SwitchB] interface tunnel 0 mode ipv6-ipv4 6to4
# 配置Tunnel0接口的IPv6地址。
[SwitchB-Tunnel0] ipv6 address 3002::1/64
# 配置Tunnel0接口的源接口为Vlan-interface100。
[SwitchB-Tunnel0] source vlan-interface 100
[SwitchB-Tunnel0] quit
# 配置到目的地址2002::/16,下一跳为Tunnel接口的静态路由。
[SwitchB] ipv6 route-static 2002:: 16 tunnel 0
完成以上配置之后,Host A与Host B可以互相Ping通。
D:\>ping6 -s 2002:201:101:1::2 2002:501:101:1::2
Pinging 2002:501:101:1::2
from 2002:201:101:1::2 with 32 bytes of data:
Reply from 2002:501:101:1::2: bytes=32 time=13ms
Reply from 2002:501:101:1::2: bytes=32 time=1ms
Reply from 2002:501:101:1::2: bytes=32 time=1ms
Reply from 2002:501:101:1::2: bytes=32 time<1ms
Ping statistics for 2002:501:101:1::2:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 13ms, Average = 3ms
· ISATAP隧道不需要配置隧道的目的端地址,因为隧道的目的端地址可以通过ISATAP地址中嵌入的IPv4地址自动获得。
· 对于自动隧道,隧道模式相同的Tunnel接口建议不要同时配置完全相同的源端地址。
· 如果封装前IPv6报文的目的IPv6地址与Tunnel接口的IPv6地址不在同一个网段,则必须配置通过Tunnel接口到达目的IPv6地址的转发路由,以便需要进行封装的报文能正常转发。对于自动隧道,用户只能配置静态路由,指定到达目的IPv6地址的路由出接口为本端Tunnel接口或下一跳为对端Tunnel接口地址,不支持动态路由。在隧道的两端都要进行转发路由的配置,配置的详细情况请参见“三层技术-IP路由配置指导”中的“IPv6静态路由”。
(1) 进入系统视图。
system-view
(2) 进入模式为ISATAP隧道的Tunnel接口视图。
interface tunnel number [ mode ipv6-ipv4 isatap ]
(3) 设置Tunnel接口的IPv6地址。
详细配置方法,请参见“三层技术-IP业务配置指导”中的“IPv6基础”。
(4) 设置隧道的源端地址或源接口。
source { ipv4-address | interface-type interface-number }
缺省情况下,未设置隧道的源端地址和源接口。
如果设置的是隧道的源端地址,则该地址将作为封装后隧道报文的源IP地址;如果设置的是隧道的源接口,则该接口的主IP地址将作为封装后隧道报文的源IP地址。
(5) (可选)设置封装后隧道报文的DF(Don’t Fragment,不分片)标志。
tunnel dfbit enable
缺省情况下,未设置隧道报文的不分片标志,即转发隧道报文时允许分片。
如图2-5所示,IPv6网络和IPv4网络通过ISATAP交换机相连,在IPv4网络侧分布着一些IPv6主机。要求将IPv4网络中的IPv6主机通过ISATAP隧道接入到IPv6网络。
图2-5 ISATAP隧道组网图
(1) 配置Switch
# 配置接口HundredGigE1/0/1加入VLAN100。
<Switch> system-view
[Switch] vlan 100
[Switch-vlan100] port hundredgige 1/0/1
[Switch-vlan100] quit
# 配置接口Vlan-interface100的IPv6地址。
[Switch] interface vlan-interface 100
[Switch-Vlan-interface100] ipv6 address 3001::1/64
[Switch-Vlan-interface100] quit
# 配置接口HundredGigE1/0/2(隧道的实际物理接口)加入VLAN101。
[Switch] vlan 101
[Switch-vlan101] port hundredgige 1/0/2
[Switch-vlan101] quit
# 配置接口Vlan-interface101的IP地址。
[Switch] interface vlan-interface 101
[Switch-Vlan-interface101] ip address 1.1.1.1 255.0.0.0
[Switch-Vlan-interface101] quit
# 创建业务环回组1,并配置服务类型为tunnel。
[Switch] service-loopback group 1 type tunnel
# 将接口HundredGigE1/0/3加入业务环回组1。
[Switch] interface hundredgige 1/0/3
[Switch-HundredGigE1/0/3] port service-loopback group 1
[Switch-HundredGigE1/0/3] quit
# 创建模式为ISATAP隧道的接口Tunnel0。
[Switch] interface tunnel 0 mode ipv6-ipv4 isatap
# 配置Tunnel0接口采用EUI-64格式形成IPv6地址。
[Switch-Tunnel0] ipv6 address 2001:: 64 eui-64
# 配置Tunnel0接口的源接口为Vlan-interface101。
[Switch-Tunnel0] source vlan-interface 101
# 取消对RA消息发布的抑制,使主机可以通过交换机发布的RA消息获取地址前缀等信息。
[Switch-Tunnel0] undo ipv6 nd ra halt
[Switch-Tunnel0] quit
(2) 配置ISATAP主机
ISATAP主机上的具体配置与主机的操作系统有关,下面仅以Windows 7操作系统为例进行说明。
# 配置ISATAP交换机的IPv4地址。
C:\>netsh interface ipv6 isatap set router 1.1.1.1
(3) 配置IPv6主机
# 配置一条到ISATAP交换机隧道的路由。
C:\>netsh interface ipv6 set route 2001::/64 5 3001::1
# 在ISATAP主机上Ping IPv6主机的地址,可以Ping通,表明ISATAP隧道已经成功建立,ISATAP主机可访问IPv6网络中的主机。
C:\>ping 3001::2
Pinging 3001::2 with 32 bytes of data:
Reply from 3001::2: time=1ms
Reply from 3001::2: time=1ms
Reply from 3001::2: time=1ms
Reply from 3001::2: time=1ms
Ping statistics for 3001::2:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms
(1) 进入系统视图。
system-view
(2) 配置丢弃含有IPv4兼容IPv6地址的IPv6报文。
tunnel discard ipv4-compatible-packet
缺省情况下,不会丢弃含有IPv4兼容IPv6地址的IPv6报文。
IPv4 over IPv4隧道(RFC 1853)是对IPv4报文进行封装,使得一个IPv4网络的报文能够在另一个IPv4网络中传输。例如,运行IPv4协议的两个子网位于不同的区域,并且这两个子网都使用私网地址时,可以通过建立IPv4 over IPv4隧道,实现两个子网的互联。
图3-1 IPv4 over IPv4隧道原理图
报文在隧道中传输经过封装与解封装两个过程,以图3-1为例说明这两个过程:
· 封装过程
Device A连接IPv4主机所在子网的接口收到IPv4报文后,首先交由IPv4协议栈处理。IPv4协议栈根据IPv4报文头中的目的地址判断该报文需要通过隧道进行转发,则将此报文发给Tunnel接口。
Tunnel接口收到此报文后,在IPv4报文外再封装一个IPv4报文头,封装的报文头中源IPv4地址为隧道的源端地址,目的IPv4地址为隧道的目的端地址。封装完成后将报文重新交给IPv4协议栈处理,IPv4协议栈根据添加的IPv4报文头查找路由表,转发报文。
· 解封装过程
解封装过程和封装过程相反。Device B从接口收到IPv4报文后,将其送到IPv4协议栈处理。IPv4协议栈检查接收到的IPv4报文头中的协议号。如果协议号为4(表示封装的报文为IPv4报文),则将此IPv4报文发送到隧道模块进行解封装处理。解封装之后的IPv4报文将重新被送到IPv4协议栈进行二次路由处理。
· 在本端设备上为隧道指定的目的端地址,应该与在对端设备上为隧道指定的源端地址相同;在本端设备上为隧道指定的源端地址,应该与在对端设备上为隧道指定的目的端地址相同。
· 在同一台设备上,隧道模式相同的Tunnel接口建议不要同时配置完全相同的源端地址和目的端地址。
· 本端隧道接口的IPv4地址与隧道的目的端地址不能在同一个网段内。
· 如果封装前IPv4报文的目的IPv4地址与Tunnel接口的IPv4地址不在同一个网段,则必须配置通过Tunnel接口到达目的IPv4地址的转发路由,以便需要进行封装的报文能正常转发。用户可以配置静态路由,指定到达目的IPv4地址的路由出接口为本端Tunnel接口或下一跳为对端Tunnel接口地址。用户也可以配置动态路由,在Tunnel接口使能动态路由协议。在隧道的两端都要进行转发路由的配置,配置的详细情况请参见“三层技术-IP路由配置指导”中的“静态路由”或其他路由协议配置。
· 配置经过隧道接口的路由时,路由的目的地址不能与该隧道的目的端地址在同一个网段内。
(1) 进入系统视图。
system-view
(2) 进入模式为IPv4 over IPv4隧道的Tunnel接口视图。
interface tunnel number [ mode ipv4-ipv4 ]
(3) 设置Tunnel接口的IPv4地址。
ip address ip-address { mask | mask-length } [ sub ]
(4) 设置隧道的源端地址或源接口。
source { ipv4-address | interface-type interface-number }
缺省情况下,未设置隧道的源端地址和源接口。
如果设置的是隧道的源端地址,则该地址将作为封装后隧道报文的源IP地址;如果设置的是隧道的源接口,则该接口的主IP地址将作为封装后隧道报文的源IP地址。
(5) 设置隧道的目的端地址。
destination ipv4-address
缺省情况下,未设置隧道的目的端地址。
隧道的目的端地址是对端接收报文的接口的地址,该地址将作为封装后隧道报文的目的地址。
(6) (可选)设置封装后隧道报文的DF(Don’t Fragment,不分片)标志。
tunnel dfbit enable
缺省情况下,未设置隧道报文的不分片标志,即转发隧道报文时允许分片。
某些场景下,客户端需要通过构造多层封装的IPv4-in-IPv4报文来检测一条传输路径是否路由可达。此时,需要在传输路径的各个节点设备上配置本功能,即配置用于解封装IPv4-in-IPv4报文的地址对,来配合客户端完成传输路经可达性检测。
每组解封装地址对中包含一个目的IP地址和若干个源IP地址。目的IP地址可根据需要配置,并无无实际作用。源IP地址可通过如下三种方式配置:
· 指定设备上的一个路由可达的IP地址(通过source ip-address参数)作为地址对的源IP地址;
· 指定一个源接口(通过source interface-type interface-number参数),该接口的主IP地址将作为地址对中的源IP地址;
· 指定一组源IP地址(通过source direct参数)。系统通过遍历设备上所有接口状态为Up的三层接口、VLAN接口和LoopBack口,并将遍历到的接口的主IP地址(除子接口地址、VPN内地址、InLoopBack口地址以外)作为地址对中的源IP地址。
在待检测路径的各个节点设备上都需要配置一组解封装地址对。其中,待检测路径的终点设备上的地址对源IP地址可以通过指定源IP地址组、源IP地址或者源接口的方式配置,其它中间节点设备上的地址对源IP地址必须通过指定源IP地址组的方式配置。
在客户端构建IPv4-in-IPv4报文时,需将原始报文的目的地址设置为客户端自己的IP地址,然后在原始报文上逐层封装IP报文头。
IPv4-in-IPv4报文封装IP报文头的顺序应该与路径上节点设备解封装报文头的顺序相反,封装IP报文头的数量为链路节点设备个数×2-1。
IPv4-in-IPv4报文中每层IP报文头的源地址和目的地址都需要解封装该层报文头的节点设备上的解封装地址对对应,关系如下:
· 报文头中源地址对应解封装地址对中的目的IP地址;
· 报文头中目的地址对应解封装地址对中的源IP地址。
客户端构建的多层封装IPv4-in-IPv4报文每经过一个节点设备时,节点设备都会对接收到的报文进行解封装匹配,即将报文头中的源地址和目的地址与设备上配置的解封装地址对匹配。如果符合,则对该报文头进行解封装,否则不进行解封装。
节点设备解封装报文头后,会根据转发表项将该报文转发到下一个节点设备。后续报文转发路径上的节点设备依次执行以上匹配和解封装的动作,直到最后一个节点设备完成解封装。由于该多层封装IPv4-in-IPv4报文的原始报文目的地址为客户端自己的IP地址,如果该报文能够回到客户端,则说明路径可达;否则说明路径不可达。
例如:检测一条由2个节点设备组成的链路,以客户端为起点的设备顺序为:Host—>A—>B。
图3-2 IPv4 in IPv4报文匹配解封装流程图
解封装后,节点Device A根据转发表项将该报文转发到下一个节点Device B。节点Device B收到报文后,发现报文头与配置的解封装地址对匹配,对报文进行解封装后,根据转发表项将该报文转发到下一个节点Device A。节点Device A重复Device B的匹配和解封装的动作,将报文的最后一层报文头解封装。节点Device A根据转发表项将该报文转发到Host。Host收到报文后,则说明检测的路径可达。
指定一组IP地址作为解封装地址对的源IP地址的场景下,如果设备上存在端口地址借用的情况,当借用端口修改为非借用端口时,本功能会失效,需要重新配置本命令使功能生效。关于端口地址借用的详细信息请参见“三层技术-IP业务配置指导”中的“IP地址”。
(1) 进入系统视图。
system-view
(2) 配置解封装IPv4-in-IPv4报文的地址对。
tunnel ip-in-ip decapsulate-any [ destination ip-address ] source { ip-address | interface-type interface-number | direct }
缺省情况下,未配置解封装IPv4-in-IPv4报文的地址对。
运行IP协议的两个子网Group 1和Group 2位于不同的区域,这两个子网都使用私网地址。通过在交换机Switch A和交换机Switch B之间建立IPv4 over IPv4隧道,实现两个子网的互联。
图3-3 IPv4 over IPv4隧道组网图
在开始下面的配置之前,请确保Switch A和Switch B上已经创建相应的VLAN接口,且两者之间IPv4报文路由可达。
(1) 配置Switch A
# 配置接口HundredGigE1/0/1加入VLAN100。
<SwitchA> system-view
[SwitchA] vlan 100
[SwitchA-vlan100] port hundredgige 1/0/1
[SwitchA-vlan100] quit
# 配置接口Vlan-interface100的地址。
[SwitchA] interface vlan-interface 100
[SwitchA-Vlan-interface100] ip address 10.1.1.1 255.255.255.0
[SwitchA-Vlan-interface100] quit
# 配置接口HundredGigE1/0/2(隧道的实际物理接口)加入VLAN101。
[SwitchA] vlan 101
[SwitchA-vlan101] port hundredgige 1/0/2
[SwitchA-vlan101] quit
# 配置接口Vlan-interface101的IP地址。
[SwitchA] interface vlan-interface 101
[SwitchA-Vlan-interface101] ip address 2.1.1.1 255.255.255.0
[SwitchA-Vlan-interface101] quit
# 创建模式为IPv4 over IPv4隧道的接口Tunnel1。
[SwitchA] interface tunnel 1 mode ipv4-ipv4
# 配置Tunnel1接口的IP地址。
[SwitchA-Tunnel1] ip address 10.1.2.1 255.255.255.0
# 配置Tunnel1接口的源端地址(Vlan-interface101的IP地址)。
[SwitchA-Tunnel1] source 2.1.1.1
# 配置Tunnel1接口的目的端地址(Switch B的Vlan-interface101的IP地址)。
[SwitchA-Tunnel1] destination 3.1.1.1
[SwitchA-Tunnel1] quit
# 配置从Switch A经过Tunnel1接口到Group 2的静态路由。
[SwitchA] ip route-static 10.1.3.0 255.255.255.0 tunnel 1
(2) 配置Switch B
# 配置接口HundredGigE1/0/1加入VLAN100。
<SwitchB> system-view
[SwitchB] vlan 100
[SwitchB-vlan100] port hundredgige 1/0/1
[SwitchB-vlan100] quit
# 配置接口Vlan-interface100的IP地址。
[SwitchB] interface vlan-interface 100
[SwitchB-Vlan-interface100] ip address 10.1.3.1 255.255.255.0
[SwitchB-Vlan-interface100] quit
# 配置接口HundredGigE1/0/2(隧道的实际物理接口)加入VLAN101。
[SwitchB] vlan 101
[SwitchB-vlan101] port hundredgige 1/0/2
[SwitchB-vlan101] quit
# 配置接口Vlan-interface101的IP地址。
[SwitchB] interface vlan-interface 101
[SwitchB-Vlan-interface101] ip address 3.1.1.1 255.255.255.0
[SwitchB-Vlan-interface101] quit
# 创建模式为IPv4 over IPv4隧道的接口Tunnel2。
[SwitchB] interface tunnel 2 mode ipv4-ipv4
# 配置Tunnel2接口的IP地址。
[SwitchB-Tunnel2] ip address 10.1.2.2 255.255.255.0
# 配置Tunnel2接口的源端地址(Vlan-interface101的IP地址)。
[SwitchB-Tunnel2] source 3.1.1.1
# 配置Tunnel2接口的目的端地址(SwitchA的Vlan-interface101的IP地址)。
[SwitchB-Tunnel2] destination 2.1.1.1
[SwitchB-Tunnel2] quit
# 配置从Switch B经过Tunnel2接口到Group 1的静态路由。
[SwitchB] ip route-static 10.1.1.0 255.255.255.0 tunnel 2
# 完成上述配置后,在Switch A和Switch B上分别执行display interface tunnel命令,可以看出Tunnel接口处于up状态。(具体显示信息略)
# 从Switch A和Switch B上可以Ping通对端的Vlan-interface100接口的IPv4地址。下面仅以Switch A为例。
[SwitchA] ping -a 10.1.1.1 10.1.3.1
Ping 10.1.3.1 (10.1.3.1) from 10.1.1.1: 56 data bytes, press CTRL+C to break
56 bytes from 10.1.3.1: icmp_seq=0 ttl=255 time=2.000 ms
56 bytes from 10.1.3.1: icmp_seq=1 ttl=255 time=1.000 ms
56 bytes from 10.1.3.1: icmp_seq=2 ttl=255 time=0.000 ms
56 bytes from 10.1.3.1: icmp_seq=3 ttl=255 time=1.000 ms
56 bytes from 10.1.3.1: icmp_seq=4 ttl=255 time=1.000 ms
--- Ping statistics for 10.1.3.1 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.000/1.000/2.000/0.632 ms
随着IPv6网络的广泛部署,IPv6网络将逐渐取代IPv4网络,占据主导地位。尚未被IPv6网络取代的IPv4网络将形成孤岛,需要通过IPv6网络互通。IPv4 over IPv6隧道在IPv4报文上封装IPv6的报文头,通过隧道使IPv4报文穿越IPv6网络,从而实现通过IPv6网络连接隔离的IPv4网络孤岛。
图4-1 IPv4 over IPv6隧道原理图
IPv4报文在隧道中传输经过封装与解封装两个过程,以图4-1为例说明这两个过程:
· 封装过程
Device A连接IPv4网络的接口收到IPv4报文后,首先交由IPv4协议栈处理。IPv4协议栈根据IPv4报文头中的目的地址判断该报文需要通过隧道进行转发,则将此报文发给Tunnel接口。
Tunnel接口收到此报文后添加IPv6报文头,IPv6报文头中源IPv6地址为隧道的源端地址,目的IPv6地址为隧道的目的端地址。封装完成后将报文交给IPv6模块处理。IPv6协议模块根据IPv6报文头的目的地址重新确定如何转发此报文。
· 解封装过程
解封装过程和封装过程相反。从连接IPv6网络的接口接收到IPv6报文后,将其送到IPv6协议模块。IPv6协议模块检查IPv6报文封装的协议类型。若封装的协议为IPv4,则报文进入隧道处理模块进行解封装处理。解封装之后的IPv4报文被送往IPv4协议模块进行二次路由处理。
· 在本端设备上为隧道指定的目的端地址,应该与在对端设备上为隧道指定的源端地址相同;在本端设备上为隧道指定的源端地址,应该与在对端设备上为隧道指定的目的端地址相同。
· 在同一台设备上,隧道模式相同的Tunnel接口建议不要同时配置完全相同的源端地址和目的端地址。
· 如果封装前IPv4报文的目的IPv4地址与Tunnel接口的IPv4地址不在同一个网段,则必须配置通过Tunnel接口到达目的IPv4地址的转发路由,以便需要进行封装的报文能正常转发。用户只能配置静态路由,指定到达目的IPv4地址的路由出接口为本端Tunnel接口或下一跳为对端Tunnel接口地址,不支持动态路由。在隧道的两端都要进行转发路由的配置,配置的详细情况请参见“三层技术-IP路由配置指导”中的“静态路由”。
(1) 进入系统视图。
system-view
(2) 进入模式为IPv6隧道的Tunnel接口视图。
interface tunnel number [ mode ipv6 ]
(3) 设置Tunnel接口的IPv4地址。
ip address ip-address { mask | mask-length } [ sub ]
(4) 设置隧道的源端地址或源接口。
source { ipv6-address | interface-type interface-number }
缺省情况下,未设置隧道的源端地址和源接口。
如果设置的是隧道的源端地址,则该地址将作为封装后隧道报文的源IPv6地址;如果设置的是隧道的源接口,则该接口下的最小地址将作为封装后隧道报文的源IPv6地址。
(5) 设置隧道的目的端地址。
destination ipv6-address
缺省情况下,未设置隧道的目的端地址。
隧道的目的端地址是对端接收报文的接口的地址,该地址将作为封装后隧道报文的目的IPv6地址。
两个IPv4网络分别通过Switch A和Switch B与IPv6网络连接。通过在Switch A和Switch B之间建立IPv4 over IPv6隧道,实现两个IPv4网络穿越IPv6网络互联。
图4-2 IPv4 over IPv6隧道组网图
在开始下面的配置之前,请确保Switch A和Switch B上已经创建相应的VLAN接口,且两者之间IPv6报文路由可达。
(1) 配置Switch A
# 配置接口HundredGigE1/0/1加入VLAN100。
<SwitchA> system-view
[SwitchA] vlan 100
[SwitchA-vlan100] port hundredgige 1/0/1
[SwitchA-vlan100] quit
# 配置接口Vlan-interface100的IP地址。
[SwitchA] interface vlan-interface 100
[SwitchA-Vlan-interface100] ip address 30.1.1.1 255.255.255.0
[SwitchA-Vlan-interface100] quit
# 配置接口HundredGigE1/0/2(隧道的实际物理接口)加入VLAN101。
[SwitchA] vlan 101
[SwitchA-vlan101] port hundredgige 1/0/2
[SwitchA-vlan101] quit
# 配置接口Vlan-interface101的IPv6地址。
[SwitchA] interface vlan-interface 101
[SwitchA-Vlan-interface101] ipv6 address 2001::1:1 64
[SwitchA-Vlan-interface101] quit
# 创建模式为IPv6隧道的接口Tunnel1。
[SwitchA] interface tunnel 1 mode ipv6
# 配置Tunnel1接口的IP地址。
[SwitchA-Tunnel1] ip address 30.1.2.1 255.255.255.0
# 配置Tunnel1接口的源端地址(Vlan-interface101的IP地址)。
[SwitchA-Tunnel1] source 2001::1:1
# 配置Tunnel1接口的目的端地址(Switch B的Vlan-interface101的IP地址)。
[SwitchA-Tunnel1] destination 2003::2:1
[SwitchA-Tunnel1] quit
# 配置从Switch A经过Tunnel1接口到IPv4 network 2的静态路由。
[SwitchA] ip route-static 30.1.3.0 255.255.255.0 tunnel 1
(2) 配置Switch B
# 配置接口HundredGigE1/0/1加入VLAN100。
<SwitchB> system-view
[SwitchB] vlan 100
[SwitchB-vlan100] port hundredgige 1/0/1
[SwitchB-vlan100] quit
# 配置接口Vlan-interface100的IP地址。
[SwitchB] interface vlan-interface 100
[SwitchB-Vlan-interface100] ip address 30.1.3.1 255.255.255.0
[SwitchB-Vlan-interface100] quit
# 配置接口HundredGigE1/0/2(隧道的实际物理接口)加入VLAN101。
[SwitchB] vlan 101
[SwitchB-vlan101] port hundredgige 1/0/2
[SwitchB-vlan101] quit
# 配置接口Vlan-interface101的IPv6地址。
[SwitchB] interface vlan-interface 101
[SwitchB-Vlan-interface101] ipv6 address 2003::2:1 64
[SwitchB-Vlan-interface101] quit
# 创建模式为IPv6隧道的接口Tunnel2。
[SwitchB] interface tunnel 2 mode ipv6
# 配置Tunnel2接口的IP地址。
[SwitchB-Tunnel2] ip address 30.1.2.2 255.255.255.0
# 配置Tunnel2接口的源端地址(Vlan-interface101的IP地址)。
[SwitchB-Tunnel2] source 2003::2:1
# 配置Tunnel2接口的目的端地址(Switch A的Vlan-interface101的IP地址)。
[SwitchB-Tunnel2] destination 2001::1:1
[SwitchB-Tunnel2] quit
# 配置从Switch B经过Tunnel2接口到IPv4 network 1的静态路由。
[SwitchB] ip route-static 30.1.1.0 255.255.255.0 tunnel 2
# 完成上述配置后,在Switch A和Switch B上分别执行display interface tunnel命令,可以看出Tunnel接口处于up状态。(具体显示信息略)
# 从Switch A和Switch B上可以Ping通对端的Vlan-interface100接口的IPv4地址。下面仅以Switch A为例。
[SwitchA] ping -a 30.1.1.1 30.1.3.1
Ping 30.1.3.1 (30.1.3.1) from 30.1.1.1: 56 data bytes, press CTRL+C to break
56 bytes from 30.1.3.1: icmp_seq=0 ttl=255 time=3.000 ms
56 bytes from 30.1.3.1: icmp_seq=1 ttl=255 time=1.000 ms
56 bytes from 30.1.3.1: icmp_seq=2 ttl=255 time=0.000 ms
56 bytes from 30.1.3.1: icmp_seq=3 ttl=255 time=1.000 ms
56 bytes from 30.1.3.1: icmp_seq=4 ttl=255 time=1.000 ms
--- Ping statistics for 30.1.3.1 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.000/1.200/3.000/0.980 ms
IPv6 over IPv6隧道(RFC 2473)是对IPv6报文进行封装,使这些被封装的报文能够在另一个IPv6网络中传输,封装后的报文即IPv6隧道报文。例如,如果运行IPv6协议的两个子网的网络地址不希望泄露到IPv6网络中,则可以通过建立IPv6 over IPv6隧道,实现在两个子网的网络地址不被泄露的情况下,使两个子网互通。
图5-1 IPv6 over IPv6隧道原理图
IPv6报文在隧道中传输经过封装与解封装两个过程,以图5-1为例说明这两个过程:
· 封装过程
Device A连接网络A的接口收到IPv6报文后,首先交由IPv6协议模块处理。IPv6协议模块根据报文的目的IPv6地址判断该报文需要通过隧道进行转发,则将此报文发给Tunnel接口。
Tunnel接口收到此报文后,为IPv6报文再封装一个IPv6报文头,封装的IPv6报文头中源IPv6地址为隧道的源端地址,目的IPv6地址为隧道的目的端地址。封装完成后将报文交给IPv6模块处理。IPv6协议模块根据添加的IPv6报文头的目的地址重新确定如何转发此报文。
· 解封装过程
解封装过程和封装过程相反。从IPv6网络接口接收的报文被送到IPv6协议模块。IPv6协议模块检查IPv6报文封装的协议类型。若封装的协议为IPv6,则报文进入隧道处理模块进行解封装处理;解封装之后的报文被送往相应的协议模块进行二次路由处理。
· 在本端设备上为隧道指定的目的端地址,应该与在对端设备上为隧道指定的源端地址相同;在本端设备上为隧道指定的源端地址,应该与在对端设备上为隧道指定的目的端地址相同。
· 在同一台设备上,隧道模式相同的Tunnel接口建议不要同时配置完全相同的源端地址和目的端地址。
· 本端隧道接口的IPv6地址与隧道的目的端地址不能在同一个网段内。
· 如果封装前IPv6报文的目的IPv6地址与Tunnel接口的IPv6地址不在同一个网段,则必须配置通过Tunnel接口到达目的IPv6地址的转发路由,以便需要进行封装的报文能正常转发。用户只能配置静态路由,指定到达目的IPv6地址的路由出接口为本端Tunnel接口或下一跳为对端Tunnel接口地址,不支持动态路由。在隧道的两端都要进行转发路由的配置,配置的详细情况请参见“三层技术-IP路由配置指导”中的“IPv6静态路由”。
· 配置经过隧道接口的路由时,路由的目的地址不能与该隧道的目的端地址在同一个网段内。
IPv6 over IPv6隧道配置任务如下:
(2) (可选)配置丢弃含有IPv4兼容IPv6地址的IPv6报文
(3) (可选)配置解封装IPv6-in-IPv6报文的地址对
(1) 进入系统视图。
system-view
(2) 进入模式为IPv6隧道的Tunnel接口视图。
interface tunnel number [ mode ipv6 ]
(3) 设置Tunnel接口的IPv6地址。
详细配置方法,请参见“三层技术-IP业务配置指导”中的“IPv6基础”。
(4) 设置隧道的源端地址或源接口。
source { ipv6-address | interface-type interface-number }
缺省情况下,未设置隧道的源端地址和源接口。
如果设置的是隧道的源端地址,则该地址将作为封装后隧道报文的源IPv6地址;如果设置的是隧道的源接口,则该接口下的最小地址将作为封装后隧道报文的源IPv6地址。
(5) 设置隧道的目的端地址。
destination ipv6-address
缺省情况下,未设置隧道的目的端地址。
隧道的目的端地址是对端接收报文的接口的地址,该地址将作为封装后隧道报文的目的IPv6地址。
(1) 进入系统视图。
system-view
(2) 配置丢弃含有IPv4兼容IPv6地址的IPv6报文。
tunnel discard ipv4-compatible-packet
缺省情况下,不会丢弃含有IPv4兼容IPv6地址的IPv6报文。
某些场景下,客户端需要通过构造多层封装的IPv6-in-IPv6报文来检测一条传输路径是否路由可达。此时,需要在传输路径的各个节点设备上配置本功能,即配置用于解封装IPv6-in-IPv6报文的地址对,来配合客户端完成传输路经可达性检测。
每组解封装地址对中包含一个目的IP地址和若干个源IPv6地址。目的IPv6地址可根据需要配置,并无无实际作用。源IPv6地址可通过如下三种方式配置:
· 指定设备上的一个路由可达的IPv6地址(通过source ipv6-address参数)作为地址对的源IPv6地址;
· 指定一个源接口(通过source interface-type interface-number参数),该接口的主IPv6地址将作为地址对中的源IPv6地址;
· 指定一组源IPv6地址(通过source direct参数)。系统通过遍历设备上所有接口状态为Up的三层接口、VLAN接口和LoopBack口,并将遍历到的接口的全球单播IPv6地址和LinkLoacal地址(除子接口地址、VPN内地址、InLoopBack口地址以外)作为地址对中的源IPv6地址。
在待检测路径的各个节点设备上都需要配置一组解封装地址对。其中,待检测路径的终点设备上的地址对源IPv6地址可以通过指定源IPv6地址组、源IPv6地址或者源接口的方式配置,其它中间节点设备上的地址对源IPv6地址必须通过指定源IPv6地址组的方式配置。
在客户端构建IPv6-in-IPv6报文时,需将原始报文的目的地址设置为客户端自己的IPv6地址,然后在原始报文上逐层封装IPv6报文头。
IPv6-in-IPv6报文封装IPv6报文头的顺序应该与路径上节点设备解封装报文头的顺序相反,封装IPv6报文头的数量为链路节点设备个数×2-1。
IPv6-in-IPv6报文中每层IPv6报文头的源地址和目的地址都需要解封装该层报文头的节点设备上的解封装地址对对应,关系如下:
· 报文头中源地址对应解封装地址对中的目的IPv6地址;
· 报文头中目的地址对应解封装地址对中的源IPv6地址。
客户端构建的多层封装IPv6-in-IPv6报文每经过一个节点设备时,节点设备都会对接收到的报文进行解封装匹配,即将报文头中的源地址和目的地址与设备上配置的解封装地址对匹配。如果符合,则对该报文头进行解封装,否则不进行解封装。
节点设备解封装报文头后,会根据转发表项将该报文转发到下一个节点设备。后续报文转发路径上的节点设备依次执行以上匹配和解封装的动作,直到最后一个节点设备完成解封装。由于该多层封装IPv6-in-IPv6报文的原始报文目的地址为客户端自己的IPv6地址,如果该报文能够回到客户端,则说明路径可达;否则说明路径不可达。
指定一组IPv6地址作为解封装地址对的源IPv6地址的场景下,如果设备上不同接口存在相同的LinkLocal地址,其中任何接口状态改变,都会导致该LinkLocal地址的解封装表被删除,此时本功能失效,需要重新配置本命令使功能生效。
(3) 进入系统视图。
system-view
(4) 配置解封装IPv6-in-IPv6报文的地址对。
tunnel ipv6-in-ipv6 decapsulate-any [ destination ipv6-address ] source { ipv6-address | interface-type interface-number | direct }
缺省情况下,未配置解封装IPv6-in-IPv6报文的地址对。
运行IPv6协议的两个子网Group 1和Group 2的网络地址不希望泄露到IPv6网络中。网络管理员通过在交换机Switch A和交换机Switch B之间建立IPv6 over IPv6隧道,实现在Group 1和Group 2的网络地址不被泄露的情况下,确保Group 1和Group 2互通。
图5-2 IPv6 over IPv6隧道组网图
在开始下面的配置之前,请确保Switch A和Switch B上已经创建相应的VLAN接口,且两者之间IPv6报文路由可达。
(1) 配置Switch A
# 配置接口HundredGigE1/0/1加入VLAN100。
<SwitchA> system-view
[SwitchA] vlan 100
[SwitchA-vlan100] port hundredgige 1/0/1
[SwitchA-vlan100] quit
# 配置接口Vlan-interface100的IPv6地址。
[SwitchA] interface vlan-interface 100
[SwitchA-Vlan-interface100] ipv6 address 2003:1::1 64
[SwitchA-Vlan-interface100] quit
# 配置接口HundredGigE1/0/2(隧道的实际物理接口)加入VLAN101。
[SwitchA] vlan 101
[SwitchA-vlan101] port hundredgige 1/0/2
[SwitchA-vlan101] quit
# 配置接口Vlan-interface101的IPv6地址。
[SwitchA] interface vlan-interface 101
[SwitchA-Vlan-interface101] ipv6 address 2001::11:1 64
[SwitchA-Vlan-interface101] quit
# 创建模式为IPv6隧道的接口Tunnel1。
[SwitchA] interface tunnel 1 mode ipv6
# 配置Tunnel1接口的IP地址。
[SwitchA-Tunnel1] ipv6 address 3001::1:1 64
# 配置Tunnel1接口的源端地址(Vlan-interface101的IP地址)。
[SwitchA-Tunnel1] source 2001::11:1
# 配置Tunnel1接口的目的端地址(Switch B的Vlan-interface101的IP地址)。
[SwitchA-Tunnel1] destination 2003::22:1
[SwitchA-Tunnel1] quit
# 配置从Switch A经过Tunnel1接口到Group 2的静态路由。
[SwitchA] ipv6 route-static 2003:3:: 64 tunnel 1
(2) 配置Switch B
# 配置接口HundredGigE1/0/1加入VLAN100。
<SwitchB> system-view
[SwitchB] vlan 100
[SwitchB-vlan100] port hundredgige 1/0/1
[SwitchB-vlan100] quit
# 配置接口Vlan-interface100的IPv6地址。
[SwitchB] interface vlan-interface 100
[SwitchB-Vlan-interface100] ipv6 address 2003:3::1 64
[SwitchB-Vlan-interface100] quit
# 配置接口HundredGigE1/0/2(隧道的实际物理接口)加入VLAN101。
[SwitchB] vlan 101
[SwitchB-vlan101] port hundredgige 1/0/2
[SwitchB-vlan101] quit
# 配置接口Vlan-interface101的IPv6地址。
[SwitchB] interface vlan-interface 101
[SwitchB-Vlan-interface101] ipv6 address 2003::22:1 64
[SwitchB-Vlan-interface101] quit
# 创建模式为IPv6隧道的接口Tunnel2。
[SwitchB] interface tunnel 2 mode ipv6
# 配置Tunnel2接口的IP地址。
[SwitchB-Tunnel2] ipv6 address 3001::1:2 64
# 配置Tunnel2接口的源端地址(Vlan-interface101的IP地址)。
[SwitchB-Tunnel2] source 2003::22:1
# 配置Tunnel2接口的目的端地址(Switch A的Vlan-interface101的IP地址)。
[SwitchB-Tunnel2] destination 2001::11:1
[SwitchB-Tunnel2] quit
# 配置从Switch B经过Tunnel2接口到Group 1的静态路由。
[SwitchB] ipv6 route-static 2003:1:: 64 tunnel 2
# 完成上述配置后,在Switch A和Switch B上分别执行display ipv6 interface命令,可以看出Tunnel接口处于up状态。(具体显示信息略)
# 从Switch A和Switch B上可以Ping通对端的Vlan-interface100接口的IPv6地址。下面仅以Switch A为例。
[SwitchA] ping ipv6 -a 2003:1::1 2003:3::1
Ping6(56 data bytes) 2003:1::1 --> 2003:3::1, press CTRL+C to break
56 bytes from 2003:3::1, icmp_seq=0 hlim=64 time=9.000 ms
56 bytes from 2003:3::1, icmp_seq=1 hlim=64 time=1.000 ms
56 bytes from 2003:3::1, icmp_seq=2 hlim=64 time=0.000 ms
56 bytes from 2003:3::1, icmp_seq=3 hlim=64 time=0.000 ms
56 bytes from 2003:3::1, icmp_seq=4 hlim=64 time=0.000 ms
--- Ping6 statistics for 2003:3::1 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.000/2.000/9.000/3.521 ms
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!