Estou tentando acessar uma página de configurações do roteador pela Internet.
Configurei uma VPN WireGuard no AWS EC2. O handshake entre o roteador e o servidor WireGuard parece bom, mas não consigo acessar a url usando o IP público da instância ec2 - http://yyyy:51820 .
Alguém tem uma solução?
Servidor
[Interface]
Address = 172.31.16.1/20
SaveConfig = true
ListenPort = 51820
PrivateKey = PrivateKey
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
Detalhes do aperto de mão abaixo
Servidor
interface: wg0
public key: public key
private key: (hidden)
listening port: 51820
peer: public key
endpoint: x.x.x.x:6140
allowed ips: 172.31.16.2/32
latest handshake: 2 minutes, 1 second ago
transfer: 13.91 KiB received, 3.77 KiB sent
Cliente
interface: wg0
public key: public key
private key: (hidden)
listening port: 46734
peer: public key
endpoint: y.y.y.y:51820
allowed ips: 0.0.0.0/0
latest handshake: 2 minutes, 7 seconds ago
transfer: 3.77 KiB received, 16.08 KiB sent
persistent keepalive: every 25 seconds
Parece que o IP do servidor (endpoint) é yyyy, mas 51820 é a porta de escuta do Wireguard. E seus comandos iptables não parecem encaminhar portas específicas.
Conseqüentemente, a solicitação http terminará no servidor sem ser entregue a um soquete de servidor web.
Portanto, yyyy:80 ou yyyy:8080 ou yyyy:443 ou yyyy:zzz (se você tiver uma porta de escuta zzz de servidor web específica) pode ser mais o que é necessário para a solicitação http(s).
NB: Ótima explicação sobre como wg-quick configura o roteamento baseado em política de roteamento , bem como a página de roteamento Wireguard
Acredito que você precise passar pelo seguinte:
Faça ping internamente no cliente e no servidor para garantir que você possa rotear no túnel entre 10.8.0.1 e 10.8.0.2. Nenhum trabalho de iptables é necessário aqui, desde que as portas em ambos os lados estejam abertas para a comunicação do WG: tudo isso está dentro do Wireguard.
Depois que isso for confirmado, certifique-se de que a porta web XXX do seu cliente (roteador) esteja aberta em sua interface wg0 (ou qualquer interface que o Wireguard crie no roteador). Faça login no SERVIDOR e tente enrolar 10.8.0.2:XXX. Se isso funcionar, você está 99% lá. –
Encaminhar porta do servidor para o cliente roteador Resta apenas encaminhar qualquer porta de sua escolha YYYY na entrada do servidor para a porta 10.8.0.2 XXX. Estou mais familiarizado com nftables do que com iptables. Se você estiver usando um RedHat, o firewalld também permitirá que você faça isso em um comando muito curto.
Você deveria alcançar algo assim.
Configuração do Wireguard
Há uma colisão entre sua sub-rede WG e a sub-rede de interfaces externas. A sub-rede WG precisa ser separada. 10.8.x.0/24 é uma escolha comum. Colocar um x aleatório pode ter "certeza" de que ele é único. Colocar também KeepAlive=20 em ambos os lados garantirá que o perfurador do firewall dos pacotes de túnel do roteador para o vps permaneça aberto. Caso contrário, se não houver comunicação por algum tempo, o vps poderá não conseguir transmitir o primeiro pacote através do túnel.
Servidor wg0.conf
Configuração do cliente
Roteamento
No servidor (exposto à internet), confira a saída dos seguintes comandos:
Deve mostrar algo como
10.8.0.0/24 dev wg0 proto kernel scope link src 10.8.0.1
Or the The most restrictive10.8.0.2 dev wg0 proto kernel scope link src 10.8.0.1
.Ping
servidor do roteador e o recíproco através da sub-rede 10.8.0.0/24. Se funcionar, o WG é eficaz e suas rotas também.Trabalho de firewall
Primeiro é necessário verificar se a porta da interface web está aberta no roteador. Portanto, do servidor , execute:
Se funcionar, a porta para encaminhamento será 443, evite expor 80, pois ficará claro na internet. (Se apenas o http simples funcionar, você precisará encontrar um caminho (como outra VPN) para o seu servidor para evitar qualquer coisa clara na Internet. Ou stunnel para encapsular, ou um proxy reverso, etc.)
O encaminhamento deve estar habilitado no kernel echo 1 > /proc/sys/net/ipv4/ip_forward
Agora vem a diversão! Ref. http://www.do1618.com/wp-content/uploads/2016/06/netfilter_pkt_flow.png As seguintes regras são necessárias. Você pode incorporar todos eles nos comandos do servidor Wiregard executados pelo arquivo de configuração, uma vez confirmado que funciona. Vamos apenas seguir um pacote viajando pelo servidor.
(isso executa o nat de destino: qualquer pacote de solicitação recebido da Internet terá seu endereço de destino e porta reescritos, antes mesmo de chegar à verificação de rota.)
(O sistema de roteamento do kernel identificará na verificação de rota que ele vai para uma interface de saída e não para ser inserido e entregue a um processo local. Conseqüentemente, o pacote passará pelo gancho de encaminhamento. Esta regra permitirá que qualquer pacote vindo do externo interface a ser encaminhada.
(O pacote será então enviado via wg0 de acordo com a tabela de roteamento. No entanto, se deixado como está, o endereço IP de origem permanecerá o do solicitante na Internet. O pacote irá para o roteador e será tratado. MAS o O roteador responderá ao endereço de origem de origem. Sem mais informações e trabalho no roteador, o caminho de retorno da resposta pode ser diferente. Mesmo sem entrar na história de configuração da política de caminho reverso do kernel, os firewalls podem não permitir que o pacote chegue nem entre na máquina de origem . Mascarando NATs com um endereço de origem determinado automaticamente usando a interface de saída. E os NATs voltam para o outro lado nos pacotes de resposta. Veja a pegadinha abaixo)
(isso permite que os pacotes de resposta passem pelo servidor do túnel até a Internet).
(isso faz com que a resposta do roteador não se origine de 10.8.0.2, mas sim do endereço público do servidor. Assim, os firewalls permitirão que ela viaje de volta para o seu laptop.
Pegadinhas
Mascarar a interface wg0 é um pouco sujo. Pode-se querer ajustar o roteador ao marcar os pacotes recebidos com alguma metamarca e ter uma regra específica para rotear de volta os pacotes marcados como resposta para o túnel WG. Mas isso é mais trabalho e não tenho certeza se o sistema operacional do roteador permitirá os ajustes. Aqui a única desvantagem é que o roteador não pode registrar de onde as pessoas efetuaram login, ele sempre reportará 10.8.0.1, de onde quer que você esteja conectado.
Em termos de segurança , a interface wg0 no roteador permite acessar qualquer coisa no roteador. Parece que entrou na zona LAN do Openwrt. Inicialmente não é um grande problema durante a configuração, mas seria preferível definir uma zona de firewall específica, atribuir a interface wg0 a ela e permitir apenas pacotes de entrada para a porta 443. Contanto que o servidor esteja seguro, nada mais deve passar e isso funciona como um firewall, mas ainda assim.
Dica - analisador de rede Wireshark no console
Instale o pacote "tshark" (Ubuntu) ou wireshark-cli (Redhat's) no servidor
Mostrará pacotes através de todas as interfaces, excluindo os pacotes ssh para seu laptop/PC que poluiriam sua saída.