systemd-resolved를 사용하여 시스템에서 전역 DNS 서버 재정의를 설정하는 데 권장되는 방법은 무엇입니까?

systemd-resolved를 사용하여 시스템에서 전역 DNS 서버 재정의를 설정하는 데 권장되는 방법은 무엇입니까?

새로운 GNU/Linux 시스템(Ubuntu 18.04 LTS)이 수동으로 구성된 단일 DNS 서버를 사용하기를 원합니다.모두DNS 쿼리. 과거에는 단순히 파일을 echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf손상시키고 /etc/resolv.conf전체 시스템에 대해 DNS 서버의 IP 주소를 지속적으로 설정할 수 있었습니다.

이 (및 많은 최신 GNU/Linux 배포판)에서는 /etc/resolv.conf유틸리티로 관리됩니다 resolvconf(8). Ubuntu 18.04에서 파일에는 다음과 같은 줄이 포함됩니다.

nameserver 127.0.0.53

sudo ss --listening --numeric --processes로컬 시스템 이라고 볼 수 있습니다.systemd-resolvedDNS 스텁 리졸버이 IP 주소에 바인딩되어 포트에서 53들어오는 DNS 요청을 수신합니다. 따라서 파일 nameserver의 위 줄은 D-Bus 또는 glibc API를 /etc/resolv.conf사용하지 않는 모든 systemd-resolved응용 프로그램을 systemd-resolved"정상적인" DNS 요청을 통해 이 서비스로 연결합니다.

그것은 모두 훌륭하지만 이것이 의미하는 바는 더 이상 /etc/resolv.conf이름 서버 변경을 위해 파일에 지속적인 변경 사항을 쓸 수 없다는 것입니다.

읽고 나서많은 수동 페이지그리고블로그 게시물/etc/systemd/resolve.conf, 예를 들어 다음과 같은 줄이 포함된 파일을 편집하여 "글로벌" DNS 이름 서버 IP 주소를 설정할 수 있다는 것을 배웠습니다 .

DNS=1.1.1.1 9.9.9.9

이렇게 변경하고 호출한 후 실행하면 sudo systemctl restart systemd-resolved전역 섹션에 systemd-resolve --status새 이름 서버(및)가 표시 됩니다 1.1.1.1. 9.9.9.9그러나 Wireshark 패킷 캡처를 통해 내 시스템이 DHCP를 통해 구성될 수 있는 "링크별" DNS 서버(예: 192.168.1.1)에 DNS 쿼리를 계속 보내고 있음이 확인되었습니다.

/etc/systemd/resolve.conf추가 실험을 통해 내 파일 에 다음 줄을 추가하게 되었습니다 .

Domains=~.

이것은 성공적으로 systemd-resolved표시된 것 같습니다.언제나전역 이름 서버( DNS=옵션에서 설정)를 사용하고안 돼요를 확인할 때에도 DHCP가 제공하는 네임서버를 쿼리합니다 systemd-resolve --status.

마지막으로 내 질문은 다음과 같습니다.VPN 등에서 제공하는 DNS 정보를 무시함으로써 발생하는 명백한 영향 외에도 이것이 내 시스템에 어떤 잠재적인 영향을 미치나요? 그리고 더 중요한 것은,systemd-resolvedGUI를 통해 각 NetworkManager 관리 연결을 단순히 편집하는 것보다 더 완전한 Ubuntu 18.04를 사용하는 등 시스템에서 동적으로 구성된 이름 서버 설정(예: DHCP에서 제공하는 설정)을 완전히 재정의하는 권장 방법이 있습니까 ?특히, 나는아니요가입하려는 모든 Wi-Fi 네트워크에 대한 DNS 설정을 편집하고 싶습니다.모두자동으로 연결언제나DNS 확인을 위해 정적으로 구성된 이름 서버를 사용합니다. 이를 수행하는 "가장 좋은" 방법은 무엇이며 그 이유는 무엇입니까?

감사해요.

답변1

권장되는 방법은 없다고 생각하지만 여기에 몇 가지 옵션이 있습니다.

면책 조항: 이 모든 내용은 Ubuntu 20.04 시스템에서 테스트되었으며 다른 버전에서는 약간의 차이가 있을 수 있습니다.

