Encaminhamento de porta para o cliente VPN

0

Eu tenho um roteador no Tomato (shibby) rodando um servidor OpenVPN (com o TAP; a interface é tap21 no roteador). Vários recursos (incluindo algumas estações de trabalho) estão fisicamente conectados a eth0 neste roteador. Eu tenho outro dispositivo físico em todo o país que está executando o nginx e outros serviços. Agora, eu sei que isso não é uma ótima configuração topográfica, mas circunstâncias inalteráveis exigem que o dispositivo executando nginx seja um cliente da VPN do roteador e todo o tráfego de entrada e saída do dispositivo nas portas 80 e 443 devem ser sintonizados através desta conexão VPN.

Então, basicamente, o que precisa acontecer é:

  1. example.com resolve o IP da WAN no roteador
  2. O roteador
  3. encaminha as portas 80 e 443 por meio da interface tap21 para o servidor nginx
  4. a resposta do servidor nginx retorna por tap21 e é encaminhada de volta pela WAN

A parte # 2 é com o que estou tendo problemas.

O servidor atualmente pode se comunicar com outros dispositivos na sub-rede (capaz de executar ping de outros recursos na VPN, bem como recursos fisicamente conectados a eth0 no roteador) e pode acessar a Internet através da VPN. No entanto, não consegui encaminhar as portas da WAN para o endereço do servidor na VPN. A primeira tentativa que fiz foi simplesmente tentar a GUI de encaminhamento de porta no Tomato (mas isso parece não funcionar para IPs na VPN, apenas aqueles em eth0 ou wlan0 ). Quando isso não funcionou, eu tentei adicionar regras do iptables, mas como eu ainda estou desconfortável com o iptables, eu só consegui encontrar trechos de outras respostas para perguntas que não se relacionam com essa configuração de rede estranha e problemática. . Aqui está o que estou tentando (usando 10000 como uma porta de teste com nc ouvindo):

iptables -t nat -I PREROUTING -p tcp -m tcp --dport 10000 -j DNAT --to-destination 192.168.12.53:10000
iptables -I FORWARD -d 192.168.12.53 -p tcp --dport 10000 -j ACCEPT

No entanto, não consigo descobrir o que está acontecendo com os pacotes sendo redirecionados dessa maneira - eles certamente não estão alcançando o servidor. Essencialmente, minha pergunta é como posso encaminhar conexões de entrada em portas específicas para um determinado dispositivo em uma VPN? O tráfego de saída nas portas 80 e 443 de outros recursos no eth0 do roteador não deve, é claro, ser afetado.

Obrigado por qualquer ajuda que você possa fornecer!

    
por Chris Brendel 22.02.2016 / 04:04

1 resposta

0

Depois de vários ajustes, eu descobri (embora saúdo qualquer comentário que possa explicar por que isso está funcionando). Em primeiro lugar, não ter uma regra POSTROUTING aparentemente fazia com que o servidor descartasse os pacotes. Examinando as regras iptables que o Tomato cria através da GUI, criei entradas semelhantes para WANPREROUTING , wanin e INPUT ; Eu não tenho certeza porque a regra INPUT é necessária; talvez ele possa ser removido e o sinalizador -m possa ser adicionado a wanin ?

iptables -t nat -I WANPREROUTING -i vlan2 -p tcp -m tcp --dport 80 -j DNAT --to-destination {SERVER_IP}:80
iptables -I wanin -d {SERVER_IP} -i vlan2 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m tcp -i vlan2 --dport 80 -m state --state NEW -j shlimit

A GUI do Tomato não cria as regras POSTROUTING automaticamente, então eu também tive que fazer isso:

iptables -t nat -I POSTROUTING -p tcp -d {SERVER_IP} --dport 80 -o tun22 \! -s {GATEWAY_IP} -j SNAT --to-source {GATEWAY_IP}

Eu fiz conjuntos de regras como este para as portas 80 e 443, e agora posso acessar o servidor através da VPN a partir da Internet.

    
por 23.02.2016 / 20:47