Prijenos fiksnog unutarnjeg paketa od 1,500 bajtova kroz VPN
Fiksni unutarnji paket od 1,500 bajtova neće stati u vanjski put od 1,500 bajtova. Izmjerite trošak, zatim odaberite veći MTU donjeg sloja ili podržanu fragmentaciju.
Imate zahtjev koji se ne savija: udaljena strana mora primiti isti IP paket od 1,500 bajtova koji odašilje pošiljatelj, zajedno sa zaglavljima. Tunel ne može zamotati taj paket plus vlastito uokvirenje unutar drugog IP paketa od 1,500 bajtova, pa nešto u dizajnu mora popustiti. Redoslijed ispod je onaj koji rabim u prozoru promjena: zapišite proračun bajtova, dokažite što donji sloj doista može prenijeti, zatim odaberite točno jedan mehanizam prijenosa i potvrdite unutarnji paket na udaljenoj strani.
Zapišite proračun 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 potražiti. Obitelj adresa, izbor šifre, transportni protokol i bilo koja opcija kompresije ili uokvirenja pomiču taj broj, zato je oduzimanje prepisano iz druge instalacije bezvrijedno kao proračun. Krenite od unutarnjeg zahtjeva, dodajte izmjereni trošak po paketu svoje konfiguracije i upišite dobivenu vanjsku veličinu u tiket za promjenu prije nego što itko uredi datoteku.
Dva broja odlučuju dizajn: najveći vanjski paket koji put prenosi bez fragmentacije i dodatni bajtovi koje vaša enkapsulacija treba. Kada je prvi manji od drugog plus 1,500, jedan od njih mora se promijeniti. Izbor je tada uzak, a ne kreativan, zato oba broja zapisujem prije rasprave o opcijama. Ništa na sloju tunela ne komprimira te bajtove i nijedan cijeli broj MTU ne uklanja zahtjev koji ste dobili.
Ispitajte donji sloj pingovima sa zabranom fragmentacije
Mjerite put umjesto da vjerujete MTU-u sučelja, jer je najmanja karika na vanjskom putu ona koja je važna. Na Linuxu -M do postavlja bit zabrane fragmentacije, a -s uzima ICMP teret, pa okvir od 1,500 bajtova odgovara na 1,472 bajta tereta nakon što se oduzmu IP zaglavlje od 20 bajtova i ICMP zaglavlje od 8 bajtova. Povećavajte teret dok provjera ne padne, zatim skočite na jumbo veličinu da vidite prenosi li put to uopće.
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 unutarnji 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đer određuje koji se od sljedeća dva odjeljka odnosi na vas, zato držite dva rezultata provjere uz tiket. Nagađanje ovdje stoji 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 skok slaže
Jumbo okviri su svojstvo od kraja do kraja, a ne postavka koju uključujete na dvije krajnje točke koje slučajno kontrolirate. Svaki preklopnik, usmjerivač i predaja kod pružatelja usluge 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 sučelja klasična je 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 sučelje, pa ponovno ispitajte isti put prije nego što promijenite bilo što drugo. Ako provjera još uvijek pada, vratite sa ip link set dev eth1 mtu 1500 i prijeđite na fragmentaciju umjesto da se prepirete s pružateljem usluge oko karike koju ne posjedujete.
Rabite fragmentaciju tunela kada donji sloj ne može rasti
Podržan mehanizam fragmentacije ispod unutarnjeg paketa dopušta nekoliko vanjskih paketa da nose jedan unutarnji paket, a udaljena krajnja točka tunela ponovno ih sastavlja prije nego što original preda stogu. Opcija UDP fragmentacije Community OpenVPN-a jedna je implementacija te ideje i nije isto što i obična IP fragmentacija vanjskog paketa. Obje strane moraju pokretati verziju koja podržava format, a put podataka mora biti onaj koji mislite da jest: OpenVPN 3 klijenti i podatkovni kanali 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 druga je opcija i slabija je. IPv6 usmjerivači uopće ne fragmentiraju proslijeđeni paket, pa prevelik vanjski paket jednostavno umre i pošiljatelj to sazna samo ako relevantna ICMPv6 poruka preživi put. Fragmenti također 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 vlastitog toka bajtova, a rekonstruirani unutarnji 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 unutarnji paket stiže nepromijenjen
Provjera nije uspješno rukovanje. Snimite sučelje tunela na oba kraja i usporedite veličinu i sadržaj paketa koji je aplikacija doista 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 snimka pokaže unutarnji 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 točaka, što vas vraća na provjeru, a ne na postavke šifre.
Zapišite tri stvari u tiket prije zatvaranja: izmjereni vanjski proračun, mehanizam koji ste odabrali i naredbu koja je dokazala da je unutarnji paket preživio. Sljedećoj osobi koja dotakne ovaj tunel trebat će sve tri, i nijedna se ne može rekonstruirati samo iz konfiguracijske datoteke.