Dues portes d'enllaç, una VPN: per què OpenVPN tria l'enllaç ascendent equivocat
El túnel està bé; el sòcol surt per la WAN equivocada. Llegeix l'adreça del parell activa, fixa una ruta d'amfitrió i revisa primer les regles de política.
Dos enllaços ascendents, un túnel, i el trànsit surt pel que no heu triat. Les subxarxes privades són abastables, el registre informa d'una connexió correcta i és l'enllaç mesurat el que la transporta. Res a la sortida d'OpenVPN no esmenta cap porta d'enllaç, perquè el client no n'ha triat mai cap. Va obrir un sòcol cap a una adreça remota i va deixar que el nucli decidís com arribar-hi.
L'adreça del túnel no és el punt final
A cada sessió hi ha dos camins diferents. El camí exterior transporta el trànsit xifrat fins a l'adreça pública del servidor. El camí interior transporta tot el que el servidor empeny dins del túnel, i les regles d'encaminament d'un no tenen cap efecte sobre l'altre.
L'entrada remote del perfil anomena la destinació exterior, així que aquesta és l'adreça que cal fixar. També és el valor que canvia quan un nom d'amfitrió es resol de manera diferent o el perfil llista diversos remote.
Trobeu l'adreça a la qual el client ha marcat de veritat
Llegiu el sòcol viu en lloc del fitxer de configuració. La taula de sòcols mostra el parell al qual el procés s'ha connectat realment, i aquest és el valor amb què ha de coincidir l'excepció. Un perfil es pot editar després que comenci la sessió, i el sòcol és l'única prova del que s'ha marcat:
ss -tunp | grep -i openvpn
journalctl -u openvpn-client@work --no-pager | grep -i "Peer Connection Initiated"
La línia del registre indica l'adreça i el port del parell en el moment de la connexió. Si no coincideix amb el perfil, alguna cosa davant del client reescriu la destinació abans que comenci la connexió.
Comproveu també la família d'adreces. Un perfil de doble pila es pot connectar per IPv6 mentre la vostra excepció només cobreix IPv4, i llavors el trànsit segueix una regla diferent de la que heu escrit. El mateix passa amb un proxy que respon en nom del punt final. Tots dos casos produeixen un túnel que funciona mentre la vostra ruta no fa res.
Fixeu el punt final i llegiu l'ordre de la política
Una ruta d'amfitrió és més específica que qualsevol ruta per defecte. Per tant, una /32 per a l'adreça del parell guanya dins de la taula que la conté. La forma habitual anomena explícitament la porta d'enllaç i el dispositiu:
ip route add 203.0.113.40/32 via 192.168.10.1 dev eth0
Aquesta ruta només ajuda si la consulta arriba a aquesta taula. Les regles de política s'avaluen en ordre i la primera coincidència decideix, així que una regla que ho envia tot a una segona taula omet la vostra ruta d'amfitrió a main. Llegiu les regles abans de suposar que la ruta és autoritativa:
ip rule show
ip route get 203.0.113.40
Pregunteu la segona ordre amb la mateixa adreça d'origen o marca que utilitza el client quan la política en depèn. Informa de la ruta que el nucli triaria, cosa que és una prova sobre la consulta i no una prova que el sòcol viu faci servir aquell camí.
Quan el punt final es mou
Un nom d'amfitrió que es resol en diverses adreces invalida una /32 permanent tan bon punt canvia la resposta. Un perfil amb diverses línies remote té el mateix problema, perquè el client pot caure en qualsevol d'elles. Refresqueu la ruta des dels propis ganxos del cicle de vida del client en lloc d'afegir-la a mà. Un script up que llegeix el parell negociat i instal·la la ruta d'amfitrió manté l'excepció alineada amb la realitat, i un script down corresponent la retira.
Enregistreu el refresc al mateix lloc que la resta de la configuració d'encaminament de l'amfitrió. Una ruta que només existeix fins al proper reinici és una prova, no una correcció.
Manteniu la política interior separada
Moure el camí exterior no dona accés a una nova subxarxa privada ni canvia quines destinacions empeny el servidor dins del túnel. La ruta de sota tria el cable; les rutes empenyades trien què entra al túnel. Mantenir aquestes dues decisions separades és el que fa previsible la divisió.
Si l'objectiu només és mantenir el transport xifrat fora d'un enllaç mesurat, deixeu la ruta per defecte tranquil·la i afegiu l'única excepció d'amfitrió. Substituir la ruta per defecte de tota la màquina per moure una sola connexió VPN trenca qualsevol altra aplicació de l'amfitrió.
Confirmeu el resultat amb dues observacions independents: l'adreça local i el dispositiu del sòcol, i la ruta a la qual es resol la destinació privada. Quan totes dues coincideixen amb la vostra intenció, la divisió és real. El manual d'OpenVPN 2.6 cobreix les opcions remote i de vinculació local que decideixen a quina adreça marca el client.