使用 iptables 将系统范围的流量重定向到本地代理服务器

使用 iptables 将系统范围的流量重定向到本地代理服务器

我的示例中使用的代码取自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 值可供高级路由使用。(透明代理工作需要:否则这些数据包将被转发,这可能不是您想要的。)

参考 :

tproxy 文档

网络过滤器手册

答案2

您只是MYCHAINnat表中创建。示例中的最后一个命令是将规则插入到filter表链中INPUT,跳转目标为表MYCHAINfilter

由于不存在这样的链,您会收到错误消息。

相关内容