VPP设置静态SNAT转换

2023-09-24 32 0

接口基本配置:

DBGvpp# set interface state port7 up
DBGvpp# set interface state port8 up
DBGvpp# set interface ip address port7 50.1.1.1/24
DBGvpp# set interface ip address port8 192.168.1.203/24

网络拓扑:

|-----------|         |------------|           |---------------|
| 50.1.1.2  |---------|    vpp     |------|----| 192.168.1.103 |
|-----------|         |------------|      |    |---------------|Host-A           port7        port8    |         Host-B||    |---------------||----| 192.168.1.114 ||---------------|Host-C(FTP-Server)

启用NAT44功能:

DBGvpp# nat44 enable 

静态地址转换

将内部地址50.1.1.2静态映射到虚拟地址192.168.1.207。以下虽然192.168.1.207没有添加到地址池中,但是配置静态地址转换之后,地址192.168.1.207在外部是可用的(ARP可通),类似于添加到了地址池中。

# set interface nat44 in port7 out port8
#
# nat44 add static mapping local 50.1.1.2 external 192.168.1.207
#
# show nat44 static mappings
NAT44 static mappings:local 50.1.1.2 external 192.168.1.207 vrf 0
#
# show nat44 interfaces
NAT44 interfaces:port7 inport8 out
#
# nat44 add address 192.168.1.204 - 192.168.1.205
# 
# show nat44 addresses
NAT44 pool addresses:
192.168.1.204tenant VRF independent
192.168.1.205tenant VRF independent

在主机A上ping主机B,可见根据配置的静态映射进行了地址转换。

另外,在相反方向,即在主机B(192.168.1.103)上也可以ping通192.168.1.207。但是,在主机A上查看,交互报文没有经过NAT转换,即地址192.168.1.207没有经过转换,经过VPP路由到了主机A(50.1.1.2),可见SNAT静态映射是单向的,需要由内部主机发起。

静态地址与端口转换

端口转换,需要先将192.168.1.207添加到地址池中。接下来的测试使用FTP,但是需要确定FTP客户端的源端口号。首先在主机A上访问主机C的FTP服务,主机A使用的FTP客户端为FileZilla,观察FileZilla使用的源端口,比如50239。为安全起见,配置接下来的2个连续的源端口的映射。一般情况下FileZilla下一次连接(重试)时,会依次使用下一个连续的源端口,如50240。

DBGvpp# nat44 add address 192.168.1.207
DBGvpp#
DBGvpp# show nat44 addresses
NAT44 pool addresses:
192.168.1.204tenant VRF independent
192.168.1.205tenant VRF independent
192.168.1.207tenant VRF independent
#
# nat44 add static mapping tcp local 50.1.1.2 50240 external 192.168.1.207 54021
# nat44 add static mapping tcp local 50.1.1.2 50241 external 192.168.1.207 54121
#
# show nat44 static mappings
NAT44 static mappings:TCP local 50.1.1.2:50240 external 192.168.1.207:54021 vrf 0TCP local 50.1.1.2:50241 external 192.168.1.207:54121 vrf 0

在主机C上抓包,可见FTP连接的源地址和端口50240转换为了192.168.1.207:54021,以上的静态NAT端口转换配置生效。但是,主机C接收到TCP连接的SYN报文之后,并没有回复SYN-ACK,握手没有建立成功。原因在于,虚拟地址192.168.1.207在外部变得不可访问,ARP得不到MAC地址。

arp-noreply

以下不再使用虚拟的地址192.168.1.207,而使用port8的接口地址作为静态映射的地址,添加3条静态端口映射。此时FTP正常工作,因为接口地址192.168.1.203将回复ARP请求。

# nat44 add address 192.168.1.203
# show nat44 addresses
NAT44 pool addresses:
192.168.1.204tenant VRF independent
192.168.1.205tenant VRF independent
192.168.1.207tenant VRF independent
192.168.1.203tenant VRF independent
#
# nat44 add static mapping tcp local 50.1.1.2 50242 external 192.168.1.203 54221
# nat44 add static mapping tcp local 50.1.1.2 50243 external 192.168.1.203 54321
# nat44 add static mapping tcp local 50.1.1.2 50244 external 192.168.1.203 54421
#
# show nat44 static mappings
NAT44 static mappings:TCP local 50.1.1.2:50240 external 192.168.1.207:54021 vrf 0TCP local 50.1.1.2:50241 external 192.168.1.207:54121 vrf 0TCP local 50.1.1.2:50242 external 192.168.1.203:54221 vrf 0TCP local 50.1.1.2:50243 external 192.168.1.203:54321 vrf 0TCP local 50.1.1.2:50244 external 192.168.1.203:54421 vrf 0

但是,在主机C上观察交互报文发现,FTP的控制通道确实是通过映射,但是FTP的数据通道并没有(没有做映射,VPP不支持ALG),如下所示,控制通道通过的是SNAT地址转换,并且在地址池中选择的是192.168.1.203的地址。

port-map-ftp

代码编程
赞赏

相关文章

质因数的个数【清华大学】
信刻国产电子档案蓝光光盘刻录存储备份归档管理应用
最大公约数【哈尔滨工业大学】
西安大秦时代_公司简介_V1.0
安卓软件开发_西安小飞鼠为您分享—西安app软件开发的费用及开发流程
反序输出【清华大学】