[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Косяк с фрагментацией пакетов в ppp и размером MTU/MRU. (pppd, pptpd, pppoe, mtu, mru, mss, fragment)



Хай Олл.

В общем-то речь про очередной косяк ppp :) - с которым многие мучаются и ответы я нашел только в какой-то из буржуйских рассылок. (Хотя сейчас еще раз поискал зная уже нужные слова и нашел во многих других местах, но тем не менее решил запостить сие письмо сюда -
может кому пригодится.)

В общем если на Debian etch 4.0 сделаете vpn сервер, то выяснится что некоторые сайты при подключении по такому соединению не открываются в принципе из-за маленького размера MTU/MRU и соответственно попыткой фрагментировать пакеты. Однако некоторые сайты отдают пакеты с флагом dont fragment (ну например yandex) и эта фрагментация обламывается..... в результате расследования выяснилось что какой-бы MRU/MTU не выставляли в конфиге - pppd договаривается с виндовыми машинами (Linux не пробовал тогда) на меньший размер (не помню на вскидку какой) и первым моим решением было добавить в /etc/ppp/ip-up.d скрипт которы с помощью ifconfig изменял-бы MTU/MRU на уже поднятом ppp интерфейсе. Это помогло но было в принципе криво, дальнейшие раскопки привели к вот такому решению:

/sbin/iptables -A FORWARD -i ppp+ -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1301:65535 -j TCPMSS --set-mss 1300 /sbin/iptables -A FORWARD -o ppp+ -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1301:65535 -j TCPMSS --set-mss 1300

Это решение позволило расслабиться, но однажды на своей домашней машине на которой я настраивал pppoe с помощью pppoeconf обнаружилось более другое решение (хотя оно приводит в итоге к большему количеству правил при большом
количестве ppp интерфейсов)

/etc/init.d/ip-up.d/0clampmss
--------------------------------------------------------------------------------------------
#!/bin/sh
# Enable MSS clamping (autogenerated by pppoeconf)

iptables -t mangle -o "$PPP_IFACE" --insert FORWARD 1 -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu
--------------------------------------------------------------------------------------------


/etc/init.d/ip-down.d/0clampmss
--------------------------------------------------------------------------------------------
#!/bin/sh
# Disable MSS clamping (autogenerated by pppoeconf)

iptables -t mangle -L -n -v --line-numbers | grep "TCPMSS.*$PPP_IFACE.*clamp" | cut -f1 -d " " | xargs -n1 -r iptables -t mangle -D FORWARD
--------------------------------------------------------------------------------------------

Как видно проблема решается немного разными способами, и я пока затрудняюсь ответить какой из способов более правильный (как в плане архитектуры решения так и в плане самого принципа - в одном месте mss выставляется фиксированным, в другом как
я понял он выставляется равным mtu)

Вот в общем-то, может кому пригодится. Проблема опять-же из разряда - "косяк из коробки".


Олег.


Reply to: