DHCP + PPTP on WAN
-
2.1 Обновился
dhcp+pptp
Стояла 2,0 все работало, правда с реконектом были проблемы
Настройка такова ВАН-дхцп опт1 на вани там пптп
Все тоже в 2,1 лыжи не едут, захочет подключится, захочет нет….
Такое чувство что подключается не через ВАН, а через ХЗ
Подскажите что делать? Реконект важен....После обновы сбросил в заводские.
-
немного разобрался, конектится он через дефолтный гетвей, потому при его смене перестает все работать, ну и по прежнему при старте нет конекта, надо пинать кнопкой, после этого реконект есть, проверено высовыванием кабеля, вроде как еще есть плавающая проблема, с реконектом, но это нужно подтвердить еще….
Какую версию поставить для ставить для стабильного конекта????? -
на 2.0 костыль использовали для pptp?
-
Щас тупо откатил на 2.0 RC3 закинув через вебморду, работает, реконекты не проверял, но после перезагрузки завелось само…
Костыли никогда не использовал. и так работало.... Правда не всегда хорошо :)
Версия i386
К слову х64 когда-то ставил, недопилы в дровах там были.... -
Коллеги, подскажите, какая сейчас ситуация с l2tp поверх dhcp для Beeline?
У меня не поднимается l2tp ((
Мои настройки:
Interfaces:WAN
Enable: Enanable Interface
Description:WAN
IPv4 Configuration Type: DHCP
IPv6 Configuration Type: None
Остальные параметры не менял
Interface: LAN
Enable: Enanable Interface
Description:LAN
IPv4 Configuration Type: Static IPv4
IPv6 Configuration Type: None
IPv4 address: 192.168.20.100/24
Остальные параметры не менял
Interfaces: PPP
Link Type: L2TP
Link Interfaces: WAN
Description: Beeline
Username: 089xxxxxxx
Password: xxxxxxxxxxxx
Local IP(em1): 9x.xxx.xxx.xxx (у меня статика). Почему маска 32 недоступна?
Remote IP address: 85.21.0.255 (tp.internet.beeline.ru)
Interfaces: OPT1
Enable: Enanable Interface
Description:OPT1
IPv4 Configuration Type: L2TP
IPv6 Configuration Type: None
Username:089xxxxxxxxxx
Password:xxxxxxxxxx
Local IP address: 9x.xxx.xxx.xxx (у меня статика). Почему маска 32 недоступна?
Remote IP address: 85.21.0.255 (tp.internet.beeline.ru)
Enable-on-Demand mode: yes
Idle timeout: 15
Interfaces: Assign network ports
WAN - em1
LAN - em0
OP1 - l2tp0(wan) - Beelineifconfig выдает ppp0:
inet addr: 9x.xxx.xxx.xxx P-t-P:85.21.0.255 Mask:255.255.255.255 -
А поискать - не судьба?
https://www.google.com.ua/search?client=opera&q=Beeline+pfsense
http://forum.pfsense.org/index.php/topic,64367.15.html
-
@werter
Спасибо за гугловую ссылку, она он очень помогает. Я переформулирую вопрос: До сих пор нужно все допиливать, что описано в этой ветки? (просто сейчас версия 2.1, и прошло уже достаточно времени со времен постов) -
Просто у вас провайдер "чудесный". Pfsense тут ни при чем.
-
Здравствуйте!
Я вот недавно по совету коллеги решил на pfSense перейти(канал не качает RT-N16) и сижу дома на том самом чудесном провайдере Билайн. Еще в пору WL500GpV2 и RT-N16 приходилось бороться(писать скрипт в Крон) с его чудными замутами с tp.internet.beeline.ru и сменой айпишника без дропа PPPTP(при переходе на l2tp такая беда почти пропала). Но на pfSense - это просто чума какая то!
Пробовал местный солюшен с правкой /etc/inc/interfaces.inc и скриптами в Крон - хрен там. Не пашет! Последил nslookup-ом в течение двух вечеров что делается на tp.internet.beeline.ru - он с переодичностью в ~30мин - 2ч полностью меняет пару айпишников гейтов(по двум DNS у меня приходят). Я пробовал менять на "протухший" айпи в интерфейсе Opt1(l2tp0) из какой то предыдущей пары при совершенно иной другой паре IP - работает до какого то момента и после очередной смены как то все падает.
В итоге я решил так попробовать сделать(пока самый простой вариант) решения проблемы "протухания" гейта:
в Cron добавил команду(берет первый IP гейта из пары, соотвественно самый "быстрый"):
nslookup tp.internet.beeline.ru | grep "Address: " -m 1 | grep "ddress: " | cut -d : -f 2 | cut -c 2-13 >/tmp/l2tp0_routerс настройкой времени запуска minute: */1 и всеми остальными *, пока тестирую - все живет и не падает. с переодичностью 1 минуту меняется IP(или не меняется если текущий гейт "шустрее") в gateway на интерфейсе OPT1(l2tp0), связь не рвется.
При этом в настройках l2tp прописан прямой IP одного из гейтов(самый "частый" по наблюдениям).
Такой вариант кто то пробовал? Это я до Плацебо додумался или это какое то реальное решение?
UPD спустя сутки мониторинга: роутер без дропов, падений физ-линка, l2tp прожил сутки. При этом я извне периодически смотрел какой IP у Gateway на l2tp - пару раз менялись пары, но ни разу не прерывалось. Кажется проблема с гейтами решена без особого куроченья файлов системы.
-
2 NailMan
Спасибо! Если неделю не будет проблем - это еще одно решение в "борьбе" с Пчелайном.
P.s.
(канал не качает RT-N16)
Советую взглянуть на прошивку Tomato - http://tomato.groov.pl/
Описание прошивки - http://www.bxtra.net/articles/2012-12-23/how-to-flash-tomatousb-by-shibby-on-asus-rt-n12-b1c1-wireless-n-routerВаша будет по адресу - http://tomato.groov.pl/download/K26/build5x-115-EN/tomato-K26USB-1.28.RT-MIPSR2-115-AIO.trx
P.s. Есть ньюанс в настройке Dual\Russian , но могу подсказать как решить:
1. В веб-морде на WAN настраиваете L2TP.
2. С помощью скриптов настраивате "серый" адрес на WAN и маршрутизацию (подставляйте свои данные!) :Firewall:
iptables -A POSTROUTING -t nat -o vlan1 -j SNAT –to-source 172.25.83.245
ip route change 172.25.0.0/16 dev vlan1 via 172.25.83.1WAN UP:
ifconfig vlan1 172.25.83.245 netmask 255.255.255.0
route add -net 172.25.0.0 netmask 255.255.0.0 gw 172.25.83.1vlan1 - WAN-интерфейс (у вас он может называться на роутере по-другому - команда ifconfig покажет)
172.25.83.245 - заменить на свой локальный IP
172.25.0.0 netmask 255.255.0.0 - заменить на адрес(-а) сети(-ей) и подсети(-ей) вашего провайдера
172.25.83.1 - заменить на адрес вашего локального шлюза
И не забываем отключить "Предотвращать DNS-атаки" - блокирует впн и торрент.
-
2 NailMan
Спасибо! Если неделю не будет проблем - это еще одно решение в "борьбе" с Пчелайном.
Рано я радовался :( , проблемы не решены полностью таким простым способом. Смену гейтов на l2tp0 мой фокус позволяет побороть, но периодически физический WAN "теряет" оба DNS-сервера и все встает в клин. Вот как раз пока я сегодня на работу ехал, оно отвалилось от WAN. Вчера тоже самое случилось когда я был дома. Успел сохранить лог чтобы покопаться в ситуации.
Надо сделать скриптик и отслеживать наличие DNS на WAN порту, если не нашлись - делаем WAN down/up. Примерно похоже я на линуксе на wl500/n16 делал, только я там получал IP своего DDNS-домена и если он был отличен от того что реально на L2TP порту то физзинк линк перезапускался.
Вечером попробую воплотить скриптик.
-
Итак, потестировал несколько дней, нарвался на сброс DNS на физическом WAN, подробно проанализировал ситуацию с интерфейсами и адресами и с радостью оттестировал два скрипта(пришлось кой чего подправить). Прошу не пинать - я не линуксоид и тем более не фришник. Давным давно программировал на дельфях, потому может покажется не красиво и неоптимально.
Вот что вышло у меня для решения проблем с линком на Билайне. Делаем 2 скрипта и добавляем их в Крон:
1. Патчинг gatways для L2TP. Я разместил его в /root/etc/watch_gw.sh#!/bin/sh nslookup tp.internet.beeline.ru | grep "Address: " -m 1 | grep "ddress: " | cut -d : -f 2 | cut -c 2-13 >/tmp/l2tp0_router nslookup tp.internet.beeline.ru | grep "Address: " -m 2 | grep "ddress: " | cut -d : -f 2 | cut -c 2-13 >/tmp/l2tp0_defaultgw
где первый из полученный адресов засунется в /tmp/l2tp0_router (как я понял это адрес шлюза), второй засунется в дефолтный шлюз( вчем между ними разница я не знаю, допирал интуитивно)
В Кроне он запускается раз в минуту, т.е. minutes = */1, остальное *
2. следилка за WAN. Проверяет поднят ли WAN(если нет, стартует его и l2tp вслед за ним[код использовал частично из местного солюшена]), если поднят, то проверяет наличие записей в /etc/resolv.conf и если там 2 строки - первая домен и вторая это адрес локалхоста, то гасит и подымает wan и стартует L2TP. После делает тоже самое что и watch_gw.sh (на всяк пожарный). размещается в /root/etc/watch_dns.sh
#!/bin/sh wanisup=$(ifconfig ue0 | grep "UP" | cut -d "<" -f 2 | cut -d "," -f 1) if [ -z $wanisup ]; then ifconfig ue0 down sleep 5 ifconfig ue0 up sleep 10 if [ -f /var/run/l2tp_opt1.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/l2tp_opt1.pid) echo "l2tp is down - killing mpd5" | logger echo `date` "l2tp is down - killing mpd5" >>/tmp/watch_dns.log kill $res2 fi echo "restart l2tp by mpd5" | logger echo "restart l2tp by mpd5" >>/tmp/watch_dns.log /usr/local/sbin/mpd5 -b -k -d /var/etc -f mpd_opt1.conf -p /var/run/l2tp_opt1.pid -s ppp l2tpclient sleep 10 else dns=$(wc -l /etc/resolv.conf | cut -d ' ' -f 8) dnsip=$(cat /etc/resolv.conf | grep "nameserver " | cut -d ' ' -f 2) if [ "$dns" == "2" ] && [ "$dnsip" == "127.0.0.1" ]; then ifconfig ue0 down sleep 5 ifconfig ue0 up sleep 10 if [ -f /var/run/l2tp_opt1.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/l2tp_opt1.pid) echo "l2tp is down - killing mpd5" | logger echo `date` "l2tp is down - killing mpd5" >>/tmp/watch_dns.log kill $res2 fi echo "restart l2tp by mpd5" | logger echo "restart l2tp by mpd5" >>/tmp/watch_dns.log /usr/local/sbin/mpd5 -b -k -d /var/etc -f mpd_opt1.conf -p /var/run/l2tp_opt1.pid -s ppp l2tpclient sleep 10 fi nslookup tp.internet.beeline.ru | grep "Address: " -m 1 | grep "ddress: " | cut -d : -f 2 | cut -c 2-13 >/tmp/l2tp0_router nslookup tp.internet.beeline.ru | grep "Address: " -m 2 | grep "ddress: " | cut -d : -f 2 | cut -c 2-13 >/tmp/l2tp0_defaultgw fi
Соответственно ue0 - в данном случае мой физический WAN, L2tp на OPT1
В Кроне отрабатывается раз в 2 мин, соотвественно minutes */2
Итог работы - отследился и сбросился-поднялся физлинк и за ним L2TP при ситуации "пропадания" DNS-ов, и постоянно "держится на пульсе" гейвей. С первым скриптом не падало подряд 3 дня. Сейчас будет не падать постоянно.
Вот как то так.
ДА! Релиз у меня 2.1-RELEASE (i386) если это важно.
-
2 NailMan
Еще раз выражаю благодарность.
Вот уж действительно полезный пост. -
2 NailMan
Еще раз выражаю благодарность.
Вот уж действительно полезный пост.Да не зачто, просто думаю много людей мучалось с этим провайдером и pfsense и перешло на что то другое. Почему то тот солюшен совсем у меня не заработал. Просто я бы сказал рушил всю систему работы с интерфейсами. Судя по файлу interfaces.inc в солюшене версия pfsense старей текущей 2.1 и что то не совмещается с чем то. Я нашел очень много отличий пока пробовал встроить в свой pfsense. Потому вариант с раскурочиванием системы не вариант или вариант под конкретную версию. Я не люблю такого, всегда предпочитал универсальность.
Итак маленький апдейт сделал скрипта-следилки за dns/wan. Еще одна проблема с "Корбайном" нашлась - они сбрасывают DHCP IP на WAN, но при этом в resolv.conf не удаляются сервера dns. Предыдущий скрипт этой ситуации не ловил(ее и не случалось прежде). Потому добавил детектинг того что IP ушел, а nameserver-ы остались, ну и down/up им делаю.
#!/bin/sh wanisup=$(ifconfig ue0 | grep "UP" | cut -d "<" -f 2 | cut -d "," -f 1) # echo "$wanisup" if [ "$wanisup" != "UP" ] then echo `date` "WAN interface is down, up it!" >>/tmp/watch_dns.log echo "WAN interface is down, up it!" | logger # echo "WAN interface is down, up it!" ifconfig ue0 up sleep 10 if [ -f /var/run/l2tp_opt1.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/l2tp_opt1.pid) echo "l2tp is down - killing mpd5" >>/tmp/watch_dns.log echo "l2tp is down - killing mpd5" | logger # echo "l2tp is down - killing mpd5" kill $res2 fi echo "restart l2tp by mpd5" >>/tmp/watch_dns.log echo "restart l2tp by mpd5" | logger # echo "restart l2tp by mpd5" /usr/local/sbin/mpd5 -b -k -d /var/etc -f mpd_opt1.conf -p /var/run/l2tp_opt1.pid -s ppp l2tpclient else #if have no WAN ip and nameservers in /etc/resolv.conf present or noit present waniptype=$(ifconfig ue0 | grep inet | cut -d " " -f 1 | cut -c 2-6) # echo "$waniptype" if [ "$waniptype" == "inet6" ] then echo `date` "No WAN IP present! Restart WAN interface" >>/tmp/watch_dns.log echo "No WAN IP present! Restart WAN interface" | logger # echo "No WAN IP present! Restart WAN interface" ifconfig ue0 down echo "WAN interface down..." >>/tmp/watch_dns.log echo "WAN interface down..." | logger # echo "WAN interface down..." ifconfig ue0 up sleep 10 echo "WAN interface up..." >>/tmp/watch_dns.log echo "WAN interface up..." | logger # echo "WAN interface up..." if [ -f /var/run/l2tp_opt1.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/l2tp_opt1.pid) echo "l2tp is down - killing mpd5" >>/tmp/watch_dns.log echo "l2tp is down - killing mpd5" | logger # echo "l2tp is down - killing mpd5" kill $res2 fi echo "restart l2tp by mpd5" >>/tmp/watch_dns.log echo "restart l2tp by mpd5" | logger # echo "restart l2tp by mpd5" /usr/local/sbin/mpd5 -b -k -d /var/etc -f mpd_opt1.conf -p /var/run/l2tp_opt1.pid -s ppp l2tpclient else #if WAN ip is present and nameservers is lost dns=$(wc -l /etc/resolv.conf | cut -d ' ' -f 8) dnsip=$(cat /etc/resolv.conf | grep "nameserver " | cut -d ' ' -f 2) if [ "$dns" == "2" ] && [ "$dnsip" == "127.0.0.1" ] then ifconfig ue0 down echo "WAN interface down..." >>/tmp/watch_dns.log echo "WAN interface down..." | logger # echo "WAN interface down..." ifconfig ue0 up sleep 10 echo "WAN interface up..." >>/tmp/watch_dns.log echo "WAN interface up..." | logger # echo "WAN interface up..." if [ -f /var/run/l2tp_opt1.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/l2tp_opt1.pid) echo "l2tp is down - killing mpd5" >>/tmp/watch_dns.log echo "l2tp is down - killing mpd5" | logger # echo "l2tp is down - killing mpd5" kill $res2 fi echo "restart l2tp by mpd5" >>/tmp/watch_dns.log echo "restart l2tp by mpd5" | logger # echo "restart l2tp by mpd5" /usr/local/sbin/mpd5 -b -k -d /var/etc -f mpd_opt1.conf -p /var/run/l2tp_opt1.pid -s ppp l2tpclient fi fi fi
Плюс оба скрипта я в Кроне раз в минуту запускаю. По статистике(по логу /tmp/watch_dns.log) игра с DNS/WAN IP у Билайна случается раз 5-6 в сутки и скрипт их успешно отрабатывает. Да, изнутри в это время падает инет, ничего тут не поделаешь. Но пока эту хрень в pfSense не пофиксили, придется костылями довольстоваться.
Кстати на Линукс-роутерах это как то ловится в основной массе, но вот с ситуацией когда WAN IP теряется они не справлялись у меня самостоятельно.
-
Не сочтите за рекламу, но Netgear r6300 работает с Пчилайном без проблем - Вот это загадка (( ))
-
Не сочтите за рекламу, но Netgear r6300 работает с Пчилайном без проблем - Вот это загадка (( ))
Да за такие деньги он должен работать со всем подряд - http://hotline.ua/network-besprovodnoe-oborudovanie/netgear-r6300/ (~275 $)
У меня с "пчелайном" и Asus RT-N12 C1\D1 за 30$ и RT-N10P за 20$ с прошивкой Tomato (Shibby's mod) как часы трудится.
P.s. Пардон за оффтоп, я бы лучше Tenda W1800R-ую (http://hotline.ua/network-besprovodnoe-oborudovanie/tenda-w1800r/) взял. И перепрошил в Tomato. Или что-то из Mikrotik-a.
А так - нахрена дома роутер почти за 300$? "Хороший понт - дороже денег"@ не моё. -
А решение от асус сюда никак нельзя перенести?
-
А то что в Асусе с Томатой на борту все же Линух (и попиленный) , а не BSD - ничего ?
Тем более, что ув. NailMan опубликовал вполне рабочее решение.
-
А вот это решение http://code.google.com/p/vpnpptp/ никак нельзя под наши нужды использовать, чтобы конечному пользователю нужно было делать минимум телодвижений? (да, я понимаю, что там опять линуксы, а тут фряха)?
Еще вопрос - если у меня внешний статический IР, то будет ли у меня падать интернет, как описано в посте с изменением настроек/скриптами?
Почему я использую именно это решение - хочу после настройки попробовать отказоустойчивость и балансировку нагрузки. -
Господа! Я докладываюсь по части испытаний своих скриптиков:
Первоначально было 2 проблемы, из-за которых начался у меня сыр-бор - это пропадание DNS-серверов из WAN (DNS-ы у меня берутся по WAN(1) и L2TP-OPT1(2)) и "потеря" шлюза на L2TP.Итоговый скрипт watch_dns.sh в результате многочисленных правок таков:
#!/bin/sh #check WAN interface manipulation wanisup=$(ifconfig ue0 | grep "UP" | cut -d "<" -f 2 | cut -d "," -f 1) echo "$wanisup" if [ "$wanisup" != "UP" ] then echo `date` "WAN interface is down, up it!" >>/tmp/watch_dns.log echo "WAN interface is down, up it!" | logger echo "WAN interface is down, up it!" ifconfig ue0 up sleep 10 if [ -f /var/run/l2tp_opt1.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/l2tp_opt1.pid) echo "l2tp is down - killing mpd5" >>/tmp/watch_dns.log echo "l2tp is down - killing mpd5" | logger echo "l2tp is down - killing mpd5" kill $res2 fi echo "restart l2tp by mpd5" >>/tmp/watch_dns.log echo "restart l2tp by mpd5" | logger echo "restart l2tp by mpd5" /usr/local/sbin/mpd5 -b -k -d /var/etc -f mpd_opt1.conf -p /var/run/l2tp_opt1.pid -s ppp l2tpclient else #if have no WAN ip and nameservers in /etc/resolv.conf present or no present waniptype=$(ifconfig ue0 | grep inet | cut -d " " -f 1 | cut -c 2-6) echo "$waniptype" l2tpexist=$(ifconfig | grep l2tp0) if [ "$waniptype" == "inet6" ] then echo `date` "No WAN IP present! Restart WAN interface" >>/tmp/watch_dns.log echo "No WAN IP present! Restart WAN interface" | logger echo "No WAN IP present! Restart WAN interface" ifconfig ue0 down echo "WAN interface go down..." >>/tmp/watch_dns.log echo "WAN interface go down..." | logger echo "WAN interface down..." ifconfig ue0 up sleep 6 echo "WAN interface is up..." >>/tmp/watch_dns.log echo "WAN interface is up..." | logger echo "WAN interface up..." if [ -f /var/run/l2tp_opt1.pid ] && [ "$l2tpexist" == "" ] 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/l2tp_opt1.pid) echo "l2tp is down - killing mpd5" >>/tmp/watch_dns.log echo "l2tp is down - killing mpd5" | logger echo "l2tp is down - killing mpd5" kill $res2 fi echo "restart l2tp by mpd5" >>/tmp/watch_dns.log echo "restart l2tp by mpd5" | logger echo "restart l2tp by mpd5" /usr/local/sbin/mpd5 -b -k -d /var/etc -f mpd_opt1.conf -p /var/run/l2tp_opt1.pid -s ppp l2tpclient else 0 #if WAN ip is present and nameservers is lost dns=$(wc -l /etc/resolv.conf | cut -d ' ' -f 8) dnsip=$(cat /etc/resolv.conf | grep "nameserver " | cut -d ' ' -f 2) if [ "$dns" == "2" ] && [ "$dnsip" == "127.0.0.1" ] then echo `date` "No DNS servers present! Restart WAN interface" >>/tmp/watch_dns.log echo "No DNS servers present! Restart WAN interface" | logger echo "No WAN IP present! Restart WAN interface" ifconfig ue0 down echo "WAN interface down..." >>/tmp/watch_dns.log echo "WAN interface down..." | logger echo "WAN interface down..." ifconfig ue0 up sleep 6 echo "WAN interface up..." >>/tmp/watch_dns.log echo "WAN interface up..." | logger echo "WAN interface up..." if [ -f /var/run/l2tp_opt1.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/l2tp_opt1.pid) echo "l2tp is down - killing mpd5" >>/tmp/watch_dns.log echo "l2tp is down - killing mpd5" | logger echo "l2tp is down - killing mpd5" kill $res2 fi echo "restart l2tp by mpd5" >>/tmp/watch_dns.log echo "restart l2tp by mpd5" | logger echo "restart l2tp by mpd5" /usr/local/sbin/mpd5 -b -k -d /var/etc -f mpd_opt1.conf -p /var/run/l2tp_opt1.pid -s ppp l2tpclient else #check L2TP interface if WAN is up and IP exist and DNS server present but no L2TP interface exist(is down) l2tpexist=$(ifconfig | grep l2tp0) echo found thist -"$l2tpexist"- if [ "$l2tpexist" == "" ] then echo matched! if [ -f /var/run/l2tp_opt1.pid ] then echo mpd5 found! # 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/l2tp_opt1.pid) echo `date` "L2TP interface is not exist but WAN IP is present - killing mpd5" >>/tmp/watch_dns.log echo "L2TP interface is not exist but WAN IP is present - killing mpd5" | logger echo "l2tp is down - killing mpd5" >>/tmp/watch_dns.log echo "l2tp is down - killing mpd5" | logger echo "l2tp is down - killing mpd5" kill $res2 fi echo "restart l2tp by mpd5" >>/tmp/watch_dns.log echo "restart l2tp by mpd5" | logger echo "restart l2tp by mpd5" /usr/local/sbin/mpd5 -b -k -d /var/etc -f mpd_opt1.conf -p /var/run/l2tp_opt1.pid -s ppp l2tpclient fi fi fi fi
Он следит за пропажей DNSов, за падением L2TP, и за пропажей WAN IP(об этом спишу подробней чуть ниже). Ранее приводимый скрипт watch_gw.sh без изменений. Я их оставил разъединенными, хотя и можно объединить добавив действия watch_gw.sh в начало watch_dns.sh.
А теперь о главном:
- проблемы с потерей L2tp Gateway пропала совершенно(из всех ситуаций отслеживаемых и регистрируемых скриптом) и случаев ее появления не было замечено,
- проблемы с потерей DNS-серверов из WAN отмечается примерно 0.5-1% из регистрируемых срабатываний скрипта на бяку.
- 5% срабатываний - это потеря L2TP-линка(сброс у провайдера), скрипт успешно его ловит и перезапускает Mpd5
- 94% всех срабатываний и соотвественно пересброс WAN и перезапуск L2Tp теперь у меня - это косячный DHCP-клиент самой FreeBSD :(
Это стало камнем преткновения для меня и разрывает мне мозг.
С периодичностью 10мин-3ч, WAN интерфейс наглым образом теряет свой IP. Судя по раскопанным мной данным DHCLIENT в сборке pfsense какой то дурацкий мягко скажем. Он банально не переполучает IP после окончания срока аренды, и не может получить его сам. Причем в реалтайме это выглядит так - все работает норм, пропадает IP, но траффик какое то время через L2TP еще ходит(несколько секунд). если была открыта страница Interfaces в морже и тыкнуть Release/Renew, и WAN получит адрес снова (мне Билайн дает один и тот же адрес из их внутренней сети), а при этиом L2TP не порвется, то все фурычить будет дальше. Как это так я не понимаю логически, но факт.
Если отрабатывает сам скрипт, то он отлавливает пропажу IP, и все пересбрасывает. Лаг получается максимум 1мин 10 сек. Меня это пока устраивает, но крайне бесит. Пока писал этот пост, разок оно потерялось.
Покопал инет на тему Dhclient и понял что он какой то ущербный. В принципе есть альтернативы. Пока я копаю вот эту тему модификации DHCP
http://forum.ru-board.com/topic.cgi?forum=65&topic=4463буду пробовать менять клиента на pfsense и тогда костыль должен заработать, но для чистого freebsd там костыль просто делается, а у нас конфиг dhclient-а виртуальный(временный), потому пришлось сделать простой костыль для костыля: :D
Сделал копию генерируемого dhclient_wan.conf, добавил в него строчкуsupersede dhcp-server-identifier 255.255.255.255;
и сделал скриптик
#!/bin/sh pid=$(ps -U root,admin,_dhcp | grep dhclient -m 1 | cut -d " " -f 2) kill $pid cp /root/etc/dhclient_wan.conf /var/etc/dhclient_wan.conf dhclient ue0
который поместил в /usr/local/etc/rc.d/dhc_copy.sh
таким образом после загрузки убивается запущенный системой dhclient, "патчится" его конфиг и запускается вновь. Результат пока не оценил, так как этот трик родному клиенту как бы немного монопенисуален. Пока работаю над этой темой. Если поборется, то глобальная задача будет решена.
очень надеюсь что в новых релизах клиент будет пропатчен и будет создана возможность добавлять опциональные поля в настрйоках DHCP на WAN, как это сделано в других настройках.
Рассмотрел тут на днях (отчаявшись уже с dhclient) всяких современных роутеров начиная от всяких Zyxel giga и N66 до N16+Tomato - нет альтернатив pfsense чтобы реальизовать все на одном устройстве без колхозинга. Мн нужен мощный роутер(сквозные торренты на 100мбит), обязательный штатный SSH и обязательный встроенный OpenVPN до внутренней сети, особенно с внутренним скачиваемым клиентом и удобным центром сертификации. К сожалению на "аппаратные" роутеры не поставишь дополнительного софта - тупо места нет, а всякие шустрые Томаты с USB не работают, а RTN-прошивки(олеговские) только для N16 максимум существуют, и опять таки потребуется внешний диск - я от такого решения ушел как раз. К сожалению пока альтернатив нет из аппаратных ну окромя всяких микротиков может.
А вообще я уже к интерфейсу pfsense привык, его модульность dashboard упростила мне многое по управлению домашней сеткой извне. К примеру запуск wake-on-lan домашнего компа теперь не проблема, раньше мне приходилось сперва запускать openvpn(на HP Microserver за роутером), в режиме TAP и включать комп и потом лезть на него, теперь все обходится на одном девайсе в режиме TUN(гораздо более простом) и все само стартует в отличие когда OpenVPN на Windows(конфиг сервера не стартует сам).
Вобщем то решаю проблемы DHCP и надеюсь на будущее обновление.