Imate zahtjev koji se ne savija: suprotna strana mora primiti isti IP paket od 1,500 bajtova koji pošiljalac emituje, zajedno sa zaglavljima. Tunel ne može umotati taj paket plus sopstveno uokvirenje unutar drugog IP paketa od 1,500 bajtova, pa nešto u dizajnu mora popustiti. Redoslijed ispod je onaj koji koristim u prozoru promjena: zapišite budžet bajtova, dokažite šta donji sloj zaista može prenijeti, zatim odaberite tačno jedan mehanizam prijenosa i potvrdite unutrašnji paket na suprotnoj strani.

Zapišite budžet bajtova prije uređivanja profila

Enkapsulacija dodaje bajtove na nekoliko slojeva, a ukupan broj je svojstvo vašeg profila, a ne konstanta koju možete pronaći u dokumentaciji. Porodica adresa, izbor šifre, transportni protokol i bilo koja opcija kompresije ili uokvirenja mijenjaju broj, zato je oduzimanje prepisano iz druge instalacije bezvrijedno kao budžet. Pođite od unutrašnjeg zahtjeva, dodajte izmjereni trošak po paketu svoje konfiguracije i upišite rezultujuću vanjsku veličinu u tiket za promjenu prije nego što bilo ko uredi datoteku.

Dva broja određuju dizajn: najveći vanjski paket koji put prenosi bez fragmentacije i dodatni bajtovi koje vaša enkapsulacija traži. Kada je prvi manji od drugog plus 1,500, jedan od njih se mora promijeniti. Izbor je tada uzak, a ne kreativan, zato oba broja zapisujem prije rasprave o opcijama. Ništa na sloju tunela ne kompresuje te bajtove i nijedan cijeli broj MTU ne uklanja zahtjev koji ste dobili.

Provjerite donji sloj pingovima sa zabranom fragmentacije

Mjerite put umjesto da vjerujete MTU-u interfejsa, jer je najmanja karika na vanjskom putu ona koja je bitna. Na Linuxu -M do postavlja bit zabrane fragmentacije, a -s uzima ICMP nosivi teret, pa okvir od 1,500 bajtova odgovara na 1,472 bajta nosivog tereta nakon što se oduzmu IP zaglavlje od 20 bajtova i ICMP zaglavlje od 8 bajtova. Povećavajte nosivi teret dok provjera ne padne, zatim skočite na jumbo veličinu da vidite prenosi li put to uopšte.

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

Put koji prolazi 1,472 i pada na 8,972 ne može prenijeti unutrašnji paket od 1,500 bajtova plus trošak u jednom vanjskom paketu. To je odgovor koji vam je trebao prije otvaranja VPN konfiguracije. On takođe određuje koji se od sljedeća dva odjeljka odnosi na vas, zato držite dva rezultata provjere uz tiket. Pogađanje ovdje košta jednog prozora za održavanje, jer tunel koji se prijavljuje kao aktivan ne govori ništa o najvećem paketu koji će put prihvatiti.

Podignite MTU puta samo tamo gdje se svaki hop slaže

Jumbo okviri su svojstvo od kraja do kraja, a ne postavka koju uključujete na dvije krajnje tačke koje slučajno kontrolišete. Svaki prekidač, ruter i predaja kod provajdera na vanjskom putu moraju se složiti o većoj veličini, a jedna jedina karika od 1,500 bajtova tiho će odbaciti paket koji ste upravo povećali. Podizanje samo lokalnog interfejsa je klasična polovična promjena zbog koje tunel izgleda pokvaren dok donji sloj tiho ispušta.

ip link set dev eth1 mtu 9000
ip link show dev eth1
ping -M do -s 8972 -c 2 198.51.100.10

Promijenite interfejs, pa ponovo provjerite isti put prije nego što promijenite bilo šta drugo. Ako provjera još uvijek pada, vratite sa ip link set dev eth1 mtu 1500 i pređite na fragmentaciju umjesto da se raspravljate s provajderom o karici koju ne posjedujete.

Koristite fragmentaciju tunela kada donji sloj ne može rasti

Podržani mehanizam fragmentacije ispod unutrašnjeg paketa omogućava nekoliko vanjskih paketa da nose jedan unutrašnji paket, a udaljena krajnja tačka tunela ih ponovo sastavlja prije nego što original preda steku. Opcija UDP fragmentacije Community OpenVPN-a jedna je implementacija te ideje i nije isto što i obična IP fragmentacija vanjskog paketa. Oba partnera moraju pokretati verziju koja podržava format, a put podataka mora biti onaj koji mislite da jeste: OpenVPN 3 klijenti i kanali podataka ubrzani u kernelu imaju različita ograničenja, pa profil koji radi na jednom klijentu može pasti na drugom.

openvpn --config client.ovpn --tun-mtu 1500 --fragment 1400 --verb 4

Obična vanjska fragmentacija je druga opcija i slabija je. IPv6 ruteri uopšte ne fragmentiraju proslijeđeni paket, pa preveliki vanjski paket jednostavno umre i pošiljalac to sazna samo ako relevantna ICMPv6 poruka preživi put. Fragmenti takođe pozivaju filtriranje i pojačanje gubitaka, zato to tretiram kao rezervnu opciju, a ne kao plan.

Vanjski nosač zasnovan na toku zaobilazi pitanje veličine segmentiranjem sopstvenog toka bajtova, a rekonstruisani unutrašnji paket i dalje može biti 1,500 bajtova. To je transportna odluka s vlastitom cijenom, uključujući poznato ponašanje TCP-a unutar TCP-a, zato je donesite namjerno, a ne kao nuspojavu rasprave o MTU-u.

Potvrdite da unutrašnji paket stiže nepromijenjen

Provjera nije uspješan rukovanje. Snimite interfejs tunela na oba kraja i uporedite veličinu i sadržaj paketa koji je aplikacija zaista poslala s onim koji je udaljena strana primila.

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'

Ako snimak pokaže unutrašnji paket pune veličine na udaljenoj strani, izbor prijenosa radi i ostaje samo da ga zabilježite. Ako ne pokaže ništa dok se tunel prijavljuje kao aktivan, vanjski paket se odbacuje negdje između krajnjih tačaka, što vas vraća na provjeru, a ne na postavke šifre.

Zapišite tri stvari u tiket prije zatvaranja: izmjereni vanjski budžet, mehanizam koji ste odabrali i komandu koja je dokazala da je unutrašnji paket preživio. Sljedećoj osobi koja dotakne ovaj tunel trebat će sve tri, i nijedna se ne može rekonstruisati samo iz konfiguracijske datoteke.

Povezani članci