仮想マシンDNSの問題をlocalhost dnsmasqホストにリダイレクトする方法

仮想マシンDNSの問題をlocalhost dnsmasqホストにリダイレクトする方法

私のローカルネットワークshcemaは次のとおりです。

internet (WAN)
  |
router            host IP (resolv.conf)
  |                |
  +------- eth0 - br0 - tap0 - VM (resolv.conf)
  |                |
localnet          localhost (dnsmasq)
 (.home)

私のホストは主に仮想マシンをテストするために使用されます。目的は、VMがローカルネットワークのみを表示できるようにし、WANからDNSを取得するのではなく、ホストdnsmasqインターフェイスloでリッスンし、ローカルネットワーク上のホストについてのみ学習するように設定されたDNSから取得することですpc1.home pc2.home www.home data.home printer.home

ホストがリッスンするようにdnsmasqを正常に設定し、tcp/udp 127.0.0.1:53ホストCLIから応答を受信して​​確認しました。

# dig www.google.com    ... 142.251.36.68 (ANSWER 1)

そして

# dig @127.0.0.1 www.google.com    ...    (ANSWER 0)
# dig @127.0.0.1 www.home ... 192.168.1.2 (ANSWER 1)

さまざまな方法でip_forwardingを設定してみました

# echo "1" > /proc/sys/net/ip4/conf/all/forwarding
# echo "1" > /proc/sys/net/ipv4/conf/tap0/route_localnet

その後、iptablesルールを作成しようとしています。

# iptables -t nat -A PREROUTING -i tap0 -p tcp --dport 53 -j DNAT --to-destination 127.0.0.1:53
# iptables -t nat -A PREROUTING -i tap0 -p udp --dport 53 -j DNAT --to-destination 127.0.0.1:53

その後、確認してください。

# iptables -v -t nat -L
 pkts bytes target  prot opt in    out  source    destination         
    0     0 DNAT    udp  --  tap0  any  anywhere  anywhere    udp dpt:domain   to:127.0.0.1:53
    0     0 DNAT    tcp  --  tap0  any  anywhere  anywhere    tcp dpt:domain   to:127.0.0.1:53

しかし、仮想Linuxを実行すると、DNSはまだ/etc/resolv.conf

さて、仮想マシンの設定を手動で書き直すことを提案することはできますが、多くの仮想resolv.confマシンのインストールをテストするたびにこれを行うのは面倒で、何を書くべきかを言うのも難しいです。なぜなら、dnsmasqが聞くからです。 localhostホストから。したがって、VMの内容はresolv.conf次のようになります

nameserver 127.0.0.1

非常に混乱し、役に立たない可能性があります。 Wiresharkを使用していくつかのパケットをキャプチャしようとしましたが、リダイレクトが発生していないとのみ表示されますが、その理由は表示されません。

関連情報