No.004 Simple Case

This is an article that was created 1036 days ago, and the information may have evolved or changed.

红茶三杯的原文 :【有点儿意思系列 02】哎哟喂停不下来了 ,看完原文描述,我想到的是用 NAT 转换目的地址的方式解决,经过实验验证后,也说明了这个方法是可行的。做完实验后又想还有没有其他方法实现呢,想到用霸道的 PBR ,也能实现,不过这个方法我个人觉得比较傻。

背景描述:

  1. R1、R2为两台出口路由器,分别连接电信及网通的广域网出口线路;
  2. R1、R2、SW1、SW2运行OSPF,R1配置指向网通的静态路由并部署静态路由到OSPF的路由重发布,R2则向OSPF域发布缺省路由。换而言之,内网访问网通的流量缺省走R1,而访问其他Internet资源的流量走R2出去;
  3. 内网有两种服务器:一是向网通公网用户提供服务的服务器,以及向电信公网用户提供服务的服务器。为了使得这两台服务器能够被外网访问,在R1上将网通服务器映射到网通公网地址220.12.15.x/27,而在R2上把电信服务器映射到电信公网地址202.112.12.x/24。
  4. 完成上述部署后,网通的公网用户使用目的地址220.12.15.x可以访问网通服务器,电信外网用户通过202.112.12.x可以访问电信服务器。但是电信外网用户使用220.12.15.x地址却无法正常访问网通服务器。请分析原因,并提出解决方案。

Solution

Part 1

详细的配置我就不贴文中了,可到文章末尾链接自取。

先说明一下拓扑在中的设备:CNC_User 和 Telecom_User 是用 PNETLab 的 Docker Chrome Node 设备(打开界面是是一个 Chrome 浏览器,用命令行登陆发现是个 Linux 系统),内网服务器用的是 Docker Apache (命令行登后发现是 Linux 系统,开启了 Apache 服务)。本次实验模拟外网客户端访问内网映射到公网的 HTTP 服务。

首先,日常配置 VLAN、VRRP、OSPF、NAT……

一顿操作后,实现上面提到的 1 - 3 的需求及 4 中的前半部分需求。电信外网用户使用220.12.15.x地址却无法正常访问网通服务器。原因在于电信用户访问220.12.15.x地址来回路径不一致导致 TCP 会话超时(拓扑中模拟访问 HTTP),解决方案就是使来回路径一致(皮)。

Part 2

没有添加配置前,查看 Telecom_User 访问网通服务器 的情况。

从图中可以看出 Telecom_User (202.112.13.2)电信用户向网通服务器映射地址(220.12.15.1)发出目的端口为 80 的 TCP 的数据包,而 R2 上电信的公网 IP (202.112.12.1)回应了 TCP ,证实了前面提到的 来回路径不一致(其实从内网路由表也可看出),后面数据包逐渐黑化了。

在 R1 上添加公网访问网通服务器的目的地址 NAT 转换配置

1
2
3
4
5
6
7
8
9
10
! -- R1 配置     
! -- 配置公网访问网通服务器转换的 NAT 地址池
ip nat pool to_cnc_server 172.16.1.100 172.16.1.110 netmask 255.255.255.0
! -- 配置(outside list)任一公网地址访问 R1 上公网 IP 的 80 端口
access-list 101 permit tcp any host 220.12.15.1 eq www
! -- 配置目的地址 NAT 转换
ip nat outside source list 101 pool to_cnc_server
! -- 配置 NAT 地址池网段静态路由,用于回程触发 NAT 转换
ip route 172.16.1.0 255.255.255.0 220.12.15.2
!

配置完成测试结果如下:

电信外网用户使用220.12.15.x地址正常访问网通服务器。

查看 R1 NAT 映射表,有目的地址 NAT 转换,注意观察 Outside local 和 Outside global

原理就是让 网通服务器 回程的数据包从 R1 出去。在 R1 上配置目的地址 NAT 转换。这时从网通服务上看就是源地址为 172.16.1.100 - 172.16.1.110 的地址访问的自身,回包也就回这个地址段。待回包至 R1 ,查找路由表发现 172.16.1.0 网段下一跳地址是 220.12.15.2 (手动配置的静态路由),触发 NAT 转换(此处查找 NAT 映射表项),源地址转成 R1 网通公网 IP地址回包最终至电信用户。此处配置的 172.16.1.0 网段静态路由是触发 NAT 转换,如果不配置,R1 就把网通服务器发过来的数据包丢弃了。

普及一下 NAT 执行的顺序,查看思科官网(NAT Order of Operation)

Part 3

Part 2 中使用 目的地址 NAT 转换的手段使得来回路径一致,那有什么办法能使网通服务器回包强制从 R1 的公网 IP 地址端口出去呢?— PBR。从 SW1 上就开始把网通服务器回包路径扭到 R1 上,R1 再把数据强行从公网接口丢出去。

清除 Part 2 增加的配置,SW1、R1 添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
! -- SW1 配置     
!
access-list 101 permit ip host 192.168.10.1 any
!
route-map acc_telecom_remote permit 10
match ip address 101
set ip next-hop 10.10.10.2
!
interface Vlan10
ip policy route-map acc_telecom_remote
!
1
2
3
4
5
6
7
8
9
10
11
! -- R1 配置     
!
access-list 102 permit ip host 192.168.10.1 any
!
route-map acc_telecom_remote permit 10
match ip address 102
set ip next-hop 220.12.15.2
!
interface Ethernet0/2
ip policy route-map acc_telecom_remote
!

配置完成测试结果如下:

电信外网用户使用220.12.15.x地址正常访问网通服务器。

查看 R1 NAT 映射表,没有目的地址 NAT 转换,但是触发了正常流量上网的 PAT,注意观察 Outside local 和 Outside global

Ending

  • 原文后边加两台防火墙的测试我就不做了(古董 AMD 台式机跑不起 ASAv),大概的考察点还是 数据包来回路径一致的问题
  • 文中可能有些配置未提及或内容术语表述的不规范,请见谅。
  • 配置存阿里云盘了,这是链接:[分享的文件]
  • 欢迎“来电”来函探讨。
把组装机主板塞到品牌机机箱 No.003 Simple Case
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×