我正在尝试使用 iptables 将 wifi 路由器上的所有流量重定向到本地网络服务器。我不确定我的命令是否正确,而且我想从规则中排除路由器 IP (172.16.0.1),以防止自己锁定自己无法访问路由器。
到目前为止我想出了什么:
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j DNAT --to 172.16.0.2:80
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j DNAT --to 172.16.0.2:80
我在上面进行了测试,这导致我无法再次访问路由器并且重定向不起作用。我做错了什么,如何排除 172.16.0.1 被重定向到 172.16.0.2?
设置: 172.16.0.2 是网络服务器的 IP 172.16.0.1 是我的路由器(dd-wrt),没有互联网连接。
我想要实现的目标的示例:
- 用户连接到 wifi 热点,尝试访问 www.siteA.com,被重定向到 172.16.0.2 (/index.html)
- 用户连接到 wifi 热点,尝试访问 www.siteB.com,被重定向到 172.16.0.2 (/index.html)
- 用户尝试访问 172.16.0.1,但没有发生任何指示
答案1
您所需要的只是这条规则:
iptables -t nat -I PREROUTING --src 0/0 --dst 172.16.0.2
这会将规则插入到 nat 表 (-t nat) 的 PREROUTING 链 (?=-I) 中,即:
目标地址为 172.16.0.2 (--dst 172.16.0.2) 的任何传入 (-src 0/0) 数据包。
需要记住的事情是:重定向传入流量意味着将规则插入 nat 表的 PREROUTING 链中。仅针对指定接口进行重定向。更多内容请参见 man iptables,搜索 REDIRECT 关键字。
--append PREROUTING --source 172.16.0.1 --jump RETURN
RETURN 表示停止遍历该链并在上一个(调用)链中的下一条规则处恢复。如果到达内置链的末尾或内置链中具有目标 RETURN 的规则匹配,则链策略指定的目标将决定数据包的命运。