Beeline подключение L2TP



  • Почитал на форуме несколько тем, так же читал мануалы на сайтах по подключению L2TP для билайна.
    Я так понимаю, что существует настройка под старую версию pfsense, сам юзаю ПФ несколько дней.
    Имею провайдеров 2 ком и билайн.В 2ком подключается без проблем по DHCP, а вот с билайном проблема с его L2TP.Pfsense стоит на VirtualBox, использую в качестве фаервола.

    Может счастливцы гуру расскажете желательно со скриншотами, как подключать?
    И я не понимаю, где находится OPT1, все облазил и не нашел?
    Так же непонятно в разных категориях можно подключить L2TP, в какой именно надо настраивать?



  • Есть же целая ВЕТКА по Russian\Dual - подключениям :( Будьте внимательнее, пож-та.



  • А я так и не победил периодические падения туннеля… Буду пробовать Vyatta.



  • Я так понимаю, что существует настройка под старую версию pfsense

    Нет. Если б было, я бы юзал.

    Буду пробовать Vyatta

    Лучше глянуть сперва voyage linux или redwall firewall. Виатта уж очень требовательна к ресурсам.



  • @aleksvolgin:

    Я так понимаю, что существует настройка под старую версию pfsense

    Нет. Если б было, я бы юзал.

    Буду пробовать Vyatta

    Лучше глянуть сперва voyage linux или redwall firewall. Виатта уж очень требовательна к ресурсам.

    Хмм, думаю Вы правы. Сегодня ознакомлюсь с этими дистрибутивами.



  • Я думаю, что подключение  билайну вызовет проблемы на любом дистрибутиве ввиду организации самой сети.
    У меня все работает более 3х лет со статическим IP - проблем нет
    На последнем экране шлюз "лежит" т.к. в данный момент кабель к билайну вынут
















  • Я думаю, что подключение  билайну вызовет проблемы на любом дистрибутиве

    Мод моноволла и router os ничего про ваши раздумья не знают, а просто работают.

    ввиду организации самой сети

    А что не так с организацией сети?



  • @aleksvolgin:

    Мод моноволла и router os ничего про ваши раздумья не знают, а просто работают.

    Router OS подключается к Билайну с такими же, если не большими костылями, что и pfSense. Погуглив, можно оценить масштаб проблемы. И это не вина pfSense и Mikrotik. Еще раз повторяю, Билайн рассчитывает, что у конечного юзера стоит винда или какая-то дешевая поделка с Dual Access/Link Duo, которая грубо нарушает RFC3442, принимая по DHCP и (121)Classless route и (003)Router, хотя последний в присутствии первого должен быть проигнорирован. Любой дистрибутив следующий RFC столкнется с проблемами при подключении к Билайн хотя бы поэтому, не говоря о DNS-балансировке VPN серверов и прочем говне.



  • @aleksvolgin:

    А что не так с организацией сети?

    У меня есть второй провайдер, где по DHCP, в зависимости от тарифа, выдается серый/белый IP. Вне зависимости от этого существует локальная сеть. Вся маршрутизация и правильный подсчет стоимости трафика внутри провайдера. Билайн скинул все на пользователя. Раньше, когда безлимитных тарифов было мало, народ частенько поподал на бабки при обращении к локальным ресурсам т.к. неправильно настраивал железо (прописывание маршрутов).



  • Так, подводя итог. Как же бороться с l2tp и билайном? Я вот рассматриваю вариант поднятие роутера на голой FreeBSD. Про статик айпи, проблема не в самом WAN, у меня проблема именно в том, что отваливается l2tp…



  • И могу добавить, что LinkSys на OPENVRT, как и на штатной прошивке страдает тем же самым… При покупке нового роутера выбор стоял между ALIX D2 и Mikrotik какой не помню именно... Не прогадал ли я выбрав Alix?



  • Хммм. Мне вот какая мысль в голову пришла! Билайн торгуют своим оборудованием, адаптированным под их подключение, с их модифицированной ОС. Что если использовать его как транзит перед своим роутером? По идее нагрузки на него будет минимум, рисуя маршруты для одного устройства (нашего роутера), который в свою очередь будет маршрутизировать его уже по сети?



  • @Trojan415:

    Хммм. Мне вот какая мысль в голову пришла! Билайн торгуют своим оборудованием, адаптированным под их подключение, с их модифицированной ОС. Что если использовать его как транзит перед своим роутером? По идее нагрузки на него будет минимум, рисуя маршруты для одного устройства (нашего роутера), который в свою очередь будет маршрутизировать его уже по сети?

    У меня так стоит Dlink DI-804 перед Cisco RV042, все работает, но dlink (как и все дешевые роутеры) глючная штука.

    @Trojan415:

    Так, подводя итог. Как же бороться с l2tp и билайном? Я вот рассматриваю вариант поднятие роутера на голой FreeBSD. Про статик айпи, проблема не в самом WAN, у меня проблема именно в том, что отваливается l2tp…

    Это фича билайна. Для физ. лиц VPN-сессия рвется раз в 3-5 дней (рекорд 350 часов). Для юр. лиц - раз в сутки (примерно в 2:00 - 3:00 по Москве). Ну и никто не отменял обычных косяков в сети. Раз было рвался VPN строго раз в 5 минут, покрутив свои железки понял что не у меня, вынес мозг поддержке - оказалось у них тупил свич и его нужно было перегрузить!



  • Не прогадал ли я выбрав Alix?

    А на аликсе у вас что будет?
    P.S. Если поставите роутер ос на аликс то нет, не прогадали :D



  • Пардон за оффтоп.

    По альтернативным прошивкам для аппаратных роутеров :

    1. TomatoUSB (Shibby's mod) отлично работает с Билайном еще с 105-ой версии (сейчас последняя - 110-ая):

    http://tomato.groov.pl/?page_id=78

    [RELEASE] 105

    ….......

    - xl2tpd: update to 1.3.1 + patches. Fix L2TP connections. Tested on Beeline-Russia by user @DollaR
    ….......

    2. OpenWRT работает с Билайном после небольших "плясок" :

    http://forum.ixbt.com/topic.cgi?id=14:56710:4024#4024



  • @aleksvolgin:

    Не прогадал ли я выбрав Alix?

    А на аликсе у вас что будет?
    P.S. Если поставите роутер ос на аликс то нет, не прогадали :D

    Сейчас стоит pfSense, планирую вкрячить просто FreeBSD.



  • Ради интереса проверил как ведет себя pfSense при одновременном получении default route и classless route по DHCP. На радость клиентов Билайн, получает и то и другое без проблем в отличие от Mikrotik. Т.е. тоже в угоду любителей Russian-Dual-Access нарушает RFC))
    Надо только отметить, что это лишь часть проблемы. У самого дома подключен Mikrotik к Билайну, но ни одна инструкция из инета не помогла. Все индивидуально, не смог помочь человеку из другого города - все не так как у меня.
    Посему, надо смотреть какие адреса/маршруты/DNS получает клиент по DHCP и что меняется при подключении L2TP. Нет единого ответа на вопрос: как? Будет инфа - будет помощь





  • Сегодня попробую сделать.
    @ncat:

    Итак, похоже на то что проблема получения l2tp сервер по имени и его автоматического старта решена.
    pfSense 2.0.1 nanobsd
    Опишу все по порядку.
    Понадобится вот что:

    • mc (с ним удобнее) или текстовый редактор
    • установленный cron (System -> Packages -> cron)

    **Что получилось:

    • L2TP сервер получаем по имени
    • добавляем маршрут (l2tp сервер становится виден из внутренней сети [актуально для интернета билайн])
    • L2TP стартует сам и даже обновляет IP сервера при падении**

    [Решение]
    Для всех модификаций советую сделать копии
    1) модифицируем /etc/inc/interfaces.inc
    1.1 - function interface_ppps_configure($interface)
    1.1.1 - раскомменчиваем строку $gateways[$pid] = gethostbyname ($gateways[$pid]);
    1.1.2 - а также добавляем код помеченный /* ADDED -start- / - / ADDED -end- */
    пункт 1.1.2 позволяет при получении IP l2tp сервера писать маршрут l2tp server - wan gateway. Так как l2tp сервер находится во внешней сети, без маршрута соединение с ним не будет подниматься (это очень любит интернет от билайна).
    маршруты у него передаются, по ходу, 249 опцией

    вот как должно выглядеть:

    
                                    if(!is_ipaddr($localips[$pid])){
                                            log_error("Could not get a Local IP address for PPTP/L2TP link on {$port} in interfaces_ppps_configure. Using 0.0.0.0 ip!");
                                            $localips[$pid] = "0.0.0.0";
                                    }
                                    /* XXX: This needs to go away soon! [It's commented out!] */
                                    /* Configure the gateway (remote IP ) */
                                    if (!$g['booting'] && !is_ipaddr($gateways[$pid]) && is_hostname($gateways[$pid])) {
                                            /* XXX: Fix later  */
                                            $gateways[$pid] = gethostbyname($gateways[$pid]);
                                            if(!is_ipaddr($gateways[$pid])) {
                                                    log_error("Could not get a valid Gateway IP from {$port} via DNS in interfaces_ppps_configure.");
                                                    return 0;
                                            }
    
                                    }
                                    if(!is_ipaddr($gateways[$pid])){
                                            log_error("Could not get a PPTP/L2TP Remote IP address from {$dhcp_gateway} for {$gway} in interfaces_ppps_configure.");
                                            return 0;
                                    }
    
    /* ADDED -start- */
                                    //$parent_gw = get_interface_gateway($port);
    
                                    $wanif = get_real_wan_interface();
                                    $parent_gw = file_get_contents("/tmp/{$wanif}_router");
                                    mwexec("route add -host {$gateways[$pid]} {$parent_gw}");
    /* ADDED -end- */
    
                                    pfSense_ngctl_attach(".", $port);
                                    break;
                            case "ppp":
    
    

    i: По поводу пунктов 1.2 и 1.3 не уверен, приносят ли они пользу, но на всякий случай. Эти изменения предложены Micky на 4-й странице http://forum.pfsense.org/index.php/topic,25465.15.html
    к слову, и 1.1.2 предложено им, хотя в том виде не работало…

    1.2 - function interface_bring_down($interface = "wan", $destroy = false)

    
            $int_list = get_configured_interface_list_by_realif();
            if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) {
                    foreach ($config['ppps']['ppp'] as $pppid => $ppp) {
                            if ($ppp['type'] == 'pptp' || $ppp['type'] == 'l2tp') {
                                    $ports = explode(',',$ppp['ports']);
                                    foreach($ports as $pid => $port){
                                            if ($port == $interface) {
                                                    interface_bring_down($int_list[$ppp['if']]);
                                            }
                                    }
                            }
    
                    }
            }
    
    

    местоположение:

    function interface_bring_down($interface = "wan", $destroy = false) {
            global $config, $g;
    
            if (!isset($config['interfaces'][$interface]))
                    return;
    
            $ifcfg = $config['interfaces'][$interface];
    
            $realif = get_real_interface($interface);
    
    /* ADDED -start- */
            $int_list = get_configured_interface_list_by_realif();
            if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) {
                    foreach ($config['ppps']['ppp'] as $pppid => $ppp) {
                            if ($ppp['type'] == 'pptp' || $ppp['type'] == 'l2tp') {
                                    $ports = explode(',',$ppp['ports']);
                                    foreach($ports as $pid => $port){
                                            if ($port == $interface) {
                                                    interface_bring_down($int_list[$ppp['if']]);
                                            }
                                    }
                            }
    
                    }
            }
    
    /* ADDED -end- */
    
            switch ($ifcfg['ipaddr']) {
            case "ppp":
            case "pppoe":
            case "pptp":
            case "l2tp":
                    if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) {
    
    

    1.3 - function interface_dhcp_configure($interface = "wan")

            $int_list = get_configured_interface_list_by_realif();
            if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) {
                    foreach ($config['ppps']['ppp'] as $pppid => $ppp) {
                            if ($ppp['type'] == 'pptp' || $ppp['type'] == 'l2tp') {
                                    $ports = explode(',',$ppp['ports']);
                                    foreach($ports as $pid => $port){
                                            if ($port == $interface) {
                                                    interface_ppps_configure($int_list[$ppp['if']]);
                                            }
                                    }
                            }
    
                    }
            }
    
    

    местоположение (в конце):

            fwrite($fd, $dhclientconf);
            fclose($fd);
    
            /* bring wan interface up before starting dhclient */
            if($wanif)
                    interfaces_bring_up($wanif);
            else
                    log_error("Could not bring up {$wanif} interface in interface_dhcp_configure()");
    
            /* fire up dhclient */
            mwexec("/sbin/dhclient -c {$g['varetc_path']}/dhclient_{$interface}.conf {$wanif} > {$g['tmp_path']}/{$wanif}_output > {$g['tmp_path']}/{$wanif}_error_output");
    
    /* ADDED -start- */
            $int_list = get_configured_interface_list_by_realif();
            if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) {
                    foreach ($config['ppps']['ppp'] as $pppid => $ppp) {
                            if ($ppp['type'] == 'pptp' || $ppp['type'] == 'l2tp') {
                                    $ports = explode(',',$ppp['ports']);
                                    foreach($ports as $pid => $port){
                                            if ($port == $interface) {
                                                    interface_ppps_configure($int_list[$ppp['if']]);
                                            }
                                    }
                            }
    
                    }
            }
    /* ADDED -end- */
    
            return 0;
    }
    
    

    i: теперь перед стартом мы получаем l2tp адрес сервера по имени (полученный через DNS IP записывается в конфигурацию mpd5.
    Получили две проблемы:

    • сам интерфейс не стартует
    • надо переконфигурировать l2tp соединение, если, например, l2tp сервер стал недоступным. Пример: оборвался WAN и L2TP, через некоторое время WAN поднимается, а L2TP продолжает стучаться на старый IP, хотя можно было бы получить и новый.
      Эти проблемы и будем решать ниже

    2) создаем два файла в /usr/scripts/ (папку scripts придется создать)
    2.1 - файл start-keeper.sh

    
    #! /bin/sh
    
    #########################################################################################
    #                                                                                       #
    #       This file starts mpd-keeper unless it is not already started.                   #
    #       Before using make sure you put your variables at /usr/sctipts/mpd-keeper        #
    #                                                                                       #
    #########################################################################################
    
    res=$(ps -A | grep -w '[m]pd-keeper')
    
    if [ ! "$res" ]
        then
        echo "Starting mpd-keeper" | logger
        /usr/bin/nice -n20 /usr/scripts/mpd-keeper
    fi
    
    

    2.2 - файл mpd-keeper

    ##### VARIABLES #####
    
    # wan is your WAN interface network port name. Can be viewed at pfsense welcome screen.
    wan='re0'
    
    # l2tp is your l2tp network port name (also can be viewed in Webconfigurator -> Status -> Interfaces -> l2tp interface header
    l2tp='l2tp0'
    
    # pid can be found in /var/run should looks same. This file creates when your l2tp is up.
    pid='l2tp_opt1.pid'
    
    # repeat time for this script (in seconds)
    repeat_time='5'
    
    # time to wait for bringing l2tp connection up (in seconds)
    l2tpup_time='60'
    
    ##### CODE #####
    
    while [ 1 -eq 1 ]
    do
        if [ ! -f /tmp/${l2tp}up ]
        then
            if [ -f /var/run/$pid ]
            then
                    # If l2tp connection is down (no IP) and mpd5 for this connection is running we kill mpd
                    # to be able to change connection settings, specifically l2tp peer.
                    # Because if (for example) l2tp peer is down we can get different l2tp peer IP using hostname.
                    res2=$(cat /var/run/$pid)
                    echo "l2tp is down - killing mpd5" | logger
                    kill $res2
            fi
        fi
    
        sleep 1
        res1=$(ifconfig $wan | grep status | cut -d : -f 2)
    
        if [ ! -f /var/run/$pid ]
        then
            if [ "$res1" = " active" ]
            then
                # If wan connection is active and there is no l2tp over it, we start l2tp connection.
                echo "wan is active - starting l2tp connection" | logger
                /etc/rc.linkup $l2tp start
                # L2TP connection needs some time to come up.
                # Without sleep it seems that mpd5 will be killed before it has a chance
                # to connect to l2tp server (if repeat_time is less than ~30)
                sleep $l2tpup_time
            else
                #echo "wan is not active. l2tp cannot start" | logger
            fi
        fi
    
        sleep $repeat_time
    done
    
    

    опишу переменные, которые надо установить в соответствии с Вашей системой

    wan - название вашего интерфейса WAN, которые показывается при приветственном окне в pfsense

    wan='re0'

    l2tp - имя вашего интерфейса L2TP (показывается в Webconfigurator -> Status -> Interfaces -> l2tp interface header)

    l2tp='l2tp0'

    pid может быть найден /var/run выглядеть должен примерно также. Файл создается когда соединение l2tp поднято.

    pid='l2tp_opt1.pid'

    интервал повтора скрипта (в секундах)

    repeat_time='5'

    время в течении которого ожидаем поднятия интерфейса (в секундах) (за короткое время mpd может не успеть дозвониться и установить связь - он будет выключен этим же скриптом)

    l2tpup_time='60'

    2.3 - делаем созданные файлы исполняемыми командой chmod 755 filename (я вот не помнил наизусть как)

    3) настраиваем cron (Services -> cron)
    minute */1
    hour *
    mday *
    month *
    wday *
    who root
    command /bin/sh /usr/scripts/start-keeper.sh

    Вроде все  :)

    Спасибо: Steve (stephenw10), Micky, Evgeny.

    P.S.: мой первый "общественный" скрипт набор скриптов; в FreeBSD новичок, то же самое относится к сетевым технологиям. Если есть какие-либо ошибки или дополенения - с удовольствием исправлю\дополню.



  • 1.2, 1.3 вроде не нужны =)
    заодно добавьте в interfaces.inc в функцию interface_dhcp_configure($interface = "wan")
    вот эту строчку

    request option-249, option option-121, rfc3442-classless-static-routes, ntp-servers, domain-name-servers, classless-routes, routers, subnet-mask;
    

    в фрагмент

    interface "{$wanif}" {
    request option-249, option option-121, rfc3442-classless-static-routes, ntp-servers, domain-name-servers, classless-routes, routers, subnet-mask;
    timeout 60;
    retry 1;
    select-timeout 0;
    initial-interval 1;
            {$dhclientconf_hostname}
            script "/sbin/dhclient-script";
    }
    

    чтобы получилось примерно следующее:

    function interface_dhcp_configure($interface = "wan") {
            global $config, $g;
    
            $wancfg = $config['interfaces'][$interface];
            if (empty($wancfg))
                    $wancfg = array();
    
            /* generate dhclient_wan.conf */
            $fd = fopen("{$g['varetc_path']}/dhclient_{$interface}.conf", "w");
            if (!$fd) {
                    printf("Error: cannot open dhclient_{$interface}.conf in interfaces_wan_dhcp_configure() for writing.\n");
                    return 1;
            }
    
            if ($wancfg['dhcphostname']) {
                    $dhclientconf_hostname = "send dhcp-client-identifier \"{$wancfg['dhcphostname']}\";\n";
                    $dhclientconf_hostname .= "\tsend host-name \"{$wancfg['dhcphostname']}\";\n";
            } else {
                    $dhclientconf_hostname = "";
            }
    
            $wanif = get_real_interface($interface);
            if (empty($wanif)) {
                    log_error("Invalid interface \"{$interface}\" in interface_dhcp_configure()");
                    return 0;
            }
            $dhclientconf = "";
    
            $dhclientconf .= <<<eod<br>interface "{$wanif}" {
    request option-249, option option-121, rfc3442-classless-static-routes, ntp-servers, domain-name-servers, classless-routes, routers, subnet-mask;
    timeout 60;
    retry 1;
    select-timeout 0;
    initial-interval 1;
            {$dhclientconf_hostname}
            script "/sbin/dhclient-script";
    }
    
    EOD;</eod<br> 
    

    код кривоват, на некоторых опциях ошибки, но у вас появится возможность получить немножко  :D маршрутов от Билайна по dhcp



  • @rubic:

    Ради интереса проверил как ведет себя pfSense при одновременном получении default route и classless route по DHCP. На радость клиентов Билайн, получает и то и другое без проблем в отличие от Mikrotik. Т.е. тоже в угоду любителей Russian-Dual-Access нарушает RFC))
    Надо только отметить, что это лишь часть проблемы. У самого дома подключен Mikrotik к Билайну, но ни одна инструкция из инета не помогла. Все индивидуально, не смог помочь человеку из другого города - все не так как у меня.
    Посему, надо смотреть какие адреса/маршруты/DNS получает клиент по DHCP и что меняется при подключении L2TP. Нет единого ответа на вопрос: как? Будет инфа - будет помощь

    посмотрите

    request option-249, option option-121, rfc3442-classless-static-routes, ntp-servers, domain-name-servers, classless-routes, routers, subnet-mask;
    

    как лучше поправить и что добавить?
    Опцию 121 я так понял pfSense не умеет получать? Сколько копал так и не нашел… спрашивал в international - молчание в ответ.



  • @ncat:

    посмотрите

    request option-249, option option-121, rfc3442-classless-static-routes, ntp-servers, domain-name-servers, classless-routes, routers, subnet-mask;
    

    как лучше поправить и что добавить?
    Опцию 121 я так понял pfSense не умеет получать? Сколько копал так и не нашел… спрашивал в international - молчание в ответ.

    Наоборот. Опцию 121 pfSense 2.0.3 получает без всякой правки interfaces.inc, а опцию 249 не получает ни c правкой, ни без. Так что править я не вижу смысла.



  • А насколько режет (или не режет) скорость по l2tp (pptp, pppoe). Я подключился по pppoe и каково біло мое удивление: speedtest.net показал 1,6-1,8 М/0,6-0,7M при этом на winxp 38-40M/18-20M. Железо: AMD Sempron 2600+, памяти 512, установлено на hd 20Г, сетевые - набортная, rt8139 и 3com. Были попытки менять сетевухи, результат тот же. Первым делом настроил wan static, затем настроил iptv от локалки провайдера (все работает), далее поднял OPT (pppoe), зацепил его за WAN, pppoe поднялось сразу. Но со скоростью беда. С l2tp пока не разобрался, но не верю что будет лучше.



  • @pri_vet:

    А насколько режет (или не режет) скорость по l2tp (, pppoe). Я подключился по pppoe и каково біло мое удивление: speedtest.net показал 1,6-1,8 М/0,6-0,7M при этом на winxp 38-40M/18-20M. Железо: AMD Sempron 2600+, памяти 512, установлено на hd 20Г, сетевые - набортная, rt8139 и 3com. Были попытки менять сетевухи, результат тот же. Первым делом настроил wan static, затем настроил iptv от локалки провайдера (все работает), далее поднял OPT (pppoe), зацепил его за WAN, pppoe поднялось сразу. Но со скоростью беда. С l2tp пока не разобрался, но не верю что будет лучше.

    Скажу только про pppoe. 2 провайдера, оба pppoe. Скорости соответствуют заявленным. Загрузка CPU древнего Pentium III несколько процентов.
    Сетевые карты на обеих WAN - древние 3Com и Intel. На LAN - какой-то Realtek.
    pFsense 2.0.2



  • Все грохнул. Было 2.0.3 поставил 2.0.1. Ничего не трогал кроме лан, ван и пппое. Через pppoe на pf - 3 mb/s, на winxp - 30 mb/s. Загрузка памяти и проца понтовые. В чем прикол ? И еще что такое mppp (кажется так, сейчас выключена машинка) в настройках pppoe ?



  • Посмотрел, в настройка пппое это называется Advanced and MLPPP => Configure a NULL Service name. Это для чего ?