Amazon-Web-Services

使用 IPTables 在 AWS 中的同一網路上進行目標 NAT

  • November 19, 2021

在 AWS 中,我們在同一個子網/VPC 中有 3 個實例。我們希望客戶端實例向第二個分析實例發出 DNS 請求,然後將請求轉發到執行 DNS 服務的第三個實例。然後,DNS 服務應向分析實例提供響應,然後分析實例應響應客戶端。

目的是分析實例可以攔截客戶端和 DNS 實例之間的流量以進行分析。

客戶端實例 -> 分析實例 (NAT) -> DNS 實例

目前設置允許客戶端實例通過分析實例向 DNS 實例發送 DNS 請求。DNS 實例響應分析實例,tcpdump但客戶端實例從未收到分析實例的響應。

我們在 AWS 中為執行 NAT 的分析實例關閉了源/目標檢查。

我們首先在 Analysis 實例上啟用了轉發:

sudo sysctl -w net.ipv4.ip_forward=1

然後我們將以下 IPTables 規則添加到 Analysis 實例中

sudo iptables -A FORWARD -p udp --dport 53 -d 192.168.1.151 -j ACCEPT
sudo iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.1.151
sudo iptables -t nat -A POSTROUTING -d 192.168.1.151 -s 192.168.1.156 -p udp --dport 53 -j SNAT --to 192.168.1.213

POSTROUTING還嘗試了以下其他規則

sudo iptables -t nat -A POSTROUTING -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -p udp -d 192.168.1.151 --dport 53 -j SNAT --to-source 192.168.1.213
sudo iptables -t nat -A POSTROUTING -p udp -d 192.168.1.151 --dport 53 -j MASQUERADE

所有結果都相同,客戶端實例永遠不會收到 DNS 應答。關於什麼可能阻止分析實例返迴響應的想法?

問題是 FORWARD 鏈不允許返回流量,因此需要以下規則:

sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

完整的解決方案如下所示:

sudo iptables -A FORWARD -p udp --dport 53 -d 192.168.1.151 -j ACCEPT
sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.1.151
sudo iptables -t nat -A POSTROUTING -p udp --dport 53 -j SNAT --to 192.168.1.213

引用自:https://serverfault.com/questions/1083930