Iptables

虛擬機的通用 DNS - 使用 iptables/netfilter

  • February 7, 2017

我在主機上有一個 Bind9。

我有幾個來賓虛擬機。

我希望我的虛擬機使用位於主機上的 Bind9。

我知道如何讓 Bind9 接受來自我的虛擬機器的請求(監聽 + 允許遞歸)。

我想使用 iptables/netfilter 來實現它,而不需要修改 Bind9 配置(也就是只在 127.0.0.1 上監聽)。

–> 這只是一個本地埠重定向。我知道如何用 socat 來做,但是在用 iptables/netfilter 做的時候我被卡住了

僅在 127.0.0.1 上綁定偵聽,因此數據包必須來自 127.0.0.1

虛擬機位於網橋 vmbr0 10.10.10.0/24

主機也在 10.10.10.1 的網橋上

我應該讓數據包進入自定義鏈,然後 DNAT+SNAT 它們,還是有更簡單的方法?

我這樣做了(但不起作用):

sysctl -w net.ipv4.conf.vmbr0.route_localnet=1     # not sure if necessary. Let's see that when everything will work

iptables  --table nat  --new-chain dns-prerouting
iptables  --table nat  --append PREROUTING  --source 10.10.10.0/24  --destination 10.10.10.1  --protocol udp  --destination-port 53  --jump dns-prerouting
iptables  --table nat  --append PREROUTING  --source 10.10.10.0/24  --destination 10.10.10.1  --protocol tcp  --destination-port 53  --jump dns-prerouting

iptables  --table nat  --new-chain dns-postrouting
iptables  --table nat  --append POSTROUTING  --source 10.10.10.0/24  --destination 127.0.0.1  --protocol udp  --destination-port 53  --jump dns-postrouting
iptables  --table nat  --append POSTROUTING  --source 10.10.10.0/24  --destination 127.0.0.1  --protocol tcp  --destination-port 53  --jump dns-postrouting


iptables  --table nat  --append dns-prerouting   --jump DNAT  --to-destination 127.0.0.1
iptables  --table nat  --append dns-postrouting  --jump SNAT  --to-source      127.0.0.1

您必須sysctl -w net.ipv4.conf.XXX.route_localnet=1像以前一樣使用,但可能在虛擬乙太網介面上。

這允許核心​​保留馬丁包。

還要記住,本地生成的數據包不會傳遞到 PREROUTING 鏈中。所以你必須使用 OUTPUT 鏈。

最後,對於這種非常特殊的情況,不要嘗試 NAT。改為使用--jump TPROXY

我無法通過記憶給你一個工作範例,你必須找到確切的設置。然後請填寫答案以供將來參考。

引用自:https://unix.stackexchange.com/questions/340975