web-dev-qa-db-ja.com

systemd-resolvedブロックドメイン名

systemd-resolvedを使用して、ドメイン名をブラックホールまたはnowhereアドレスにブロック、ルーティング、または解決する方法を教えてください。サブドメインのボーナスポイントも。

/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"

関連:

6
jmunsch

/etc/hostsにエントリを追加すると機能するはずですが、私のテストでは期待どおりに機能しました。私のテストはFedora Rawhideで、バージョンsystemd-239-9.git9f3aed1.fc30.x86_64で行われているため、systemdのかなり最近のスナップショットです。おそらく、古いバージョンは期待どおりに動作しない可能性があります...


エントリを/etc/hostsに追加する前に:

1)resolvectlクエリ:

$ resolvectl query google.com
google.com: 172.217.6.78

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

2)ping:

$ 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クエリ:

$ 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:

$ 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に追加することについて話しました。これには1つの使用例があり、これは次のようなドメインのブラックリストです。

ここにはかなりの数の可動部分があるので、これをトラブルシューティングするときにそれらを考慮することが重要です。

私の/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は、manページの推奨に従って nss-resolve(8) を使用するように構成されています。

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

それでも機能しない場合は、システムでこれらの設定を確認し、すべて正しく設定されていることを確認してください。または、少なくとも、ここに現在の構成を(Linuxディストリビューションおよびsystemdバージョンと共に)投稿して、なぜ機能しないのかを診断できるようにしてください。

1
filbranden

この目的のために、あなたは /etc/nsswitch.conf を変更できると思います。パラメータ。このファイルのホストは、名前でホストを取得するためにsystemdで解決された使用法のソースを示します。したがって、次のように変更できます:hosts: files [!NOTFOUND=return] dns

files-/ etc/hostsや/ etc/passwdなどのローカルファイル

dns-インターネットドメインネームシステム

この場合、最初にsystemd-resolvedは、名前でホストを取得するために/etc/hostsを使用します。パート!NOTFOUND=returnは、/etc/hostsで名前が見つからない場合、systemd-resolvedはdnsを使用して名前を解決しようとします。

0
metallic