dnsmasq로 systemd-resolved를 비활성화하고 DNS를 해결하는 방법은 무엇입니까?


답변:


35

dnsmasq 패키지는 16.10 및 17.04에서 계속 사용할 수 있습니다.

  1. dnsmasq비활성화 하기 전에systemd-resolved 설치 및 종속성 (또는 최소한 패키지를 다운로드) :

    sudo apt-get install dnsmasq
    
  2. 비활성화 systemd-resolved하고 dnsmasq실행 중인지 확인하십시오 .

    sudo systemctl stop systemd-resolved
    sudo systemctl disable systemd-resolved
    
    systemctl status dnsmasq
    
  3. dnsmasq맛볼 계절 . 설정을 적용한 후 다음을 다시 시작하십시오 dnsmasq.

    sudo systemctl stop dnsmasq
    sudo systemctl start dnsmasq
    

2 단계 후에 3 단계가 완료 될 때까지 작업 시스템 분석기가 없을 수 있습니다. dnsmasq기본 구성으로 작동 하려면 네트워킹 하위 시스템을 다시 시작하거나 재부팅해야 할 수도 있습니다 . 필자의 테스트에서 알려진 DNS 서버를 추가 /etc/dnsmasq.conf하고 다시 시작 dnsmasq하면 liveCD 환경에서 작동하기에 충분했습니다.


훌륭한 답변이며, NetworkManager를 비활성화 할 때 유일한 해결책은 아닙니다!
bogl

3
나를 위해, 이것은 좋은 대답이었다뿐만 아니라 추가 @ blabla의 대답에서 추가 단계를 필요 dns=dnsmasq로 설정을/etc/NetworkManager/NetworkManager.conf
로베르토 Tyley

여기도 마찬가지입니다. 시스템화되고 dnsmasq 로의 언 바운드 전환으로 어려움을 겪고 우분투 17.10에서 트릭을 수행했습니다. 그래도 blabla의 추가 기능을 사용해야했습니다.
Alberto L. Bonfiglio

17

@quixotic의 답변 외에도 :

/etc/NetworkManager/NetworkManager.conf에 있는지 확인하십시오 :

[main]
dns=dnsmasq

추가해야 할 경우 다음과 같이 NetworkManager를 다시 시작하십시오.

sudo systemctl restart NetworkManager

/etc/resolv.conf대한 심볼릭 링크 여야합니다 /var/run/NetworkManager/resolv.conf. 이렇게 할 수 있습니다

sudo rm /etc/resolv.conf; sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

실제로 이름을 설정 dns=default했으며 dnsmasq에 정의되는 대신 NetworkManager에 의해 이름 서버를 정의했기 때문에 제대로 작동합니다. 이것은 나를 위해 작동합니다-NM은 시스템 트레이를 통해 KDE의 NM 구성에서 작성된 설정에서 네임 서버를 가져옵니다. 홈 네트워크 FWIW에서 고정 IP를 사용합니다.
pbhj

1
이 단계는 나를 위해 @quixotic의 답변에 필요한 추가 단계였습니다 (LiveCD가 아닌 17.04의 전체 설치).
Roberto Tyley

0

systemd-resolved 매뉴얼에 따르면 systemd-resolved는 세 가지 인터페이스를 통해 이름 확인 서비스를 제공합니다.

  1. "모든 기능을 갖춘 API 시스템 해결 노출 버스"
  2. "로컬 루프백 인터페이스의 IP 주소 127.0.0.53에있는 로컬 DNS 스텁 리스너"
  3. RFC3493에 의해 정의 된 glibc getaddrinfo (3) API 및 gethostbyname (3)을 포함한 관련 리졸버 함수. 이 API는 Linux 플랫폼 이외에도 광범위하게 지원됩니다. 그러나 현재 형식에서는 DNSSEC 유효성 검사 상태 정보를 노출하지 않으며 동기식입니다. 이 API는 glibc 이름 서비스 스위치 (nss (5))에 의해 지원됩니다. glibc NSS 모듈 nss-resolve (8)의 사용은 glibc의 NSS 리졸버 함수가 systemd-resolved를 통해 호스트 이름을 확인할 수 있도록하기 위해 필요합니다.

