NetworkManager와 함께 dnsmasq 사용

NetworkManager와 함께 dnsmasq 사용

NetworkManager가 dnsmasq(참조:여기). 긴 내용을 훑어봤습니다여기서 토론하지만 상황을 처리하기 위해 권장되는 방법이 무엇인지 아직 확실하지 않습니다.

내가 원하는 건 그저 사용하는 것 dnsmasq뿐이야내 로컬 네트워크에 DNS 및 DHCP 제공. 이 경우 권장되는 방법은 무엇입니까?

Ubuntu 14.04에서도 문제가 남아있는 것 같습니다.벌레고쳐졌다고 합니다.

dnsmasq-base해결 방법으로 사람들은 다음과 같은 이유로 NM 노예를 비활성화하고 있습니다 .

NM 종속은 dnsmasq극히 제한된 기능을 제공하는 하드코딩된 옵션(C)을 사용합니다.

  • ethX( )에서는 수신 대기하지 않습니다 --listen-address=127.0.0.1. 따라서 우리 서버를 로컬 네트워크 PC의 DNS 서버로 사용할 수 없습니다. 즉, LAN에는 전혀 쓸모가 없습니다.
  • 요청( )을 캐시하지 않습니다 --cache-size=0. 캐싱 없음 ==> DNS 쿼리 속도가 향상되지 않습니다. 동시 사용자가 많기 때문에 이는 LAN에 매우 중요합니다.
  • 마지막으로 dnsmasq의 DHCP 및 TFTP 기능도 필요하므로 NM+dnsmasq에 실제 DNS 서버가 포함되어 있더라도 다른 dnsmasq를 실행해야 합니다.

그러나 여전히 유효한지 및/또는 수정 사항이 문제를 어떻게 해결했는지 잘 모르겠습니다. 게다가 그들 중 어느 누구도 자신이 문제를 해결하기 위해 무엇을 했는지, 어떻게 했는지 정확히 알지 못합니다. 즉, 솔루션 부분이 누락되었습니다.긴 토론. 누군가 빈칸을 채워줄 수 있나요? 즉,

dnsmasq위의 이유로 Ubuntu에서 제공하는 기본 기능이 서버 측에서 작동하지 않습니다 . 그리고 클라이언트 측에서도"해당 Ubuntu 노트북에 설치된 dnsmasq는 내 DNS 서버에서 LAN DNS 쿼리를 수행할 수 없습니다.", 왜냐하면"(Ubuntu 노트북의) NetworkManager로 인해 이상한 127.0.1.1 네임서버 설정이 발생했습니다."(참조:LAN 또는 로컬 홈 네트워크용 DNS 솔루션)

dnsmasq가 NetworkManager와 원활하게 작동하여 서버와 클라이언트 측 모두에서 내 로컬 네트워크에 DNS 및 DHCP(및 TFTP)를 제공하도록 만드는 방법은 무엇입니까?

TL'dr

답을 찾는 사람들을 위해. 아래의 모든 답변 중에서 가장 간단한 솔루션은 @brad의 솔루션이라는 것을 알았습니다.서버 측(클라이언트 측에서는 여전히 좋은 답변이 없습니다):

문제에 대한 유일한 해결책은 NM 드라이브 dnsmasq를 비활성화하고 "표준" dnsmasq를 설치한 다음 표준 /etc/dnsmasq.conf구성 파일을 통해 구성하는 것입니다.

답변1

나에게도 당신의 문제가 있습니다.

원칙적으로 이후wiki.archlinux/etc/NetworkManager/dnsmasq.d/cache, 캐싱을 활성화하려면 다음을 포함하는 파일을 생성하는 것으로 충분할 것 같습니다 .

$ cat /etc/NetworkManager/dnsmasq.d/cache 
cache-size=1000

이것을 시도했지만 NM을 다시 시작한 후에도 여전히 캐시가 없습니다.

# ps ax | grep dns
11724 ?        S      0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/sendsigs.omit.d/network-manager.dnsmasq.pid --listen-address=127.0.1.1 --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d

인용된 conf 파일은 항상 비어 있습니다. 이 절차를 사용하여 어떤 옵션도 구성할 수 없습니다.

전체적으로 14.04의 NM 종속 dnsmask(dnsmasq-base 패키지에서 제공)가 완전히 잠겨 있어 캐싱이나 다른 것(dhcp, tftp)을 활성화할 수 없는 것 같습니다.

이것이 맞다면 문제에 대한 유일한 해결책은 다음 줄을 주석 처리하여 NM 드라이브 dnsmasq를 비활성화하는 것입니다.

dns=dnsmasq

파일에 /etc/NetworkManager/NetworkManager.conf"표준" dnsmasq를 설치한 다음 표준 /etc/dnsmasq.conf구성 파일을 통해 구성합니다.

답변2

