私のローカルネットワーク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を使用していくつかのパケットをキャプチャしようとしましたが、リダイレクトが発生していないとのみ表示されますが、その理由は表示されません。