systemd-resolved는 도메인 이름을 차단합니다.

systemd-resolved는 도메인 이름을 차단합니다.

systemd-resolved도메인 이름을 블랙홀 또는 주소 없음으로 차단, 라우팅 또는 확인하는 방법을 사용하십시오 . 하위 도메인에도 보너스 포인트가 있습니다.

단일 도메인을 사용해 보았습니다 /etc/hosts.

127.0.0.1 google.com
::1 google.com

나는 또한 다음을 시도했습니다 /etc/systemd/network/100-blocked.network.

[Match]
Name=wlp113s0

[Network]
Description="Just block the domain, and sub domains"
DNS=127.0.0.255
DNS=::1

[Resolve]
Domains=google.com

sudo systemd-resolve --status:

Link 3 (wlp113s0)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 127.0.0.255
                      ::1
                      2001:4888:3a:ff00:304:d::
                      2001:4888:39:ff00:308:d::

예를 들어 다음을 사용합니다 dnsmasq.

server=192.168.43.1
address=/google.com/0.0.0.0
# a very long list of "address=/domain/0"

관련된:

답변1

항목을 추가 /etc/hosts하면 작동하고 테스트에서는 예상대로 작동했습니다. 내 테스트는 systemd-239-9.git9f3aed1.fc30.x86_64 버전의 Fedora Rawhide에서 수행되었으므로 이것은 systemd의 최신 스냅샷이며 이전 버전은 예상대로 작동하지 않을 수도 있습니다...


항목을 추가하기 전에 /etc/hosts:

1) 쿼리 구문 분석:

$ resolvectl query google.com
google.com: 172.217.6.78

-- Information acquired via protocol DNS in 1.4ms.
-- Data is authenticated: no

2) 플랫:

$ ping -c1 google.com
PING google.com (172.217.6.78) 56(84) bytes of data.
64 bytes from sfo07s17-in-f78.1e100.net (172.217.6.78): icmp_seq=1 ttl=54 time=12.4 ms

--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 12.435/12.435/12.435/0.000 ms

3) 컬:

$ curl http://google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

항목을 추가한 후 이 경우에는 /etc/hosts다음과 같습니다 .

$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

127.0.0.1 google.com
::1 google.com

테스트 결과 차단 작업이 표시되었습니다.

1) 쿼리 구문 분석:

$ resolvectl query google.com
google.com: 127.0.0.1
            ::1

-- Information acquired via protocol DNS in 1.8ms.
-- Data is authenticated: yes

2) 플랫:

$ ping -c1 google.com
PING google.com(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.613 ms

--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.613/0.613/0.613/0.000 ms

3) 컬:

$ curl http://google.com
curl: (7) Failed to connect to google.com port 80: Connection refused

그래서 이 블록이 작동하는 것 같습니다.


최근 systemd에 대한 질문에서 이것이 요청되었으므로 이것이 작동할 것으로 예상했습니다.문제 #9718여기에 수백만 개의 항목을 추가하는 것이 논의되었으며 /etc/hosts여기와 같이 도메인을 블랙리스트에 추가하는 사용 사례가 있습니다.

여기에는 움직이는 부분이 많기 때문에 이 문제를 해결할 때 이를 고려하는 것이 중요합니다.

광산에는 /etc/systemd/resolved.conf재정의 구성이 없고 모든 항목이 주석 처리되어 있으며 네트워크 설정은 DHCP와 함께 systemd-networkd를 사용하며 재정의도 없습니다.

출력에는 다음이 resolvectl status포함됩니다.

Global
       LLMNR setting: yes
MulticastDNS setting: yes
  DNSOverTLS setting: no
      DNSSEC setting: allow-downgrade
    DNSSEC supported: no
Fallback DNS Servers: 8.8.8.8
                      8.8.4.4
                      2001:4860:4860::8888
                      2001:4860:4860::8844

Link 2 (ens33)
      Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
       LLMNR setting: yes
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: allow-downgrade
    DNSSEC supported: no

/etc/resolv.conf스텁 리졸버를 사용한 구성:

$ ls -l /etc/resolv.conf
lrwxrwxrwx. 1 root root 39 Nov  7 22:08 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
$ grep '^[^#]' /etc/resolv.conf
nameserver 127.0.0.53

nsswitch.conf는 다음을 사용하도록 구성되었습니다.nss 구문 분석(8)매뉴얼 페이지에서 제안한대로 :

$ grep ^hosts: /etc/nsswitch.conf
hosts:      files resolve [!UNAVAIL=return] dns myhostname

그래도 작동하지 않으면 시스템에서 이러한 설정을 확인하고 모두 올바르게 구성되었는지 확인할 수 있습니다. 또는 적어도 현재 구성을 여기에(Linux 배포판 및 시스템 버전과 함께) 게시하여 작동하지 않는 이유를 진단하는 데 도움을 받으십시오.

답변2

내 생각에 이 목적을 위해 당신은/etc/nsswitch.conf. 매개변수. 이 파일의 호스트는 systemd-resolved가 호스트를 이름으로 가져오는 데 사용하는 소스를 보여줍니다. 따라서 다음과 같이 수정할 수 있습니다 hosts: files [!NOTFOUND=return] dns.

파일 - /etc/hosts 및 /etc/passwd와 같은 로컬 파일

dns - 인터넷 도메인 이름 시스템

/etc/hosts이 경우 systemd-resolved는 먼저 이름으로 호스트를 가져오는 데 사용됩니다 . 부분은 !NOTFOUND=return이름이 systemd-resolved에서 발견되지 않으면 /etc/hosts시도될 것임을 의미합니다 dns.

관련 정보