我是 iptables 新手,想将路由器上的所有出站 HTTP 流量从端口 80 重新路由到端口 53。可以吗?
在此先感谢您的帮助。
埃里克
*编辑
我跑了
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 53 -j REDIRECT --to-port 5300
这产生了
iptables v1.4.6: unknown option `--to-ports'
Try `iptables -h' or 'iptables --help' for more information.
然后我跑了
opkg install iptables-mod-nat-extra
这产生了
opkg_install_cmd: Cannot install package iptables-mod-nat-extra
谢谢您的帮助。
埃里克
答案1
从你的问题来看,我们不清楚你想做什么(或者甚至不知道你想做什么),所以这里有几点建议:
- -t NAT-- 带你进入 NAT 表,这就是你想要做的事情
- -A 后路由- 该
POSTROUTING
表用于路由决策之后。通常意味着流量正在流出。您可以在此处更改源地址,但不能更改目标地址。 - -A 预先路由- 该
PREROUTING
表用于在做出路由决定之前。如果您想更改数据包的去向,请在此处进行更改。听起来这就是您想要的。 - -A 输出- 该
OUTPUT
表用于本地进程发出的(或以其他方式修改的)出站数据包,特别是不用于您的服务器以路由器/交换机/网关角色处理的数据包。这是一个方便的地方,可以为您的服务器自行生成的流量设置规则。 - -j 重定向-没有达到你想象的效果。可能不是你想要的。
- -j 源地址转换- 源网络地址转换。这用于更改源地址或源端口。如果您想更改数据包的来源,请使用此目标
- -j DNAT- 目标网络地址转换。这用于更改目标地址或端口。如果您想更改数据包的去向,请使用此目标。
因此,要修改通过路由器发往端口 80 的流量并将该目的地更改为端口 53,您可以使用以下命令:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to :53
这将完全满足您的要求。具体来说,它将使所有网站无法访问。
答案2
因为你似乎在问源自路由器本身的流量,您不应该使用 PREROUTING 链,而应该使用 OUTPUT 链。此外,如果流量源自路由器本身,则更好的选择是更改启动连接的进程的配置,以简单地使用不同的目标端口。
如果出于某种原因,这种方法对你不起作用,你可以使用 DNAT 目标,例如
iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to :53
但请注意,由于目标服务器不是期望在端口 53 上收到 HTTP 请求,除非您在强制门户后面的某个点恢复转换,否则您可能不会得到任何有意义的响应。您可以考虑通过隧道连接到受限制网络之外受您控制的主机(例如使用 OpenVPN),然后只需通过隧道路由请求即可。
答案3
这会起作用:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 53
进一步说明/参考:http://www.cyberciti.biz/faq/linux-port-redirection-with-iptables/