Beeline подключение L2TP
-
Пардон за оффтоп.
По альтернативным прошивкам для аппаратных роутеров :
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
-
Не прогадал ли я выбрав Alix?
А на аликсе у вас что будет?
P.S. Если поставите роутер ос на аликс то нет, не прогадали :DСейчас стоит pfSense, планирую вкрячить просто FreeBSD.
-
Ради интереса проверил как ведет себя pfSense при одновременном получении default route и classless route по DHCP. На радость клиентов Билайн, получает и то и другое без проблем в отличие от Mikrotik. Т.е. тоже в угоду любителей Russian-Dual-Access нарушает RFC))
Надо только отметить, что это лишь часть проблемы. У самого дома подключен Mikrotik к Билайну, но ни одна инструкция из инета не помогла. Все индивидуально, не смог помочь человеку из другого города - все не так как у меня.
Посему, надо смотреть какие адреса/маршруты/DNS получает клиент по DHCP и что меняется при подключении L2TP. Нет единого ответа на вопрос: как? Будет инфа - будет помощь -
Возможно, это решение :
http://forum.pfsense.org/index.php/topic,24734.msg265032.html#msg265032
-
Сегодня попробую сделать.
@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
-
Ради интереса проверил как ведет себя 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 - молчание в ответ. -
посмотрите
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 пока не разобрался, но не верю что будет лучше.
-
А насколько режет (или не режет) скорость по 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. Это для чего ?