Redirecionei com sucesso as solicitações de entrada da porta 53 para 3053 usando a tabela PREROUTING do iptables
Redirecionei com sucesso as solicitações locais da porta 53 para 3053 usando a tabela OUTPUT do iptables, desde que usem a interface de loopback
Mas as requisições locais que usam o endereço IPv4 eth0 ignoram ambos os redirecionamentos. Como resolver isso?
Eu tentei DNAT, especificando o IP de destino, a interface, nada funciona
sudo iptables-save
# Generated by iptables-save v1.8.9 (nf_tables) on Sun Feb 23 21:29:58 2025
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
*nat
:PREROUTING ACCEPT [3765:300383]
:INPUT ACCEPT [3760:298404]
:OUTPUT ACCEPT [54136:75736197]
:POSTROUTING ACCEPT [54072:75544537]
-A PREROUTING -p udp -m udp --dport 53 -j REDIRECT --to-ports 3053
-A OUTPUT -o lo -p udp -m udp --dport 53 -j REDIRECT --to-ports 3053
COMMIT
Como reproduzir o erro com contêineres
FROM alpine:latest
RUN apk add --no-cache iptables netcat-openbsd socat
podman build -t udp-redirect .
podman run --rm -it --privileged --sysctl net.ipv4.conf.all.route_localnet=1 --name udp-redirect udp-redirect sh
socat -T 1 UDP-LISTEN:3053,fork EXEC:"echo -n 'Hello world'" &
iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to 127.0.0.1:3053
echo -n "Test1" | nc -u -w1 10.0.2.100 53