01-IPv4 over IPv4隧道配置
本章节下载: 01-IPv4 over IPv4隧道配置 (245.47 KB)
IPv4 over IPv4隧道(RFC 1853)是对IPv4报文进行封装,使得一个IPv4网络的报文能够在另一个IPv4网络中传输。例如,运行IPv4协议的两个子网位于不同的区域,并且这两个子网都使用私网地址时,可以通过建立IPv4 over IPv4隧道,实现两个子网的互联。
图1-1 IPv4 over IPv4隧道原理图
报文在隧道中传输经过封装与解封装两个过程,以图1-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路由配置指导”中的“静态路由”或其他路由协议配置。
· 配置经过隧道接口的路由时,路由的目的地址不能与该隧道的目的端地址在同一个网段内。
· 本配置任务仅列出了配置IPv4 over IPv4隧道涉及的隧道接口相关的基础配置命令(interface tunnel、source、destination和tunnel dfbit enable命令),关于隧道接口的更多配置命令的详细介绍,请参见“接口管理命令参考”中的“隧道接口”。
· 当通过隧道的报文长度超过MTU值时,报文将上送CPU进行转发;当通过隧道的报文长度小于MTU值时,报文将正常通过硬件转发。
(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地址可根据需要配置,并无无实际作用,若不配置,系统会默认设置为0.0.0.0。源IP地址可通过如下三种方式配置:
· 指定设备上的一个路由可达的IP地址(通过source ip-address参数)作为地址对的源IP地址;
· 指定一个源接口(通过source interface-type interface-number参数),该接口的主IP地址将作为地址对中的源IP地址;
· 指定一组源IP地址(通过source direct参数)。系统通过遍历设备上所有接口状态为Up的三层接口、VLAN接口和LoopBack口,并将遍历到的前1000个接口的主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。
图1-2 IPv4 in IPv4报文匹配解封装流程图
解封装后,节点Device A根据转发表项将该报文转发到下一个节点Device B。节点Device B收到报文后,发现报文头与配置的解封装地址对匹配,对报文进行解封装后,根据转发表项将该报文转发到下一个节点Device A。节点Device A重复Device B的匹配和解封装的动作,将报文的最后一层报文头解封装。节点Device A根据转发表项将该报文转发到Host。Host收到报文后,则说明检测的路径可达。
(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报文的地址对。
配置此命令解封装IPv4-in-IPv4报文的地址对时,外层解封装会根据命令行要求解封装外层IPv4地址;内层无论是IPv4或IPv6地址,都会被解封装。
可在任意视图下执行以下命令:
· 显示IPv4 over IPv4隧道接口的信息。
display tunnel-interface [ number ]
本命令的详细介绍,请参见“接口管理命令参考”中的“隧道接口命令”。
· 显示IPv4 over IPv4隧道接口的相关信息。
display interface [ tunnel [ number ] ] [ brief [ description | down ] ]
本命令的详细介绍,请参见“接口管理命令参考”中的“隧道接口命令”。
请在用户视图下执行以下命令,清除IPv4 over IPv4 隧道接口的统计信息。
reset counters interface [ tunnel [ number ] ]
本命令的详细介绍,请参见“接口管理命令参考”中的“接口公共命令”。
运行IP协议的两个子网Group 1和Group 2位于不同的区域,这两个子网都使用私网地址。通过在路由器Router A和路由器Router B之间建立IPv4 over IPv4隧道,实现两个子网的互联。
图1-3 IPv4 over IPv4隧道组网图
在开始下面的配置之前,请确保Router A和Router B之间IPv4报文路由可达。
(1) 配置Router A
# 配置接口HundredGigE1/0/1的地址。
<RouterA> system-view
[RouterA] interface hundredgige 1/0/1
[RouterA-HundredGigE1/0/1] ip address 10.1.1.1 255.255.255.0
[RouterA-HundredGigE1/0/1] quit
# 配置接口HundredGigE1/0/2(隧道的实际物理接口)的地址。
[RouterA] interface hundredgige 1/0/2
[RouterA-HundredGigE1/0/2] ip address 2.1.1.1 255.255.255.0
[RouterA-HundredGigE1/0/2] quit
# 创建模式为IPv4 over IPv4隧道的接口Tunnel1。
[RouterA] interface tunnel 1 mode ipv4-ipv4
# 配置Tunnel1接口的IP地址。
[RouterA-Tunnel1] ip address 10.1.2.1 255.255.255.0
# 配置Tunnel1接口的源端地址(HundredGigE1/0/2的IP地址)。
[RouterA-Tunnel1] source 2.1.1.1
# 配置Tunnel1接口的目的端地址(RouterB的HundredGigE1/0/2的IP地址)。
[RouterA-Tunnel1] destination 3.1.1.1
[RouterA-Tunnel1] quit
# 配置从Router A经过Tunnel1接口到Group 2的静态路由。
[RouterA] ip route-static 10.1.3.0 255.255.255.0 tunnel 1
(2) 配置Router B
# 配置接口HundredGigE1/0/1的地址。
<RouterB> system-view
[RouterB] interface hundredgige 1/0/1
[RouterB-HundredGigE1/0/1] ip address 10.1.3.1 255.255.255.0
[RouterB-HundredGigE1/0/1] quit
# 配置接口HundredGigE1/0/2(隧道的实际物理接口)的地址。
[RouterB] interface hundredgige 1/0/2
[RouterB-HundredGigE1/0/2] ip address 3.1.1.1 255.255.255.0
[RouterB-HundredGigE1/0/2] quit
# 创建模式为IPv4 over IPv4隧道的接口Tunnel2。
[RouterB] interface tunnel 2 mode ipv4-ipv4
# 配置Tunnel2接口的IP地址。
[RouterB-Tunnel2] ip address 10.1.2.2 255.255.255.0
# 配置Tunnel2接口的源端地址(HundredGigE1/0/2的IP地址)。
[RouterB-Tunnel2] source 3.1.1.1
# 配置Tunnel2接口的目的端地址(Router A的HundredGigE1/0/2的IP地址)。
[RouterB-Tunnel2] destination 2.1.1.1
[RouterB-Tunnel2] quit
# 配置从Router B经过Tunnel2接口到Group 1的静态路由。
[RouterB] ip route-static 10.1.1.0 255.255.255.0 tunnel 2
# 完成上述配置后,在Router A和Router B上分别执行display interface tunnel命令,可以看出Tunnel接口处于up状态。(具体显示信息略)
# 从Router A和Router B上可以Ping通对端的HundredGigE1/0/1接口的IPv4地址。下面仅以Router A为例。
[RouterA] 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
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!