virbr0(libvirt) 및 네트워크 관리자의 dnsmasq

virbr0(libvirt) 및 네트워크 관리자의 dnsmasq

테스트 목적으로 127.0.0.1로 확인되도록 와일드카드를 구성하기 위해 로컬 컴퓨터에서 dnsmasq를 실행하고 싶습니다.

그러나 systemd로 dnsmasq를 시작하려고 하면 다음과 같은 오류 메시지가 나타납니다.

[root@dhcppc4 ~]# systemctl status dnsmasq -l
● dnsmasq.service - DNS caching server.
   Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Fri 2015-10-09 21:49:58 BST; 14s ago
  Process: 2652 ExecStart=/usr/sbin/dnsmasq -k (code=exited, status=2)
 Main PID: 2652 (code=exited, status=2)

Oct 09 21:49:58 dhcppc4 systemd[1]: Started DNS caching server..
Oct 09 21:49:58 dhcppc4 systemd[1]: Starting DNS caching server....
Oct 09 21:49:58 dhcppc4 dnsmasq[2652]: dnsmasq: failed to create listening socket for port 53: Address already in use
Oct 09 21:49:58 dhcppc4 systemd[1]: dnsmasq.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Oct 09 21:49:58 dhcppc4 systemd[1]: Unit dnsmasq.service entered failed state.
Oct 09 21:49:58 dhcppc4 systemd[1]: dnsmasq.service failed.

현재 실행 중인 DNS 서버가 없는 상태에서(및 확인된) 포트 53을 사용하는 방법에 대해 혼란스러워서 dig @127.0.0.1실행하여 netstat -ln주소의 포트 53에서 수신 대기하는 프로세스를 찾았습니다 192.168.122.1.

tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN
udp        0      0 192.168.122.1:53        0.0.0.0:* 

ifconfig는 이것이 192.168.122.1가상 인터페이스 virbr0임을 보여줍니다.

나중에 빠른 Google 검색과 Wiki를 통해 libvirt가 물리적 인터페이스를 추상화하기 위해 호스트에 가상 네트워킹을 제공한다는 것을 이해합니다. Libvirt는 모든 트래픽이 라우팅되는 가상 네트워크 스위치를 사용합니다.[1]. 기본 가상 네트워크 스위치인 virbr0은 데몬이 처음 시작될 때 생성됩니다.

그런 다음 이 인터페이스에서 DIG를 통해 dnsmasq로 쿼리를 보낼 수 있는지 확인할 수 있습니다.

[grobinson@dhcppc4 ~]$ dig @192.168.122.1 +short
a.root-servers.net.
j.root-servers.net.
m.root-servers.net.
b.root-servers.net.
i.root-servers.net.
k.root-servers.net.
l.root-servers.net.
d.root-servers.net.
g.root-servers.net.
c.root-servers.net.
h.root-servers.net.
e.root-servers.net.
f.root-servers.net.

질문 1: dnsmasq가 이 가상 인터페이스를 수신 대기하도록 하는 이유를 이해할 수 없습니까? /etc/resolv.conf의 경우 DHCP 서버에 구성된 DNS 서버가 머신에 Google DNS 서버로 쿼리를 보내라고 지시하는 것을 볼 수 있습니다. 그 용도는 무엇입니까?

# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 8.8.4.4

/etc/NetworkManager/NetworkManager.conf라인을 편집 하고 추가 dns=dnsmasq한 다음 systemd를 사용하여 네트워크 관리자를 다시 시작할 수 있다는 것을 알았습니다. 여기에서 네트워크 관리자는 루프백 주소의 dnsmasq에 쿼리를 직접 보내도록 구성되며 간단한 dig 호출로 볼 수 있습니다.

[grobinson@dhcppc4 ~]$ dig @127.0.0.1 +short
l.root-servers.net.
g.root-servers.net.
i.root-servers.net.
...

이제 출력에는 netstat -ln포트 53에서 바인딩되어 수신 대기 중인 두 개의 소켓이 표시됩니다.

tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN     
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN 

질문 2: 네트워크 관리자는 왜 127.0.0.1에서 dnsmasq를 시작할 수 있는데 systemctl로는 시작할 수 없나요? 기본 구성이 모든 인터페이스에서 수신 대기를 시도하는데 virbr0에서는 실패하기 때문입니까? 원하는 인터페이스만 명시하면 되나요?

질문 3: dnsmasq에는 두 가지 구성 옵션이 있는 것 같습니다. 구성 파일을 작성할 수 있는 /etc/dnsmasq.conf폴더입니다 . 편집이 @127.0.0.1에 대한 쿼리에 영향을 주지 않기 때문에 후자가 설정되고 dnsmasq가 127.0.0.1을 수신하는 /etc/NetworkManager/dnsmasq.d/경우인 것 같습니다 . 전자가 libvirt의 dnsmasq용일 수 있나요?dns=dnsmasq/etc/dnsmasq.conf

답변1

기본적으로 libvirt는 각 가상 인터페이스 브리지에 대해 dnsmasq 인스턴스를 시작합니다. 이는 가상 네트워크에서 실행 중인 VM에 DHCP 서비스를 제공하기 위해 수행됩니다.

http://wiki.libvirt.org/page/VirtualNetworking

기본적으로 virbr 브리지는 기본 설정을 사용하여 VM을 회전시킬 때마다 libvirt에 의해 생성됩니다. 이러한 일이 발생하지 않도록 하려면 VM을 시작하기 전에 브리지를 직접 만든 다음 사용자 지정 브리지를 인수로 지정하여 "브리지" 모드에서 시작해야 합니다. 여기에 꽤 잘 설명되어 있는 매뉴얼 페이지가 있습니다. --network 옵션을 살펴보세요.

https://www-01.ibm.com/support/knowledgecenter/linuxonibm/liaat/liaatvirtinstalloptions.htm

libvirt에서 "가상 네트워크"를 생성할 때마다 이에 대한 dnsmasq 인스턴스도 시작됩니다. 따라서 다시 libvrt의 가상 네트워크 사용을 중지하고 수동으로 전환해야 합니다.

답변2

동일한 인터페이스를 사용하여 로컬 /etc/hosts 변경 사항을 VM에 전파하려면 로컬 libvirt 프로세스를 간단히 SIGHUP하면 됩니다.

답변3

수신하려는 인터페이스의 명시적 목록으로 dnsmasq 인스턴스를 구성합니다.

인터페이스 이름 이나 인터페이스 IP 를 /etc/dnsmasq.conf사용할 수 있습니다 . 이 설정을 사용하더라도 dnsmasq는 모든 인터페이스에 유용하게 바인딩되므로 구성 파일에 추가하여 이를 비활성화합니다.interface=eth0listen-address=192.168.0.1bind-interfaces

또는 구성 파일에서 except-interface=virtbr*.

출처:

관련 정보