DHCP + PPTP on WAN
- 
 получил l2tp сервер по имени 
 раскомментил строку №1295 файла /etc/inc/interfaces.inc $gateways[$pid] = gethostbyname ($gateways[$pid]); 
 и остальные там же (комментарий многострочный).
 Получил брас по имени (tp.corbina.net)
 Провайдер Билайн Москва 
 Пока полет нормальныйp.s. будете менять - сделайте бэкап ;) Правда еще неясно как лучше маршруты прописать (у меня 85.21.0.0/24 WAN - 10.87.8.1) 
 наверное можно оставить, так как ripe пишетinetnum: 85.21.0.0 - 85.21.0.255 netname: CORBINA-BRAS descr: Broadband Access Servers Loopbacks in Moscow country: RU
- 
 Подтверждаю слова 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 если провайдер требует такие настройки:
 .jpg) 
 ?
 Лог: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 если провайдер требует такие настройки:
 .jpg) 
 ?
 Лог: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 fi2.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, которые показывается при приветственном окне в pfsensewan='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. Так что проверяйте процессы при первых запусках, а то мало ли что :-\ 
