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
.