Após o anúncio relativamente recente da Mozilla do lançamento do suporte ao DNS sobre HTTPS (DoH) na produção na rede, as disputas continuam sendo boas ou más. Na minha opinião, a posição do "mal" é baseada principalmente no fato de que, ao mesmo tempo, manipular suas consultas de DNS, mesmo para fins úteis para você, será difícil, então, por enquanto, permaneço na posição de "bom".

Na Federação Russa, as operadoras de telecomunicações, colocadas em condições muito estritas pela nossa legislação, são forçadas a criar sistemas sofisticados em vários níveis para bloquear o acesso ao conteúdo proibido por Roskomnadzor na Federação Russa, em um dos níveis em que a interceptação de DNS está trabalhando com mais ou menos sucesso. O uso do DoH permitirá contornar esse nível, o que, juntamente com o uso da VPN, pode facilitar a sua vida. Observe que uma solução em si não pode salvá-lo do bloqueio, porque dificilmente existe um provedor na Rússia que depende apenas da filtragem pelo DNS. Você precisa de outra opção para evitar o bloqueio, por exemplo, de uma VPN, uma das descritas nos meus artigos anteriores.
É paradoxal, mas no panóptico atual, o operador de telecomunicações não ameaça você ignorar seus bloqueios (usando ferramentas especiais para isso); portanto, se você tem medo de prejudicá-lo dessa maneira, esses medos são em vão.
Mas mudar para um navegador especial para ignorar a interceptação de DNS não é o nosso caminho. Nossa maneira é transferir todos os dispositivos da sua rede doméstica para o DoH, de forma rápida, eficiente e sem trabalho desnecessário.
Isenção de responsabilidade
Como não é muito legítimo publicar métodos para ignorar o acesso a informações proibidas no território da Federação Russa, o objetivo deste artigo será falar sobre um método que permita automatizar o acesso a recursos permitidos no território da Federação Russa, mas por causa de ações de alguém que não são diretamente acessíveis através do seu provedor. E o acesso a outros recursos obtidos como resultado de ações do artigo é um efeito colateral lamentável e o objetivo do artigo não é de forma alguma.
TL; DR
Estamos implantando nosso próprio servidor DNS baseado em Pi-Hole usando o Cloudflare DoH para consultas ao mundo. O objetivo é criptografar todas as consultas DNS e ignorar a filtragem do operador por meio da interceptação de DNS dessa maneira. Um bônus útil é filtrar anúncios.
Nenhum conhecimento mágico é aberto, uma simples instrução passo a passo para quem não quer entender todos os meandros.
O que você precisa para isso
- Confie no Cloudflare. Este é realmente um ponto muito importante, porque na implementação descrita todas as suas consultas DNS são processadas pelo serviço Cloudflare. Se você não confiar nele, precisará implementar outra solução (e isso é um pouco mais complicado do que o descrito, mas o objetivo deste artigo não é).
- Ser capaz de oferecer suporte a um servidor Linux em execução constante na sua rede doméstica que manipulará as consultas DNS dos seus dispositivos. O requisito do Pi-Hole é de 512M RAM (no entanto, não verifiquei o trabalho com um volume menor). Se o seu roteador ou NAS for capaz de máquinas virtuais - esta é uma excelente opção, se um Raspberry Pi ou outro microcomputador no ARM estiver em algum lugar da prateleira - nada menos que bom, se o farm virtual no ESXi estiver vibrando nos mezaninos no corredor - o que estou lhe dizendo, você e você sabe tudo sozinho. Se você não tem nada disso, as soluções mais jovens, como a Orange Pi Zero, podem ser encontradas no mercado secundário por unidades de centenas de rublos ou trazidas de Ali por mais ou menos o mesmo dinheiro. Mas a escolha da plataforma está muito além do escopo deste artigo, portanto acreditamos que você tenha alguma coisa. No entanto, perguntas sobre esse assunto podem ser feitas nos comentários.
- Você deve estar familiarizado com Linux e rede. Ou pelo menos quer ter uma idéia dessas. Como não estou pronto para abraçar a imensidão desta vez, você terá que estudar alguns momentos incompreensíveis para você. No entanto, é claro, responderei perguntas específicas nos comentários e é improvável que seja o único a responder, por isso não hesite em perguntar.
Dados de origem
O endereço IPv4 do nosso servidor na rede doméstica é 192.168.1.10 e é atribuído como estático.
As configurações no Linux são executadas a partir da raiz (ou seja, antes de iniciar a configuração, executamos o comando sudo su ).
Resumidamente - a lógica da solução
- Instale e configure o Pi-Hole
- Instale e configure cloudflared
- Configure seu roteador doméstico
- Resolvemos problemas
Realmente decisão
1. Instale e configure o Pi-Hole
O Pi-Hole é uma plataforma doméstica conhecida, projetada principalmente para combater a publicidade, bloqueando solicitações de domínio de uma lista atualizada centralmente. Não que fosse um componente necessário da solução, mas se você começou a coletar o DNS doméstico, fica difícil parar. Mas, falando sério - o Pi-Hole pode não ser perfeito, mas remove uma grande quantidade de dor de cabeça de uma pessoa que precisa "trabalhar".
Para instalar o Pi-Hole em um servidor Linux já em execução, basta executar um comando:
curl -sSL https://install.pi-hole.net | bash
E então o script em execução o guiará pelas etapas de instalação.
No momento em que ele pergunta sobre a escolha do provedor de upstream DNS, você pode escolher qualquer, porque na próxima etapa ainda a alteraremos. Todos os outros parâmetros podem ser deixados com segurança por padrão.
No final da instalação, o script mostrará uma senha gerada aleatoriamente a partir da interface da web, que seria útil para você anotar.
Se algo der errado durante a instalação, você poderá usar os métodos alternativos descritos aqui .
2. Instale e configure cloudflared
Para mudar para DNS por HTTPS, usamos uma solução padrão do Cloudflare. O daemon cloudflared foi criado originalmente para levantar o túnel Argo do lado do assinante, permitindo que você publique seu servidor da Web na Cloudflare CDN, mesmo se estiver hospedado em um endereço IP privado atrás do NAT. Mas uma propriedade muito útil desse daemon é seu trabalho como proxy do DoH, e usamos essa propriedade aqui.
Aqui, para instalação, precisamos fazer um pouco mais de esforço, mas também nada de particularmente complicado.
Selecionamos e baixamos o instalador da nossa plataforma.
# For amd64 Debian/Ubuntu cd /tmp wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.deb apt-get install ./cloudflared-stable-linux-amd64.deb cloudflared -v # For amd64 CentOS/RHEL/Fedora cd /tmp wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.rpm yum install ./cloudflared-stable-linux-amd64.rpm cloudflared -v # For ARM cd /tmp wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz tar -xvzf cloudflared-stable-linux-arm.tgz cp ./cloudflared /usr/local/bin chmod +x /usr/local/bin/cloudflared cloudflared -v
Depois de executar o último comando, devemos obter uma saída semelhante à seguinte:
cloudflared version 2019.9.0 (built 2019-09-06-0333 UTC)
Se você possui um (é claro, o número da versão e da compilação pode ser diferente), parabéns, a instalação foi bem-sucedida. Agora cabe a você configurar.
Crie um usuário para o serviço:
useradd -s /usr/sbin/nologin -r -M cloudflared
Crie o arquivo de configuração do serviço / etc / default / cloudflared:
# Commandline args for cloudflared CLOUDFLARED_OPTS=--port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query
E damos direitos ao usuário recém-criado a ele e ao arquivo executável:
chown cloudflared:cloudflared /etc/default/cloudflared chown cloudflared:cloudflared /usr/local/bin/cloudflared
Em seguida, crie o arquivo /lib/systemd/system/cloudflared.service, que nos dará a oportunidade de integrar o serviço no systemd:
[Unit] Description=cloudflared DNS over HTTPS proxy After=syslog.target network-online.target [Service] Type=simple User=cloudflared EnvironmentFile=/etc/default/cloudflared ExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS Restart=on-failure RestartSec=10 KillMode=process [Install] WantedBy=multi-user.target
Ativamos o serviço e o executamos:
systemctl enable cloudflared systemctl start cloudflared systemctl status cloudflared
Se tudo der certo, você verá que o serviço está no estado ativo (em execução).
Você pode verificar a operação do serviço, por exemplo, com o comando dig:
dig @127.0.0.1 -p 5053 google.com
Na seção de respostas, você verá o endereço IP que seu serviço recebeu para google.com via DoH, algo como:
google.com. 217 IN A 172.217.6.142
Resta apenas conectar o serviço ao Pi-Hole. Para fazer isso, você acessa a interface da web Pi-Hole (a senha registrada no primeiro estágio é útil para você), acessa o item de menu Configurações - DNS e faz com que fique assim:

