질문:
우분투 17.10 실행
저는 지금 약 일주일 동안 이 문제를 해결하려고 노력해 왔으며(헤헤) 수많은 Google 검색과 약 20번의 다른 시도에도 불구하고 dnsmasq가 주기적으로 다음과 같은 공격으로 CPU를 약 1분 동안 급증시키는 것을 막을 수 없습니다. :
systemd-resolved
systemd-journald
dnsmasq
모니터링이 journalctl -f
발생할 때마다 다음과 같은 내용이 표시됩니다.
최대 동시 DNS 쿼리 수에 도달했습니다(150).
다음과 같이 특정 도메인에 대한 광란적인 요청 루프(일반적으로 우분투 연결 확인)가 동반되거나 선행됩니다.
query[A] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.1.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
query[A] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
query[AAAA] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
query[AAAA] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
query[A] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
query[AAAA] connectivity-check.ubuntu.com from 127.0.0.1
forwarded connectivity-check.ubuntu.com to 127.0.0.53
그게 나를 바꾸었다는 걸 알았어/etc/resolv.conf사용하면 nameserver 127.0.0.53
스파이크가 거의 즉시 소멸됩니다.
그런데 네트워크 관리자가 이 파일을 정기적으로 업데이트하기 때문에 한 시간에 한 번씩 해줘야 합니다.
구성:
/etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.
nameserver 127.0.0.1
search fios-router.home
/etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile
[ifupdown]
managed=false
[device]
wifi.scan-rand-mac-address=no
/etc/dnsmasq.conf
// All default except this at the very end for my wildcard DNS
address=/asmar.d/127.0.0.1
/run/dnsmasq/resolv.conf
nameserver 127.0.0.53
/run/resolvconf/인터페이스:
lo.dnsmasq
:
nameserver 127.0.0.1
systemd-resolved
:
nameserver 127.0.0.53
/etc/resolvconf/인터페이스 순서:
# interface-order(5)
lo.inet6
lo.inet
lo.@(dnsmasq|pdnsd)
lo.!(pdns|pdns-recursor)
lo
tun*
tap*
hso*
em+([0-9])?(_+([0-9]))*
p+([0-9])p+([0-9])?(_+([0-9]))*
@(br|eth)*([^.]).inet6
@(br|eth)*([^.]).ip6.@(dhclient|dhcpcd|pump|udhcpc)
@(br|eth)*([^.]).inet
@(br|eth)*([^.]).@(dhclient|dhcpcd|pump|udhcpc)
@(br|eth)*
@(ath|wifi|wlan)*([^.]).inet6
@(ath|wifi|wlan)*([^.]).ip6.@(dhclient|dhcpcd|pump|udhcpc)
@(ath|wifi|wlan)*([^.]).inet
@(ath|wifi|wlan)*([^.]).@(dhclient|dhcpcd|pump|udhcpc)
@(ath|wifi|wlan)*
ppp*
*
systemd-resolve --status
:
Global
DNS Servers: 127.0.0.1
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
21.172.in-addr.arpa
22.172.in-addr.arpa
23.172.in-addr.arpa
24.172.in-addr.arpa
25.172.in-addr.arpa
26.172.in-addr.arpa
27.172.in-addr.arpa
28.172.in-addr.arpa
29.172.in-addr.arpa
30.172.in-addr.arpa
31.172.in-addr.arpa
corp
d.f.ip6.arpa
home
internal
intranet
lan
local
private
test
Link 5 (br-b1f5461ac410)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Link 4 (docker0)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Link 3 (wlp62s0)
Current Scopes: none
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
Link 2 (enp61s0)
Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 8.8.8.8
8.8.4.4
::1
질문:
와일드카드 도메인 이름을 계속 사용하면서 이 문제를 해결하려면 어떻게 해야 합니까?
임의로 선택할 수 있는: Google DNS를 사용할 때 이를 달성하는 방법은 무엇입니까?
동시 DNS 쿼리를 늘리는 것을 제안하지 마십시오. 그건 해결책이 아닙니다.
해결되었습니다!
해결책을 찾아낸 TelcoM의 DNS 크래시 코스(승인된 답변)를 참조하세요.
이 답변에서 얻은 지식을 시험해 보면서 후속 조치 및 최종 솔루션을 확인하세요.
답변1
dnsmasq
127.0.0.1에 프로세스가 있고 systemd-resolved
127.0.0.53에 프로세스가 서로 쿼리를 주고받으면서 루프가 발생하는 것 같습니다 . 기본적으로 정보가 없는 이름에 대해 실제 DNS 서버를 찾기 때문에 독립 실행 형도 dnsmasq
루프가 가능할 수 있습니다 ./etc/resolv.conf
DNS 구성에는 여러 계층이 있을 수 있습니다.
- 첫째, DHCP 또는 유사한 수단을 통해 ISP로부터 DNS 서버 정보를 얻을 수 있습니다.
- 그런 다음
NetworkManager
정보를 무시하고 사용하도록 구성 할 수 있지만dnsmasq
현재는 이 방식으로 구성되어 있지 않습니다. - 대신 도구를
NetworkManager
사용하여resolvconf
실제 업데이트를 구성/etc/resolv.conf
하고 DHCP에서 수신한 모든 DNS 서비스를 재정의하고 런타임 시 127.0.0.1을 사용하는dnsmasq
내장 구성을 포함할 수 있습니다 .resolvconf
dnsmasq
- systemd-resolved에는 내장된 구성도 포함될 수 있지만
resolvconf
분명히 재정의됩니다dnsmasq
.
나는 아직도 127.0.1.1과 127.0.0.53이 어디서 왔는지 이해하지 못합니다. dnsmasq
Ubuntu의 기본 구성에 언급되어 있습니까?
설명에서 언급한 대로 /etc/resolv.conf
이 명령을 실행하면 systemd-resolved
구성에 대한 자세한 정보를 볼 수 있습니다.
systemd-resolve --status
/run/resolvconf/interface/
또한 도구가 다양한 소스에서 얻은 모든 DNS 서버 정보를 수집하는 디렉토리의 내용을 확인하십시오 . 각 소스를 확인하는 순서 는 루프백 주소가 발견되거나 실제 3개의 DNS 서버가 나열될 때까지 결정 resolvconf
됩니다 ./etc/resolvconf/interface-order
/etc/resolv.conf
와일드카드 도메인을 설정할 예정이므로 dnsmasq
이를 유지하고 싶을 것입니다 127.0.0.1
. 하지만 해당 파일을 사용하지 않고 다른 곳에서 사용해야 하는 DNS 서버를 가져오도록 /etc/resolv.conf
구성해야 합니다 .dnsmasq
/run/NetworkManager/resolv.conf
DHCP를 통해 ISP로부터 얻은 DNS 서버를 포함하는 경우 dnsmasq
해당 구성에 다음 행을 추가하여 쉽게 사용할 수 있습니다.
resolv-file=/run/NetworkManager/resolv.conf
이는 dnsmasq
아직 알지 못하는 DNS 정보를 어디서 얻을 수 있는지 알려줍니다. 따라서 Google DNS를 사용하려면 dnsmasq
구성 할 수 있습니다.
resolv-file=/etc/google-dns-resolv.conf
그리고 Google DNS의 DNS 구성 라인을 일반적인 형식으로 입력합니다 /etc/google-dns-resolv.conf
.
답변2
dnsmasq 구성을 사용하여 dnsmasq systemd-resolve 경쟁을 수정했습니다.
- dnssec 기능과 루트 서버가 있으므로 systemd-resolve(127.0.0.53)를 외부 DNS로 사용합니다.
- dnsmasq를 정적으로 구성된 루프백에 바인딩하면 됩니다. dhcp가 필요한 경우 더 많은 인터페이스를 추가할 수 있습니다.
/etc/dnsmasq.d/myconfig
#PES 20180808 dnsmasq and systemd-resolve conflict.
# dont use /etc/resolv.conf, go direct to systemd-resolve, only bind to lo
no-resolv
bind-interfaces
interface=lo
server=127.0.0.53
답변3
우분투 18.04에서
1 - /etc/google-dns-resolv.conf 생성
nameserver 8.8.8.8
nameserver 8.8.4.4
2 - /etc/dnsmasq.d/my_dnsmaq.conf 구성 파일 생성
resolv-file=/etc/google-dns-resolv.conf
3 - /etc/default/dnsmasq 하단에 삽입
IGNORE_RESOLVCONF=yes
4 - 마지막으로 dnsmasq 서비스를 다시 시작합니다.
sudo service dnsmasq restart
나는 사용했다조니의 대답위의 dnsmasq 구성 파일을 올바르게 읽으려면 내 답변에서 3단계가 누락되었습니다. 감사해요
답변4
다양한 솔루션을 시도하는 동안 처음에는 이것을 문제의 일부로 기록했습니다. 명확성을 위해 이 질문에서 이 답변으로 잘라내거나 붙여넣었지만 이 답변은 제공된 통찰력 없이는 독립되지 않습니다.통신회사답변.
해결책:
다음을 기반으로 변경했습니다.통신회사아래에 제안 사항이 있습니다.
/etc/google-dns-resolv.conf
콘텐츠 만들기 :
nameserver 8.8.8.8
nameserver 8.8.4.4
resolv-file=/etc/google-dns-resolv.conf
에 추가 하다/etc/dnsmasq.conf
변경하고 실행한 후에도
sudo service dnsmasq restart
CPU는 여전히 급증하고 있지만 이제는rsyslogd
공격자가 됩니다. 1분쯤 지나자 가라앉았으나 더127.0.1.1
이상 볼 수가 없었다journalctl -f
.고쳐 쓰다:약 10분 후에 CPU가 다시 급증합니다.
업데이트 #2:감사해요통신회사여기 DNS에 대한 아주 작은 충돌 코스가 있습니다. 저는 그 기원에 대해 회의적이었고
127.0.0.53
그것을 파고들었고(그의 답변에 대한 내 의견 참조) 그것이 다음에서 유래했다는 것을 알게 되었습니다./run/dnsmasq/resolv.conf, 내용이 포함되어 있습니다nameserver 127.0.0.53
. 이제nameserver 127.0.0.1
출력되는 IP 주소 는 )journalctl -f
뿐입니다 .127.0.0.1
[해결됨] 업데이트 #3:사용
127.0.0.1
/run/dnsmasq/resolv.conf정말 바보같아. 내 DNS 확인이 완전히 중단되었습니다(처음에는 캐시된 DNS에만 액세스했기 때문에 작동하는 것처럼 보였습니다). Google 이름 서버(8.8.8.8
&8.8.4.4
) 사용으로 전환한 후 DNS 확인이 다시 제대로 작동하고 와일드카드 도메인이 계속 작동하며 CPU 스파이크가 발생하지 않았습니다. 일반적인 일상 활동을 수행하면서 약 한 시간 후에 성능이 어떻게 나타나는지 확인하고 이에 따라 다시 업데이트하겠습니다.해결됨!업데이트 #4:이제 다음 단계를 수행하면 문제가 해결될 수 있을 것 같습니다.업데이트 #3. 감사해요통신회사나를 올바른 방향으로 이끄는 모든 훌륭한 세부 사항에 감사드립니다. 현상금은 15시간 이내에 지급됩니다.