= bubbalog =Дневникът на моето стадо

pfSense и динамично IP зад ADSL модем/рутер

Monday 08.12.2008 10:49 EET · Публикувано от в = FreeBSD =

Когато започнах с цялата постановка в нас използвах за рутер машина с нормална инсталация на FreeBSD, като версията се менеше с течение на годините. Напоследък обаче, нещата които ми трябваха започнаха доста да утежняват честите преинсталации, тъй като всичко беше на една машина (рутер, Apache, SFTP, Samba) и от любознание често омазвах пейзажа… Скоро се оборудвах с още ена малка слаба щайгичка и реших този проблем. Напрежението обаче остана. Как се подкарва FreeBSD на макла стара машинка? Лесно, на него не му пука. Но посля идваше номента за настройването… Само прекомпилирането на кърнъла (за да подържа port redirect) отнемаше около 5 часа. Да не говорим за други услуги… И се реши, че няма да я бъде тая, ще се търси някакво друго решение. Бях чувал за малки системки, с графичен веб интерфейс, за слаби машинки… и започна четене и търсене. Така след не много време попаднах на pfSense, който веднага ми стана любимец, тъй като и той е BSD.

Наред с всички други функции от които се нуждаех (VPN, NAT, port redirect, Firewall и др.) щеше да ми трябва и клиент за доменй към динамично IP. pfSense има такъв клиент… но и един огромен недостатък – предвиден е да работи като външна машина в мрежата и проверява какво и е моментното IP не от сайта на DynDNS , а директно на WAN интерфейса, който е примерно 192.168.1.125, защото както споменах съм зад ADSL на БТК. След което изпращаше показанията на Dyndns и както се очаква системата зацикляше, защото който се опитваше да достигне моя сървър moa_server.net, според записа на DynDNS се обръщаше не към моментното IP на модема ми, а към 192.168.100.125… Шок и УжасТ, как да се коригира това, като pfSense няма възможност за настройка да си взима адреса от DynDNS…

Е да, ама не. Оказа се че има начин. След дълго ровене и четене по въпроса намерих решението, което както винаги е просто…

1. Редактирайте /etc/inc/dyndns.class и добавете се следната функция:

/* Private function for getting real IP */
/* Author: Tri Tu */
function _checkip() {
log_error(“DynDns: Running _checkip() for real WAN IP”);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, ‘http://checkip.dyndns.com’);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$data = curl_exec($ch);
curl_close($ch);
list($part1, $part2) = split(‘: ‘, $data, 2);
list($ip, $junk) = split(‘<‘, $part2);
return $ip;
}

2. Заменете всички редове съдържащи

$wan_ip = get_current_wan_address();

със следния

$wan_ip = $this->_checkip();

3. Редактирайте на /etc/crontab на реда време за ъпдейт. Трябва да се отбележи, че ъпдейти по-чести от 5 минути биха блокирали вашия акаунт за седмица.

Остави коментар

Писането на кирилица е задължително!
Коментари, които не са на кирилица ще бъдат изтрити без предупреждение.
Всеки коментари съдържащи 1 или повече линка, ще бъдат публикувани след одобрение.