如果有内网用户通过内网 IP 使用公网 IP 访问内部服务的需求, 如果在防火墙上没有特别配置, 业务不通.
原因: 硬件防火墙针对入方向的流量是先 NAT, 再过滤, 路由; 对于出发向的流量是先过滤, 再路由, NAT. 如果内网用户使用私网 IP 访问内部服务器的公网 IP 时, 数据走向为: 请求数据包 -->到达防火墙内网口 -->到达防火墙出接口发现 DNAT 策略 (但是流量不会从该口流出, 而是转而从内网口)--> 到达服务器 -->服务器回包到达防火墙内网口 -->防火墙发现目的地址为自己内部网络 IP, 会将数据从内网口转发出去 (回程流量不经过防火墙外网口, 不会匹配到 DNAT 策略)--> 客户端收到一个私网地址的响应包, 丢包.
针对上面的情况, 需要在防火墙的内网口针对该服务再做一个 DNAT 策略, 使该访问需求回包时能匹配到 DNAT 策略, 改回服务器回包达到客户端的 IP, 防止客户端丢包. 以上的环境是建立在服务器与客户端的网关都在防火墙上时, 当服务器与客户端的网关不在防火墙上或服务器与客户端为同段主机时, 需要在防火墙的内借口上针对客户端 IP 做一次源 NAT, 强制将数据回包引至防火墙.
iptables 报文流向:
进到本主机的流量: prerouting--->input
本机转发的流量: prerouting---->forward------>postrouting
本机流出的流量: output----->postrouting
来源: http://www.bubuko.com/infodetail-3446900.html