새로운 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-resolved
DNS 스텁 리졸버이 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-resolved
GUI를 통해 각 NetworkManager 관리 연결을 단순히 편집하는 것보다 더 완전한 Ubuntu 18.04를 사용하는 등 시스템에서 동적으로 구성된 이름 서버 설정(예: DHCP에서 제공하는 설정)을 완전히 재정의하는 권장 방법이 있습니까 ?특히, 나는아니요가입하려는 모든 Wi-Fi 네트워크에 대한 DNS 설정을 편집하고 싶습니다.모두자동으로 연결언제나DNS 확인을 위해 정적으로 구성된 이름 서버를 사용합니다. 이를 수행하는 "가장 좋은" 방법은 무엇이며 그 이유는 무엇입니까?
감사해요.
답변1
권장되는 방법은 없다고 생각하지만 여기에 몇 가지 옵션이 있습니다.
면책 조항: 이 모든 내용은 Ubuntu 20.04 시스템에서 테스트되었으며 다른 버전에서는 약간의 차이가 있을 수 있습니다.
수동 /etc/resolv.conf
관리
스스로 만드시 오
resolv.conf
:echo 'nameserver 8.8.8.8' | sudo tee /etc/resolv-manual.conf
systemd로 확인된 심볼릭 링크를 제거하고 자신의 파일에 연결하십시오.
sudo rm /etc/resolv.conf sudo ln -s /etc/resolv-manual.conf /etc/resolv.conf
쿼리를 실행하여 DNS 구성이 작동하는지 확인합니다.
dig google.com
심볼릭 링크를 사용하는 것이 중요합니다 resolv.conf
. 그렇지 않으면 NetworkManager가 덮어쓰게 되기 때문입니다.
resolvectl status
연결을 위한 DHCP 제공 DNS 서버는 계속 표시되며 확인된 dbus 인터페이스를 통해 수행된 쿼리는 계속해서 이를 사용할 수 있습니다 .
전역 DNS 확인 강제
당신은 이미 이것을 가지고 있습니다:
- 만들다
/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
- 솔루션을 다시 시작하세요.
sudo systemctl restart systemd-resolved
- 확인
resolvectl status
연결을 위해 ISP에서 제공한 DNS 서버가 계속 표시되지만 이는 출력 DNS Domain:
에 나열된 도메인 에만 해당됩니다 resolvectl status
.
이러한 DNS 서버를 완전히 제거하려면:
- NetworkManager에게 확인을 위해 DNS 서버를 설정하지 않도록 지시합니다.
cat <<EOF | sudo tee /etc/NetworkManager/conf.d/dns.conf [main] dns=none systemd-resolved=false
- 네트워크 관리자를 다시 로드합니다.
sudo systemctl reload NetworkManager.service
- 해결됨은 인터페이스의 마지막 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
입니다 .resolve
dns
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 설정을 무시해야 합니다. 시도 해봐.