Upozorenje o više skripti zvuči kao žalba na raspoređivanje, pa je očito rješenje presložiti redove dok ne nestane. Ono nije žalba na raspoređivanje. Kasnija definicija --up zamjenjuje komandu koja je već sačuvana za tu fazu, i parser to kaže, što znači da je od vaše dvije skripte ikada radio tačno jedna. Druga nije u redu iza nje; nje nema.

Zato upozorenje zaslužuje pažnju iako nije fatalno: ono predviđa DNS ažuriranje ili promjenu rute koja je tiho prestala da se dešava.

Upozorenje nije o redoslijedu

OpenVPN čuva jednu komandu korisničke skripte za fazu up. Kada parser naiđe na drugu definiciju, iz profila, uključene datoteke ili komandne linije, zamjenjuje ono što je već držao i ispisuje upozorenje. Ništa se ne spaja, ništa ne radi dvaput, i pitanje redoslijeda ne postoji. Preživljava komanda koju je parser vidio posljednju, zato premještanje reda može promijeniti pobjednika, a drugu skriptu ostaviti mrtvom.

Isti obrazac vrijedi i za ostale faze skripti: po jedna komanda za svaku. Ako se dva posla moraju obaviti, potrebna im je jedna ulazna tačka, a ne dvije direktive koje liče na listu.

Nađite obje definicije u stvarnom pokretanju

Pođite od onoga što je daemon stvarno primio, a ne od profila koji ste uredili. ps -ef i ExecStart un-a pokazuju komandnu liniju, koja može dodati --up iz ulazne tačke kontejnera ili omotača; init datoteka distribucije može učiniti isto. systemctl cat openvpn-server@server otkriva šta sama usluga doprinosi, a rekurzivni grep po konfiguracijskom direktoriju nalazi definicije na nivou datoteke. Duplikati obično dolaze iz različitih slojeva i upravo zato uređivanje jedne datoteke ništa ne mijenja.

Kopiranje skripte u drugi direktorij ili preimenovanje također ne uklanja direktivu. Parser broji definicije, ne datoteke.

Neka jedan hook preuzme posao

Trajno rješenje je jedan dispečer koji izvršava obje radnje u promišljenom redu. Kratka shell skripta sa set -eu koja poziva potrebnu integraciju i zatim lokalnu radnju, prosljeđujući "$@" da granice argumenata ostanu sačuvane, drži ponašanje na jednom mjestu koje se može pregledati. Prosljeđivanje argumenata ih samo čuva; ono ne dokazuje da dva pomoćnika očekuju isti interfejs, zato pročitajte ugovor svakoga. Odlučite šta neuspjeh treba da uradi i treba li djelimične promjene poništiti.

Ako pokretač nudi podržani hook za proširenje, dajte mu prednost pred ručno sastavljenim lančanjem. Kontejnerska slika ili paket dobavljača često ima dokumentovano mjesto za dodatni rad, a njegovo korištenje sprječava da nadogradnja prepiše vaš dispečer.

Čišćenje pripada odgovarajućoj down fazi. Up radnja koja prepisuje DNS ili dodaje rute treba dokumentovano vraćanje, a dispečer koji obrađuje samo pokretanje je pola dizajna.

Potvrdite integraciju, ne samo tišinu

Uklanjanje upozorenja o duplikatu je lakši dio; integracija ipak mora raditi. Provjerite stanje rezolvera nakon povezivanja pomoću resolvectl status ili čitanjem /etc/resolv.conf, i potvrdite rute pomoću ip route. Zatim se odspojite i ponovo spojite, jer na brzinu povezan hook obično ostavi nešto od prethodne sesije. journalctl -u openvpn-server@server -b pokazuje da li je vaš dispečer radio i šta je ispisao.

Držite privilegije hooka tamo gdje pripadaju. Podizanje script-security ili pokretanje daemona s više prava nije popravka za zamijenjeni hook; to proširuje šta svaka buduća skripta može da uradi, uključujući onu koju napadač imenuje.

Znak da je popravka stvarna nije tišina u dnevniku. To su DNS odgovor, unos rute i čišćenje koji svi rade nakon dva ponovna povezivanja.

Povezani članci