最近配置服务器安全策略遇到问题,一些内网主机ip被routeros nat了,服务端看到的都是routeros的IP地址。
仔细检查nat规则时,发现默认srcnat是所有接口masquerade,这在简单的共享上网路由器里没什么问题,因为只有一个公网出口,但是当路由器有多个出口时,比如有pptp接口,gre隧道接口等,连接两个子网的桥,由于配置了masquerade,会将两侧子网客户端ip 转换为桥接口的地址。
如192.168.1.1/24<-->10.0.0.1桥10.0.0.2<-->172.16.1.0/24中,192.168.1.100这个客户端要和172.16.1.100通信,由于所有接口的masquerade的存在,172.16.1.100看到的是10.0.0.2这个ip和自己通信,而192.168.1.100却不知道,另一192.168.1.200也要和172.16.1.100通信,172.16.1.100看到的同样是10.0.0.2。
由于nat优先级要高于路由转发,所以即使指定的静态路由没问题,ip也是被nat过的。而且nat性能消耗要高于路由转发。
解决这个问题其实很简单,就是换掉所有接口masquerade,具体到接口的srcnat或者只在公网接口上使用masquerade。所以不要偷懒,要不然迟早要还的。