
正文共:1024 字 15 图,预估阅读时间:1 分钟
前面我们介绍过VSR的NAT配置**(** 地址重叠时,用户如何通过NAT访问对端IP网络?地址重叠的时候怎么使用NAT解决访问问题,看这里),可以说是很简单的操作了。那VPP的NAT该如何配置呢?我们今天就用一个简易环境来简单介绍一下。
设备组网如下图所示:

我们首先配置好设备互联,VPP72的接口配置如下:
cs
vppctl set int state eth1 up
vppctl set int ip address eth1 11.1.1.1/24
vppctl set int state eth2 up
vppctl set int ip address eth2 12.1.1.1/24

VPP73的接口配置如下:
cs
vppctl set int state eth1 up
vppctl set int ip address eth1 22.1.1.1/24
vppctl set int state eth2 up
vppctl set int ip address eth2 12.1.1.2/24

调通网络之后,我们先测试最常用的SNAT,一般指在出接口上对请求流量的源IP地址和源端口进行转换,转换为指定的IP地址和端口。最常见的场景就是上网,我们的家用路由器一般都是使用这种配置方式。
H3C设备的实现很简单,在接口下配置一条nat outbound就可以了。例如:
properties
#
interface GigabitEthernet4/0
port link-mode route
ip address 44.1.2.1 255.255.255.0
nat outbound
在VPP上则需要两条命令:
kotlin
vppctl nat44 add interface address eth2
vppctl set interface nat44 out eth2 output-feature

差别就是H3C在接口上配置时可以直接转换为接口的IP地址,而VPP则要指定一个转换的地址或者接口地址。类似的,H3C指定地址池的配置方式为:
nginx
#
nat address-group 10086 name tietou
address 44.1.2.4 44.1.2.44
#
acl advanced 3402
rule 0 permit ip source 11.1.1.0 0.0.0.255
rule 5 permit ip source 11.1.2.0 0.0.0.255
#
interface GigabitEthernet4/0
port link-mode route
ip address 44.1.2.1 255.255.255.0
nat outbound 3402 address-group 10086
简单的时候真简单,复杂起来也是真复杂。
此时PCA就可以访问到VPP73了。

可以在VPP72上查看NAT的相关信息。

可以看到,NAT使用的地址池为接口eth2的接口地址,地址为12.1.1.1,而且可以看到使用的端口信息,当前是使用了3个ICMP端口。从NAT的详细会话中可以看到,原始请求报文的源IP地址是11.1.1.2,源端口为1676,协议为ICMP;转换后的源IP地址是12.1.1.1,源端口为63327。这里再加上目的地址和目的端口就是五元组了,当然,VPP里面还加了一个FIB表(fib 0)的选项,组成了六元组。
我们现在已经可以从PCA访问到VPP73了,那怎么从PCA访问到PCB呢?
我们不妨在VPP73上再配置一个静态NAT映射,将PCB的私网地址22.1.1.2转换为VPP72能够访问的12.1.1.22。同时这也是一个DNAT,将PCA的请求报文,在入接口上将请求的目的IP地址转换为实际的IP地址,不转换端口。
css
vppctl nat44 add static mapping local 22.1.1.2 external 12.1.1.22
vppctl set interface nat44 in eth1 out eth2 output-feature

可以看到,请求的目的地址是12.1.1.22,目的端口为59651,转换后的目的地址为实际的22.1.1.2,目的端口没有变化,仍为59651。
对应的,我们也看一下VPP72的会话。

可惜只能看到一半的详情,有点尴尬。
而且此时这个静态映射的访问方向是单向的,即只能从VPP72侧向VPP73侧发起访问,PCB无法访问VPP72。

对应的,H3C配置静态映射的配置为:
nginx
#
nat static outbound 22.1.1.2 44.1.1.44
#
interface GigabitEthernet4/0
port link-mode route
ip address 44.1.2.1 255.255.255.0
nat static enable
但是H3C能实现两个方向的一对一静态地址转换,即内网地址既可以通过外网地址访问外网,外网的其他地址也可以通过配置的外网地址访问内网地址。这是VPP所不能支持的。
还有最后一个,那就是端口映射,也属于DNAT,即在入接口上将请求报文的目的IP地址和目的端口转换为配置的IP地址和端口。
H3C可以在接口下通过以下两种方式进行配置:
nginx
#
interface GigabitEthernet4/0
port link-mode route
ip address 44.1.2.1 255.255.255.0
nat server protocol tcp global 44.1.2.22 10086 inside 22.1.1.2 443
nat server protocol tcp global current-interface 10086 inside 22.1.1.2 443
一种为指定要使用的IP地址,另一种为直接使用接口的IP地址。
而使用VPP配置时,只能使用地址池中已有的IP地址,不能使用不在地址池中的地址。

比如我们把12.1.1.23加入到地址池中,再配置就可以了。
css
vppctl nat44 add address 12.1.1.23
vppctl nat44 add static mapping tcp local 22.1.1.2 22 external 12.1.1.23 10086

当然,如果要使用接口的IP地址,也要先把接口的IP地址加入到地址池中,才能配置使用接口进行配置。

当然,配置时,会同时生成一条带有接口IP地址的映射条目。然后我们测试一下端口的开放性。

测试一下访问。

访问正常!
最后看一下两次NAT之后的设备性能吧,现在只能测试从PCA到PCB的带宽了。

测得带宽为5.29 Gbps,怎么样,还能接受吗?

长按二维码
关注我们吧

<>
URL过滤功能了解一下?
<> <>
从零开始安装一个VPP要多久?半小时,不能再多了!
<> <>
VPP纳管网卡后还有哪些要做的工作?
<> <>
MPLS TE隧道带宽的决定因素有哪些?
<> <>
使用RSVP-TE配置跨域的MPLS TE隧道
<> <>
超线程和VT-d开启与否对性能的影响大不大?
<> <>
不会吧!KVM竟然不支持磁盘的精简置备!?
<> <>
一种基于IPsec的VXLAN"专线"解决方案
<> <>