IPsec товар: режимот, NAT-T и алгоритмите сето тоа го менуваат
Една објавена бројка за товарот опишува една инкапсулација на една патека. Соберете ги заглавјата за кои вашиот тунел навистина се договара, потоа измерете ја патеката.
Некаде во некој водич има број, обично меѓу шеесет и осумдесет бајти, кој некој го одзел од 1500 за да добие MTU на интерфејсот. Тој број опишува една конкретна инкапсулација на една конкретна патека. Сменете го режимот, надворешното семејство адреси, шифрата или присуството на NAT и сметката повеќе не важи за вашиот тунел.
Бројката дојде од друг тунел
Товарот не е својство на IPsec во апстрактен смисла. Тоа е својство на пакетот што навистина се гради: договорен режим, надворешно заглавје, заштитно заглавје, полнење, поле за интегритет и можеби дополнителна UDP обвивка.
Бројка наведена за транспортен режим со IPv4 и без NAT опишува помал пакет од тунелскиот режим со IPv6 под премин на NAT. Двете се точни за својот случај. Копирањето на едната од нив во друго распоредување е начинот на кој луѓето завршуваат со MTU што ги крши големите преноси. Дефектот е тивок, бидејќи малите барања продолжуваат да работат.
Соберете ги слоевите што навистина постојат
Започнете од надворешното IP заглавје и движете се навнатре. Во тунелски режим оригиналниот пакет е внатре, па надворешното заглавје е додаток, а не замена. RFC 4303 го опишува ESP заглавјето, полнењето и податоците за интегритет што следат по него.
| Layer | What it adds | When it applies |
|---|---|---|
| Outer IP header | 20 bytes for IPv4, 40 for IPv6 | Always, and 40 rather than 20 if the outer path is v6 |
| ESP header | 8 bytes of SPI and sequence number | Always |
| Block cipher IV | 8 to 16 bytes depending on the transform | When the negotiated cipher uses one |
| Padding and trailer | Padding to the block size, plus two trailer bytes | Always, and the amount varies with payload length |
| Integrity data | 12 to 16 bytes for common authenticated ciphers | When integrity protection is negotiated |
| UDP encapsulation | 8 bytes | NAT traversal on port 4500, which is common for clients behind NAT |
Ниту еден од тие редови не е константен меѓу распоредувањата, а редот со полнење не е константен ни во едно распоредување. Тоа е целата причина зошто една објавена бројка за товарот разочарува.
Две локации можат да не се согласат за истиот тунел
Заштитениот пакет сепак мора да ја премине надворешната патека, а надворешната патека не е иста насекаде. PPPoE пристапната врска носи помалку од чист Ethernet сегмент. Мобилната мрежа може да се намали дополнително, а провајдерот што го тунелира сопствениот сообраќај додава уште една инкапсулација што никој не ја спомна. Тунел што работи на една врска и не успева на друга ја опишува втората врска, а не протоколот.
И двете насоки можат да се разликуваат. Асиметричната рута може да ви даде испраќање што работи и преземање што заглавува, што се чита како проблем на апликацијата додека не погледнете големините на пакетите наместо достапноста. Успешен мал ping докажува многу малку за одговор со полна големина.
Измерете наместо да одземате
Најдете ја најголемата датаграма што ја преживува патеката. Потоа споредете ја со вредноста што ја пријавува интерфејсот:
ip link show eth0 | grep -o 'mtu [0-9]*' ip xfrm state list ping -M do -s 1400 198.51.100.7 ping -M do -s 1372 198.51.100.7 tcpdump -ni any -c 20 'esp or udp port 4500'
Намалувајте ја големината на ping додека не почнат да пристигнуваат одговори, и сметајте ја најголемата работна вредност за буџет на таа патека. Излезот од xfrm ви кажува кој режим и кои алгоритми се договорени, а тоа е влезот за секоја чесна пресметка. Снимањето потврдува дали на жицата има ESP или ESP завиткан во UDP, и тоа го решава прашањето со NAT без погодување.
Одвојте една вредност и за контролната рамнина. IKE пакетите за ракување имаат поинаква структура од податочните пакети, па големината изведена од снимање на ракување не е MTU на податочната рамнина.
Ставете ја бројката таму каде што и е местото
За TCP низ тунел, ограничувањето на MSS е често најмалку инвазивната контрола, бидејќи го намалува тоа што го испраќаат крајните точки без да го менува самиот тунел. За тунел заснован на рути, поставете го MTU на тунелскиот интерфејс намерно и документирајте зошто. Ако го направите и двете одеднаш и потоа мерите, не добивате никаква информација за тоа што помогнало.
Држете ги заедно во тикетот договорениот режим, надворешното семејство, состојбата на NAT и симптомот што може да се повтори. Запишан сет од четири факти победува запаметена константа, и тоа е единствената верзија од ова што ја преживува следната надградба на клиентот.