在提问之前我参考了以下链接这个问题。
我正在为我的学生制作一个关于 NAT - 预路由的示例。在这里,我尝试将目标 IP 替换为我想要的 IP。例如,当有人尝试访问 www.facebook.com 时,将连接 wwww.google.com。
这是我尝试做的。
# host www.facebook.com
www.facebook.com is an alias for star.c10r.facebook.com.
star.c10r.facebook.com has address 31.13.79.65
star.c10r.facebook.com has IPv6 address 2a03:2880:f002:201:face:b00c:0:1
^C[root@shreyas joshis1]#
# host www.google.com
www.google.com has address 74.125.236.81
www.google.com has IPv6 address 2404:6800:4001:802::1014
[root@shreyas joshis1]#
现在,这是 IP 表规则。
# iptables -t nat -I PREROUTING -p tcp --dport 80 -d 31.13.79.65 -j DNAT --to-destination 74.125.236.81
# iptables -t nat -I PREROUTING -p tcp --dport 443 -d 31.13.79.65 -j DNAT --to-destination 74.125.236.81
现在,就来参加会议吧。
# iptables-save
但是,它不起作用。我知道 DNS 解析可以根据区域等对多个 IP 进行。因为这些站点有 DNS 负载平衡器。
问题是我可以阻止这些 IP。我相信这iptables
在网络层上有效。因此,HTTP 请求应该到达此层。到达此层后,它应该预先路由到另一个 IP。例如,每当 IP 目标为 时31.13.79.65
,将其更改为目标 IP - 74.125.236.81
。
因此,在 DNS 解析之后,如果浏览器对 IP 请求任何内容31.13.79.65
,网络层应将其更改为74.125.236.81
。但是,它不起作用。有人能解释一下原因吗?
请记住,我不是网络专家。我已尽力把我在网络方面所掌握的知识发挥到极致。
答案1
这是你必须做的:
iptables -t nat -A OUTPUT -p tcp --dport 80 -d 31.13.79.65 -j DNAT --to-destination 74.125.236.81
iptables -t nat -A OUTPUT -p tcp --dport 443 -d 31.13.79.65 -j DNAT --to-destination 74.125.236.81
您必须使用 OUTPUT 链,因为该访问是传出流量。
此 iptables 命令假定此命令在您将要演示规则的机器上运行。应用此规则后,所有到 www.facebook.com 的流量都将重定向到 google IP 地址。
为了向学生有效地展示这一点,您还必须在文件中创建主机条目/etc/hosts
,以便 www.facebook.com 始终解析为 31.13.79.65 而不是其他 IP 地址。
为了使规则永久生效,您需要发出:
/etc/init.d/iptables save
/etc/init.d/iptables reload
不是iptables-save
,因为它只是打印出前面答案中提到的规则。
要查看此规则,您必须特别提及,-t nat
因为该规则是在 NAT 表中创建的:
iptables -t nat -L
答案2
PREROUTING 链用于通过网络到达您已配置 iptables 的主机的数据包。但是,如果您从该主机本身进行测试,则不使用 PREROUTING 链。为了解决这种情况,您可以改用 OUTPUT 链。
此外,iptables-save 命令并没有像您想象的那样执行操作。前两个 iptables 命令直接在内核中修改活动规则。只要您运行其中一个命令,该规则就会对新连接生效。
iptables-save 命令的作用是读取内核中的规则并将其全部写入标准输出。您可以将 iptables-save 的输出重定向到文件,以便保存当前配置以供日后使用。然后,您可以使用 iptables-restore 命令将这些规则读入内核。
您提到的 IP 地址是动态的问题可能最好通过操纵 DNS 回复来解决。如果您更改 DNS 回复,则无需使用 DNAT 规则。如果您正在运行自己的解析器,您可以让它相信它对您想要重定向的区域具有权威性。
然而,对于快速黑客攻击来说,使用 iptables 重定向或更新 hosts 文件更容易。
答案3
您可以使用 PREROUTING 链将任何流量路由到您想要的 IP 和端口。
iptables -t nat -A PREROUTING -p tcp --dport 1111 -j DNAT --to-destination 2.2.2.2:1111