Зашто блокирање целог ICMP квари исправну VPN путању
Поруке повратне информације о величини нису одговори на ping. Када никада не стигну, мали пакети пролазе, велики нестају, а тунел изгледа као да трепери.
Тунел који прође аутентикацију, пренесе ping и затим се заглави на првом великом преносу класичан је знак недостајуће ICMP поруке, а не поквареног VPN-а. Пошиљалац никада не сазна да је пакет био превелик, понавља исту величину, а апликација чека. Поправка је одлука о политици заштитног зида, не поновна инсталација клијента. Редослед је важан: измерите где је граница величине, па сузите правило које је прогутало извештај.
Шта ICMP заиста носи на овој путањи
Откривање MTU путање IPv4 ослања се на то да рутер пријави да пакет са постављеним don't-fragment битом није могао бити прослеђен. Тај извештај је ICMP Fragmentation Needed порука, а без ње пошиљалац нема разлога да смањи величину сегмента. IPv6 је строжи: рутери не фрагментишу у транзиту, па је ICMPv6 Packet Too Big порука једини сигнал који тера пошиљаоца да се смањи.
Обе поруке су повратна информација контролне равни и ниједна није дијагностички ехо. Политика која блокира ping и политика која блокира сав ICMP изгледају слично на списку правила, али се на мрежи понашају веома различито. Друга може претворити исправно димензионисан тунел у једносмерну путању за све веће од најмање везе у ланцу.
Неки транспорти сами спроводе откривање пробним пакетима, како описује RFC 4821, и они мање зависе од ове повратне информације. То је аргумент да проверите који транспорт користите, а не да претпоставите да је сваки тунел имун.
| Порука | Сврха на путањи | Ако је блокирана |
|---|---|---|
| ICMPv4 тип 3 код 4 | Пакет је био превелик за следећу везу | Пошиљалац стално понавља и заглави |
| ICMPv6 тип 2 | Packet Too Big, еквивалент за IPv6 | Исто заглављивање, без резерве за фрагментацију |
| ICMP тип 11 | Време истекло, користи га traceroute | Дијагностика губи скокове, саобраћај и даље тече |
| ICMP захтев за ехо и одговор | Тест доступности | Ping не успева, путања може бити исправна |
Квар зависи од величине
Питајте да ли квар корелира са величином пакета. Страница за пријаву, DNS упит и кратак API позив пролазе, док се пренос датотеке, велики одговор или преузимање слике заглављују. Тај образац указује на ограничење величине негде између два краја, а не на аутентикацију или рутирање. Успешан мали ping готово ништа не говори о томе где је та граница.
Унутар тунела треба размотрити два слоја: пакет корисног терета и спољашњи инкапсулирани пакет. Унутрашњи пошиљалац се може понашати исправно док је спољашња путања мања него што тунел претпоставља, зато су важни и сопствено MTU подешавање тунела и физичка веза испод њега.
Измерите пре уређивања правила
Проверите са don't-fragment битом и величином терета коју сами одаберете, од неисправног клијента према заштићеној адреси:
ping -M do -s 1472 10.20.5.7
ping -M do -s 1300 10.20.5.7
Терет од 1472 бајта плус 28 бајтова заглавља чини пакет од 1500 бајтова. Ако велика проба не успе са грешком фрагментације, а мања прође, пронашли сте границу; прилагодите за додатни трошак тунела и понављајте док радна величина не постане стабилна.
Затим потврдите да је празнина сам извештај. Ако проба не успе тихо, без грешке и без одговора, порука се вероватно одбацује, а не доставља, и правило је осумњичено.
Сузите правило, па поново тестирајте задатак
Исправка треба да дозволи одређене контролне поруке, а не цео протокол. На хосту са iptables облик је дозвола за одређени тип; прилагодите синтаксу ономе што управља заштитним зидом на вашој платформи:
iptables -I INPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT
ip6tables -I INPUT -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
Оставите ехо одговоре блокиранима ако је то локална политика, јер путањи не требају. Затим поново тестирајте пренос који је изворно неуспео, из нове везе, и потврдите да бројачи правила показују долазак порука.
Ако се велики пренос и даље заглављује након што су поруке дозвољене, преостало ограничење је другде: превисоко постављен MTU тунела, прокси који преписује пакете или посредни уређај који одбацује уместо да извести. ICMP правило је било неопходно, али не и довољно.