Unha aplicación ligada ao enderezo da VPN segue a usar a ruta incorrecta
Un socket ligado ao enderezo da VPN segue a ruta predeterminada habitual. Comprobe a propiedade do enderezo e a busca baseada na orixe antes de engadir regras de política.
Unha aplicación lígase ao enderezo da VPN e, aínda así, a conexión sae pola ruta predeterminada habitual. Non fallou nada na ligazón: fixo exactamente o que fai unha ligazón. Ligar un socket a un enderezo local escolle o enderezo de orixe que o núcleo pon na cabeceira. Non instala unha ruta nin crea unha regra de política que envíe os paquetes con esa orixe a un túnel concreto.
O resto deste manual é a orde de comprobación que uso, xunto co comando que produce cada observación.
Que decide realmente unha ligazón
Unha ligazón asigna un enderezo local ao socket. Despois o núcleo executa a mesma busca de ruta que tería executado doutro xeito, salvo que unha regra de política cambie que táboa le esa busca.
Por iso un paquete pode saír cun enderezo de orixe da VPN por unha interface física. No outro extremo chega desde un rango privado que a rede nunca esperou nese camiño, o tráfico de volta non ten ruta de regreso e a conexión colga ou reiníciase.
A referencia de sockets IP de Linux documenta a semántica da ligazón. A metade de encamiñamento vive en ip-rule e ip-route, e son páxinas de manual separadas por un motivo.
Confirme que o enderezo pertence a este espazo de nomes
Un enderezo ao que se pode ligar ten que existir nunha interface dentro do espazo de nomes de rede onde se executa a aplicación. Un enderezo de par, un enderezo de pasarela ou un enderezo que só existe noutro espazo de nomes non se pode ligar, e a chamada falla con EADDRNOTAVAIL.
ip -br addr show
ip netns identify <pid>
ss -tanp | grep <port>Execute eses tres no mesmo contexto que a aplicación: mesmo espazo de nomes e mesmo usuario se pode obtelo. Un diagrama net30 antigo non é proba de que enderezo asignou a súa topoloxía actual ao cliente. Lea a interface que está realmente activa.
Lea a busca para esa orixe e ese destino
Un só comando responde a pregunta que a ligazón non respondeu:
ip route get 203.0.113.10 from 10.8.0.2
ip rule showA primeira liña imprime a ruta que tomaría un paquete desde esa orixe ata ese destino, incluída a interface de saída e a orixe preferida. Se nomea a interface física, a ligazón e a ruta non coinciden, e o paquete sairá cunha orixe á que o camiño non pode volver.
Despois ip rule show dille se algunha regra tería elixido outra táboa. As prioridades importan aquí, porque gaña a primeira regra que coincide e unha regra comodín por riba da súa fai invisible a súa.
Instale unha regra de política só se ese é o deseño
O encamiñamento baseado na orixe é un deseño deliberado, non unha reparación para unha aplicación. Se o propietario da política quere que o tráfico da subrede do túnel use o túnel, a regra pertence á súa configuración e non a un comando puntual no seu portátil.
Unha forma viable é unha táboa dedicada cunha ruta predeterminada polo túnel, máis unha regra que envíe o rango de orixe da VPN a esa táboa. Engada as excepcións que o deseño necesite, porque unha táboa que só conteña un defecto de túnel capturará destinos que deben quedar locais ou ser accesibles polo camiño físico.
ip route add default dev tun0 table 100
ip rule add from 10.8.0.2 table 100 priority 100
ip route get 203.0.113.10 from 10.8.0.2Desfaga con ip rule del e ip route flush table 100. Todo o engadido así desaparece ao reiniciar, salvo que un xestor o escriba, o que é á vez unha propiedade de seguridade e un motivo para non gardar a única copia no historial do seu shell.
Verifique con tres observacións
Anote a orixe que pediu a aplicación, a ruta que escolleu a busca e a orixe que o servidor viu realmente.
Eses tres poden discrepar, e cada discrepancia apunta a un sitio distinto. Unha captura na interface do túnel demostra que o paquete saíu coa orixe correcta. Unha captura na interface física demostra que saíu polo camiño equivocado. A vista do lado do servidor é a única que demostra o camiño de extremo a extremo.
Se a aplicación ofrece unha opción de ligazón a un dispositivo ou un modo de encamiñamento por aplicación, trátea como un mecanismo distinto con restricións distintas. Os axustes de aspecto similar non todos acaban na mesma decisión do núcleo.