Una aplicació es lliga a l’adreça de la VPN i, tot i així, la connexió surt per la ruta per defecte habitual. No ha fallat res en l’enllaç: ha fet exactament el que fa un enllaç. Lligar un socket a una adreça local tria l’adreça d’origen que el nucli posa a la capçalera. No instal·la cap ruta ni crea cap regla de política que enviï els paquets amb aquest origen a un túnel concret.

La resta d’aquest manual és l’ordre de comprovació que faig servir, amb l’ordre que produeix cada observació.

Què decideix realment un enllaç

Un enllaç assigna una adreça local al socket. Després el nucli executa la mateixa consulta de ruta que hauria executat d’una altra manera, tret que una regla de política canviï quina taula llegeix aquesta consulta.

Per això un paquet pot sortir amb una adreça d’origen de la VPN per una interfície física. A l’altra banda arriba des d’un rang privat que la xarxa no esperava en aquest camí, el trànsit de tornada no té ruta de retorn i la connexió es penja o es reinicia.

La referència de sockets IP de Linux documenta la semàntica de l’enllaç. La meitat d’encaminament viu a ip-rule i ip-route, i són pàgines de manual separades per un motiu.

Confirmeu que l’adreça pertany a aquest espai de noms

Una adreça a la qual us podeu lligar ha d’existir en una interfície dins de l’espai de noms de xarxa on s’executa l’aplicació. Una adreça de parell, una adreça de passarel·la o una adreça que només existeix en un altre espai de noms no es pot lligar, i la crida falla amb EADDRNOTAVAIL.

ip -br addr show
ip netns identify <pid>
ss -tanp | grep <port>

Executeu aquestes tres ordres en el mateix context que l’aplicació: mateix espai de noms i mateix usuari si el podeu obtenir. Un diagrama net30 antic no és prova de quina adreça ha assignat la topologia actual al client. Llegiu la interfície que està realment activa.

Llegiu la consulta per a aquest origen i aquest destí

Una sola ordre respon la pregunta que l’enllaç no va respondre:

ip route get 203.0.113.10 from 10.8.0.2
ip rule show

La primera línia imprimeix la ruta que prendria un paquet d’aquest origen a aquest destí, incloent-hi la interfície de sortida i l’origen preferit. Si anomena la interfície física, l’enllaç i la ruta no coincideixen, i el paquet sortirà amb un origen al qual el camí no pot tornar.

Després ip rule show us diu si alguna regla hauria triat una altra taula. Les prioritats importen aquí, perquè la primera regla que coincideix guanya i una regla comodí per sobre de la vostra fa invisible la vostra.

Instal·leu una regla de política només si aquest és el disseny

L’encaminament basat en l’origen és un disseny deliberat, no una reparació per a una aplicació. Si el propietari de la política vol que el trànsit de la subxarxa del túnel faci servir el túnel, la regla pertany a la seva configuració i no a una ordre puntual al vostre portàtil.

Una forma viable és una taula dedicada amb una ruta per defecte pel túnel, més una regla que enviï el rang d’origen de la VPN a aquesta taula. Afegiu les excepcions que el disseny necessiti, perquè una taula que només contingui un defecte de túnel capturarà destinacions que han de quedar locals o ser accessibles pel camí físic.

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.2

Desfeu-ho amb ip rule del i ip route flush table 100. Tot el que s’afegeix així desapareix en reiniciar, tret que un gestor ho escrigui, cosa que és alhora una propietat de seguretat i un motiu per no tenir l’única còpia a l’historial del vostre shell.

Verifiqueu amb tres observacions

Anoteu l’origen que va demanar l’aplicació, la ruta que va triar la consulta i l’origen que el servidor va veure realment.

Aquests tres poden discrepar, i cada discrepància assenyala un lloc diferent. Una captura a la interfície del túnel demostra que el paquet va sortir amb l’origen correcte. Una captura a la interfície física demostra que va sortir pel camí equivocat. La vista del costat del servidor és l’única que demostra el camí d’extrem a extrem.

Si l’aplicació ofereix una opció de lligar a un dispositiu o un mode d’encaminament per aplicació, tracteu-la com un mecanisme diferent amb restriccions diferents. Els paràmetres d’aspecte semblant no tots acaben en la mateixa decisió del nucli.

Articles relacionats