Curto: Gostaria de saber se é possível rotear (com iptables), então todas as comunicações que são direcionadas para/de 192.168.1.10 (eth0) porta 40000 são enviadas para tun0? (VPN)
Mais: Quando estou me conectando ao meu servidor VPN, todos os dados são roteados pela rede tun0, exceto este aplicativo (que não vai a lugar nenhum) que se recusa totalmente a entender (programação ruim). Isso faz com que o aplicativo dê uma cabeçada no sistema sem sair.
É possível forçá-lo roteando todos os dados que vão para 192.168.1.10:40000 para serem enviados para tun0 (interface de rede VPN) e rotear todos os dados de entrada de tun0:40000 para serem roteados de volta para 192.168.1.10
Atualização: Este é o resultado da rota IP -4:
*0.0.0.0/1 via 10.128.0.1 dev tun0
default via 192.168.1.1 dev enp0s3 proto dhcp metric 20100
10.128.0.0/22 dev tun0 proto kernel scope link src 10.128.2.129
128.0.0.0/1 via 10.128.0.1 dev tun0
169.254.0.0/16 dev tun0 scope link metric 1000
192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.173 metric 100
217.64.xxx.xx via 192.168.1.1 dev enp0s3*
A programação de rede tem um modelo em camadas , significa que o autor do aplicativo apenas diz ao sistema para se conectar a um determinado endereço IP em uma determinada porta, ele não precisa se preocupar com o resto, pois como chegar a esse soquete TCP/IP é até o sistema operacional.
Seu problema é causado por uma configuração de roteamento ruim. Vamos pegar algumas linhas como esta:
A primeira significa: se os 29 bits mais à esquerda do endereço de destino são idênticos aos de
1.2.3.0
(ou seja, de1.2.3.0
para1.2.3.7
) envie o pacote diretamente emtun0
. A segunda linha significa que os endereços de1.2.0.0
para1.2.3.255
, que não estão na/29
linha, devem ser enviados para1.2.3.4
. O kernel sabe como encontrar1.2.3.4
desde a primeira linha.As tabelas de roteamento do Windows são quase idênticas (eles originalmente pegaram a pilha TCP/IP do BSD).
Agora a sua situação. Você tem duas entradas de roteamento:
onde
default
é um atalho para0.0.0.0/0
(todos os endereços). Assim: se o endereço de destino começa com0
até128
, ele é enviado portun0
, caso contrário, é enviado porenp0s3
.Se você deseja rotear quase todo o tráfego através
tun0
de , primeiro encontre o endereço do outro endpoint do túnel VPN (provavelmenteip link
pode ajudar, mas você não disse o que está usando para o seu túnel). Vamos dizer que é5.5.5.5
.tun0
é uma interface virtual, que criptografa os pacotes enviados por ela e os envia para o outro endpoint por meio de uma interface física. Então, precisamos adicionar uma rota para que os pacotes5.5.5.5
sejam enviados porenp0s3
:(Edit: depois de ler novamente sua tabela de roteamento, isso já está lá, na última linha)
Então você pode rotear o tráfego restante através de
tun0
:Dependendo da maneira como você configura suas interfaces (e túnel), você pode fazer essas coisas automaticamente, quando as interfaces forem ativadas.
TL;DR Basta substituir
0.0.0.0/1
pordefault
, onde quer que você o coloque.