NetworkManager와 함께 dnsmasq 사용


15

NetworkManager가 잘 작동하지 않는 것으로 잘 알려져 있습니다 dnsmasq(ref : here ). 나는 여기서토론을 훑어 보았지만 상황을 다루는 권장 방법이 무엇인지 여전히 확신하지 못했습니다.

내가 원하는 것은 dnsmasq로컬 네트워크에 DNS와 DHCP를 제공하는 것입니다. 이 경우 권장되는 방법은 무엇입니까?

우분투 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에서 제공 한 기본 제공 서버가 작동하지 않습니다. 또한 클라이언트 측에서 " (우분투 랩톱 ') NetworkManager로 인해 127.0.1.1 네임 서버 설정이 이상해 지기 때문에 " 우분투 랩톱에 설치된 dnsmasq가 내 DNS 서버에서 LAN DNS 쿼리를 수행 할 수 없습니다 "" ( REF : LAN 또는 로컬 홈 네트워크에 대한 DNS 솔루션 )

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

TL'dr

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

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


2
Google 직원 만 (나 같은) : NetworkManager의 최신 버전의 ubuntu dnsmasq-core는 다소 친숙합니다. 여기를 참조하십시오 : askubuntu.com/questions/233195/…
A. Rabus

답변:


3

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

원칙적으로 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 구성 파일을 구성하십시오.


수퍼 유저 브래드에 오신 것을 환영합니다! 당신의 도움을 주셔서 감사합니다!
xpt

1
실제로 캐시를 사용하도록 설정 합니다.이 파일 --conf-dir=/etc/NetworkManager/dnsmasq.d은로 실행 cache-size중이므로 생성 한 파일에 지정된 것이 사용됩니다. dig
sirfz

6

에 넣어서 설정을 무시할 수 있습니다 /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.1로컬로 사용되지 않습니다. resolvconf는 우분투 최소 및 표준 데비안 설치의 일부입니다. NetworkManager는보다 통합 된 스크립트 기반 방식으로 해당 기능을 다시 구현합니다.

