systemd-resolved
문제 해결을 위해 사용 중인 DNS 서버를 어떻게 찾을 수 있습니까 ?
dig
일반적 으로 에 표시된 DNS 서버를 사용하고 테스트할 수 있습니다 /etc/resolv.conf
. (또는 Windows - ipconfig /all
+ nslookup
). 그러나 resolv.conf가 루프백 주소의 로컬 확인자 데몬만 가리키는 경우에는 이 방법이 작동하지 않습니다. 사용하는 DNS 서버를 표시하기 위해 systemd-resolved에서 어떤 방법이 사용됩니까?
( unbound
제가 볼 수 있는 구성 파일이 있습니다. dnsmasq
있기는 하지만 구성 파일 없이 동적으로 서버를 추가할 수 있는지는 잘 모르겠습니다. NetworkManager에도 이제 그 파일이 있고 인터페이스에 대한 DNS 구성을 표시하기 위해 nmcli
쿼리할 수 있습니다 . nmcli d show wlan0
.)
답변1
또한 문제 해결에도 매우 유용합니다.
journalctl -u systemd-resolved -f
systemd-resolved
거기에서 실제로 무슨 일이 일어나고 있는지 볼 수 있습니다 . 제 경우에는 systemd-resolve --status
보고된 DNS 서버에 전혀 접속하지 않았습니다. 그런 이상한 일을 하고 있다면 때로는 sudo systemctl restart systemd-resolved
재부팅하는 것이 좋습니다.
편집하다:
더 많은 정보를 얻으려면 resolved
필요한
[Service]
Environment=SYSTEMD_LOG_LEVEL=debug
통해override.conf
입력systemd-resolved
sudo systemctl edit systemd-resolved
재시작이 적용됩니다:
sudo systemctl restart systemd-resolved
편집 2:
@bmaupin과 @Aminovic이 댓글에서 지적했듯이 나중에 이를 되돌리는 것을 잊지 마세요.
sudo systemctl revert systemd-resolved
sudo systemctl restart systemd-resolved
답변2
사용됨 resolvectl status
( systemd-resolve --status
이보다 먼저 사용된 경우239) 당신의 모습을 보여주기 위해전역 및 링크별 DNS 설정.
답변3
resolv.conf
서류
설명서에는 다음과 같이 나와 있습니다.
확인자는 인터넷의 DNS(Domain Name System)에 대한 액세스를 제공하는 C 라이브러리의 루틴 세트입니다. 파서 구성 파일에는 프로세스에서 파서 루틴을 처음 호출할 때 읽는 정보가 포함되어 있습니다.
파일이 없으면 로컬 시스템의 이름 서버만 쿼리되고 검색 목록에는 호스트 이름에서 결정된 로컬 도메인 이름이 포함됩니다.
systemd-resolved
Ubuntu 20.04에는 systemd-resolved
로컬 DNS 서버가 포함되어 있습니다.systemd
/etc/resolv.conf
이는 편집을 위해 자동으로 올바른 구성을 사용해야 하는 스텁 리졸버 역할을 합니다 .
이전 버전에서는 다음을 사용하여 수동으로 심볼릭 링크해야 할 수도 있습니다.
$ sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
기본적으로 systemd-resolved
로컬 DNS 서버 수신 127.0.0.53
포트가 구성되어 있으며 53
이를 실행 lsof -i @127.0.0.53:53
하여 확인할 수 있습니다. dnsmasq
동일한 주소와 포트에서 수신 대기하는 다른 서비스가 없는지 확인하세요 .
이는 127.0.0.53
루프백 인터페이스이지만 루프백 인터페이스의 다른 IP 주소에서 포트 53을 수신하는 다른 DNS 서버를 가질 수 있습니다(예 127.0.0.1
: 127.0.0.2
.
그래도 문제가 해결되지 않으면 다음을 시도해 보세요.
$ sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
이 파일에는 DHCP 임대의 DNS 서버가 포함되어 있지만 스텁 확인자 캐싱 기능의 이점은 없습니다.
dnsmasq
그리고NetworkManager
이것dnsmasq
경량 캐싱 DNS 서버는 DNS 쿼리를 수락하고 소규모 로컬 캐시에서 응답하거나 실제 재귀 DNS 서버로 전달합니다.
웹 개발 기계에는 로컬 웹사이트를 테스트할 수 있는 작은 DNS 서비스가 있는 것이 좋습니다.
먼저 NetworkManager
현재 인터페이스의 관리를 확인합니다( wlp0s20f3
제 경우에는).
$ nmcli dev
$ nmcli dev set wlp0s20f3 managed yes
이제 NetworkManager
내장 dnsmasq
파서를 활성화할 수 있습니다:
$ cat /etc/NetworkManager/NetworkManager.conf
[main]
dns=dnsmasq
NetworkManager
dnsmasq
이제 다음에서 구성 과 함께 유연성의 이점을 누릴 수 있습니다 /etc/NetworkManager/dnsmasq.d
.
$ cat /etc/NetworkManager/dnsmasq.d/custom.conf
# Resolve all domains ending in .dev to 127.0.0.1
address=/.dev/127.0.0.1
dnsmasq
시스템 전체 서비스(있는 경우)를 비활성화하고 변경 사항을 적용하는 것을 잊지 마십시오 .
$ sudo systemctl stop dnsmasq.service && sudo systemctl disable dnsmasq.service
$ sudo systemctl restart NetworkManager.service
어떤 이유로든 단독으로 실행하려면 dnsmasq
먼저 NetworkManager
덮어쓰기를 방지해야 합니다 /etc/resolv.conf
.
$ cat /etc/NetworkManager/NetworkManager.conf
[main]
dns=none
dnsmasq
이제 업스트림 서버에게 다른 곳에서 가져오도록 지시해야 합니다 /etc/resolv.conf
.
$ cat /etc/dnsmasq.conf
listen-address=127.0.0.53
resolv-file=/run/NetworkManager/resolv.conf
이 파일은 DHCP 임대에서 생성되며 NetworkManager
DNS 서버도 포함합니다. 이제 dnsmasq
솔루션을 구성합니다.
$ cat /etc/resolv.conf
# Use local dnsmasq resolver
nameserver 127.0.0.53
자신만의 로컬 DNS 설정을 구성하세요.
$ cat /etc/dnsmasq.d/custom.conf
# Resolve all domains ending in .dev to 127.0.0.1
address=/.dev/127.0.0.1
새 구성을 적용합니다.
$ sudo systemctl stop systemd-resolved.service && sudo systemctl disable systemd-resolved.service
$ sudo systemctl restart dnsmasq.service
dnsmasq
그리고systemd-networkd
아쉽게도 DHCP 서버에서 관리하기 때문에 DHCP 서버에서 얻은 DNS 네임서버 파일을 노출하지 않아 NetworkManager
사용 이 쉽지 않습니다 .systemd-networkd
systemd-resolved
완전히 사용되지 않는 패키지를 사용하는 경우에도 마찬가지입니다 ifupdown
.
열려 있는 :man
dhclient-script
$ man 8 dhclient-script
이것연결하다부분적으로는 다음과 같이 말합니다.
클라이언트 스크립트가 시작되면 먼저
make_resolv_conf
나중에/etc/resolv.conf
파일을 생성하는 데 사용되는 셸 함수를 정의합니다. 기본 동작을 재정의하려면 Enter 후크 스크립트에서 이 함수를 재정의하세요.
dnsmasq
따라서 여전히 함께 사용하려면 DHCP 설정에서 업스트림 서버를 가져올 수 있도록 for를 생성하도록 systemd-networkd
재정의해야 합니다 .make_resolv_conf
resolv-file
dnsmasq
이것resolvconf
패키지는 동작을 /etc/resolv.conf
구성하는 데 사용할 수 있는 Population과 관련된 다양한 데몬 주위에 래퍼 인터페이스를 제공합니다 .make_resolv_conf
라우터 광고 메시지의 RDNSS에서 IPv6 업스트림 서버를 가져와야 하는 경우에도 동일한 문제가 발생합니다(참조:이웃 검색 프로토콜), 이것도 관리되기 때문입니다 systemd-resolved
.
다음 명령을 시도해 보십시오.ndisc6
팩:
$ rdisc6 wlp0s20f3
IPv6 주소 접두사 및 DNS 서버를 포함하여 라우터의 다양한 정보가 표시됩니다. 아무것도 표시되지 않으면 라우터가 이를 지원하지 않는 것일 수 있습니다.
이 rdisc6
프로그램은 다음을 사용하여 사용자 공간에서 ICMPv6 라우터 검색을 구현합니다.NETLINK_ROUTE
RDNSS 소켓 지원은 Linux 커널 2.6.24에 추가되었습니다. 이전 버전을 지원하려면 다음을 사용하여 OSI 계층 2 장치 드라이버와 상호 작용할 수 밖에 없습니다.SOCK_RAW
소켓.
답변4
여기에 대한 답변 중 어느 것도 제가 일하는 데 더 가까워지지 않았습니다 systemd-resolved
. 모든 문제를 해결하는 한 가지 방법 systemd-resolved
은 방정식에서 문제를 제거하는 것입니다.
먼저 이를 비활성화합니다(루트로):
service systemd-resolved stop
systemctl disable systemd-resolved
그러나 이것만으로는 충분하지 않습니다. Systemd는 이를 다시 활성화하고 몇 분 후에 다시 시작합니다. 따라서 systemd-resolved
서버에서 완전히 제거하여 이를 방지해야 합니다.
rm -f /lib/systemd/systemd-resolved
나는 이 작업을 수행하는 systemd의 다른 부분에서 문제가 발생한 적이 없지만 YMMV입니다. 삭제하는 대신 이름을 바꿀 수 있습니다.
마지막으로 /etc/resolv.conf
일부 네임서버를 편집하고 추가합니다.
nameserver 8.8.8.8
nameserver 8.8.4.4