воскресенье, 27 июля 2008 г.

pfSense: поднимаем PPPoE сервер и делаем резервирование канала.

Сегодня речь пойдет о том каким образом можно раздать интернет в локалку так, чтобы каждый пользователь мог зайти в инет по логину/паролю и под конкретным ip-адресом. В последствии по этим ip-адресам можно организовать биллинг, и в конце месяца выставлять каждому счет на оплату.
Короче почувствуй себя провайдером - вот смысл данной статьи. ;-))
Итак, понеслась.
Для реализации нашего замысла понадобятся:

  1. Прямые и правильно установленные /dev/hands;
  2. Небольшой старенький комп (напр. PIII+128 Mb RAM+20 Gb HDD)
  3. Свежий стабильный дистрибутив pfSense (на момент написания статьи стабильной была версия 1.2).
Первые два пункта вопросов не вызывают. Но что же такое pfSense?
pfSense - это liveCD/embedded firewall-дистрибутив на базе FreeBSD, который весит всего 60 Mb (24 Mb - embedded). Управление происходит как через web-интерфейс, так и через консоль или telnet. Конфигурационный файл хранится в XML и может подгружаться с любого носителя без установки операционки на жесткий диск.

Изначально pfSense создавался как ответвление от m0n0wall и примечателен еще тем, что использует фильтр пакетов OpenBSD pf. Описывать все фичи данного дистрибутива нет никаго смысла, зайдите на оффсайт и почитайте сами. Единственное чего там пока нету - это биллинга NetAMS, хотя знающие люди вроде как смогли его туда прикрутить. :-) Существует еще проект firewall-дистрибутива smoothwall, но я его пока что не юзал, так что сказать чтолибо не могу.

Итак, я буду исходить из того, что дистрибутив уже проинсталлирован на жесткий диск и готов к работе. Если вас пугает процесс инсталляции, то зайдите на оффсайт и посмотрите интерактивный скринкаст о том как ставить pfSense на жесткий диск.
Прежде чем заняться настройкой дистра, необходимо пропатчить ему пакет dnsmasq, иначе при наличии в локалке уже поднятого днс-сервера фряха будет фигачить днс-запросы в локалку, и у юзеров на компах под виндой будут вылазить ошибки типа "в сети обнаружены совпадающие имена".
Как пропатчить pfSense хорошо написано здесь и вот здесь. Проблем с этим возникнуть не должно.

Итак, мы установили pfSense на жесткий диск, подключили комп к локалке, и зашли в админку через веб-интерфейс на http://192.168.100.242 (в вашем случае скорее всего http://192.168.0.1 или http://192.168.1.1), введя дефолтные логин и пасс (admin/pfsense)


У меня на компе стоит 4 сетевухи (одна запасная), хотя при их дефиците можно обойтись и двумя: 1 лановская, а вторая - интернетовская, а остальные сетевухи делаем при помощи VLAN, типа виртуальные сетевухи будут. Но у меня сетевух было в достатке, поэтому мудрить с VLAN я не стал. Итак, вот мои сетевые интерфейсы на серваке: fxp0, vr0, rl0 и запасной vr1. У pfSense есть свои логические интерфейсы по количеству физических (LAN, WAN, OPT1, OPT2, ...). И на страничке Assign мы задаем между ними соответствие. Прежде чем закрутить корпус сервака желательно переписать MAC-адреса сетевушек и пометить их расположение внутри сервака гденить на бумажке, чтобы не путаться на данном этапе.


Теперь приступаем к настройке интерфейсов LAN (смотрит в локалку), и WAN, OPT1 - смотрят в инет. В вашем случае лановский интерфейс может иметь другой адрес и другую маску (маска 24 означает 255.255.255.0, маска 30 = 255.255.255.252).
ВАЖНО! Обращаю ваше внимание на то, что PPPoE дозвон до инета можно использовать только на интерфейсе WAN. Данная недоработка будет устранена в версии pfSense 1.3. То есть, если хотим использовать два pppoe инета, то один из них придется пропустить через маршрутизатор типа d-link dir-100. У меня как раз домру инет именно так и приходит на интерфейс OPT1.


На WAN приходит инет от Полярной Звезды уже в нормальном виде, то есть ip, маска, шлюз.


