【sdwan实验】versa分支vxlan双向NAT打通

拓扑图

在这里插入图片描述


如上,分支flexVNF yb(左下)在路由器R-yb LAN侧,yb通过R-yb SNAT后连通到WAN;
versa VNF分支liuhao(右上)在路由器R-other LAN侧,刘浩通过R-other后连通到WAN。

分支pl 有WAN侧地址,任何在SNAT后的分支,都能很顺利的和他建立vxlan隧道。
但是yb和liuhao都在SNAT后面,他们是否能直接打通vxlan隧道呢?

答案是肯定的,接下来我们通过实验来分析一下。

穿NAT实验

地址分配

  • vIOS 路由器 (WAN路由器)
    • g0/0 101.1.1.1/24
    • g0/1 102.0.0.1/24
    • g0/2 103.1.1.1/24
    • g0/3 104.0.0.1/24
  • controller
    • 101.1.1.2
  • yb 分支flex vnf
    • Lan 33.1.1.1/24
    • e1 (wan0) 102.1.1.10
  • R-yb 路由器
    • g0/0 102.1.1.1/24 (模拟内网地址)
    • g0/1 102.0.0.2/24 (模拟wan地址)
    • snat规则,将102.1.1.0/24 转换成102.0.0.2
  • liuhao 分支flex vnf
    • e1 (wan0) 104.1.1.2 (dhcp方式获取)
    • Lan33.1.3.1/24
  • R-other 路由器
    • g0/0 104.1.1.1/24(模拟内网地址)
    • g0/1 104.0.0.2/24(模拟wan地址)
    • snat规则,将104.1.1.0/24 转换成104.0.0.2

测试连通性

yb分支vpc4 (33.1.1.10) ping 33.1.3.10

在这里插入图片描述


两个在SNAT后面的分支直接通过路由器上WAN侧地址建立起来了vxlan隧道。

原理分析

通过抓包,不难发现,vxlan的UDP数据包源目标端口都是4790,在R-yb上查看NAT表:

Router#show ip nat translations
Pro Inside global      Inside local       Outside local      Outside global
udp 102.0.0.2:4790     102.1.1.10:4790    101.1.1.2:4790     101.1.1.2:4790
udp 102.0.0.2:4790     102.1.1.10:4790    103.1.1.100:4790   103.1.1.100:4790
udp 102.0.0.2:4790     102.1.1.10:4790    104.0.0.2:4790     104.0.0.2:4790

102.1.1.2:4790 -> 104.0.0.2:4790 被SNAT转换为 102.0.0.2:4790 -> 104.0.0.2:4790

转换后的数据包是能顺利发送到R-other上的,R-other并不一定能将数据包转换给内网的liuhao。
而这个时候,如果liuhao也正在穿SNAT,那么R-other上正好产生了相反的转换表项,如下,我们登录到R-ohter上查看NAT表:

Router#show ip nat translations
Pro Inside global      Inside local       Outside local      Outside global
udp 104.0.0.2:4790     104.1.1.2:4790     101.1.1.2:4790     101.1.1.2:4790
udp 104.0.0.2:4790     104.1.1.2:4790     102.0.0.2:4790     102.0.0.2:4790
udp 104.0.0.2:4790     104.1.1.2:4790     103.1.1.100:4790   103.1.1.100:4790

可以看到对方的公网路由器R-other上正好有NAT会话表是对应的,于是双向SNAT被打通了,vxlan数据包完成转换,发送到liuhao:
102.0.0.2:4790 -> 104.0.0.2:4790 根据snat会话,反向转换 102.0.0.2:4790 -> 104.1.1.2:4790

问题思考

以上双向SNAT穿透,数据包的源目标端口都是4790,而且通过路由器转换,源端口也没有变化,两个路由器产生的snat会话正好能够对上,感觉穿透是一个巧合。

问题

动态的SNAT,源端口转不转换不是绝对的,而一旦源端口变化了,很可能分支之间就无法打通了。
设想一下,万一路由器R-yb ,将 102.1.1.2:4790 转换成 102.0.0.2:5000,发送出去,而liuhao发送的vxlan包目的地却是102.0.0.2:4790 ,他在R-other产生的SNAT会话和R-yb发出来的数据包对不上,那就完成不了穿越了。

设想的解法

  1. 两个分支要打通双向SNAT,他们先连到controller,与controller实时通信;
  2. 当分支间打不通的时候,controller给双方随机分配一个端口,分支间用新的端口作为源目标端口继续尝试打通vxlan隧道(总能找到不会被SNAT更改的源端口)
  3. 反复尝试,直到建立成功

实际验证结果

在这里插入图片描述

  • 验证方法:

R-yb内网新增一个分支jilin,通过SNAT转换成同一个地址出去。如果jilin也能和liuhao建立起vxlan隧道,那么versa就解决了snat后分支间打通隧道的问题。

  • 将yb和jilin都启动后:

R-yb上查看ip nat表:


Router#show ip nat translations
Pro Inside global      Inside local       Outside local      Outside global
udp 102.0.0.2:4790     102.1.1.10:4790    101.1.1.2:4790     101.1.1.2:4790
udp 102.0.0.2:4790     102.1.1.10:4790    103.1.1.100:4790   103.1.1.100:4790
udp 102.0.0.2:4790     102.1.1.10:4790    104.0.0.2:4790     104.0.0.2:4790
udp 102.0.0.2:1024     105.1.1.10:4790    101.1.1.2:4790     101.1.1.2:4790
udp 102.0.0.2:1026     105.1.1.10:4790    103.1.1.100:4790   103.1.1.100:4790
udp 102.0.0.2:1025     105.1.1.10:4790    104.0.0.2:4790     104.0.0.2:4790
udp 102.0.0.2:1027     105.1.1.10:4790    104.1.1.2:4790     104.1.1.2:4790

由于都是去连liuhao 104.0.0.2:4790, jilin 105.1.1.10:4790被snat成102.0.0.2:1025, 而对方R-other上找不到对应的转换表项,因此vxlan数据包发送不到liuhao。vxlan隧道不通!

在jilin上查看路由,也发现没有到liuhao LAN的路由:


Routes for Routing instance : networktcpip-LAN-VR  AFI: ipv4  SAFI: unicast

Codes: E1 - OSPF external type 1, E2 - OSPF external type 2
IA - inter area, iA - intra area,
L1 - IS-IS level-1, L2 - IS-IS level-2
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
RTI - Learnt from another routing-instance
+ - Active Route

Prot   Type  Dest Address/Mask   Next-hop        Age      Interface name
----   ----  -----------------   --------        ---      --------------
BGP    N/A  +33.1.1.0/24         10.0.0.4        00:55:17 Indirect
BGP    N/A  +33.1.2.0/24         10.0.0.6        00:55:25 Indirect
conn   N/A  +33.1.5.0/24         0.0.0.0         00:55:37 vni-0/1.0
local  N/A  +33.1.5.1/32         0.0.0.0         00:55:37 directly connected

结论

versa只能穿越源端口没有转换的SNAT,当多个分支穿越一个SNAT,需要与远端同样是SNAT后的分支之间通信了,有一个分支是打不通的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值