一个经典的nat问题
一个经典的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后 将包转发给pcs
ip:10.0.0.134
dst:192.168.1.100
5.此时pc收到回包后,根据源地址向
10.0.0.134
进行回复包重复几次该过程后,
tcp三次握手
成功建立连接在http_server网口抓包验证