Una /24 per a una impressora de laboratori desapareix entre dues crides a ip route show, i el registre del client només diu que la xarxa ha canviat. No hi havia res malament amb l’ordre, el prefix ni els vostres privilegis. Un client corporatiu que posseeix el model d’encaminament de l’amfitrió reafirma aquest model sempre que algú altre l’edita, de manera que l’entrada que heu afegit s’elimina com a intrús. Lluitar-hi dins la mateixa taula és una posició perduda. La solució és deixar de competir del tot per aquella taula i posar l’excepció on el monitor no mira mai.

El monitor explica la ruta desapareguda

Demostreu-ho abans de redissenyar res: llegiu la taula, afegiu el prefix, espereu uns segons, torneu a llegir. Si l’entrada no hi és i no heu escrit res per eliminar-la, hi ha un agent vigilant. Trobeu el procés que posseeix aquest comportament i llegiu el seu registre al voltant del moment en què la ruta desapareix, perquè el mateix servei normalment manté el túnel, els filtres de paquets i la configuració del resolutor. Matar-lo perquè la vostra ruta es mantingui és un intercanvi que lamentareu a la propera reconnexió.

ip route show
ip route add 192.168.2.0/24 dev enp0s31f6
sleep 5; ip route show

El prefix i la interfície de dalt són marcadors de posició. Copiar un nom d’interfície d’un exemple que funciona en una altra màquina és la causa més habitual que aquesta demostració no produeixi absolutament res.

Una segona taula és invisible per al monitor

L’agent només reconstrueix la taula que posseeix. Doneu a l’excepció una taula pròpia més una regla que hi enviï les destinacions corresponents, i la taula principal no canvia mai, així que l’agent no té res a corregir. Aquesta és tota la idea: un espai de noms de rutes que manté algú altre i un altre que només toqueu vosaltres.

L’intercanvi és el manteniment. Dos objectes es poden separar, i la posició de la regla a la llista importa tant com la ruta dins la taula que selecciona.

Construïu l’excepció i feu-la guanyar

Creeu la taula, instal·leu la ruta i afegiu una regla que seleccioni la taula per a aquella destinació. La preferència decideix si la vostra regla es consulta abans o després de les que el client ha inserit, i una regla que s’ordena més tard no s’assoleix mai, així que el número forma part del disseny i no és decoració. Després pregunteu al nucli què faria realment, que és una pregunta diferent de què heu configurat.

ip rule add to 192.168.2.0/24 table 110 pref 30010
ip route add 192.168.2.0/24 dev enp0s31f6 table 110
ip route get 192.168.2.50

ip route get resol la ruta que faria servir el nucli, incloent-hi el dispositiu i l’adreça d’origen. No imprimeix l’identificador de la taula, així que combineu-lo amb ip rule show quan hàgiu de confirmar quina taula ha guanyat. Junts responen l’única pregunta que importa: el trànsit cap a aquesta adreça surt on volíeu?

Altres formes de la mateixa idea

El patró es generalitza quan deixeu de pensar en destinacions. Una subxarxa local pot romandre accessible mentre el túnel conserva la ruta per defecte. Les respostes d’un servidor SSH connectat a la LAN poden sortir per la interfície per la qual han arribat en lloc de desaparèixer al túnel. I una regla basada en interfície pot empènyer tot el que arriba per una interfície sense fil cap al túnel mentre el trànsit que genera l’amfitrió mateix es queda a Ethernet:

ip rule add iif wlan0 table 10
ip route add default dev tun0 table 10

Aquest últim cas coincideix amb la interfície d’entrada en lloc de la destinació, que és un tipus de regla diferent i un model mental diferent. El trànsit reenviat també necessita net.ipv4.ip_forward activat, i l’extrem remot ha d’encaminar el rang d’origen de tornada o traduir-lo; una regla en una màquina mai no crea l’altra meitat del camí.

Tracteu la regla com a descartable

Les regles i les rutes de taula viuen a la memòria. Després d’una reconnexió, el dispositiu del túnel es pot reanomenar, l’adreça assignada es pot moure, i una regla amb el valor antic deixa de coincidir en silenci. Torneu a aplicar tot el canvi des d’un únic script que el posseeixi, i després torneu a comprovar ip rule show, el nom actual del dispositiu i un ip route get nou contra una destinació real abans de confiar en l’excepció.

Dos límits sobreviuen a qualsevol cura. El client encara controla les seves pròpies regles de filtratge i la configuració del resolutor, i una excepció d’encaminament no substitueix cap de les dues. Si el client també esborra la vostra regla de política, els camins suportats són la seva pròpia política de túnel dividit o un client que us permeti gestionar rutes, com OpenConnect; pedaçar un binari de proveïdor per silenciar el seu monitor és un compromís de manteniment amb una verificació d’integritat adjunta.

Escriviu el número de taula, la preferència i la destinació en una nota al costat de l’script. Si no, la propera persona troba una regla que supera el túnel i no té manera de saber per què.

Articles relacionats