
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 패키지가 설치된 경우 resolvconf
NM의 서버는 로컬로 사용되지 않습니다. 127.0.1.1
resolvconf는 ubuntu-minimal 및 표준 Debian 설치의 일부입니다. NetworkManager는 보다 통합되고 스크립트 기반이 적은 방식으로 해당 기능을 다시 구현합니다.
bind-interfaces
NetworkManager는 전역 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가 "그냥 작동"하게 하려는 욕구를 이해합니다. 하지만 바보 방지 도구를 만든다는 것은 바보만이 사용할 수 있다는 것을 의미합니다.