NetworkManager는 글로벌 dnsmasq 인스턴스를 방해하지 않도록합니다 (보조 루프백 IP에 바인딩하고를 bind-interfaces통해 설정 /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

감사. 좀 더 완벽하게 "요약"명령이하는 일을 설명해야하지만, 즉 당신이 그들에게 현재있는 경우 지침은 4 개 패키지를 제거 더 많은 링크와 토론에서 reddit.com/r/Ubuntu/comments/2j0va4/...
nealmcb을

아주 @nealmcb, Tobu에 동의 이유를 설명해주십시오 "단지 로컬 DNS 캐싱을 원하는 사람은" 그들이 할 필요가 제거dnsmasq 패키지를. 다음 echo명령은 무엇입니까? 그 이후 dnsmasq로 사라질 것입니다.
xpt

@xpt Tobu는를 제거 할 것을 제안 dnsmasq하지만 dnsmasq-baseNM으로 인해 설치되어 있어야합니다.
Thalis Kalfigkopoulos 2016

0

특정 IP 주소에 특정 MAC을 할당하고 안정성을 위해 가능한 한 기본 Network Manager / 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이 아니면 문제가있는 것입니다.

https://gist.github.com/magnetikonline/6236150 에서 제안한 것처럼 / usr / sbin / dnsmasq를 스크립트로 바꾸는 것보다 훨씬 강력합니다.

올바른 해결책은 dnsmasq 구성 파일을 올바르게 사용하기 위해 dnsmasq가 호출되는 방식을 수정하는 것입니다. Network Manager를 "정상적으로 작동"하려는 욕구를 이해하지만, 바보를 방지하는 도구를 만들면 바보 만 도구를 사용할 수 있습니다.


대답 크리스토퍼 주셔서 감사합니다, 그러나, 나는 따라하기 ... 정말 할 수 아니에요 "나는 특정 IP 주소로 특정 MAC을 할당하고 싶었다과 안정성의 목적을 위해" ... "추신 auxgww | GREP하는 dnsmasq 쇼가 의 마지막 명령 행 인수 하는 dnsmasq 프로세스 "의 ... "내가 만든 ... 일 것이다는 " ... "네, "잘못 ... 즉, 내가 정말 생각의 기차를 따라 갈 수 없어 , 여기서 말하려는 내용을 이해하기 위해.
xpt

0

내 솔루션이 Network Manager를 중단시키고 모든 작업을 간단하게 수행 할 수 있습니다. NM이 dnsmasq를 처리하는 방식이 깨져서 아래의 방법으로 재정의합니다.

이 문제의 해결 방법은 단순히 다음을 수행하는 것입니다.

sudo apt install dnsmasq
cp /etc/dnsmasq.conf ~/

~/dnsmasq.conf사용자 디렉토리에서 원하는 방식으로 파일을 편집 하고 저장하십시오.

sudo rm -v /etc/dnsmasq.conf
sudo cp -v ~/dnsmasq.conf /etc/
sudo chattr +i /etc/dnsmasq.conf
sudo systemctl restart dnsmasq.service

간단한 bash 별칭을 만들어 ~ / .bash_aliases 파일의 맨 아래에 배치하여 dnsmasq.conf 파일을 쉽게 편집 할 수 있도록했습니다. 별명은 다음과 같습니다.

alias="sudo chattr -i /etc/dnsmasq.conf && sudo nano -w /etc/dnsmasq.conf && sudo chattr +i /etc/dnsmasq.conf && sudo systemctl restart dnsmasq.service"

물론, 별명에서 두 번째 sudo 명령을 원하는대로 편집기를 선택할 수 있지만 모든 사람을 위해 nano를 사용했습니다. 파일을 저장하고 명령 터미널 탭 / 창을 닫았다가 다시 엽니 다. 그러면 새로 열린 터미널 탭 / 창에서 별칭을 사용할 수 있어야합니다.

단순히 eddmc사용자 계정에서 실행하면 관리자 권한 명령을 수행하기 위해 암호를 묻습니다.

항상 chattr +i파일입니다. 따라서 Network Manager는 구성을 자체 구성으로 덮어 쓰지 않습니다.

유선 이더넷 연결에는 아무런 문제가 없습니다. 액세스 포인트에 연결 한 후 dnsmasq.service를 수동으로 다시 시작해야하는 무선 랩톱에서 dns 캐싱에 dnsmasq를 사용하고있는 것을 알았습니다. Network Manager가 연결시 서비스 재시작과 같은 작업을 수행 할 수 있다고 생각하지만 아직 살펴 보지 않았습니다.


0

여기와 반대되는 주장에도 불구하고 NetworkManager는 모든 dmsmasq 구성 파일 (자체 디렉토리에있는 파일 포함)을 완전히 무시합니다 /etc/NetworkManager/dnsmasq-shared.d. 증명은 NetworkManager의 소스 코드에 있습니다. 다음은 관련 주석입니다.

/ * dnsmasq는 기본 구성 파일 위치에서 읽을 수 있습니다.이 위치는 유효한 구성 파일 인 경우 여기에있는 옵션과 결합하여 바람직하지 않은 부작용을 유발합니다. 게이트웨이 등으로 가짜 IP 주소를 보내는 것과 같습니다. 따라서 dnsmasq에게 구성 파일을 전혀 사용하지 말라고 지시하십시오. * /

다음 은 관련 소스 코드에 대한 링크입니다 (139-144 행).


2
독자가이를 검증하고 관련 코드를 읽을 수 있도록 소스 코드를 가리키는 링크가 가능하면 도움이 될 것입니다.
jamesc

1
예, 명시 적 구성 파일을 지정할 수 없습니다. --conf-file은 / dev / null로 하드 코딩되었습니다. 그러나 NetworkManager를 통해 dnsmasq를 시작하는 데 사용 된 전체 명령 줄을 보면 conf-dir이 사용되는 것을 볼 수 있습니다 : '/ usr / sbin / dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file = / var / run / NetworkManager / dnsmasq.pid --listen-address = 127.0.0.1 --cache-size = 400 --clear-on-reload --conf-file = / dev / null --proxy-dnssec --enable-dbus = org.freedesktop.NetworkManager.dnsmasq --conf-dir = / etc / NetworkManager / dnsmasq.d ': 주어진 디렉토리의 모든 파일을 읽습니다.
Hardy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.