LINUX.ORG.RU
ФорумAdmin

xl2tp и маршруы


0

0

Добрый день.

Имеется проблема следующего характера. Имеется провайдер под названием корбина, который для доступа в инет использует l2tp. Для подключения использую xl2tp. Проблема в том, что адрес l2tp-сервера, к которому происходит подключение, и адрес второго конца устанавливаемого ppp-соединения совпадают. Из-за этого (по крайней мере я причину вижу именно в этом) xl2tp "сходит с ума" - он начинает передавать l2tp пакеты по ppp-соединению (т. к. на другом его конце тоже ip-адрес l2tp сервера), которое опять пакуется в l2tp и ещё раз в ppp и так до бесконечности. В итоге, естественно, соединение помирает. Прописывание прямого маршрута до l2tp-сервера помогает, но только частично - соединение какое-то время работает нормально (может довольно долго - до суток), а в какой-то момент всё снова отваливается с описанными выше симптомами.

С pptp та же проблема (т. к. ситуация с используемыми ip-адресами там точно такая же). Как с этим бороться можно?

★★

/etc/init.d/xl2tpd

#!/sbin/runscript
# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-dialup/xl2tpd/files/xl2tpd-init,v 1.2 2007/03/05 10:50:54 mrness Exp $

depend() {
        need net
}

checkconfig() {
        if [[ ! -f /etc/xl2tpd/xl2tpd.conf ]] ; then
                eerror "Missing /etc/xl2tpd/xl2tpd.conf configuration file!"
                eerror "Example configuration file could be found in doc directory."
                return 1
        fi

        return 0
}

start() {
        checkconfig || return 1

        ebegin "Starting xl2tpd"
        start-stop-daemon --start --quiet --exec /usr/sbin/xl2tpd
        route add -host 85.21.0.255 gw 10.201.80.1
        route add -host 85.21.0.254 gw 10.201.80.1
        route add -host 213.234.192.7 gw 10.201.80.1
        route add -host 195.14.50.21 gw 10.201.80.1
        sleep 15
        route del default
        route add default dev ppp0
        eend $?
}

stop() {
        ebegin "Stopping xl2tpd"
        start-stop-daemon --stop --quiet --pidfile /var/run/xl2tpd.pid
        sleep 15
        route add default dev eth1
        eend $?
}


inet.sh

#!/bin/bash
touch /var/run/internet.run
function testnet {
        NETEXT=1`ping -c 1 ya.ru | grep 64 | awk '{print $5}'`
}

function testloc {
        NETLOC=1`ping -c 1 vpn.corbina.net | grep 64 | awk '{print $5}'`
}

testnet
sleep 20
testloc
sleep 20
while [  $NETEXT = '1' ]; do
        /etc/init.d/xl2tpd stop
        sleep 60
        while [ $NETLOC = '1' ]; do
                #echo 2
                /etc/init.d/net.eth1 stop
                sleep 60
                /etc/init.d/net.eth1 start
                sleep 60
                testloc
                sleep 20
                #echo Starting...
        done
        /etc/init.d/xl2tpd start
        sleep 60
        /etc/init.d/iptables reload
        sleep 3
        testnet
        sleep 20
done
rm -r /var/run/internet.run


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

В скрипт надо добавить проверку pid xl2tpd и последующий отстрел, иначе куча сдохших процессов повисает - пофигу, но в целом неэстетично

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

Ну тут по сути предлагается добавление маршрутов до l2tp-сервера и удаление маршрута по умолчанию, что в моём случае почему-то помогает только частично (соединение отваливается не сразу, но всё равно отваливается).

Можно ли как-то привязать xl2tpd к конкретному интерфейсу, чтобы он не пытался слать пакеты через другие интерфейсы?

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

То есть? Коннектиться ему все равно надо через ethX, а потом уже можно заменить дефолтный роут на pppX, вот он и будет слать в него все. Вышеописанная связка вместе с довольно стандартным конфигом xl2tpd дала месяц аптайма без разрывов на этой вашей корбине

anonymous
()

В общем, проблема оказалась в том, что адрес l2tp-сервера, выдаваемый dns, периодически менялся. Маршрут к нему прописывался при поднятии интерфейса eth0, и если xl2tpd перезапускался позднее, то на этот момент dns уже мог выдать для сервера другой ip. Надёжнее всего оказалось добавлять маршрут при поднятии ppp:

/etc/ppp/ip-up.d/90-local.sh:

GW=`ip route list | awk '($1=="10.0.0.0/8"){print $3}'`
ip route replace $5 via $GW dev eth0

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