Kuljeta kiinteä 1,500 tavun sisäpaketti VPN:n läpi
Kiinteä 1,500 tavun sisäpaketti ei mahdu 1,500 tavun ulompaan polkuun. Mittaa ylikuorma ja valitse sitten suurempi alla olevan verkon MTU tai tuettu pirstoutuminen.
Sinulla on vaatimus, joka ei taivu: kaukokään on saatava sama 1,500 tavun IP-paketti, jonka lähettäjä lähettää, otsikot mukaan lukien. Tunneli ei voi kääriä sitä pakettia ja omaa kehystystään toisen 1,500 tavun IP-paketin sisään, joten jossain suunnittelussa on annettava periksi. Alla oleva järjestys on se, jota käytän muutosikkunassa: kirjoita tavubudjetti, todista mitä alla oleva verkko todella pystyy kuljettamaan, valitse sitten täsmälleen yksi kuljetusmekanismi ja vahvista sisempi paketti kaukopäässä.
Kirjoita tavubudjetti ennen profiilin muokkaamista
Kehystys lisää tavuja usealla kerroksella, ja summa on profiilisi ominaisuus eikä vakio, jonka voisi etsiä. Osoiteperhe, salauksen valinta, kuljetusprotokolla ja mikä tahansa pakkaus- tai kehystysvaihtoehto muuttavat lukua, minkä vuoksi toisesta käyttöönotosta kopioitu vähennyslasku on arvoton budjettina. Aloita sisemmästä vaatimuksesta, lisää oman kokoonpanosi mitattu pakettikohtainen ylikuorma ja kirjoita tuloksena oleva ulompi koko muutostikettiin ennen kuin kukaan muokkaa tiedostoa.
Kaksi lukua ratkaisevat suunnittelun: suurin ulompi paketti, jonka polku kuljettaa ilman pirstoutumista, ja lisätavut, jotka kehystys tarvitsee. Kun ensimmäinen on pienempi kuin toinen plus 1,500, toisen on muututtava. Valinta on silloin kapea eikä luova, minkä vuoksi kirjoitan molemmat luvut muistiin ennen vaihtoehtojen käsittelyä. Mikään tunnelikerroksella ei pakkaa niitä tavuja pois, eikä yksikään MTU-kokonaisluku poista sinulle annettua vaatimusta.
Kokeile alla olevaa verkkoa pirstoutumiskiellon ping-viesteillä
Mittaa polku sen sijaan että luottaisit liitännän MTU:hun, koska ulomman polun pienin lenkki ratkaisee. Linuxissa -M do asettaa pirstoutumiskiellon bitin ja -s ottaa ICMP-hyötykuorman, joten 1,500 tavun kehys vastaa 1,472 tavun hyötykuormalla, kun 20 tavun IP-otsikko ja 8 tavun ICMP-otsikko on vähennetty. Kasvata hyötykuormaa, kunnes koe epäonnistuu, ja hyppää sitten jumbo-kokoon nähdäksesi, kuljettaako polku sitä lainkaan.
ping -M do -s 1472 -c 2 198.51.100.10 ping -M do -s 8972 -c 2 198.51.100.10 tracepath -n 198.51.100.10
Polku, joka läpäisee 1,472 ja epäonnistuu 8,972:ssa, ei pysty kuljettamaan 1,500 tavun sisempää pakettia plus ylikuormaa yhdessä ulommassa paketissa. Se on vastaus, jonka tarvitsit ennen VPN-kokoonpanon avaamista. Se ratkaisee myös, kumpi kahdesta seuraavasta osasta koskee sinua, joten pidä kaksi koetulosta tiketin vieressä. Arvaaminen täällä maksaa yhden huoltoikkunan, koska tunneli, joka ilmoittaa olevansa käyttökunnossa, ei kerro mitään suurimmasta paketista, jonka polku hyväksyy.
Nosta polun MTU:ta vain siellä, missä jokainen hyppy on samaa mieltä
Jumbo-kehykset ovat ominaisuus päästä päähän, eivät asetus, jonka kytket päälle kahdessa päätepisteessä, joita satut hallitsemaan. Jokaisen kytkimen, reitittimen ja operaattorin luovutuspisteen ulommalla polulla on hyväksyttävä suurempi koko, ja yksikin 1,500 tavun hyppy hylkää hiljaa paketin, jonka juuri suurensit. Vain paikallisen liitännän nostaminen on klassinen puolikas muutos, joka saa tunnelin näyttämään rikkinäiseltä, kun alla oleva verkko pudottaa hiljaa.
ip link set dev eth1 mtu 9000 ip link show dev eth1 ping -M do -s 8972 -c 2 198.51.100.10
Vaihda liitäntä ja kokeile sitten samaa polkua uudelleen ennen kuin muutat mitään muuta. Jos koe epäonnistuu edelleen, peruuta komennolla ip link set dev eth1 mtu 1500 ja siirry pirstoutumiseen sen sijaan että riitelisit operaattorin kanssa lenkistä, joka ei ole sinun.
Käytä tunnelin pirstoutumista, kun alla oleva verkko ei voi kasvaa
Sisemmän paketin alla tuettu pirstoutumismekanismi sallii usean ulomman paketin kuljettaa yhden sisemmän paketin, ja tunnelin kaukopää kokoaa ne uudelleen ennen alkuperäisen luovuttamista pinolle. Community OpenVPN:n UDP-pirstoutumisvaihtoehto on yksi tämän idean toteutus, eikä se ole sama asia kuin ulomman paketin tavallinen IP-pirstoutuminen. Molempien osapuolten on ajettava versiota, joka tukee muotoa, ja datapolun on oltava se, jota luulet: OpenVPN 3 -asiakkailla ja ytimessä kiihdytetyillä datakanavilla on erilaiset rajat, joten yhdellä asiakkaalla toimiva profiili voi epäonnistua toisella.
openvpn --config client.ovpn --tun-mtu 1500 --fragment 1400 --verb 4
Tavallinen ulompi pirstoutuminen on toinen vaihtoehto ja heikompi. IPv6-reitittimet eivät pirstouta välitettyä pakettia lainkaan, joten liian suuri ulompi paketti yksinkertaisesti kuolee ja lähettäjä saa tietää siitä vain, jos asianmukainen ICMPv6-viesti selviää polusta. Pirstaleet myös houkuttelevat suodatusta ja häviön vahvistumista, minkä vuoksi pidän sitä varasuunnitelmana enkä suunnitelmana.
Virtaperusteinen ulompi kuljettaja kiertää kokokysymyksen segmentoimalla oman tavuvirtansa, ja uudelleenrakennettu sisempi paketti voi yhä olla 1,500 tavua. Se on kuljetuspäätös, jolla on oma hintansa, mukaan lukien TCP:n tunnettu käyttäytyminen TCP:n sisällä, joten tee se tarkoituksella eikä MTU-väittelyn sivutuotteena.
Vahvista, että sisempi paketti saapuu muuttumattomana
Vahvistus ei ole onnistunut kättely. Kaappaa tunneliliitännällä molemmissa päissä ja vertaa sovelluksen todella lähettämän paketin kokoa ja sisältöä siihen, jonka kaukopää vastaanotti.
ip link show dev tun0 ping -M do -s 1472 -c 2 10.8.0.1 tcpdump -ni tun0 -c 5 'icmp and greater 1000'
Jos kaappaus näyttää täysikokoisen sisemmän paketin kaukopäässä, kuljetusvalinta toimii ja jäljellä on sen kirjaaminen. Jos se ei näytä mitään samalla kun tunneli ilmoittaa olevansa käyttökunnossa, ulompi paketti pudotetaan jossain päätepisteiden välissä, mikä lähettää sinut takaisin kokeeseen eikä salausasetuksiin.
Kirjaa tikettiin kolme asiaa ennen sen sulkemista: mitattu ulompi budjetti, valittu mekanismi ja komento, joka todisti sisemmän paketin selvinneen. Seuraava tähän tunneliin koskeva tarvitsee kaikki kolme, eikä mitään niistä voi rakentaa uudelleen pelkästään kokoonpanotiedostosta.