вторник, 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, но к маршрутизации в Линукс это вряд ли имеет отношение. Так что, откуда-то всплыл этот бессмысленный маршрут, похоже...

1 комментарий:

  1. У меня на ubuntu zesty после успешного подключения по vpn charon отправлял несколько keep alive пакетов, после каждого из которых в syslog болтались ошибки вида

    ppp0: recursion detected

    после третьего-четвертого keep alive пакета, который вызывал рекурсию, соединение убивалось системой

    Maximum retries exceeded for tunnel 46053. Closing.
    Terminating pppd: sending TERM signal to pid 2794
    Connection 49088 closed to 1.2.3.4, port 1701 (Timeout)
    Terminating on signal 15
    Connect time 1.6 minutes.
    Sent 112741 bytes, received 0 bytes.
    interface ppp0 deactivated
    1.2.3.4 disappeared from ppp0
    Script /etc/ppp/ip-down started (pid 2879)

    При этом сразу после поднятия vpn появлялся маршрут через ppp0 до сервера 1.2.3.4

    1.2.3.4 dev ppp0 proto kernel scope link src 5.6.7.8

    Соответственно, как тут и советовалось, добавил в конец файла создания vpn соединения команду, убивающую маршрут до сервера и добавляющую маршруты до нужной мне подсети

    sudo ip route delete 1.2.3.4 dev ppp0
    sudo ip route add 192.168.99.0/24 dev ppp0

    ОтветитьУдалить