O título da questão não faz sentido como está escrito. O tráfego não é encaminhado para ou das portas TCP em primeiro lugar (pense melhor nelas como marcadores), e as portas TCP não estão associadas às interfaces de forma alguma . E nada disso tem a ver com a possibilidade de usar o servidor da Web quando a VPN está ativada e desativada.
As rotas de um pacote são escolhidas principalmente com base em seu endereço IP de destino, procurando-o na tabela de roteamento. O problema usual - que o FreeBSD pf (e pelo que 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 roteado completamente de forma independente dos pacotes 'originais' de entrada. Então, se você tem 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 SO precisa saber que os pacotes de 'resposta' de saída a) de um determinado endereço IP de origem, ou b) pertencentes a certas conexões estabelecidas, devem 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 da "subárvore" (que é muito mais fácil de usar, mas infelizmente apenas no IPv6 conforme implementado).
p>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á tem uma rota padrão via VPN, você não precisa da tabela 3 aqui, você pode simplesmente usar 'main' para isso em vez 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>