에 설정을 입력하여 설정을 재정의할 수 있습니다 /etc/NetworkManager/dnsmasq.d/*.conf. 구성 파일 설정은 명령줄 플래그보다 우선합니다. NetworkManager가 dnsmasq를 시작할 때 적용됩니다. sudo service network-manager restart다시 신청하려면 실행하세요 . (의심스러운 점이 있는 경우: 브래드의 답변에서 논쟁을 ps ax | grep dns보여주는 사실이 누락되었습니다 --conf-dir.)

예를 들어:

echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf

제가 기억하기로는 NetworkManager는 캐시 중독에 대한 우려로 인해 기본적으로 dnsmasq 캐싱을 비활성화합니다. 모든 사용자를 신뢰할 수 있는 시스템의 경우 문제가 되지 않을 수 있습니다.

NetworkManager는 와 통합되지 않으며 resolvconf 패키지가 설치된 경우 resolvconfNM의 서버는 로컬로 사용되지 않습니다. 127.0.1.1resolvconf는 ubuntu-minimal 및 표준 Debian 설치의 일부입니다. NetworkManager는 보다 통합되고 스크립트 기반이 적은 방식으로 해당 기능을 다시 구현합니다.

bind-interfacesNetworkManager는 전역 dnsmasq 인스턴스(보조 루프백 IP에 바인딩하고 를 통해 설정)를 방해하지 않도록 합니다 /etc/dnsmasq.d/network-manager. 전역 dnsmasq 인스턴스를 설치하고 NM의 인스턴스를 유지하는 경우 /etc/resolv.conf호스트가 기본적으로 사용할 인스턴스를 다시 확인하세요.

위에 표시된 대로 NetworkManager의 dnsmasq 인스턴스를 사용자 정의할 수 있지만, 공용 인터페이스에 바인딩되는 DNS 서버를 원하는 경우 패키지를 설치하고 dnsmasq(NetworkManager는 dnsmasq-base전역 인스턴스를 구성하지 않는 만 사용함) 구성을 에 넣어야 합니다 /etc/dnsmasq.d/*.conf. NetworkManager의 슬레이브 인스턴스는 루프백 인터페이스에만 바인딩하기 위한 것이며 해당 범위를 넘어서 구성하면 중단될 위험이 있습니다.


요약하자면, 로컬 DNS 캐싱만 원하는 사람의 경우:

sudo apt-get remove dnsmasq resolvconf dhcpcd5 rdnssd
echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf

간단한 LAN의 경우 NetworkManager의 연결 공유로 충분합니다. 그러나 TFTP 등을 사용하여 맞춤 구성된 LAN의 경우:

sudo apt-get install resolvconf dnsmasq
echo 192.168.0.50,192.168.0.150,12h |sudo tee -a /etc/dnsmasq.d/lan.conf
echo enable-tftp |sudo tee -a /etc/dnsmasq.d/lan.conf
sudo service dnsmasq restart

답변3

이 게시물에 대한 이전 답변 외에도 해당 Network-manager의 dnsmasq-base인스턴스도 지시어를 따르며 addn-hosts(/etc/NetworkManager/dnsmasq-shared.d/ 아래에 생성된 구성 파일에 있음) dnmasq를 강제 실행합니다. -base는 Network-Manager의 옵션 /etc/hosts으로 dnsmasq가 호출된다는 사실에도 불구하고 로컬 파일을 읽습니다 .--no-hosts

그런 식으로 Mint 20.1 노트북에 로컬 DNS 서버를 성공적으로 설정했습니다. IP 주소를 조작할 필요가 없습니다(올바른 설정이 /etc/hosts제공됩니다...).

아래에서 작동하는 샘플을 찾으세요...

 # /etc/NetworkManager/dnsmasq-shared.d/local-DNS.conf
 domain=local.wifi              // specify the (local) DNS-domain
 addn-hosts=/etc/hosts          // force dnmasq to read /etc/hosts despite --no-host
 bogus-priv                     // do not forward private reverse lookups to upstream server (not needed if there is none...)
 dhcp-option=6,[IP-OF-WIFI_IF]  // tell client to use [IP-OF-WIFI_IF] as DNS-Server

답변4

특정 MAC을 특정 IP 주소에 할당하고 안정성을 위해 가능한 한 기본 네트워크 관리자/dnsmasq를 고수하고 싶었습니다.

https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/dnsmasq/nm-dnsmasq-manager.c구성을 무시하기 위해 --conf-file을 사용하는 것에 대한 설명이 있지만 나중에 파일에

/* dnsmasq exits if the conf dir is not present */
    if (g_file_test (CONFDIR, G_FILE_TEST_IS_DIR))
        nm_cmd_line_add_string (cmd, "--conf-dir=" CONFDIR);

Ubuntu 16.04 LTS에서 Wi-Fi 핫스팟을 설정하고 다른 연결을 공유한 후 ps auxgww | grep dnsmasq각 dnsmasq 프로세스의 마지막 명령줄 인수는 다음과 같습니다.

--conf-dir=/etc/NetworkManager/dnsmasq-shared.d

따라서 Network Manager에서 시작하는 모든 dnsmasq 호출 간에 공유되는 구성 파일을 해당 디렉터리에 생성할 수 있습니다.

/etc/NetworkManager/dnsmasq-shared.d/Hue를 만들었습니다.

dhcp-host=0c:4d:e9:a0:ce:cf,192.168.1.221

실행 중이지만 재부팅했습니다.

sudo service network-manager restart

효과가 있었을 것입니다.

이로 인해 내 장치가 적절한 IP 주소를 얻게 되었습니다.

예, 이는 NetworkManager에 의한 모든 dnsmasq 호출이 이 선언을 받게 됨을 의미하기 때문에 잘못된 것입니다. 그러나 이 경우에는 MAC가 문제의 네트워크에 나타나는지 여부만 중요하므로 무해합니다. 네트워크가 192.168.1이 아니면 문제가 발생합니다.

이는 /usr/sbin/dnsmasq를 제안된 스크립트로 바꾸는 것보다 더 강력합니다.https://gist.github.com/magnetikonline/6236150

올바른 해결책은 dnsmasq 구성 파일을 올바르게 사용하기 위해 dnsmasq가 호출되는 방식을 수정하는 것입니다. 저는 Network Manager가 "그냥 작동"하게 하려는 욕구를 이해합니다. 하지만 바보 방지 도구를 만든다는 것은 바보만이 사용할 수 있다는 것을 의미합니다.

관련 정보