上一篇中
"利用掌握的路由知识解决现实环境中的问题" 提出的解决方法并没有解释清楚问题的症结!
现在补上!
更改之处:在本次实验当中(M0n0wall 用 Pfsense替代)
遇到问题:本次遇到的问题与之前并没有不同 -- 从SZBG ping/tracert HKBG 192.168.15.21 正常
但客户端Outlook邮箱就是不能正常连接HKBG的邮件服务器192.168.15.21
思考的方向:
既然ping和tracert都没有问题、说明路由没什么太大问题。
到底是哪里不同呢?(协议),ping/tracert/Outlook使用的协议不同!
正常情况下: 客户端 连接 邮件服务器是这样->
很显然Outlook是使用TCP协议 与 邮件服务器通讯 而ping/tracert 是使用ICMP协议!
M0n0wall 和 Pfsense这两者都是基于状态检测的防火墙(它集成了:FW+Router的功能)
基于状态检测的防火墙特性:
如果:某个会话不完整(如:只有请求报文SYN、没有响应报文 ACK)那么这个会话请求将被拦截或丢弃!
通常它要求必须保持会话的完整性,我们知道(一个TCP连接的建立与断开分为:3次握手与4次断开)
TCP是面向连接的且有状态的可靠传输协议:
把我们现有的网络架构放大一点看得更清楚:
我们可以从图中看出(报文从192.168.20.45出去/回来时的路径 是不相同的,即通常所谓:非对称路由)
然而这种情况在(M0n0wall 和 Pfsense)看来此次会话是不完整的(因为它仅仅是收到了SYN的包、其它包都没有收到)
所以192.168.20.45发起的连接请求将会被(M0n0wall 和 Pfsense)拦截或丢弃!
为了解决这个问题PFsense提供了一办法:
我们只需要在 System - > Advanced -> Firewall&NAT 勾选“Static route filtering”。即可真正解决上述问题!