O principal é preencher o campo Personalizado com a entrada 127.0.0.1 # 5053 e deixar o amanhecer nele, removendo-o de todos os outros. Depois disso, não se esqueça de rolar a página e clicar em Salvar.
Se você esqueceu de escrever a senha - tudo bem, vá ao servidor via ssh e execute o comando pihole -a -p , ele permitirá que você defina uma nova senha. Bem, em geral, olhe as chaves da equipe pihole , há muitas coisas interessantes. Por exemplo, uma atualização do sistema é feita com um comando pihole -up .
3. Configure seu roteador doméstico
Obviamente, não posso fechar toda a variedade de roteadores com este texto. Mas para a maioria dos roteadores domésticos, os seguintes pontos são verdadeiros:
1) Você pode definir um servidor DNS personalizado para o roteador nas configurações da interface WAN, mesmo que o endereço IP seja obtido dinamicamente do provedor
2) O roteador emite seu endereço para clientes internos como DNS e encaminha suas solicitações para o servidor especificado nas configurações da WAN
Portanto, neste caso, é necessário e suficiente registrar o endereço do nosso Pi-Hole como servidor DNS nas configurações da interface WAN do roteador doméstico. É importante que seja o único servidor DNS nas configurações, se houver mais alguma coisa especificada - o roteador equilibrará as solicitações entre eles de acordo com seu único princípio conhecido e essa situação é extremamente inconveniente para problemas de depuração na rede.
Se de repente algo der errado e o serviço parar de funcionar, basta alterar a configuração acima para o endereço do servidor DNS do seu provedor ou, por exemplo, 8.8.8.8, e só então começar a entender.
Se o seu roteador for mais inteligente e, por exemplo, tiver a capacidade de especificar no DHCP qual endereço distribuir aos clientes como um servidor DNS, você poderá seguir um caminho alternativo e configurar a distribuição do endereço Pi-Hole diretamente para os clientes. Isso descarregará um pouco o roteador, mas complicará a reversão acima do uso do serviço.
Se algo não der certo - pergunte nos comentários, encontraremos uma solução.
4. Nós resolvemos problemas
Em geral, depois de concluir os pontos acima, tudo deve ficar bem com você, mas há algumas nuances que meus clientes e eu encontramos algumas vezes.
Depois de começar a usar o Pi-Hole, você poderá sentir sentimentos incomuns de publicidade reduzida em seus dispositivos (especialmente em dispositivos móveis). Não se assuste, é isso que você pretendia. Além disso, alguns serviços podem parar de funcionar da maneira que você está familiarizado e isso exigirá sua participação nas configurações. Por exemplo, o site do Aliexpress tenta periodicamente redirecioná-lo para o endereço best.aliexpress.com, que está na lista de publicidade, e isso bloqueia todo o acesso ao Ali.
Detectar esse problema é bastante simples - se você estiver tentando acessar um servidor bloqueado, seu navegador mostrará um erro ERR_NAME_NOT_RESOLVED ou um erro semelhante e uma verificação na linha de comando através do nslookup <nome do servidor> retorna 0.0.0.0 em resposta.
Também é fácil resolver o problema para um servidor específico - basta adicioná-lo à lista de permissões. Para fazer isso, vá para http: //pi.hole/admin , faça login, selecione Lista de permissões no menu à esquerda e adicione o servidor que precisamos. Por exemplo, eu tive que abrir, além dos best.aliexpress.com mencionados, s.click.aliexpress.com, além de um grupo de sites no domínio miui.com para que os serviços da Xiaomi funcionassem. Você provavelmente precisa de algo próprio. Mas acompanhar o que exatamente precisa ser aberto não é tão difícil - na página principal do painel do serviço e nos Logs de consulta, você sempre pode ver quais solicitações de domínio foram bloqueadas e adicioná-las à lista de permissões.
Também acontece regularmente que o Pi-Hole está instalado em um servidor no qual algum tipo de serviço da web já está em execução. Nesse caso, você não terá acesso à interface de gerenciamento baseada na Web. Como resolver esse conflito depende da situação específica, mas as principais soluções são:
- Se o servidor da web não foi usado, mas ficou parado por padrão - encontre e desative
- Se o servidor da web for usado e você souber como trabalhar com ele, adicione a interface da web Pi-Hole como um recurso separado ao seu servidor da web.
- Você também pode pousar a interface da web Pi-Hole em uma porta diferente, corrigindo o parâmetro server.port no arquivo /etc/lighttpd/lighttpd.conf. Mas isso exigirá lembrar em qual porta o servidor está sendo executado, portanto não aceito tais esquemas.
Conclusão
Como prometido, ele não escreveu nada de novo. Para muitos leitores, esse esquema é compreensível e óbvio e já está implementado ou não é desnecessário. Muitos outros criaram algo semelhante de uma maneira diferente, usando o mesmo ou outros componentes. Sugiro que você considere este post mais como um espaço em branco para sua própria solução, se você precisar. Mas, tendo executado como uma instrução passo a passo, você já receberá um serviço que cobre suas necessidades básicas para filtrar anúncios e usar o DoH.
Tradicionalmente, responderei perguntas e ajudarei nas configurações.
Nota PS do GennPen - ao usar o DoH, você fica dependente da sua conexão com a Internet e, se ficar sem dinheiro na sua conta, nem poderá fazer login na conta pessoal do seu provedor para pagá-los. Portanto, para esses sites nesta solução, é desejável registrar entradas estáticas no Pi-Hole - isso pode ser feito no console com o comando pihole -a -r ou simplesmente manualmente no arquivo / etc / hosts. Infelizmente, a ferramenta não está incluída na interface da web para isso.