Tenho um Raspberry Pi em execução que estamos usando no escritório para pequenos projetos de teste que não queremos em nosso servidor de desenvolvimento principal. Está rodando o apache. O DNS é tratado via Cloudflare, mas no modo DNS Only. Atualmente, nenhuma restrição de IP está em vigor enquanto eu testo. O registro A mysite.domain.tld
está apontando para meu endereço IP estático 123.123.123.123
e apenas um roteador/modem de fibra comercial padrão fica entre a Internet e o Pi.
Quando visito mysite.domain.tld
, por exemplo, meu telefone sem wifi, aparece o IP da operadora de celular. Quando eu wget
sou de um servidor remoto,isso é'O IP aparece nos logs. Tudo funciona conforme o esperado.
No entanto, quando vou para mysite.domain.tld
a mesma rede em que o Pi está localizado, o Apache registra o IP do gateway do roteador 192.168.1.1
. Eu esperaria ver meu endereço IP público, porque minha conexão com o nome de domínio é resolvida, via Cloudflare, para o IP público. Mas, em vez disso, vejo um IP de rede local nos logs.
Não há nada configurado /etc/hosts
(estou no macOS) e no roteador, apenas o encaminhamento de porta para conexões da porta 443 é roteador para o Pi na mesma porta - nada relacionado ao nome de domínio é referência em qualquer lugar. Quando eu faço ping, mysite.domain.tld
isso me dá onuvemflareEndereço IP, que é o que eu esperava.
Parece que em algum lugar ao longo da cadeia, o fato de que meu endereço IP e o endereço IP público do Pi estão sendo correspondidos, de modo que ele substitui o IP pelo IP do gateway interno.O que realmente está acontecendo aqui?Eu nãomentepor si só, só quero ter certeza de que posso confiar no fato de que 192.168.*
os IPs são confiáveis ao configurar a restrição de IP no firewall.
Nota: CF-Connecting-IP e cabeçalhos semelhantes não são enviados pela Cloudflare aqui, presumo que isso só aconteça quando não estiver no modo Somente DNS. E issopareceserá apenas quando eu uso a mesma conexão de rede que o Pi está usando.
Responder1
Seu roteador está executando Linux e esse comportamento é fácil de implementar em qualquer distribuição padrão do Linux. Posso adivinhar quais regras devem estar presentes no firewall do seu roteador para que funcione assim. Mas esteja ciente de que isso é apenas uma especulação, não sabemos exatamente como são as regras na realidade.
Quando você encaminhou uma porta para o seu servidor web, ele adicionou uma regra DNAT específica, que provavelmente se parece com isto:
iptables -t nat -A PREROUTING -p tcp -d <your-external-address> --dport 443 -j DNAT --to-destination <raspberry-pi-address>
Em palavras, isso significa: "antes de decidir se este pacote é destinado ao dispositivo ou deve ser encaminhado, verifique se o endereço de destino do pacote é o seu endereço externo e a porta de destino é 443. Se corresponder, altere o endereço de destino para a LAN do Raspberry Pi endereço". Observe que esta regra não filtra pela interface.
Também definitivamente possui a regra do tipo SNAT (para fornecer acesso à Internet para a LAN), provavelmente se parece com isto:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
Em outras palavras, depois que o roteador decide para onde o pacote deve ir, antes de enviá-lo, ele altera seu endereço de origem para qualquer endereço que uma interface de saída possua (se o pacote foi enviado da LAN). Novamente, nada é filtrado por uma interface.
Agora considere sua conexão HTTPS. Você está especificando o nome do host no navegador, certo? Você o configura para que seja resolvido no endereço externo do seu roteador, que se torna o endereço de destino. Seu endereço de origem está dentro da LAN. Portanto, parece que ambas as regras se aplicam aos pacotes da sua conexão.
Ao processá-los, o roteador primeiro encontra a regra DNAT, verifica o endereço e a porta de destino e decide alterar o endereço de destino para o do Raspberry Pi. Então ele descobre que a interface pela qual o pacote deve sair é a LAN. Em seguida, ele verifica o pacote parcialmente traduzido em relação à segunda regra e descobre que o endereço de origem é da LAN. Portanto, ele substitui o endereço de origem do pacote pelo endereço da interface LAN, 192.168.1.1. Isto é o que o seu Raspberry Pi vê.
A operação NAT é stateful, ou seja, também mantém um registro de tabela que diz o que foi substituído pelo quê e como detectar pacotes subsequentes de encaminhamento e resposta, de modo que traduz todos eles corretamente. Sim, acontece que o Linux pode executar DNAT e SNAT ao mesmo tempo no mesmo fluxo.
Você pode confiar nesse comportamento? Não sei. Se o firmware do roteador fosse de código aberto, tivemos a oportunidade de verificar. Sem fonte, não podemos ter certeza. Este é sempre o caso quando a fonte está fechada, por isso os produtos de código fechado devem ser evitados se você estiver preocupado com a segurança.