DHCP + PPTP on WAN
-
Подтверждаю слова ncat.
Кусок кода/* 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;
}
*/раскомментируем до вида:
/* 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;
}Для удобства я установил MC.
Проблема в том, что сам L2TP теперь не поднимается. Приходится его пинать вручную. Хотя когда поднялся - работает стабильнее, чем по одному IP…(билайн опять рулит...)
Кстати для тех, у кого не получается - обращу внимание, что в System - Routing нужно основным гейтом поставить L2TP а не Wan.
Всем огромное спасибо!
У меня осталась проблема с вайфаем в лице чипа аферос AR9380. Отдельно тему создал, но если кто чего посоветует - буду очень благодарен!
-
Проблема в том, что сам L2TP теперь не поднимается.
Тоже думал что из-за этого, но не стал связывать, так как много "экспериментировал" с файлами в pfSense…
Теперь ясно что раскомменченный код виноват.
по этому поводу тема на английском и русском форумах. Пока пусто :(
ждем ответов гуру freebsd (pfSense)? ::)upd: самый кривой вариант, наверное, запустить cron и смотреть есть ли процесс ppp и стартовать если нет? Только не умею писать скрипты в unix, да и в целом не сильно разбираюсь в этих системах.
-
Have you tried to remove the```
!$g['booting']meaning:
/* Configure the gateway (remote IP ) /
if (!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;
}but carefully, it can break pfsense, and i dont have it installed to test or to check the source code
-
удаление !$g['booting'] не помогло.
Вот полазил по форуму и накатал простой скриптик, который можно поставить в cron (ну и убрать флуд в лог):
#!/bin/sh if [ -f /var/run/l2tp_opt1.pid ] then echo "mpd5 is running" | logger else echo "mpd5 is dead" | logger fi
Как вместо echo "mpd5 is dead" | logger запихнуть запуск интерфейса? (например загрузить страницу http://192.168.2.1/status_interfaces.php?action=Connect&if=opt1 или еще каким образом…)
-
Может кто-нибудь описать процесс настройки полноценного PPTP WAN с Dual-Access для российского провайдера? Имеем Pfsense 2.0.1, переходить обратно на 1.X не хотелось бы. VPN серверов у прова несколько так что хотелось бы настроить VPN на имя а не на IP. И потянет ли VIA 1HHz и 512RAM поток порядка 40мбит по PPTP или надо что-то помощнее?
-
pfSense 2.0: пытаюсь поднять PPTP на WAN'е с DHCP
Что мне изменить в /etc/inc/interfaces.inc если провайдер требует такие настройки:
?
Лог:Jan 9 15:21:20 ppp: [opt2_link0] Link: reconnection attempt 1209
Jan 9 15:21:20 ppp: [opt2_link0] PPTP call failed
Jan 9 15:21:20 ppp: [opt2_link0] Link: DOWN event
Jan 9 15:21:20 ppp: [opt2_link0] LCP: Down event
Jan 9 15:21:20 ppp: [opt2_link0] Link: reconnection attempt 1210 in 3 seconds -
pfSense 2.0: пытаюсь поднять PPTP на WAN'е с DHCP
Что мне изменить в /etc/inc/interfaces.inc если провайдер требует такие настройки:
?
Лог:Jan 9 15:21:20 ppp: [opt2_link0] Link: reconnection attempt 1209
Jan 9 15:21:20 ppp: [opt2_link0] PPTP call failed
Jan 9 15:21:20 ppp: [opt2_link0] Link: DOWN event
Jan 9 15:21:20 ppp: [opt2_link0] LCP: Down event
Jan 9 15:21:20 ppp: [opt2_link0] Link: reconnection attempt 1210 in 3 secondsУ вас привязка по МАСу идет ? Тогда сперва МАС смените на ВАН, чтоб ИП локальный получить, а только затем проверяйте ППТП.
П.с. Как вариант, при загрузке pf-а задать первым поднимать ВАН , а только потом ППТП.
Команды можно вставить в Shellcmd, предварительно установив этот пакет. -
У вас привязка по МАСу идет ? Тогда сперва МАС смените на ВАН, чтоб ИП локальный получить, а только затем проверяйте ППТП.
П.с. Как вариант, при загрузке pf-а задать первым поднимать ВАН , а только потом ППТП.
Команды можно вставить в Shellcmd, предварительно установив этот пакет.Привязки по маку вроде нет, локальный ИП получаю, а вот ППТП перестал работать после "модернизации оборудования" где-то там у провайдера… :( Провайдер конечно же ничем помочь мне не смог в настройке :)
-
"Если вдруг, вы увидите, что default gateway не поменялся на "белый", а остался от модема, его можно переназначить в System->Routes. (выбираем default gateway для OPT1)" а кто подскажет как зделать чтобы он менялся сам ?
-
Прошу прощения если пропустил, но судя из последних страниц на последнем стабле pFsense так и не удалось реализовать стабильные DHCP+PPTP(L2TP) из коробки, это так ?
-
я бы сказал что он работает, но с оговоркой что IP l2tp сервера надо указывать только цифрами.
-
ну раз никто не стал возиться, буду придумывать костыли сам.
прошивки на новый Asus n66u еще будут пилить и пилить, так нормальной скорости интернета никогда не дождусьНаконец-то мне подсказали на интернациональном форуме, большое спасибо stephenw10.
Пока что, по идее, вот этот скрипт надо запихнуть в крон#!/bin/sh if [ -f /var/run/l2tp_opt1.pid ] then # echo "mpd5 is running" | logger else /etc/rc.linkup l2tp0 start fi # l2tp0 - имя, отображаемое на страничке Interfaces для вашего l2tp интерфейса.
Таким образом вроде бы можно решить проблему отказывающегося стартовать l2tp с модифицированным interfaces.inc
а модифицировали для того, чтобы получать IP по имени l2tp сервера, как нам велит Билайн. Так как однажды выбранный единственный l2tp сервер может стать недоступным -
Итак, похоже на то что проблема получения 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 новичок, то же самое относится к сетевым технологиям. Если есть какие-либо ошибки или дополенения - с удовольствием исправлю\дополню. -
Итак, похоже на то что проблема получения l2tp сервер по имени и его автоматического старта решена.
Хм. Аналогично имею провайдера, именуемого АИСТ. Получаю ip по dhcp на wan внутренней сети, некоторой, из 10.0.0.0/8. Для коннекта с инетом - впн, pptp.
Юзаю pfsense 2.1. На данный момент сервер впн забил по ип, но надо по имени fqdn. Инет пашет, все ок вроде. Но есть косяк с тем, что почему-то шлюз не резолвит с днс провайдера хосты внутресетевые.
т.е. даже в гуглевском днс они имеют записи. если на сетевом интерфейсе в винде прописать днс гугля или от провайдера, то все резолвит. Если использовать dns forwarder шлюза - не резолвит (в general dns прописаны).
Ну и странно, что у меня оба шлюза от провайдера являются дефолтовыми. Т.е. шлюз полученный из внутренней сети, и шлюз полученный при соединении впн.
С другим провайдером все работало окей, правда там pppoe было )p.s. из сообщения выше костыли не юзал, пака что
-
У прова скорее всего split DNS. Попробуйте решить записью в Services: DNS forwarder-Advanced _–-> rebind-domain-ok=/site1/site2/site3/
-
Огромный респект ncat за модификацию !
Попробовал настроить у себя - получилось, но в логах постоянно маячит такая строчка:
php: : The command 'route change -host 10.172.40.1' returned exit code '1', the output was 'route: writing to routing socket: No such process route: writing to routing socket: Invalid argument change host 10.172.40.1: Invalid argument'
И еще почему-то не прописывается default gateway в System->Routing, и у клиентов интернета нет, пока руками не прописать что opt1 это default
Но в целом прогресс огромный - оно даже переподымается после падения wan :)) -
gr0mW, Спасибо, помогло) Оказалось, что поиском по форуму находит похожую ситуацию с таким же решением проблемы.. почему-то не нашел я сразу.
UPD: Увидел в опциях, в Advanced, пункт "Disable DNS Rebinding Checks". Так вот при активации данной опции, так же начинают резолвиться внутренние адреса. Но интересно, чревато ли это чем-либо?)
-
ncat
Такой вопрос, на сколько я понимаю при такой настройке на Wan мы получаем ip по DHCP?
Вопрос в следующем, при провешивании портов с помощью UPNP у нас они будут не в Интернет же провешиваться? Или я что-то не понимаю? -
Огромный респект
Рад что кому-то пригодилось
Попробовал настроить у себя - получилось, но в логах постоянно маячит такая строчка:
php: : The command 'route change -host 10.172.40.1' returned exit code '1', the output was 'route: writing to routing socket: No such process route: writing to routing socket: Invalid argument change host 10.172.40.1: Invalid argument'
Такая же штука была (не знаю есть сейчас или нет) не обращал внимания на нее.
Тут стоит пояснить про пункт 1.1.2 из решения:
Конфигурирование L2TP:$gateways[$pid] = gethostbyname($gateways[$pid]); //(из решения 1.1.1) - получаем IP по имени $wanif = get_real_wan_interface(); // судя по всему, получаем WAN $parent_gw = file_get_contents("/tmp/{$wanif}_router"); // узнаем gateway у него (пишется в файл; у меня например в /tmp/re0_router) mwexec("route add -host {$gateways[$pid]} {$parent_gw}"); // прописываем маршрут.
Такая схема работает у меня, но у других провайдеров она может отличаться. Возможно кому-то и не надо писать маршрут…
И еще почему-то не прописывается default gateway в System->Routing, и у клиентов интернета нет, пока руками не прописать что opt1 это default
Я через это же меню поставил OPT1 как default галочкой, все сохраняется вроде.
Но в целом прогресс огромный - оно даже переподымается после падения wan :))
пишите о результатах
Такой вопрос, на сколько я понимаю при такой настройке на Wan мы получаем ip по DHCP?
вроде да :)
Вопрос в следующем, при провешивании портов с помощью UPNP у нас они будут не в Интернет же провешиваться? Или я что-то не понимаю?
не занимался этим. Тока бросал порт для торрентов (NAT). Там надо было в interfaces выбрать L2TP (ну или как там называется интерфейс с интернетом)
И вообще позволю себе себя же процитировать:
@ncat:в FreeBSD новичок, то же самое относится к сетевым технологиям.
так что проверяйте и относитесь с недоверием ::)
надеюсь нету оверквотинга?
Ах да! следите за тем что написали в скрипте и как он работает (mpd-keeper); он в бесконечном цикле ;D. Так что проверяйте процессы при первых запусках, а то мало ли что :-\
-
Почти неделю полёт нормальный. Наконец-то один из самых сочных фаерволов нормально заработал с билайном!
Осуществил то что давно хотел: "МОНСТРОУТЕР" 8) - 5015A-EHF-D525 на нём esxi а в нём pfsense + файлопомойка/торрент на винде. Лёгко держит 60 мегабит по l2tp.
Теперь всё самостоятельно переподключается при падениях wan и отрубе/восстановлении электричества. Проводил стресс-тесты - работает блин!
Я счастлив ;D
Ещё раз спасибо ncat!!!