我有一个 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