%20%E7%84%A1%E6%B3%95%E5%81%B5%E6%B8%AC%E7%9B%AE%E6%A8%99%E9%80%A3%E6%8E%A5%E5%9F%A0%E9%99%90%E5%88%B6%E7%9A%84%20udp%20%E5%B0%81%E5%8C%85%E6%B5%81%E9%87%8F.png)
作業系統資訊。
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)和第二(bytes)列中
你看到了什麼?
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,dest 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
我不知道我做錯了什麼。這個問題快把我逼瘋了。有人會幫助我嗎?
任何意見都是極大的讚賞。
非常感謝