LINUX.ORG.RU
ФорумAdmin

Проблема с автоматическим подключением xl2tpd при загрузке


0

1

Беда такая: установил и настроил xl2tpd, но он никак не хочет подключаться при загрузке сервера (Debian 6). При этом, если после запуска сервера зайти под рутом и вручную дать команду xl2tpd restart - подключение появляется.

Пошарился в daemon.log. Ошибка: xl2tpd: Host name lookup failed for имя_впн_сервера
При этом лог аццки загажен воплями bind9 о том, что 'network unreachable'

Похоже, картина следующая: xl2tpd пытается подключиться к серверу и бросает это гиблое дело до того как поднимается WAN-интерфейс (отчет dhcp-клиента об успешном подключении в самом конце лога, после тонн сообщений об ошибках).

Покопался в интернетах, но грамотного красивого решения, которое бы меня во всем устраивало, мне не попалось.

Пробовал такой ход: в скриптах автозагрузки прописать зависимости ('Required-Start') таким образом, чтобы xl2tpd и bind9 запускались после isc-dhcp-server. Не помогло. Запускается-то он первым, а вот получить IP и прочее не успевает.

Была еще мысль убрать 'autodial = yes' в xl2tpd.conf, а в '/etc/network/if-up.d' поместить скрипт, который будет проверять имя поднятого интерфейса и, если это WAN, устанавливать соединение по требованию через '/var/run/xl2tpd/l2tp-control'... Но такой вариант меня не устраивает: интернет будет подниматься при каждом подключении к WAN, а мне такого не надо. Требуется соединение именно после загрузки сервера. Да и проблемы с засиранием логов bind'ом это не решает.

Единственное, что приходит в голову - это убрать их вообще из автозагрузки и смастЫрть в автозапуске скрипт, который будет запускать bind9 и xl2tpd (или дозвон делать, что гораздо лучше) либо по таймауту, либо после подъема WAN... Но это какой-то кривой костыльный подход, как мне кажется. По крайней мере, в той реализации, которую я могу себе представить.

Подскажите хорошее решение, пожалуйста.

Спасибо!


Но такой вариант меня не устраивает: интернет будет подниматься при каждом подключении к WAN, а мне такого не надо. Требуется соединение именно после загрузки сервера.

Хотя тут я, наверное, не прав. Если надо отрубиться от инета, но оставаться подключенным к WAN, можно просто остановить xl2tpd, верно?

Да и проблемы с засиранием логов bind'ом это не решает.

Но вот это все равно в силе остается...

Liber
() автор топика
Ответ на: комментарий от Liber

Все-таки пошел по пути подключения к VPN через скрипт из '/etc/network/if-up.d'. Вот что получилось:

/etc/network/if-up.d/inet-autostart:

#!/bin/bash

if [ "$IFACE" = "eth0" ] && ! [ -f /var/tmp/l2tp-inet-staydown ]; then
        /usr/local/bin/make-log-entry.bash -n inet-autostarter \
                -m "WAN interface ($IFACE) is up. Delayed launching connection daemon..."
        /usr/local/bin/l2tp-inet.bash start &
fi

При подъеме WAN интерфейса, запускаем в фоне скрипт, подключающийся к L2TP...

А вот и он... /usr/local/bin/l2tp-inet.bash:

#!/bin/bash

DELAY=8


# Functions:
wrong_usage() {
        ERR_MSG="Wrong usage! $1 Use: l2tp-inet start | stop"
        echo "$ERR_MSG" >&2
        /usr/local/bin/make-log-entry.bash -n l2tp-inet -m "$ERR_MSG"
        exit 1
}


/usr/local/bin/make-log-entry.bash -n l2tp-inet -m "Internet connection daemon started..."

# Initialize options:
if [ $# -ne 1 ]; then
        wrong_usage "$# parameters given."
fi

case "$1" in

        start )

                ACTION="START"
                ;;

        stop )

                ACTION="STOP"
                ;;

        * )

                wrong_usage "Unknown parameter: $1."
                ;;

 esac

/usr/local/bin/make-log-entry.bash -n l2tp-inet -m "Daemon action chosen: $ACTION"

# Choosing action:
if [ "$ACTION" = "START" ]; then
        /usr/local/bin/make-log-entry.bash -n l2tp-inet -m "Internet connection scheduled, connecting in $DELAY secodns"
        sleep $DELAY
        /usr/local/bin/make-log-entry.bash -n l2tp-inet -m "Connecting to internet L2TP server..."
        echo "c kmsnet-l2tp" > /var/run/xl2tpd/l2tp-control

elif [ "$ACTION" = "STOP" ]; then
        sleep 1
        /usr/local/bin/make-log-entry.bash -n l2tp-inet -m "Disconnectiong from internet L2TP server..."
        echo "d kmsnet-l2tp" > /var/run/xl2tpd/l2tp-control
fi


exit 0

Тут, вроде, тоже все просто: если передан параметр «START», то подключаемся, если «STOP», то наоборот.

Также для удобства соорудил ламерский костыль, скидывающий отчеты в daemon.log и syslog, ибо в силу нехватки опыта не знаю, как это делают умные дяденьки... (кстати, мож кто чего присоветует?) /usr/local/bin/make-log-entry.bash:

#!/bin/bash

wrong_usage() {
        echo "Wrong usage! $1" >&2
        exit 1
}

# No parameters given:
if [ $# -eq 0 ]; then wrong_usage "No parameters given"; fi

GETOPT=`getopt -o n:m: --long name:,message: -n 'make-log-entry.bash' -- "$@"`

# Incorrect parameters given:
if [ $? != 0 ]; then wrong_usage "Getopt error"; fi

eval set -- "$GETOPT"

# Initialize options:
while true ; do
        case "$1" in

                -n | --name )

                        NAME="$2"
                        shift 2
                        ;;


                -m | --message )

                        MESSAGE="$2"
                        shift 2
                        ;;

                -- )

                        shift
                        break
                        ;;

                * )

                        wrong_usage "Unexpected parameters: $@"
                        exit 1
                        ;;

        esac
done

# Make log entry:
TIME=$( date +"%a %d %H:%M:%S" )
HOST_NAME=$( hostname )
ENTRY="$TIME $HOST_NAME $NAME: $MESSAGE"
echo "$ENTRY" | tee -a /var/log/daemon.log /var/log/syslog > /dev/null
if [ $? != 0 ]; then
        echo "Could not access log files!"
        exit 1
fi

exit 0

И все забегало. )

В разделе «STOP» пока нет кода, создающего флаговый файл, но это совсем элементарно. Плюс прописать алиасы и будет совсем удобно.

Спасибо всем отозвавшимся! :D

Liber
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.