Iptables
虛擬機的通用 DNS - 使用 iptables/netfilter
我在主機上有一個 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
。我無法通過記憶給你一個工作範例,你必須找到確切的設置。然後請填寫答案以供將來參考。