처음 두 개의 인터페이스는 정상적인 DNS 확인을 방해하지 않으며 나에게 문제가 세 번째에있을 것 같습니다.

nss-resolve 매뉴얼에서 :

NSS 모듈을 활성화하려면 /etc/nsswitch.conf에서 "hosts :"로 시작하는 줄에 "resolve"를 추가하십시오. 특히 "resolve"를 /etc/nsswitch.conf의 "hosts :"줄 ( "files"또는 "mymachines"항목 뒤에)의 "dns"항목이있는 경우 바로 앞에 두는 것이 좋습니다. DNS 쿼리가 항상 systemd-resolved (8)를 통해 라우팅되지만이 서비스를 사용할 수없는 경우 nss-dns로 라우팅되도록하려면 "[! UNAVAIL = return]"

따라서 필요한 것은 /etc/nsswitch.conf의 "host :"줄에서 "dns"가 "resolve"보다 우선하도록하는 것 입니다. 그런 다음 /etc/resolv.confgetaddrinfo 를 준수해야합니다 .

이 솔루션은 systemd-resolved가 모든 DNS 확인 요청을 처리하지 못하도록하며 특정 네트워크 관리자로 제한되지 않습니다. 또한 LLMNR 및 mDNS 서비스가 정상적으로 작동하는지 확인합니다.

(나는 리눅스에서 이름 확인이 작동하는 방식에 대해 잘 알고 있지 않으며이 매뉴얼에서 내가 이해 한 것에 대해 확신하지 못합니다. 불만 사항은 잘못된 점을 지적합니다. Thx :))


0

(X) Ubuntu 18.04의 경우 ( stackexchange의 답변 참조 ).

여기 사본이 있습니다 (사본을 만들어야합니까?).

다음은 (X) Ubuntu 18.04 Bionic 용 솔루션입니다.

dnsmasq 설치

sudo apt install dnsmasq

포트 53에서 systemd-resolved listener를 비활성화합니다 (업그레이드시 덮어 쓸 수 있으므로 /etc/systemd/resolved.conf를 만지지 마십시오).

$ cat /etc/systemd/resolved.conf.d/noresolved.conf 
[Resolve]
DNSStubListener=no

다시 시작

$ sudo systemctl restart systemd-resolved

(또는로 완전히 비활성화 $ sudo systemctl disable systemd-resolved.service)

/etc/resolv.conf를 삭제하고 다시 만드십시오. resolv.conf는 기본적으로 /run/systemd/resolve/stub-resolv.conf에 대한 심볼릭 링크이므로 중요합니다. 심볼릭 링크를 삭제하지 않으면 재부팅시 systemd가 파일을 덮어 씁니다 (systemd-resolved를 비활성화 한 경우에도). 또한 NetworkManager (NM)는 시스템 해결 구성을 감지하기위한 기호 링크인지 확인합니다.

$ sudo rm /etc/resolv.conf
$ sudo touch /etc/resolv.conf

NM에 의한 /etc/resolv.conf 덮어 쓰기를 비활성화합니다 (rc-manager 옵션도 있지만 매뉴얼에 설명되어 있지만 작동하지 않습니다).

$ cat /etc/NetworkManager/conf.d/disableresolv.conf 
[main]
dns=none

다시 시작하십시오.

$ sudo systemctl restart NetworkManager

Nns에서 resolv.conf를 사용하도록 dnsmasq에 지시하십시오.

$ cat /etc/dnsmasq.d/nmresolv.conf 
resolv-file=/var/run/NetworkManager/resolv.conf

다시 시작하십시오.

$ sudo systemctl restart dnsmasq

해결을 위해 dnsmasq를 사용하십시오.

$ cat /etc/resolv.conf 
# Use local dnsmasq for resolving
nameserver 127.0.0.1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.