вторник, 20 сентября 2016 г.

xl2tpd после подключения наглухо вешает систему

Вот так вот внезапно. Жили, не тужили, пользовались VPNкой, а тут здравствуйте: подключаемся, секунд 15 и полное зависание системы без сообщений о ошибках. За это время я успевал по привычке открыть remmina и попытаться подключиться. А так как собирал я ее из исходников, первой под горячую руку напрасно попала именно она - мол, что-то после обновлений сломалось. Почесав за ухом и убедившись, что все валится именно после поднятия подключения L2TP, а не ipsec задумался. Было бы еще над чем. В логах было пусто. Решил попробовать подключиться из консоли без Иксов. Что-то повалилось. Что-то содержало сообщение:
BUG: soft lockup - CPU#1 stuck for 23s! [pppd:<PID>]
Отсюда гуглится ВОТ ЭТО. Опять Арчеводы)) Оказывается, линь убивается выстрелом петлей в таблице маршрутизации. Поднялась ipsec-ассоциация до узла 1.2.3.4, поднялся l2tp-тунель до 1.2.3.4, создался маршрут до 1.2.3.4 через ppp0. Пакеты, идущие в тонель, после инкапсуляции заворачивались ядром в ipsec, а его пакеты, желая попасть на 1.2.3.4 попадали опять в тунель. Тут-то и капец ужику.
Решается убиением в скрипте ip-up маршрута до шлюза через ppp0 после установления соединения.
Пока для меня остался вопрос, что именно поменялось после обновления. Начал добавляться этот маршрут, которого раньше не было, что как-то сомнительно. Также сомнительно, что пакеты ipsec при наличии такого маршрута до этого его игнорировали, а тут начали учитывать. Хотя, помнится, я настраивал где-то strongSwan на игнор интерфейса ppp0, но к маршрутизации в Линукс это вряд ли имеет отношение. Так что, откуда-то всплыл этот бессмысленный маршрут, похоже...