Miksi vpnc:n reittien tyhjennysvaroitus ilmestyy kontissa
Reittivälimuistin tyhjennys on jäänne ytimestä, joka ei enää pidä sitä välimuistia; vain luku -virhe tulee kontin liitoksesta, ei tunnelista.
Tuoreet konttilokit päättyvät usein Read-only file system-valitukseen /proc/sys/net/ipv4/route/flush-polusta, ja se rivi saa syyn tunnelista, joka voi olla täysin kunnossa. Sen takana oleva kirjoitus kohdistuu ytimen merkintään, joka ei enää tee mitään hyödyllistä, kun IPv4-reittivälimuisti on poistunut. Kontin sisällä /proc/sys liitetään vain luku -tilassa, joten uudelleenohjaus hylätään ennen kuin yksikään arvo saapuu, ja komentotulkki tulostaa hylkäyksen. Toimiva tunneli voi tulostaa tämän varoituksen niin kauan kuin vanha rivi pysyy skriptissä, eikä --privileged tee kirjoituksesta koskaan mielekästä.
Mitä skripti yritti tyhjentää
Vanhemmat yhteysskriptit päättyivät välimuistin siivoukseen: kirjoita arvo ytimen ohjaustiedostoon ja pyydä IPv4-pinoa pudottamaan reititysvälimuistinsa, jotta uusi tunnelireitti valittaisiin odottamatta vanhentuneiden merkintöjen vanhenemista. Tiedostoon viitattiin /proc/sys/net/ipv4/-polun alla, mikä teki toimenpiteestä komentotulkin uudelleenohjauksen eikä reitityskomennon. Ydin 3.6 poisti kyseisen välimuistin ja sen mukana syyn tyhjennyksen olemassaoloon. Mikään nykyisessä datapolussa ei riipu tästä kirjoituksesta.
Merkintä itse säilyi vanhana vain kirjoitus -tiedostona, joten skripti, joka kirjoittaa siihen yhä, saavuttaa todellisen polun ja todellisen käyttöoikeustarkistuksen. Isännässä kirjoitus palauttaa onnistumisen eikä muuta mitään. Kontissa sama uudelleenohjaus osuu vain luku -tilassa olevaan /proc/sys-polkuun ja epäonnistuu virheellä EROFS, jonka komentotulkki tulostaa vain luku -tiedostojärjestelmän viestinä. Ytimissä, joissa polku todella puuttuu, sanamuodoksi tulee No such file or directory, eikä johtopäätös muutu.
Kaksi virhettä sanovat eri asioita, ja ero kannattaa pitää selvänä. Read-only file system tarkoittaa, että ydin saavutti merkinnän ja hylkäsi kirjoituksen; No such file or directory tarkoittaa, että merkintä on poissa. Kumpikaan viesti ei kerro tunnelilaitteesta, reiteistä tai nimien ratkaisusta, joten kumpikaan ei voi perustella lisää oikeuksia.
Järjestys saa viestin näyttämään syy-yhteydeltä. Yhteysskripti asentaa reitit, muuttaa liitännän tilaa ja kirjoittaa nimien ratkaisun uudelleen ennen kuin se saavuttaa lopun siivouksen, joten viimeksi tulostettu rivi on se, jota lainataan, vaikka jokainen tärkeä vaihe palautti onnistumisen. Tunneli, joka muodostuu ja kuljettaa liikennettä tulostaen tätä varoitusta, vastaa täsmälleen yllä kuvattua mekanismia.
Tarkista liitos ja reitti ennen oikeuksien lisäämistä
Kolme lukua erottavat kosmeettisen varoituksen todellisesta viasta: onko asennettu skripti yhä rivin sisältävä, miten /proc/sys on liitetty ja minne sovelluksen liikenne todella menee. Suorita ne samassa kontin nimiavaruudessa tai isännässä, jossa varoitus ilmestyi, sillä tarkistus asiaankuulumattomalla koneella vastaa eri kysymykseen.
grep -n 'ipv4/route/flush' /usr/share/vpnc-scripts/vpnc-script
findmnt -no OPTIONS /proc/sys
ip -4 route get 10.20.5.10grep-vastaus on heikompi kuin miltä näyttää, koska osuma todistaa rivin olemassaolon, ei sitä että se ajetaan ilman vartiota; ylläpidetty skripti voi pitää kirjoituksen vartion sisällä, joka ohittaa sen. findmnt -no OPTIONS /proc/sys selvittää liitoksen suoraan, ja ro kyseisessä tulosteessa tarkoittaa, että jokainen kirjoitus tuon pisteen alapuolella hylätään, mitä skripti tahansa tekee. Sen jälkeen reittihaku näyttää, ratkaistaanko sovelluksen tarvitsema kohde tunneliliitännän vai kontin oletusyhdyskäytävän kautta. Oletusyhdyskäytävän valitseva haku tarkoittaa, että tunneli nousi eikä mikään reititä siihen, mikä on reititysongelma eikä oikeusongelma.
Mistä korjaus oikeastaan tulee
Ylläpidetty korjaus elää skriptissä, ei kontin lipuissa. upstream vpnc-script on muuttanut tapaa käsitellä tätä toimenpidettä, joten vertaa kuvan sisällä olevaa kopiota nykyiseen upstreamiin ja päivitä sen toimittaman paketin tai kuvakoonnin kautta. Käsin muokattu tiedosto käynnissä olevassa kontissa ei ole tarkistettavissa eikä selviä seuraavasta koontiversiosta.
--privileged on dokumentoitu myöntävän kaikki kyvykkyydet ja laajan laitekäytön, suuri myönnytys viestille, joka ei muuta mitään, joten nimeä puuttuva kyvykkyys, jos sellainen todella puuttuu. Päivityksen jälkeen toista reittihaku ja anna sovelluksen käyttää tunnelia, sillä hiljainen loki ja toimiva yhteys ovat erillisiä tuloksia.