Iptables(マングルテーブル)は、宛先ポートの制限によりudpパケットトラフィックを検出できません。

Iptables(マングルテーブル)は、宛先ポートの制限により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チェーンを通過しました

正確な量は最初の列(パケット)と2番目の列(バイト)に表示されるはずです。

代わりに何を見ましたか?

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を通過しません

何を間違えたのか分かりません。この質問に頭がおかしくなりそうです。誰か助けてくれませんか?

アドバイスをいただければ幸いです。

どうもありがとう

関連情報