OpenVPN: paikallinen sidonta epäonnistuu käynnistyksessä — odottaa vai yrittää uudelleen
Kun paikallinen osoite ei ole vielä ylhäällä, OpenVPN ei voi sitoa. Vertaa rajattua odotusta uudelleenkäynnistyskäytäntöön ja katso, miksi network-online.target ei ole tae.
Käynnistyksessä käynnistymättömälle OpenVPN-palvelimelle tarjotaan kahta korjausta: odottaa osoitetta tai antaa palvelun yrittää uudelleen, kunnes sidonta onnistuu. Molemmat käsittelevät samaa oiretta erilaisella vikatilanteen käyttäytymisellä. Odottaminen koodaa tietyn edellytyksen ja epäonnistuu äänekkäästi, kun se puuttuu; uudelleenyritys piilottaa edellytyksen ja jatkaa yrittämistä. Kumpi kuuluu yksikköösi, riippuu siitä, onko osoite suunniteltu riippuvuus vai ajoituksen sattuma.
Molemmat ovat parempia kuin kiinteä nukkuminen, joka ei odota mitään eikä ilmoita, mitä se odotti.
Mitä local-vaihtoehto oikeastaan vaatii
local nimeää osoitteen, johon daemon sitoo socketinsa, ja sitominen osoitteeseen, jota ei vielä ole, epäonnistuu heti pyydettyä osoitetta koskevalla virheellä. Kun vaihtoehto puuttuu, daemon kuuntelee kaikkia osoitteita, minkä vuoksi sama profiili toimii koneella, jonka liitäntä ei ole vielä noussut: se kuuntelee kaikkialla nimeämäsi yhden osoitteen sijaan. Tämä ero on koko vika, ja se pysyy näkymättömänä uudelleenkäynnistykseen asti.
Vaatimus ei ole, että liitäntä on ylhäällä jossain yleisessä mielessä. Osoite on sidonnan hetkellä kohdistettava oikeaan liitäntään, ja sen on oltava taustaliitäntä eikä tunneli, jonka sama daemon loisi myöhemmin. Kirjautumisen jälkeen minuutteja myöhemmin tehty tarkistus ei todista käynnistysjärjestyksestä mitään.
Osoitteen odottaminen vai sidonnan uudelleenyritys
Odottaminen tarkoittaa ExecStartPre, joka kyselee, kunnes osoite ilmestyy, rajatulla yritysmäärällä ja nollasta poikkeavalla poistumisella, kun aika loppuu. Uudelleenyritys tarkoittaa pääprosessin annetaan epäonnistua ja palvelunhallintaa pyydetään käynnistämään se uudelleen, esimerkiksi Restart=on-failure yhdessä RestartSec=5. Ensimmäinen ilmoittaa puuttuvasta edellytyksestä epäonnistuneena yksikkönä, kun taas toinen ilmoittaa siitä uudelleenkäynnistysten sarjana, joka lopulta pysähtyy; se on äänekkäämpi lokissa mutta kestää osoitteen, joka saapuu myöhään syistä, joita et voi ennakoida.
Suosi odottamista, kun osoite on suunniteltu riippuvuus, ja uudelleenyritystä, kun osoite yleensä ilmestyy mutta sen ajoitus vaihtelee. Niiden yhdistäminen on järkevää: rajattu odotus kattaa tavallisen tapauksen ja uudelleenkäynnistyskäytäntö poikkeuksen. Kumpikaan ei saisi käydä ikuisesti, koska loputtomasti uudelleen yrittävä yksikkö piilottaa virheellisen kokoonpanon sen sijaan että ilmoittaisi siitä.
Miksi network-online.target ei riitä
network-online.target lupaa sen, mitä aktiivinen verkkototeutus tarkoittaa online-tilalla, eikä mitään sen enempää. systemd-networkd:n kanssa systemd-networkd-wait-online päättää, milloin kyseinen tavoite saavutetaan, ja sen oletuskäsitys online-tilasta voi täyttyä ennen kuin juuri sinun osoitteesi on olemassa. NetworkManagerin alla wait-online-palvelu soveltaa omia sääntöjään. Tavoitteen jälkeen järjestäminen on kunnollinen perusta, ei tae siitä, että yksi osoite, DNS-vastaus tai etäpäätepiste on valmis.
Sama päättely sulkee pois tavalliset vaihtoehdot. Työpöydän autostart-merkintä odottaa käyttäjäistuntoa, joka ei ehkä koskaan avaudu palvelimella, ja viivästetty cron-komento lisää kulunutta aikaa nimeämättä resurssia, jonka ilmestymistä se toivoi. Molemmat voivat näyttää kuukausia onnistuneilta ja sitten epäonnistua sillä ainoalla käynnistyksellä, jolla on merkitystä.
Tarkista sidonta kylmän käynnistyksen jälkeen
Varmista todellisella kylmällä käynnistyksellä, älä palvelun uudelleenkäynnistyksellä, koska uudelleenkäynnistys perii osoitteen, joka käynnistysjärjestyksen oli luotava. Käynnistyksen jälkeen ss -lntp tai ss -lunp näyttää paikallisen osoitteen, johon kukin kuuntelija tosiasiassa sitoi, ja journalctl -b -u openvpn-server@server näyttää, epäonnistuiko ensimmäinen yritys. Vertaa sidottua osoitetta profiilin osoitteeseen ja toista vertailu verkkoyhteyden palauduttua.
Jos profiili ei koskaan tarvinnut kiinteää osoitetta, local:n poistaminen on laillinen yksinkertaistus, mutta tee siitä turvallisuuspäätös äläkä vianmääritystapa.
Kuuntelijan laajentaminen muuttaa sitä, kuka siihen pääsee, joten yhdistä muutos palomuurikäytäntöön, jonka olisi pitänyt rajoittaa sitä. Palvelu, joka käynnistyy luotettavasti jokaisella liitännällä, ei ratkaissut alkuperäistä ongelmaa; se siirsi ongelman verkon reunalle.