На интерфейс OPT1 приходит дом.ру инет как раз с маршрутизатора д-линк, где сам маршрутизатор имеет адрес 192.168.100.200 и маску 255.255.255.0 (24), что я и отразил в настройках. А 192.168.100.243 - это просто свободный адрес, который присваивается интерфейсу OPT1.


Теперь переходим к интересному- PPPoE Server (находится в разделе Services).
Ставим следующие настройки:
Enable PPPoE Server
Interface = LAN
Subnet netmask = 24 (можете поставить свою маску, там например 16 или 8 или еще какую)
No. pppoe user = 100 (у меня на работе просто больше 100 компов всеравно пока нету)
Server address = 10.1.100.254 (адрес PPPoE сервака, естессно можно присвоить любой другой)
Remote address range = 10.1.100.0 (диапазон адресов клиентов, здесь 0 на конце означает диапазон 10.1.100.1 - 10.1.100.255)
Здесь же можно вбить настройки RADIUS сервака как уже установленного так и внутреннего сервака pfSense - freeradius, который можно скачать и установить в разделе System - Packeges.
Лично я человек ленивый, поэтому меня вполне устроила внутренняя база pfSense без всяких там RADIUS'ов :-)

На соседней вкладке Users заводим собственно аккаунты пользователей, то есть прописываем для каждого логин, пасс и ip. Все очень просто.


Теперь настраиваем еще один интересный сервис LoadBalancer (находится в разделе Services)
Вдаваться в технологию функционирования данного сервиса я не буду, если интересно почитайте офф форум или документацию. Я расскажу лишь как сделать так, чтобы при падении одного инет канала, тут же поднимался другой (отмечу, что резервный канал поднимается примерно через 1 сукунду). Стоит отметить что количество интернет каналов ограничено лишь вашими финансовыми возможностями, то есть на резерве может быть хоть 10 интернет каналов. :-)
Итак настройки:
Name = loadbalans (в общем то че хотим здесь то и пишем)
Type = Gateway
Behaviour = Failover (то есть один канал упал - второй канал поднялся)
Затем проделываем 2 раза аналогичную операцию:
  1. Monitor IP = WAN's Gateway
  2. Intarface name = WAN
  3. жмем на кнопку Add to pool
  1. Monitor IP = OPT1's Gateway
  2. Intarface name = OPT1
  3. жмем на кнопку Add to pool
Жмем Save.


В результете мы получим на вкладке Status - Load Balanser окрашенные в зеленый цвет интерфейсы шлюзов. Если какойто шлюз имеет желтый или красный цвет, то возможно нету связи через данный интерфейс, или не подключен кабель к соотв интерфейсу или настройки интерфейса заданы неверно или чтонить в таком же духе. Короче когда оба шлюза норм пингуются, то они окрашены в зеленый цвет.


Теперь осталось настроить только встроенный фаерволл.
Первым делом удаляем дефолтное правило на вкладке LAN, мы ведь условились, что интернет будут получать только PPPoE клиенты. :-) Либо можно оставить это дефолтное правило, но заменить в нем Distanation с *(any) на LAN Subnet.
В итоге у нас будет одно правило (макс два - если не удалять дефолтное) и находиться оно будет в разделе PPPoE VPN.
Правило будет таким:

Pass PPPoE Users * * * loadbalans


То есть мы разрешаем любой исходящий трафик только от PPPoE клиентов.
Если нужно будет кому то еще чтонить запретить или разрешить, то делаем это. Однако здесь я не буду описывать настройку фаервола pfSense. Читайте документацию, офф форум.

Теперь осталось только настроить PPPoE соединения на стороне клиентов. Я рекомендую использовать последнюю стабильную версию драйверов RASPPPOE by Robert Schlabbach, т к они более функциональны чем встроенные драйверы Windows.

3 комментария:

priliw комментирует...

Хорошая штука Pfsense, чем то походит на аппаратный роутер типа Dlink, но естественно с обалденными возможностями. Отличная статья, правда на момент прочтения я уже разобрался во всём, единственное не понял как траффик по клиентам билинговать, а то в статье об этом упомянулось в начале?.. Через что это делается? Через радиус, или ещё как можно клиентов билинговать?

Автор комментирует...

Клево написано, буду побывать, надеюсь все заработает! Спасибо!

Denis I комментирует...

Ошибка 734 при попытке подключения