Como eu redireciono o tráfego da porta 80 no tun0 para a porta 80 no eth0?

0

Eu tenho um servidor web em execução no mesmo servidor que eu uso uma VPN. Gostaria de poder acessar o servidor da Web quando a VPN estiver ativada ou desativada. No FreeBSD isso era bem simples, na minha opinião o PF é muito mais fácil de usar do que o IPTables.

Estou tentando redirecionar o tráfego da porta 80/443 em tun0 para porta 80/44 em eth0 . Eu tenho lido as man pages para iptables mas não teve sorte.

CaseJ
fonte

Respostas:

0

O título da pergunta não bastante faz sentido como está escrito. O tráfego não é encaminhado para ou de Portas TCP em primeiro lugar (melhor pensar neles como rótulos) e as portas TCP não estão associadas a interfaces de forma alguma. E nada disso tem a ver com a capacidade de usar o servidor da Web quando a VPN está ativada e desativada.

As rotas de um pacote são escolhidas principalmente com base no seu endereço IP de destino, procurando-o na tabela de roteamento. O problema usual - que o FreeBSD pf (e pelo que eu ouvi, o Windows) tem mecanismos adicionais para evitar, mas o Linux adere ao básico - é que os pacotes de 'resposta' de saída são roteados completamente de forma independente dos pacotes 'originais' de entrada. Portanto, se você tiver duas rotas padrão (tanto através do gateway da LAN quanto através da VPN), o Linux sempre preferirá a mesma.

O que você normalmente precisa nessa situação é o roteamento dependente de origem ou o roteamento de políticas. O sistema operacional precisa saber que pacotes de 'resposta' de saída a) de um determinado endereço IP de origem, ou b) pertencente a certas conexões estabelecidas, deve usar uma seleção de rota diferente.

Na grande tradição de "mas o Linux é sobre escolha", você tem que configurar isso manualmente reunindo vários mecanismos. Estou assumindo que você também precisa do IPv4 e, portanto, não pode confiar inteiramente no mecanismo "subtree" (que é Muito de mais fácil de usar, mas infelizmente somente IPv6 conforme implementado).

Primeiro, verifique se você tem duas tabelas de roteamento, cada uma com uma rota padrão diferente:

ip -4 route add default via 192.168.1.1 dev eth0 table 2
ip -4 route add default dev tun0 table 3

(Atalho: Supondo que a tabela 'main' já possui uma rota padrão via VPN, você não precisa da tabela 3 aqui, você pode simplesmente usar 'main' para isso ao invés de criar a tabela 3.)

Em seguida, adicione regras de roteamento de política para procurar nessa tabela, dependendo do endereço IP de origem:

ip -4 rule add pref 200 from 192.168.1.0/24 lookup 2
ip -4 rule add pref 300 from <vpnnet> lookup 3

(Novamente, se a tabela 'main' já preferir uma rota padrão via VPN, você pode pular a última regra. Ela está incluída aqui para ser completa.)

Em seguida, verifique o resultado usando:

ip -4 route get 8.8.8.8 from 192.168.1.x
ip -4 route get 8.8.8.8 from <vpnip>
grawity
fonte