O script do hook actívase, le ppp0 e aplica rutas á interface que teña ese nome nese momento. Ás veces é o túnel que querías; outras é unha sesión que se conectou un minuto antes. A seguinte reconexión move o número, e o mesmo script configura en silencio a ligazón equivocada. A solución é tomar a interface da invocación que acaba de executarse e levar o perfil previsto xunto a ela.

Segue unha sesión desde as opcións ata o hook

Comeza onde se crea a sesión. xl2tpd inicia pppd co ficheiro de opcións que indica o pppoptfile dese túnel, así que o complemento, o número de unidade e calquera marcador de perfil decídense alí e non nun ficheiro global. Un xestor de conexións pode xerar as súas propias opcións, o que significa que editar /etc/ppp/options non é proba de que o túnel que che importa cambiase. Cando a ligazón sobe, pppd executa os scripts de notificación do despachador da distribución. Eses scripts reciben o nome da interface como primeiro argumento e o marcador de perfil como sexto.

A contorna leva os mesmos feitos con nomes como IFNAME e PPP_IPPARAM, pero a súa dispoñibilidade depende do despachador instalado. Le o despachador antes de confiar nunha variable: algunhas distribucións manteñen a orde de argumentos orixinal, outras filtran a contorna antes de chamar o teu script. Un script que só usa $1 e o sexto argumento funciona en ambos os casos.

Le a interface da invocación

O hook tradicional recibe a interface primeiro. Ese valor posicional é o identificador de interface que describe a sesión que activou o script. Gárdao nunha variable arriba e despois usa esa variable para rutas, regras de firewall e desmontaxe.

ipparam office-vpn

Engade un marcador de perfil onde se definen as opcións, non dentro do script. Con esa liña no ficheiro de opcións do túnel, cada sesión creada desde ese ficheiro leva office-vpn como sexto argumento. O script pode ramificar segundo o marcador mentres segue actuando sobre a interface real. Mantén os dous separados no código, porque o marcador é estable e a interface asígnase por sesión.

Pide un nome só se o rexeitamento é correcto

Un nome fixo parece máis simple que ler argumentos, pero cambia o comportamento ante fallos. A opción unit pide un número para unha conexión saínte, e pppd recorre a unha asignación dinámica cando esa unidade xa está ocupada. Nada dese resultado reserva ppp0 para o teu perfil.

ifname ppp-office

A opción ifname compórtase distinto: se o nome solicitado xa está en uso ou non se pode asignar, pppd sae en vez de escoller outro. É unha decisión de política, non un cambio de nome estético. Úsaa cando deba rexeitarse unha segunda instancia simultánea do mesmo perfil, e confirma que o pppd instalado e o teu xestor de conexións pasan a opción.

En calquera caso, o nome que ve o script é o que hai que tratar. Un nome configurado non elimina a necesidade de ler a invocación, porque unha sesión reiniciada aínda pode presentar un nome distinto do anterior.

Fai que a desmontaxe coincida coa sesión que configuraste

As rutas e as regras de firewall sobreviven ao script que as creou, así que a desmontaxe debe eliminar exactamente os obxectos que posúe a sesión. Etiqueta as regras co marcador de perfil ademais da interface, e borra por esa etiqueta. Se dous túneles poden estar activos, borrar todo o que menciona ppp é como unha desconexión rompe a outra conexión.

Proba o caso que expón o erro: levanta a segunda sesión PPP mentres a primeira segue conectada, despois reconecta a primeira e observa que interface informa o hook. Unha execución correcta cunha soa sesión non demostra nada sobre a asignación de nomes. Repíteo coa VPN detida para confirmar que a desmontaxe non deixa ningunha ruta obsoleta.

Garda o marcador, a interface e a ruta do hook nas notas de despregamento. Cando o número cambia tras un reinicio, eses tres valores explican por que o script se comportou distinto sen ningunha edición de configuración.

Artigos relacionados