Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

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

    Scheduled Pinned Locked Moved Russian
    26 Posts 9 Posters 15.1k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      aleksvolgin
      last edited by

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

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

      1 Reply Last reply Reply Quote 0
      • werterW
        werter
        last edited by

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

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

        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

        1 Reply Last reply Reply Quote 0
        • T
          Trojan415
          last edited by

          @aleksvolgin:

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

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

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

          1 Reply Last reply Reply Quote 0
          • R
            rubic
            last edited by

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

            1 Reply Last reply Reply Quote 0
            • werterW
              werter
              last edited by

              Возможно, это решение :

              http://forum.pfsense.org/index.php/topic,24734.msg265032.html#msg265032

              1 Reply Last reply Reply Quote 0
              • T
                Trojan415
                last edited by

                Сегодня попробую сделать.
                @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 Reply Last reply Reply Quote 0
                • N
                  ncat
                  last edited by

                  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

                  1 Reply Last reply Reply Quote 0
                  • N
                    ncat
                    last edited by

                    @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 - молчание в ответ.

                    1 Reply Last reply Reply Quote 0
                    • R
                      rubic
                      last edited by

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

                      1 Reply Last reply Reply Quote 0
                      • P
                        pri_vet
                        last edited by

                        А насколько режет (или не режет) скорость по 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 пока не разобрался, но не верю что будет лучше.

                        1 Reply Last reply Reply Quote 0
                        • P
                          pigbrother
                          last edited by

                          @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

                          1 Reply Last reply Reply Quote 0
                          • P
                            pri_vet
                            last edited by

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

                            1 Reply Last reply Reply Quote 0
                            • P
                              pri_vet
                              last edited by

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

                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post
                              Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.