A adição de uma entrada para /etc/hosts
deve funcionar e, nos meus testes, funcionou como esperado. Meus testes estão no Fedora Rawhide, com a versão systemd-239-9.git9f3aed1.fc30.x86_64, então é um snapshot muito recente do systemd, talvez versões mais antigas não funcionem da mesma forma que o esperado ...
Antes de adicionar a entrada a /etc/hosts
:
1) consulta 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:
$ 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>
Depois de adicionar a entrada, nesse caso, /etc/hosts
se parece com isto:
$ 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
Os testes mostraram que o bloqueio está funcionando:
1) consulta 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:
$ curl http://google.com
curl: (7) Failed to connect to google.com port 80: Connection refused
Então o bloco parece estar funcionando.
Eu esperava que isso funcionasse, já que isso foi levantado recentemente em uma edição registrada contra o systemd. O problema # 9718 falava sobre a adição de milhões de entradas a /etc/hosts
, que tem um usecase e são domínios da lista negra, como como aqui.
Por favor, note que existem algumas partes móveis aqui, por isso é importante considerá-las durante a solução de problemas.
Meu /etc/systemd/resolved.conf
não tem nenhuma configuração substituída, todas as entradas estão comentadas, a configuração de rede está usando systemd-networkd com DHCP e não substitui nenhuma delas.
A saída de resolvectl status
inclui:
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
A configuração de /etc/resolv.conf
está usando o resolvedor stub:
$ 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
O nsswitch.conf está configurado para usar nss-resolve (8) de acordo para a recomendação de sua página de manual:
$ grep ^hosts: /etc/nsswitch.conf
hosts: files resolve [!UNAVAIL=return] dns myhostname
Se você ainda não conseguir fazê-lo funcionar, convém verificar essas configurações no sistema e confirmar se estão todas configuradas corretamente. Ou, pelo menos, poste sua configuração atual aqui (junto com a distribuição Linux e a versão systemd) para ajudar a diagnosticar por que ela pode não estar funcionando para você.