Проблемы l2tp от Beeline
Сервер подключен к интернету посредством l2tp, провайдер beeline.
При скачивании больших файлов (>10 мегабайт) в какой-то момент скачка зависает навсегда.
Зависает и на apache, и на nginx, и на 0W. Т.е. дело не в веб-сервере.
Все прекрасно отдается в рамках локальной домашней сети.
Конфиги:
ifconfig
dhclient
xl2tpd
conf.d/net
В messages иногда появляется вот такое:
Nov 12 05:51:17 crits xl2tpd[16127]: handle_avps: handling avp's for tunnel 41923, call 1713400933
Nov 12 05:51:17 crits xl2tpd[16127]: message_type_avp: message type 6 (Hello)
Nov 12 05:51:17 crits xl2tpd[16127]: control_finish: message type is Hello(6). Tunnel is 23174, call is 0.
Но с зависанием скачки по времени не совпадает.
Я полночи искал схожие проблемы и решения на форумах и нашел лишь упоминание, что подобное случается, когда mtu локальной сети стоит 576 при mtu ppp в 1400+.
Попытки поменять mtu локальной сети оказались тщетны. Если я убираю interface-mtu из dhclient.conf, то mtu остается 1500 и при этом почему-то не ресолвятся адреса (т.е. tp.internet.beeline.ru - неизвестный хост):
Nov 12 04:52:58 crits xl2tpd[16115]: Y: Host name lookup failed for tp.internet.beeline.ru. Trying to look again in 5 seconds.
Если я добавляю в conf.d/net mtu_lan=1460, то хосты ресолвятся, но ppp падает:
Nov 12 05:36:36 crits pppd[16135]: No response to 8 echo-requests
Nov 12 05:36:36 crits pppd[16135]: Serial link appears to be disconnected.
Nov 12 05:36:36 crits pppd[16135]: Connect time 0.5 minutes.
Nov 12 05:36:36 crits pppd[16135]: Sent 1940800576 bytes, received 0 bytes.
Nov 12 05:36:36 crits dhcpcd[15883]: ppp0: carrier lost
Звонил в техподдержку Билайна, они говорят, что mtu у них 1460 везде, но, кмк, они заблуждаются.
Может быть дело и не в mtu, но я даже не знаю, где копать.
Файл для примера: http://trash.crits.ru/VTMBup88.exe
- Для комментирования войдите или зарегистрируйтесь
> Попытки поменять mtu
> Попытки поменять mtu локальной сети оказались тщетны. Если я убираю interface-mtu из dhclient.conf, то mtu остается 1500 и при этом почему-то не ресолвятся адреса
На lan емнип должно быть 1500. То, почему не резолвятся адреса надо копать глубже. Сам хук на dhcp есть (см. тут)?
Долго разбирался с роутингом.
Долго разбирался с роутингом. В общем, первый рекомендуемый на форумах Билайна метод привел к адской путанице в таблице маршрутизации.
Обязательно надо убрать defaultroute из /etc/ppp/options.l2tp
И, похоже, у Билайна новые маршруты: в рекомендуемом варианте жестко прошито всего 4, а их уже 7.
Короче, метод из вики однозначно лучше, но в нем тоже не все хорошо:
- утилита ip в дефолтные пакеты не входит, но ее было просто найти: sys-apps/iproute2
- в /sbin на нее ссылки нет.
- скрипт для /etc/ppp/ip-up.d/ содержит ту же болезнь, что и в скриптах на форуме Билайна - если в таблице маршрутизации содержится несколько подходящих под grep результатов, то все фейлится. У меня в таблице маршрутизации почему-то было так:
default via 10.233.40.1 dev lan
default via 10.233.40.1 dev lan metric 2
Естественно, DEF=`/sbin/ip route |grep default| gawk '{print $3}'` получал чушь. Я некоторое время пытался понять, откуда берется вторая запись, но не нашел. Хук, вроде как, вешает лишь одну:
Nov 13 08:46:15 crits dhcpcd[16770]: lan: successfuly executed 'route add default gw 10.233.40.1'
В итоге, переписал скрипт на перле, заодно добавил туда защиту от повторного запуска при восстановлении соединения:
/etc/ppp/ip-up.d/fixroute.pl
# cat /etc/ppp/ip-up.d/fixroute.sh
#!/bin/sh
perl ./fixroute.pl
В общем, после всех этих увлекательных упражнений я получил MTU в локалке 1500, актуальную таблицу маршрутизации и исчезли (возможно) проблемы с повисанием закачек. Я проверил с одного внешнего IP и все работает.
Но если у вас трафик бесплатный и есть пара минут, то проверьте, пожалуйста, как subj качается.
Еще вопрос...
Раньше у меня запускался /etc/init.d/net.ppp0, а в этом варианте его нет. У меня есть некие сервисы, которые должны стартовать лишь после появления доступа к интернету, иначе они не смогут слушать нужные адреса. Я написал для них свой простенький rc-script в депенде которого был net.ppp0. А как мне теперь определить в рамках синтаксиса rc-скрипта, что интернет таки доступен?