我们的内部网络中有一个代理服务器,我想将所有互联网 http 请求重定向到本地网络中的 Web 服务器。它就像一个网络公告牌,上面写着“没有可用的直接连接。设置您的代理等。”例如:
- 用户启动计算机
- 打开浏览器
- 尝试打开 www.google.com
- 应该在本地网络上看到 Web 服务器输出
- 尝试互联网上的其他网站
- 应该在本地网络上看到 Web 服务器输出
- 设置代理
- 尝试连接到网站
- 网站应该加载
我在 Checkpoint 防火墙中添加了一个简单的手动 NAT 规则来转换地址,但它根本不起作用。这是我的地址转换规则
Source Destination Service T.Source T.Destination T.Service
MY_PC A_GOOGLE_IP ALL ORIGINAL INT_WEB_SRV ORIGINAL
然后当我 ping 时A_GOOGLE_IP
,回复来自,正如我所料。但是,当我尝试 从浏览器INT_WEB_SRV
连接时(A_GOOGLE_IP
http://A_GOOGLE_IP),SYN_SENT 没有回复,因此超时。当我查看 的防火墙日志时INT_WEB_SRV
,我可以看到来自 MY_PC 的传入连接请求被接受,并且没有被拒绝。顺便说一句,查看INT_WEB_SRV
(http://INT_WEB_SRV) 从浏览器。
我的理解是,检查点 NGX R60 处的 NAT 规则不包括返回数据包。我肯定需要一些帮助。
答案1
当遇到 NAT 问题时,我总是首先打开几个 SSH 会话并在内部和外部接口上执行 tcpdump。
就像是:
tcpdump -i eth0 proto ICMP
或者
tcpdump -i eth0 host A_GOOGLE_IP
并观察 Nat'd IP 地址是多少。这至少应该给你一个起点!
答案2
检查点中的返回流量应该进行网络地址转换。流量是否显示在 Web 服务器上的服务器日志中?此外,值得使用 fw monitor,以确保检查点正确进行网络地址转换,并双向传递流量,例如
fw monitor -e 'accept (src=<host address> and dport=80) or (dst=<host address> and sport=80);'
这应该显示每个数据包的 4 行,包括 NAT 前和 NAT 后的地址。
答案3
如果内部服务器与客户端位于同一子网,则需要执行 SNAT 以及 DNAT,因为现在,它的工作方式如下。
iptables -t nat -A PREROUTING -i LAN_IFACE -d A_GOOGLE_IP -j DNAT --to-destination INT_WEB_SRV
- 客户端 PC 向 A_GOOGLE_IP 发送 TCP SYN
- 路由器将其 DNAT 到 INT_WEB_SRV
- INT_WEB_SRV 看到来自 LAN IP 的请求并直接回复
- 客户端收到来自 INT_WEB_SRV IP 而非 A_GOOGLE_IP 的回复
如果你使用 SNAT,那么它的工作原理如下:
iptables -t nat -A PREROUTING -i LAN_IFACE -d A_GOOGLE_IP -j DNAT --to-destination INT_WEB_SRV
iptables -t nat -A POSTROUTING -s LAN_RANGE/mask -d INT_WEB_SRV -j SNAT --to-source ROUTER_IP
- 客户端 PC 向 A_GOOGLE_IP 发送 TCP SYN
- 路由器将其 DNAT 到 INT_WEB_SRV,用自己的 IP 替换源 IP
- INT_WEB_SRV 看到来自路由器的请求并对其进行回复。
- 路由器将数据包进行 DNAT 处理并发送到客户端 PC,并将源 IP 替换为 A_GOOGLE_IP
- 客户端认为它已连接到 A_GOOGLE_IP
但是,如果您想要做的只是强制每个人都使用代理,只需将所有传出的 HTTP 连接 DNAT 到代理服务器(您将获得所谓的透明代理),客户端就不需要更改其计算机上的设置。