![我如何才能将所有发往某个端口的流量从任意 IP 到任意 IP 重定向到本地计算机并保留源 IP?](https://linux22.com/image/1571921/%E6%88%91%E5%A6%82%E4%BD%95%E6%89%8D%E8%83%BD%E5%B0%86%E6%89%80%E6%9C%89%E5%8F%91%E5%BE%80%E6%9F%90%E4%B8%AA%E7%AB%AF%E5%8F%A3%E7%9A%84%E6%B5%81%E9%87%8F%E4%BB%8E%E4%BB%BB%E6%84%8F%20IP%20%E5%88%B0%E4%BB%BB%E6%84%8F%20IP%20%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E6%9C%AC%E5%9C%B0%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%B9%B6%E4%BF%9D%E7%95%99%E6%BA%90%20IP%EF%BC%9F.png)
我想要获取从任意 IP 地址到任意 IP 地址、源自接口enp4s5
、目的地为端口的所有流量80
,并将其重定向到本地计算机(运行 iptables 的路由器)。
在本地计算机的 80 端口上运行的服务(如果从端口看不出来,则是 Web 服务器)需要能够知道连接的原始源 IP。
用例是针对强制 WiFi 门户,它将所有 HTTP(我知道这对 HTTPS 不起作用)页面替换为重定向到在路由器上运行的登录页面,他们必须使用该登录页面进行身份验证(然后添加 iptables 规则或将其地址添加到绕过此重定向的 ipset)。
我很确定 DNAT 完成了所需设置的一半,将数据包重定向到本地机器,但我遇到的问题是我需要一个匹配的 SNAT 将回复数据包发送回最初发送它们的机器 - 但我不能这样做,因为我不知道在 --to-source 中为 SNAT 规则提供的源 IP。
答案1
最终,我满足了上述所有要求的是一个REDIRECT
规则:iptables -t nat -A PREROUTING -i enp4s5 -p tcp --dport 80 -j REDIRECT --to-port 80