Tunneli, joka todennuksen jälkeen kuljettaa pingin ja sitten jumiutuu ensimmäisessä suuressa siirrossa, on klassinen merkki puuttuvasta ICMP-viestistä eikä rikkinäisestä VPN:stä. Lähettäjä ei koskaan saa tietää paketin olleen liian suuri, toistaa saman koon ja sovellus odottaa. Korjaaminen on palomuurikäytännön päätös, ei asiakkaan uudelleenasennus. Järjestyksellä on väliä: mittaa, missä kokoraja on, ja kavenna sitten sääntöä, joka nieli raportin.

Mitä ICMP oikeastaan kuljettaa tällä reitillä

IPv4-reitin MTU-havainnointi nojaa siihen, että reititin ilmoittaa, ettei pakettia, jossa on don't-fragment-bitti asetettuna, voitu välittää eteenpäin. Tämä ilmoitus on ICMP Fragmentation Needed -viesti, ja ilman sitä lähettäjällä ei ole syytä pienentää segmenttikokoaan. IPv6 on tiukempi: reitittimet eivät pilko siirron aikana, joten ICMPv6 Packet Too Big -viesti on ainoa signaali, joka saa lähettäjän kutistumaan.

Molemmat viestit ovat ohjaustason palautetta, eikä kumpikaan ole diagnostinen kaiku. Pingin estävä käytäntö ja kaiken ICMP:n estävä käytäntö näyttävät sääntöluettelossa samanlaisilta mutta käyttäytyvät verkossa hyvin eri tavoin. Jälkimmäinen voi muuttaa oikein mitoitetun tunnelin yksisuuntaiseksi reitiksi kaikelle, mikä on ketjun pienintä lenkkiä suurempaa.

Jotkin kuljetuskerrokset toteuttavat oman havainnointinsa luotauspaketeilla, kuten RFC 4821 kuvaa, ja ne ovat vähemmän riippuvaisia tästä palautteesta. Se on peruste tarkistaa, mitä kuljetusta ajat, ei olettaa jokaisen tunnelin olevan immuuni.

ViestiTarkoitus reitilläJos estetty
ICMPv4 tyyppi 3 koodi 4Paketti oli liian suuri seuraavalle lenkilleLähettäjä toistaa ja jumiutuu
ICMPv6 tyyppi 2Packet Too Big, IPv6:n vastineSama jumiutuminen, ilman pilkkomisen varavaihtoehtoa
ICMP tyyppi 11Aika ylitetty, traceroute käyttääDiagnostiikka menettää hyppyjä, liikenne virtaa silti
ICMP-kaikupyyntö ja -vastausTavoitettavuustestiPing epäonnistuu, reitti voi olla kunnossa

Vika riippuu koosta

Kysy, korreloiko vika paketin kokoon. Kirjautumissivu, DNS-kysely ja lyhyt API-kutsu onnistuvat, kun taas tiedoston lataus, suuri vastaus tai kuvan lataus jumiutuu. Tämä kuvio viittaa kokorajaan jossakin kahden pään välissä, ei todennukseen tai reititykseen. Onnistunut pieni ping ei kerro juuri mitään siitä, missä tuo raja on.

Tunnelin sisällä on kaksi kerrosta: hyötykuormapaketti ja ulompi kapseloitu paketti. Sisempi lähettäjä voi käyttäytyä oikein, vaikka ulompi reitti on pienempi kuin tunneli olettaa, ja siksi sekä tunnelin oma MTU-asetus että sen alla oleva fyysinen lenkki merkitsevät.

Mittaa ennen sääntöjen muokkaamista

Luotaa don't-fragment-bitillä ja itse valitsemallasi hyötykuorman koolla, viallisesta asiakkaasta suojattua osoitetta kohti:

ping -M do -s 1472 10.20.5.7
ping -M do -s 1300 10.20.5.7

1472 tavun hyötykuorma plus 28 tavua otsikoita on 1500 tavun paketti. Jos suuri luotaus epäonnistuu pilkkomisvirheeseen ja pienempi menee läpi, olet löytänyt rajan; säädä tunnelin ylimääräisten otsikoiden mukaan ja toista, kunnes toimiva koko vakiintuu.

Varmista sitten, että aukko on itse raportti. Jos luotaus epäonnistuu äänettömästi, ilman virhettä ja vastausta, viesti todennäköisesti pudotetaan eikä toimiteta, ja epäilty on sääntö.

Kavenna sääntöä ja testaa tehtävä uudelleen

Korjauksen pitäisi sallia tietyt ohjausviestit, ei koko protokollaa. iptables-isännässä muoto on tyyppikohtainen sallinta; sovita syntaksi siihen, mikä hallinnoi palomuuria alustallasi:

iptables -I INPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT
ip6tables -I INPUT -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT

Jätä kaikuvastaukset estetyiksi, jos se on paikallinen käytäntö, sillä reitti ei tarvitse niitä. Testaa sitten alun perin epäonnistunut siirto uudelleen uudesta yhteydestä ja varmista, että säännön laskurit näyttävät viestien saapuvan.

Jos suuri siirto jumiutuu yhä sen jälkeen, kun viestit on sallittu, jäljellä oleva raja on muualla: liian korkealle asetettu tunnelin MTU, paketteja uudelleenkirjoittava välityspalvelin tai välilaite, joka pudottaa ilmoittamisen sijaan. ICMP-sääntö oli välttämätön, ei riittävä.

Aiheeseen liittyvät artikkelit