가상 머신 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를 사용하여 일부 패킷 캡처를 시도했지만 리디렉션이 발생하지 않은 것으로만 표시되지만 그 이유는 표시되지 않습니다.

관련 정보