我的示例中使用的代码取自REDSOCKS
教程,但它对我来说不起作用。我正尝试通过本地代理服务器重定向所有 tcp 流量。
#!/bin/bash
CHAIN="MYCHAIN"
PROTO="tcp"
iptables -t nat -N ${CHAIN}
# Ignore LANs and some other reserved addresses.
iptables -t nat -A ${CHAIN} -d 0.0.0.0/8 -j RETURN
iptables -t nat -A ${CHAIN} -d 10.0.0.0/8 -j RETURN
iptables -t nat -A ${CHAIN} -d 127.0.0.0/8 -j RETURN
iptables -t nat -A ${CHAIN} -d 169.254.0.0/16 -j RETURN
iptables -t nat -A ${CHAIN} -d 172.16.0.0/12 -j RETURN
iptables -t nat -A ${CHAIN} -d 192.168.0.0/16 -j RETURN
iptables -t nat -A ${CHAIN} -d 224.0.0.0/4 -j RETURN
iptables -t nat -A ${CHAIN} -d 240.0.0.0/4 -j RETURN
# Anything else should be redirected to port 12345
iptables -t nat -A ${CHAIN} -p ${PROTO} -j REDIRECT --to-ports 12345
iptables -A INPUT -p ${PROTO} -j ${CHAIN}
执行脚本时收到此错误:iptables v1.8.4 (legacy): Couldn't load target 'MYCHAIN':No such file or directory
。
我想我遗漏了一条规则,但我不知道是哪一条。
答案1
你必须MYCHAIN
先创建,
暗示:
尝试代理服务器目标(在预路由/曼格尔 )。(仅在 mangle 表,PREROUTING 链以及仅从此链调用的用户定义链中有效)。
他们有一个很好的例子:
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 50080
来自手册:
它将数据包重定向到本地套接字,而不会以任何方式更改数据包头。它还可以更改标记值,然后可以在高级路由规则中使用。它有三个选项:
--on-port port
这指定要使用的目标端口。这是一个必需选项,0 表示新目标端口与原始端口相同。这仅在规则还指定 -p tcp 或 -p udp 时才有效。
--on-ip address
这指定要使用的目标地址。默认情况下,该地址是传入接口的 IP 地址。这仅在规则还指定 -p tcp 或 -p udp 时才有效。
--tproxy-mark value[/mask]
使用给定的值/掩码标记数据包。此处设置的 fwmark 值可供高级路由使用。(透明代理工作需要:否则这些数据包将被转发,这可能不是您想要的。)
参考 :
答案2
您只是MYCHAIN
在nat
表中创建。示例中的最后一个命令是将规则插入到filter
表链中INPUT
,跳转目标为表MYCHAIN
中filter
。
由于不存在这样的链,您会收到错误消息。