在提出这个问题之前,我已经提到了以下链接。
我正在为我的学生在NAT上做一个例子 – 预路由。 在这里,我试图用我想要的目标IPreplace目标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
但是,它不起作用。 有一件事我知道,DNSparsing可能发生在基于该地区的多个IP上,等等。 因为这些网站有DNS负载平衡器。
问题是我可以阻止这些IP。 我相信iptables在networking层上工作。 因此,HTTP请求应该已经到了这一层。 到达这个层时,它应该已经预先路由到另一个IP。 例如,每当IP目标为31.13.79.65 ,将其更改为目标IP – 74.125.236.81 。
因此,在DNSparsing之后,如果浏览器将请求IP 31.13.79.65任何内容,networking层应该将其更改为74.125.236.81 。 但是,它不起作用。 有人可以解释为什么吗?
请记住,我不是networking专家。 我已经尽了最大的努力来提供我在networking方面的知识。
这是你必须做的:
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链,因为该访问是传出stream量。
这个iptables命令假定这个命令在你要显示规则的机器上运行。 一旦应用此规则,所有到www.facebook.com的stream量将被redirect到谷歌IP地址。
为了有效地向学生演示这一点,您还必须在/etc/hosts文件中创build主机条目,以便www.facebook.com将始终parsing为31.13.79.65,而不是其他IP地址。
为了使规则永久,你需要发出:
/etc/init.d/iptables save /etc/init.d/iptables reload
不是iptables-save因为它只是打印出前面的答案中提到的规则。
要查看这个规则,你必须特别提到-t nat因为规则是在NAT表中创build的:
iptables -t nat -L
PREROUTING链用于通过networking到达configuration了iptables的主机的数据包。 但是,如果您从该主机本身进行testing,则不会使用PREROUTING链。 要覆盖这种情况,您可以使用OUTPUT链。
另外,iptables-save命令不会做你认为的事情。 你的前两个iptables命令直接在内核中修改活动规则。 只要您运行了其中一个命令,该规则就会对新连接生效。
iptables-save命令的作用是读取内核中的规则并将其全部写入标准输出。 您可以将输出从iptables-saveredirect到一个文件,以便稍后保存当前的configuration。 之后,您可以使用iptables-restore命令将这些规则读入内核。
您提到的IP地址是dynamic的问题最好通过操纵DNS答复来解决。 如果您更改DNS答复,则不需要使用DNAT规则。 如果您正在运行自己的parsing器,则可以使其相信对于要redirect的区域具有权威性。
但是,使用iptables或通过更新主机文件的快速黑客redirect更容易。
您可以使用PREROUTING链将任何stream量路由到您想要的IP和端口。
iptables -t nat -A PREROUTING -p tcp --dport 1111 -j DNAT --to-destination 2.2.2.2:1111