수동 /etc/resolv.conf관리

  1. 스스로 만드시 오 resolv.conf:

    echo 'nameserver 8.8.8.8' | sudo tee /etc/resolv-manual.conf
    
  2. systemd로 확인된 심볼릭 링크를 제거하고 자신의 파일에 연결하십시오.

    sudo rm /etc/resolv.conf
    sudo ln -s /etc/resolv-manual.conf /etc/resolv.conf
    
  3. 쿼리를 실행하여 DNS 구성이 작동하는지 확인합니다.dig google.com

심볼릭 링크를 사용하는 것이 중요합니다 resolv.conf. 그렇지 않으면 NetworkManager가 덮어쓰게 되기 때문입니다.

resolvectl status연결을 위한 DHCP 제공 DNS 서버는 계속 표시되며 확인된 dbus 인터페이스를 통해 수행된 쿼리는 계속해서 이를 사용할 수 있습니다 .

전역 DNS 확인 강제

당신은 이미 이것을 가지고 있습니다:

  1. 만들다/etc/systemd/resolved.conf.d/dns_servers.conf
    sudo mkdir -p /etc/systemd/resolved.conf.d
    cat <<EOF | sudo tee /etc/systemd/resolved.conf.d/dns_servers.conf
    [Resolve]
    DNS=192.168.35.1 fd7b:d0bd:7a6e::1
    Domains=~.
    EOF
    
  2. 솔루션을 다시 시작하세요.sudo systemctl restart systemd-resolved
  3. 확인resolvectl status

연결을 위해 ISP에서 제공한 DNS 서버가 계속 표시되지만 이는 출력 DNS Domain:에 나열된 도메인 에만 해당됩니다 resolvectl status.

이러한 DNS 서버를 완전히 제거하려면:

  1. NetworkManager에게 확인을 위해 DNS 서버를 설정하지 않도록 지시합니다.
    cat <<EOF | sudo tee /etc/NetworkManager/conf.d/dns.conf
    [main]
    dns=none
    systemd-resolved=false
    
  2. 네트워크 관리자를 다시 로드합니다.sudo systemctl reload NetworkManager.service
  3. 해결됨은 인터페이스의 마지막 DNS를 기억하므로 수동으로 덮어씁니다.sudo systemd-resolve --interface=wlp3s0 --set-dns 8.8.8.8

답변2

네임서버 관리가 쉬웠던 시절이 그립습니다. 수정만 하면 됩니다 /etc/resolv.conf. 이것이 실제로는 여전히 작동하지만 Ubuntu와 같은 배포판은 이제 /etc/resolv.conf내가 만든 모든 설정을 대체하는 심볼릭 링크와 서비스를 추가합니다.

systemd-resolve우분투를 사용할 때 VPN 구성이 "현재 DNS 서버"를 설정하지 않는 문제가 발생했습니다 nm. 나는 이것을 우회하기 위해 사용합니다.

sudo systemd-resolve --interface=ppp0 --set-dns=172.19.40.11

답변3

Ubuntu이기 때문에 NetworkManager를 사용하고 있다고 가정합니다.

첫 번째 질문입니다. 비전역 DNS가 필요한 경우가 아니라면 잘 알려져 있고 안정적인 DNS 공급자로 글로벌 DNS를 설정하는 데 문제가 없을 것이라고 생각합니다. 여기에서 변경한 사항은 쉽게 되돌릴 수도 있습니다.

/etc/resolv.conf에서 볼 수 있듯이 systemd-resolved는 아마도 이전에 많은 시스템에서 우선순위를 얻었을 것 /etc/nsswitch.conf입니다 .resolvedns

DNS=확인 데몬은 설정된 주소를 사용 /etc/systemd/resolved.conf하지만 인터페이스에 대해 학습된 서버도 사용합니다.평행하게서버 DNS=옵션으로. 일반적으로 공용 DNS 요청은 실패하거나 유사한 유용한 결과를 반환하므로 이는 문제가 되지 않습니다.

systemd-resolved가 새로운 DNS 서버를 학습하는 것을 방지하는 방법이 있는지는 모르겠지만 NetworkManager가 이를 설치하지 못하도록 하는 방법이 있을 수 있습니다.

~에서https://wiki.archlinux.org/index.php/NetworkManager#Unmanagement_/etc/resolv.conf:

에서 /etc/NetworkManager/conf.d/dns.conf다음을 추가하거나 변경합니다.

[main]
dns=none
systemd-resolved=false

다양한 서비스가 다시 시작된 후 systemd-resolved에는 기본 DNS 서버가 있어야 하며 NetworkManager는 DNS 설정을 무시해야 합니다. 시도 해봐.

관련 정보