NetworkManager가 구성한 dnsmasq가 요청을 전달할 수 없습니다.

NetworkManager가 구성한 dnsmasq가 요청을 전달할 수 없습니다.

저는 Lubuntu 17.04를 사용하고 있으며 새 네트워크에 연결하면 NetworkManager 서비스(하위 시스템?)가 일부 구성 작업을 수행합니다. 그 중 하나는 /etc/resolv.conf파일을 다음과 같이 (재)설정하는 것입니다.

# Generated by NetworkManager
search some-local-domain-here
nameserver 127.0.1.1

적어도 그것이 DHCP를 사용할 때 얻는 것입니다. localhost를 수신하는 인스턴스가 있습니다 dnsmasq(자세한 내용은 아래 참조).

이제 일부 네트워크에서는 매우 일관되게 이 경우 이름을 확인할 수 없지만 해당 행을 nameserverDHCP 임대( )에서 /var/lib/NetworkManager/dhclient-blah-blah.wlan0.lease얻은 실제 이름 서버 주소로 바꾸면 확인이 제대로 작동합니다.

질문:

  • 이 문제의 원인은 무엇입니까?
  • NetworkManager에 구성된 dnsmasq가 실제로 이름 확인 요청을 DHCP 제공 DNS 서버로 전달하도록 하려면 어떻게 해야 합니까? (참고하세요.때때로이미 수행했습니다 - 이 질문이 발생하지 않은 경우)

추가 정보:

로컬 DNS 서버는 인스턴스이며 dnsmasq명령줄은 다음과 같습니다.

/usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1 --cache-size=0 --clear-on-reload --conf-file=/dev/null --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d

구성 디렉터리에는 다음 /etc/NetworkManager/dnsmasq.d과 같은 내용의 파일이 있습니다.

# Tell any system-wide dnsmasq instance to make sure to bind to interfaces
# instead of listening on 0.0.0.0
# WARNING: changes to this file will get lost if network-manager is removed.
bind-interfaces

답변1

대부분의 최신 데비안 관련 배포판은 이제 이 도구를 직접 편집하는 대신 /sbin/resolvconf구성에 사용하는 경향이 있습니다. /etc/resolv.conf이 도구는 각 인터페이스에 대해 수신된 DNS 서버 정보를 추적하고 파일에 지정된 순서에 따라 DNS 서버 설정의 우선 순위를 지정합니다 /etc/resolvconf/interface-order.

이렇게 하면 Wi-Fi를 켤 때 DNS 서버 설정 한 세트, 네트워크 케이블을 연결할 때 다른 세트, VPN 연결을 시작할 때 세 번째 세트를 얻을 수 있습니다. 구성을 혼동하지 않고 -엄격히 역순입니다. 또한 이 경우 dnsmasq실제 제어를 위해 싸우는 두 가지 다른 메커니즘(예: NetworkManager 및 ) 을 얻게 됩니다 /etc/resolv.conf.

그러나 resolvconf선택적인 패키지입니다. /sbin/resolvconf시스템에 존재하지 않는 경우 /etc/resolv.confNetworkManager의 직접 제어를 받을 수 있습니다. 그러나 dnsmasq패키지에 있는 대부분의 스크립트는 존재한다고 가정하여 작성된 것처럼 보입니다 /sbin/resolvconf. 따라서 스크립트가 없으면 모든 상황을 적절하게 처리하지 못할 수 있는 폴백에 의존하게 됩니다. 또는 이와 유사한 것으로 설치를 시도 apt-get install resolvconf하고 설치 후 DNS 설정이 어떻게 작동하는지 확인할 수 있습니다.

이 패키지가 설치되어 있지 않으면 resolvconfNetworkManager가 모든 작업을 자체적으로 수행할 것 같습니다. 이 경우 문제 해결을 위해서는 NetworkManager의 소스 코드를 읽고 실제로 사용할 DNS 설정을 결정하는 방법을 이해해야 합니다. resolvconf덜 불투명합니다.

(L)Ubuntu Zesty(17.04)에서 부팅한 후 dnsmasq시작 스크립트는 다음 명령을 실행합니다( resolvconf패키지가 설치되어 있다고 가정).

echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.dnsmasq

이는 /sbin/resolvconf인터페이스에서 새 DNS 이름 서버를 사용할 수 lo있으며 실제 이름 서버가 업데이트된다는 것을 나타냅니다 /etc/resolv.conf.

/etc/resolv.conf이 업데이트가 발생하면 /sbin/resolvconf에서 실행되는 작업 중 하나는 당시 알려진 모든 비로컬 DNS 서버 목록을 가져와서 해당 서버로 푸시해야 한다는 /etc/resolvconf/update.d것입니다 . 이는 분명히 사용해야 하는 DNS 서버 목록 입니다./etc/resolvconf/update.d/dnsmasqresolvconf/run/dnsmasq/resolv.confdnsmasq

1초마다 dnsmasq수정 시간을 확인 /run/dnsmasq/resolv.conf하고 해당 구성을 업데이트해야 합니다.

그러나 dnsmasq 명령줄은 기본 설정을 일부 변경했을 수 있음을 나타냅니다. dnsmasq 옵션을 ... --no-resolv로 바꾸 --resolv-file=/run/dnsmasq/resolv.conf거나 NetworkManager 또는 resolv.conf 관련 사용자 정의 설정이 기본값처럼 보이기 때문에 제거 할 수도 있습니다. 설정 설정은 적절한 방식으로 NetworkManager와 통합 dnsmasq되도록 설계되었습니다 .resolvconf

이 도구를 사용 하는 경우 resolvconf다양한 소스에서 제공하는 디렉터리에서 DNS 서버 설정을 찾을 수 있습니다 /run/resolvconf/interface/. 각 파일의 내용은 실제 파일과 유사합니다 /etc/resolv.conf. 파일 이름은 특정 네트워크 인터페이스의 정적 구성이나 DHCP 구성, 일반적인 NetworkManager, 로컬 DNS 서버의 시작 스크립트 등 DNS 서버 정보의 소스를 참조합니다.

이전에는 명령줄이 dnsmasq설치되어 있으면 시작 시 실행된다고 언급했습니다. /sbin/resolvconf이 작업을 일시적으로 취소하려면( dnsmasq로컬을 우회할 때 DNS가 제대로 작동하는지 테스트하기 위해) 다음 명령을 사용하면 됩니다.

resolvconf -d lo.dnsmasq

이렇게 하면 우선 순위가 가장 높은 활성 네트워크 인터페이스에 대한 DNS 설정이 실제 /etc/resolv.conf.

dnsmasq시작 스크립트가 활성 DNS 설정을 "nameserver 127.0.0.1" 줄로 바꾸는 것을 중지 하려면 (문제 해결 또는 기타 이유로) 분명히 이것을 추가하면 효과가 있습니다 DNSMASQ_EXCEPT=lo./etc/default/dnsmasq

resolvconf그러나 네임서버 라인의 값이 127.0.1.1이므로 NetworkManager에 의해 직접 작성된 것일 수 있으며 범위를 벗어난 경우 이를 수정하는 방법을 모르겠습니다 .

관련 정보