操作系统信息。
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
我不知道我做错了什么。这个问题让我抓狂。有人能帮我吗?
任何意见是极大的赞赏。
非常感谢