Kodėl viso ICMP blokavimas sugriauna veikiantį VPN kelią
Dydžio grįžtamojo ryšio pranešimai nėra ping atsakymai. Kai jie niekada neateina, maži paketai praeina, dideli dingsta, o tunelis atrodo tarsi virpantis.
Tunelis, kuris autentifikuojasi, perneša ping ir tada užstringa pirmame dideliame perdavime, yra klasikinis trūkstamo ICMP pranešimo požymis, o ne sugedusio VPN. Siuntėjas niekada nesužino, kad paketas buvo per didelis, kartoja tą patį dydį, o programa laukia. Tai taisyti yra ugniasienės politikos sprendimas, o ne kliento perinstaliavimas. Tvarka svarbi: išmatuokite, kur yra dydžio riba, tada susiaurinkite taisyklę, kuri prarijo ataskaitą.
Ką ICMP iš tikrųjų perneša šiame kelyje
IPv4 kelio MTU aptikimas remiasi tuo, kad maršrutizatorius praneša, jog paketo su nustatytu don't-fragment bitu persiųsti nepavyko. Tas pranešimas yra ICMP Fragmentation Needed, o be jo siuntėjas neturi priežasties mažinti segmento dydį. IPv6 griežtesnis: maršrutizatoriai tranzite nedalina, todėl ICMPv6 Packet Too Big pranešimas yra vienintelis signalas, verčiantis siuntėją mažėti.
Abu pranešimai yra valdymo plokštumos grįžtamasis ryšys, ir nė vienas nėra diagnostinis aidas. Politika, blokuojanti ping, ir politika, blokuojanti visą ICMP, taisyklių sąraše atrodo panašiai, bet tinkle elgiasi labai skirtingai. Antroji gali paversti teisingai suderintą tunelį vienkrypte keliu viskam, kas didesnė už mažiausią grandį grandinėje.
Kai kurie transportai savo aptikimą įgyvendina zondiniais paketais, kaip aprašo RFC 4821, ir jie mažiau priklauso nuo šio grįžtamojo ryšio. Tai argumentas patikrinti, kokį transportą naudojate, o ne manyti, kad kiekvienas tunelis yra imunitetas.
| Pranešimas | Paskirtis kelyje | Jei užblokuota |
|---|---|---|
| ICMPv4 tipas 3 kodas 4 | Paketas buvo per didelis kitai grandžiai | Siuntėjas kartoja ir užstringa |
| ICMPv6 tipas 2 | Packet Too Big, IPv6 atitikmuo | Ta pati strigtis, be skaidymo atsarginio varianto |
| ICMP tipas 11 | Laikas viršytas, naudoja traceroute | Diagnostika praranda šuolius, srautas teka toliau |
| ICMP aido užklausa ir atsakymas | Pasiekiamumo testas | Ping nepavyksta, kelias gali būti tvarkingas |
Gedimas priklauso nuo dydžio
Paklauskite, ar gedimas koreliuoja su paketo dydžiu. Prisijungimo puslapis, DNS užklausa ir trumpas API iškvietimas praeina, o failo įkėlimas, didelis atsakymas ar vaizdo atsisiuntimas užstringa. Šis modelis rodo į dydžio ribą kažkur tarp abiejų galų, o ne į autentifikavimą ar maršrutizavimą. Sėkmingas mažas ping beveik nieko nesako apie tai, kur ta riba yra.
Tunelio viduje reikia atsižvelgti į du sluoksnius: naudingosios apkrovos paketą ir išorinį inkapsuliuotą paketą. Vidinis siuntėjas gali elgtis teisingai, kol išorinis kelias yra mažesnis, nei tunelis daro prielaidą, todėl svarbu ir paties tunelio MTU nustatymas, ir po juo esanti fizinė grandis.
Išmatuokite prieš redaguodami taisykles
Tyrinėkite su don't-fragment bitu ir jūsų pasirinktu naudingosios apkrovos dydžiu, nuo sutrikusio kliento link apsaugoto adreso:
ping -M do -s 1472 10.20.5.7
ping -M do -s 1300 10.20.5.7
1472 baitų naudingoji apkrova plius 28 baitai antraščių sudaro 1500 baitų paketą. Jei didelis zondas nepavyksta su skaidymo klaida, o mažesnis praeina, radote ribą; atsižvelkite į tunelio pridėtines išlaidas ir kartokite, kol veikiantis dydis stabilizuosis.
Tada patvirtinkite, kad tarpas yra pati ataskaita. Jei zondas nepavyksta tyliai, be klaidos ir be atsakymo, pranešimas greičiausiai metamas, o ne pristatomas, ir įtariamasis yra taisyklė.
Susiaurinkite taisyklę, tada dar kartą patikrinkite užduotį
Pataisa turėtų leisti konkrečius valdymo pranešimus, o ne visą protokolą. Iptables pagrindinėje formoje tai yra konkretaus tipo leidimas; pritaikykite sintaksę tam, kas valdo ugniasienę jūsų platformoje:
iptables -I INPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT
ip6tables -I INPUT -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
Palikite aido atsakymus užblokuotus, jei tai vietinė politika, nes keliui jų nereikia. Tada dar kartą patikrinkite iš pradžių nepavykusį perdavimą iš naujos jungties ir patvirtinkite, kad taisyklės skaitikliai rodo ateinančius pranešimus.
Jei didelis perdavimas vis dar stringa leidus pranešimus, likusi riba yra kitur: per aukštai nustatytas tunelio MTU, paketus perrašantis proxy arba tarpinis įrenginys, kuris meta, o ne praneša. ICMP taisyklė buvo būtina, bet nepakankama.