Eu tenho 2 máquinas rodando o Ubuntu 22.04, vamos chamá-las de servidor e proxy. O proxy é um vps com ip público estático e o servidor está rodando atrás de um nat. Quero rotear todo o tráfego em algumas portas do proxy para o servidor.
Eu configurei um vpn wireguard entre os 2 e ambos podem fazer ping um ao outro, se eu enrolar o endereço vpn do servidor do proxy, obtenho a resposta html correta e configuro o nginx no proxy (que não é o final pretendido solução porque eu gostaria de rotear outros serviços que não sejam http/https) me permite proxy_pass para o ip vpn e mais uma vez obter a resposta html correta.
Mas não consegui configurar o encaminhamento usando iptables/ufw. Esta é a minha configuração wireguard que inclui as regras de roteamento do iptables na interface ativa.
Procurador:
[Interface]
# Proxy with static ip
Address = 10.250.0.1/32
ListenPort = 23456
PrivateKey = {private key}
# packet forwarding
PreUp = sysctl -w net.ipv4.ip_forward=1
# port forwarding
PreUp = iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.250.0.2
PostDown = iptables -t nat -D PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.250.0.2
PreUp = iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 10.250.0.2
PostDown = iptables -t nat -D PREROUTING -p tcp --dport 443 -j DNAT --to-destination 10.250.0.2
[Peer]
# main_server behind nat
PublicKey = {pub key}
AllowedIPs = 10.250.0.2/32
Servidor:
[Interface]
Address = 10.250.0.2/32
ListenPort = 23456
PrivateKey = {priv key}
[Peer]
PublicKey = {pub key}
Endpoint = {proxy server ip}:23456
AllowedIPs = 10.250.0.0/16
PersistentKeepalive = 25
Running sudo iptables-save -c
retorna o seguinte
# Completed on Wed Aug 24 17:01:57 2022
# Generated by iptables-save v1.8.7 on Wed Aug 24 17:01:57 2022
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
[0:0] -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.250.0.2
[4:208] -A PREROUTING -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.250.0.2
COMMIT
Com o número de pacotes e bytes [4:208]
aumentando toda vez que tento acessar o proxy via navegador web
Responder1
Tenho lutado para que o encaminhamento de porta semelhante funcione através do wireguard para um serviço atrás de um NAT. Minha configuração é semelhante à sua, mas há duas alterações que você deve tentar para que funcione.
Em primeiro lugar, descobri que além da regra DNAT, precisava de uma regra SNAT. Você pode tentar algo assim:
iptables -t nat -A POSTROUTING -d 10.250.0.2 -o wg0 -p tcp --dport 80 -j SNAT --to-source 10.250.0.1
Em segundo lugar, acho que você deveria usar PostUp/PreDown aqui em vez de PreUp/PostDown. As regras de roteamento não parecem funcionar se a interface ainda não estiver ativa quando você executa o iptables, então o PostUp garante que a interface esteja instalada primeiro.
Juntos e simplificando um pouco usando multiportas, você pode tentar a seguinte configuração no proxy:
[Interface]
# Proxy with static ip
Address = 10.250.0.1/32
ListenPort = 23456
PrivateKey = {private key}
# packet forwarding
PreUp = sysctl -w net.ipv4.ip_forward=1
# port forwarding
PostUp = iptables -t nat -A PREROUTING -p tcp -m multiport --dports 80,443 -j DNAT --to- destination 10.250.0.2
PreDown = iptables -t nat -D PREROUTING -p tcp -m multiport --dports 80,443 -j DNAT --to- destination 10.250.0.2
PostUp = iptables -t nat -A POSTROUTING -d 10.250.0.2 -o wg0 -p tcp -m multiport --dports 80,443 -j SNAT --to-source 10.250.0.1
PreDown = iptables -t nat -D POSTROUTING -d 10.250.0.2 -o wg0 -p tcp -m multiport --dports 80,443 -j SNAT --to-source 10.250.0.1
[Peer]
# main_server behind nat
PublicKey = {pub key}
AllowedIPs = 10.250.0.2/32
Espero não ter cometido nenhum erro tipográfico nisso - é melhor verificar com cuidado.