TPROXY 用于在任意端口上重定向 UDP

TPROXY 用于在任意端口上重定向 UDP

我想拦截所有离开 Tap1 的 UDP 流量。并可能回复例如 DNS 请求。为了实现这一点,我编写了一些 python 代码来监听 localhost 并使用iptables规则集如下:

Chain PREROUTING(策略接受2个数据包,333字节)
 pkts 字节目标 prot 选择输出源目标   

    0 0 DIVERT udp -- tap1 任何地方任何地方套接字
    0 0 TPROXY udp -- tap1 任何地方 任何地方 TPROXY 重定向 127.0.0.1:5001 标记 0x1/0x1


链 DIVERT(1 条参考文献)
 pkts 字节目标 prot 选择输出源目标         
    0 0 MARK udp -- 任何任何地方任何地方 MARK 设置 0x1
    0 0 接受 udp -- 任何任何地方任何地方

策略路由通过以下方式完成:

ip 规则添加 fwmark 1 查找 100
ip 路由添加本地 0.0.0.0/0 dev lo 表 100

此设置改编自内核的 D​​ocumentation/networking/tproxy.txt。对于使用 IP_TRANSPARENT 选项打开的 TCP 套接字来说,这可以完美地工作。

不幸的是,UDP 套接字似乎无法处理连接。例如,如果我执行此操作,ncat -u localhost 1234套接字将接收数据但无法发回任何内容。 Wireshark 将准确显示三个数据包:

  1. 传入的 ncat 数据包(到 localhost:1234)
  2. 我的软件的传出数据包(至:5001)
  3. ICMP 端口无法访问(当然)

对于任意端口的工作,我想设置适当的 (S)NATting 规则是不可行的。

那么,要使其发挥作用,必要的设置是什么随意的传入端口?

相关内容