Iptables(mangle表)无法检测具有目标端口限制的udp数据包流量

Iptables(mangle表)无法检测具有目标端口限制的udp数据包流量

操作系统信息。

Linux raspberrypi 4.14.98-v7+ 或 Linux debian-stretch-1 4.9.0-11-amd64

发生了什么?

我启动一个可以重定向 UDP 流量的服务(ss-redir)

此服务开放udp 1080端口

我想将所有 dns 查询重定向到 udp 127.0.0.1:1080 端口

你做了什么?

ip route add local default dev lo table 100
ip rule add fwmark 1 lookup 100
iptables -t mangle -A PREROUTING -p udp --dport 53 -j TPROXY --on-port 1080 --tproxy-mark 0x01/0x01
nslookup www.google.com

您期望看到什么?

多个 UDP 数据包已通过 PREROUTING 链

确切的数量应显示在第一列(pkts)和第二列(字节)中

但你看到的是什么?

pkts bytes target     prot opt in     out     source               destination         
    0     0 TPROXY     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53 TPROXY redirect 0.0.0.0:1080 mark 0x1/0x1

详细配置。

root@User:~# cat /etc/resolv.conf
nameserver 8.8.8.8

这是我的服务

root@User:~# netstat -ntulp 
udp        0      0 0.0.0.0:1080            0.0.0.0:*                           3771/ss-redir

然后你做了什么?

看起来DNS查询目标端口不是53,用wireshark捕获的数据包表明dport是53,目标ip是8.8.8.8。

因此我在 PREROUTING 链中的规则之前添加了一些其他规则:

iptables -t mangle -I PREROUTING --prot udp -d myserverip/32 -j RETURN
iptables -t mangle -I PREROUTING --prot udp -d 192.168.128.10/32 -j RETURN
iptables -t mangle -I PREROUTING --prot udp -d 127.0.0.0/24 -j RETURN

然后运行

nslookup www.google.com

iptables -t mangle -L -nv

输出如下所示:

Chain PREROUTING (policy ACCEPT 90 packets, 6699 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0   RETURN     udp  --  *      *       0.0.0.0/0             myserverip  
    1    29   RETURN     udp  --  *      *       0.0.0.0/0            127.0.0.0/24        
    0     0   RETURN     udp  --  *      *       0.0.0.0/0            192.168.128.10      
    0     0   TPROXY     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53 TPROXY redirect 0.0.0.0:1080 mark 0x1/0x1

UDP 数据包仍然无法通过 ss-redir

我不知道我做错了什么。这个问题让我抓狂。有人能帮我吗?

任何意见是极大的赞赏。

非常感谢

相关内容