VPP配置指南:NAT“三板斧”

883321a7d503bc99ab74fb8dcd4c7a09.gif

正文共:1024 字 15 图,预估阅读时间:1 分钟

前面我们介绍过VSR的NAT配置地址重叠时,用户如何通过NAT访问对端IP网络?地址重叠的时候怎么使用NAT解决访问问题,看这里,可以说是很简单的操作了。那VPP的NAT该如何配置呢?我们今天就用一个简易环境来简单介绍一下。

设备组网如下图所示:

bb0e2a3bbc4de4b109474ce88a67d008.png

我们首先配置好设备互联,VPP72的接口配置如下:

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

a5389b552c49cf6230a0872d57239b00.png

VPP73的接口配置如下:

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

4950b87efd02f8608b2915146d83265f.png

调通网络之后,我们先测试最常用的SNAT,一般指在出接口上对请求流量的源IP地址和源端口进行转换,转换为指定的IP地址和端口。最常见的场景就是上网,我们的家用路由器一般都是使用这种配置方式。

H3C设备的实现很简单,在接口下配置一条nat outbound就可以了。例如:

#
interface GigabitEthernet4/0
 port link-mode route
 ip address 44.1.2.1 255.255.255.0
 nat outbound

在VPP上则需要两条命令:

vppctl nat44 add interface address eth2
vppctl set interface nat44 out eth2 output-feature

26bab25a14627f6c865a90410c9228d4.png

差别就是H3C在接口上配置时可以直接转换为接口的IP地址,而VPP则要指定一个转换的地址或者接口地址。类似的,H3C指定地址池的配置方式为:

#
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了。

01c9b8a7afe5019a4e904819a2404718.png

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

9134df843049f7debcde0e9aad9284ec.png

可以看到,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地址,不转换端口。

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

3a2fc082de429140f7d45838fd1b03cf.png

可以看到,请求的目的地址是12.1.1.22,目的端口为59651,转换后的目的地址为实际的22.1.1.2,目的端口没有变化,仍为59651。

对应的,我们也看一下VPP72的会话。

ff17ef5c07030c68d4fda8b7943f1ebd.png

可惜只能看到一半的详情,有点尴尬。

而且此时这个静态映射的访问方向是单向的,即只能从VPP72侧向VPP73侧发起访问,PCB无法访问VPP72。

97f8e06aebe805cbb11da6a0fd064fd0.png

对应的,H3C配置静态映射的配置为:

#
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可以在接口下通过以下两种方式进行配置:

#
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地址,不能使用不在地址池中的地址。

e406ba8c1050be378d1a3ea6ee301ec6.png

比如我们把12.1.1.23加入到地址池中,再配置就可以了。

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

022295829b1a2fc03716d3aa36a9518d.png

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

513364f66f31070eb400245d8fbffc35.png

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

f94f6a4a6f9c8621ae777cdc87abb39b.png

测试一下访问。

14b3d588540ca5a0956b4c16f63edf75.png

访问正常!

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

c6770ac89be7f849ef617ed67945be88.png

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

b537d31882f86a784d5e435677767b14.gif

长按二维码
关注我们吧

aa569a24594aaf69c25867cff3f75d7a.jpeg

5711d8ec5fbf40d0e75e1e76566ba96c.png

URL过滤功能了解一下?

从零开始安装一个VPP要多久?半小时,不能再多了!

VPP纳管网卡后还有哪些要做的工作?

MPLS TE隧道带宽的决定因素有哪些?

使用RSVP-TE配置跨域的MPLS TE隧道

超线程和VT-d开启与否对性能的影响大不大?

不会吧!KVM竟然不支持磁盘的精简置备!?

一种基于IPsec的VXLAN“专线”解决方案

IPsec VPN文章及知识点汇总【墙裂建议收藏】

相关推荐

  1. ORACLE无法OPEN,处理板斧

    2024-01-05 16:18:06       42 阅读
  2. <span style='color:red;'>NAT</span><span style='color:red;'>配置</span>

    NAT配置

    2024-01-05 16:18:06      62 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-05 16:18:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-05 16:18:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-05 16:18:06       87 阅读
  4. Python语言-面向对象

    2024-01-05 16:18:06       96 阅读

热门阅读

  1. hyper-V的虚拟磁盘扩容

    2024-01-05 16:18:06       58 阅读
  2. Typescript基础知识:函数类型和箭头函数

    2024-01-05 16:18:06       47 阅读
  3. chip-seq测序分析流程

    2024-01-05 16:18:06       59 阅读
  4. 【LeetCode】1164. 指定日期的产品价格

    2024-01-05 16:18:06       60 阅读
  5. mysql:SQL按时间查询方法总结

    2024-01-05 16:18:06       54 阅读
  6. centos7安装docker(包含yum配置阿里云镜像源)

    2024-01-05 16:18:06       62 阅读
  7. 解决.gitignore文件无效问题

    2024-01-05 16:18:06       55 阅读
  8. ffmpeg转码新技能

    2024-01-05 16:18:06       80 阅读
  9. Ajax同步调用影响加载动画展示问题

    2024-01-05 16:18:06       57 阅读
  10. anylabeling 加载模型后出错

    2024-01-05 16:18:06       70 阅读
  11. 偌依 项目部署及上线步骤

    2024-01-05 16:18:06       94 阅读
  12. 解析:Eureka的工作原理

    2024-01-05 16:18:06       56 阅读
  13. Eureka工作原理

    2024-01-05 16:18:06       51 阅读
  14. Eureka工作原理超详细讲解介绍

    2024-01-05 16:18:06       50 阅读
  15. Eureka工作原理

    2024-01-05 16:18:06       51 阅读
  16. 回归和分类区别

    2024-01-05 16:18:06       52 阅读
  17. 暴力破解的基础知识和Burpsuite基础知识

    2024-01-05 16:18:06       63 阅读