如何更改所有传出数据包(尤其是 DNS)的目标 IP?

如何更改所有传出数据包(尤其是 DNS)的目标 IP?

我有一个 Raspberry Pi 4,带有最新版本的 (Debian) raspberry pi OS。我正在尝试配置iptables以将来自 Pi (使用 )的所有流量重定向到另一台机器(假设使用 IP 地址)。这是为了测试另一台将托管基于 DNS 的强制门户的计算机,我想将所有流量转发到该强制门户计算机 (IP B)。如果我可以保持 SSH 连接不转发,那就太好了,因为我喜欢我的无头设置。

我已经在 NAT 表上尝试过这套规则(iptables)。我意识到我已经尝试过的只是尝试将 UDP 流量从 IP A 转发到 IP B。这不起作用。

root@pi4:/home/pi# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 7 packets, 1155 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       udp  --  *      *       <IP A>               <resolver IP>       udp dpt:53 to:<IP B>

Chain INPUT (policy ACCEPT 7 packets, 1155 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      *       0.0.0.0/0            0.0.0.0/0           

非常感谢任何帮助或指示。

答案1

我想到了!事实证明,我的链规则只是放置在错误的位置。我应该将 PREROUTING 规则放入 OUTPUT 中,因为我想修改内部生成的目标 IP 地址。最后,我的 NAT 表如下所示(保留问题中的占位符 IP):

# Generated by iptables-save v1.8.7
*nat
:PREROUTING ACCEPT [22:2797]
:INPUT ACCEPT [22:2797]
:OUTPUT ACCEPT [129:8883]
:POSTROUTING ACCEPT [129:8883]
-A OUTPUT -d <resolver IP>/32 -p udp -m udp --dport 53 -j DNAT --to-destination <IP B>:<port B>
-A POSTROUTING -d <IP B>/32 -p udp -m udp --dport <port B> -j SNAT --to-source <IP A>
COMMIT
# Completed on

相关内容