一个经典的t问题

网络环境:

公司内网有台web服务器,将web服务器的80端口映射到了防火墙wan口的80端口上。

问题现象:

员工无法通过内网去访问公司内部的网站6.6.6.6

拓扑如下:


防火墙配置:

基础上网nat

将服务器10.0.0.251的80端口,映射到6.6.6.6的80端口

解析流量走向:

1.PC访问6.6.6.6

包的内容如下

sou ip:10.0.0.123

dst ip:6.6.6.6

2.FW收到包,查找自己的nat表(10.0.0.251映射到了6.6.6.6),将目的地址进行转换,并向转换后的目的设备发包

包的内容如下

sou ip:10.0.0.123

dst ip:10.0.0.251

3.服务器收到包,根据包的信息进行转发

sou ip:10.0.0.251

dst ip:10.0.0.123

4.PC收到来自服务器的包,就懵了。自己是向防火墙发的包,结果服务器回了个包。所以将该包丢弃了,未能成功建立tcp连接。

要怎么解决呢???

在防火墙在加一条源地址nat将所有源地址为10.0.0.0/24的流量 源地址转化为10.0.0.1,就可以解决

添加后的流量走向:

1.PC访问6.6.6.6

包的内容如下

sou ip:10.0.0.123

dst ip:6.6.6.6

2.FW收到包,查找自己的nat表(10.0.0.251映射到了6.6.6.6),将目的地址进行转换,将源地址转换为10.0.0.1,根据转换后的目的ip向服务器发包

包的内容如下

sou ip:10.0.0.1

dst ip:10.0.0.251

3.服务器收到包,根据包的信息进行转发

sou ip:10.0.0.251

dst ip:10.0.0.1

4.防火墙收到服务器回包后,再根据nat表进行转换

转换后的包如下

sou ip:6.6.6.6

dst ip:10.0.0.123

这样pc就收到了正确的回包,往复几次建立tcp三次握手

这里可能存在一个疑问,为什么添加了源地址nat后,没有将服务器发回包的源地址也进行转换呢。这是由于nat存在优先级关系,会优先匹配nat server配置,其次是目的nat,可以看到 最后才会去匹配源nat的规则

锐捷防火墙的机试案例:

问题分析:

1.pc向http://10.0.0.134:180发起http访问,首先要建立tcp状态,此时的tcp包内容为

sip:192.168.1.10 dst:10.0.0.134

2.防火墙收到包后,根据nat表进行转换,根据端口映射条目的 192.168.1.100:80==>10.0.0.134:180 。将目的地址转换成了192.168.1.100后,将包发送给http_server

sip:192.168.1.10 dst:192.168.1.100

3.http_server收到服务器转发的包后,将tcp回应包根据源地址,回复给了192.168.1.10

sip:192.168.1.100 dst:192.168.1.10

4.pc此时收到了http_server的回包。然后丢弃了。

为什么会丢弃呢,这跟tcp建议连接 三次握手的原理有关。

pc发送时的包为 sip:192.168.1.10 dst:10.0.0.134

但是最终收到的包为 sip:192.168.1.100 dst:192.168.1.10

显然发送时候的目的地址,与收到回复后的源地址不符。tcp连接无法建立。

在http_server的网口上装包 进行验证。

解决问题的方法,上面也有提到。就是在防火墙上添加一条nat表项,将pc访问10.0.0.134:180的流量,源地址转换为192.168.1.1,目的地址还是转换为192.168.1.100:80

具体设置如下:

此时用pc测试访问10.0.0.134:80发现可以访问了

流量分析:

1.pc向http://10.0.0.134:180发起http访问,首先要建立tcp状态,此时的tcp包内容为

sip:192.168.1.10 dst:10.0.0.134

2.防火墙收到包后,根据nat表进行转换,根据端口映射条dip:192.168.1.100:80==>10.0.0.134:180 ,和我们新添加的条目将源地址也进行了转换 sip:192.168.1.10==>192.168.1.1,将包发送给http_server

sip:192.168.1.1 dst:192.168.1.100

3.http_server收到服务器转发的包后,将tcp回应包根据源地址,回复给了防火墙

sip:192.168.1.100 dst:192.168.1.1

4.防火墙收到包后,根据nat表项192.168.1.10==>192.168.1.1将目的地址转换为192.168.1.10,根据nat表项192.168.1.100:80==>10.0.0.134:180 将源地址转换为10.0.0.134后 将包转发给pc

sip:10.0.0.134 dst:192.168.1.100

5.此时pc收到回包后,根据源地址向10.0.0.134进行回复包

重复几次该过程后,tcp三次握手成功建立连接

在http_server网口抓包验证