|
|
(Не показано 27 проміжних версій цього користувача) |
Рядок 1: |
Рядок 1: |
| ==Варианты== | | ==Модуль== |
| NoDeny+ предоставляет 3 принципиально разных варианта работы Dhcp-модуля:
| |
|
| |
|
| * С Radius: dhcp-сервер получает ip от NoDeny+ и выдает клиенту.
| | Для работы по dhcp в NoDeny Plus необходим модуль dhcp, который нужно приобрести дополнительно на главном сайте NoDeny. В NoDeny Next модуль входит в базовую поставку. |
| * Без Radius: dhcp-сервер выдает клиенту ip на свое усмотрение и информирует NoDeny+
| | <br><br> |
| * NoDeny периодически формирует dhcpd-конфиг с прописанными связками mac-ip
| |
|
| |
|
| Если вы не можете определиться какой из вариантов использовать - рекомендуем без Radius - он проще в настройке. Более того, isc-dhcpd не работает с Radius, поэтому в качестве dhcp-сервера придется использовать либо accel-ppp (если у вас Linux) либо запустить виртуалку с mikrotik и использовать его dhcpd.
| | ==Варианты настройки== |
| | | NoDeny+ предоставляет 3 принципиально разных варианта работы Dhcp-модуля: |
| ===Схема работы без Radius=== | | <br><br> |
| | | * [[Dhcp+Radius|С Radius]]: dhcp-сервер получает ip от NoDeny+ и выдает клиенту |
| Dhcp-сервер работает автономно от NoDeny. Т.е. выдает ip адреса на свое усмотрение! Dhcp-сервер запоминает какому мак-адресу выдавал какой ip, т.е одно устройства скорее всего будет получать постоянно один и тот же ip. Тем не менее, это не гарантируется и вообще неважно для NoDeny.
| | * [[Dhcp без Radius|Без Radius]]: dhcp-сервер выдает клиенту ip на свое усмотрение и передает данные NoDeny+ |
| | | * [[dhcp-конфиг с помощью make config|Автогенерация конфига]]: NoDeny периодически формирует dhcpd-конфиг с прописанными связками mac-ip |
| Как выглядит сам процесс:
| | <br><br> |
| | | Если вы не можете определиться какой из вариантов использовать, рекомендуем без Radius - он проще в настройке.<br><br> |
| * Абонент включает компьютер и получает ip от dhcp-сервера. При этом посылается сигнал в NoDeny через скрипт modules/dhcp/events.pl.
| |
| * NoDeny смотрит какому абоненту принадлежит мак-адрес (либо же комбинация мак+свич+порт) и привязывает ip, который выдал dhcpd, к его учетке. Абонент получает доступ в интернет.
| |
| * В первый раз абонент, естественно, не будет найден, поэтому ip не привязывается. Абонент, открыв браузер и введя любой адрес, попадает на заглушку, на которой ему сообщается "для получения доступа в интернет введите логин и пароль".
| |
| * После ввода логина и пароля, NoDeny запоминает, что мак-адрес (либо же комбинация мак+свич+порт) принадлежит такому-то абоненту.
| |
| * При последующих подключениях логин и пароль запрашиваться не будут пока не будет сменено устройство либо точка подключения (в случае использования option 82).
| |
| | |
| ====Комментарий по Option 82====
| |
| | |
| Без использования управляемого оборудования, dhcp не достаточно безопасно т.к. злоумышленник может подделать мак-адрес. Option 82 заставляет свичи информировать dhcp-сервер о том, с какого свича и какого порта пришел запрос. Поэтому подделка мака не приведет к успеху, поскольку мак свича и номер порта, злоумышленник не сможет подделать (если он подключен к свичу с option 82, естественно).
| |
| | |
| ===Схема работы с Radius===
| |
| Dhcp-сервер работает с NoDeny через Radius аналогично pppoe. | |
| | |
| * Клиент включает компьютер, который шлет запрос на dhcp-сервер. Тот в свою очередь шлет запрос в Radius.
| |
| * Радиус запускает NoDeny mysql-процедуру получения ip по мак адресу (комбинации мак+свич+порт). В ответ получает гостевой ip (в админке помечаются тегом guest в пуле ip)
| |
| | |
| ==Вариант без Radius==
| |
| | |
| Ставим dhcp-сервер
| |
| | |
| <source lang="bash"> | |
| pkg install isc-dhcp43-server
| |
| </source>
| |
| | |
| Автозапуск и логирование
| |
| | |
| <source lang="bash"> | |
| echo 'dhcpd_enable=YES' >> /etc/rc.conf
| |
| echo 'dhcpd_flags="-q"' >> /etc/rc.conf
| |
| echo 'dhcpd_withuser=root' >> /etc/rc.conf
| |
| echo '!dhcpd' >> /etc/syslog.conf
| |
| echo 'local7.* /var/log/dhcpd.log' >> /etc/syslog.conf
| |
| touch /var/log/dhcpd.log
| |
| touch /usr/local/nodeny/logs/dhcp.events.log
| |
| killall -HUP syslogd
| |
| </source>
| |
| | |
| Настраиваем dhcp-сервер
| |
| <source lang="bash">
| |
| ee /usr/local/etc/dhcpd.conf
| |
| </source>
| |
| | |
| <pre>
| |
| log-facility local7;
| |
| option domain-name-servers 1.1.1.1;
| |
| | |
| subnet 10.100.0.0 netmask 255.255.0.0 {
| |
| range 10.100.64.0 10.100.80.255;
| |
| interface igb0;
| |
| option routers 10.100.0.1;
| |
| default-lease-time 2400;
| |
| max-lease-time 1800;
| |
| on commit {
| |
| set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
| |
| set ClientMac = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
| |
| set SwitchMac = "";
| |
| set SwitchPort ="";
| |
| if exists agent.circuit-id
| |
| {
| |
| set SwitchMac = binary-to-ascii(16, 8, ":", suffix(option agent.remote-id, 6));
| |
| set SwitchPort = binary-to-ascii(10, 8, ":", suffix(option agent.circuit-id, 1));
| |
| }
| |
| execute("/usr/bin/perl", "/usr/local/nodeny/modules/dhcp/events.pl", "commit",
| |
| ClientIP, ClientMac, SwitchMac, SwitchPort);
| |
| }
| |
| on expiry {
| |
| set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
| |
| execute("/usr/bin/perl", "/usr/local/nodeny/modules/dhcp/events.pl", "expiry", ClientIP);
| |
| }
| |
| on release {
| |
| set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
| |
| execute("/usr/bin/perl", "/usr/local/nodeny/modules/dhcp/events.pl", "release", ClientIP);
| |
| }
| |
| }
| |
| </pre>
| |
| | |
| * interface igb0 - интерфейс, к которому подключены клиенты
| |
| * option routers 10.100.0.1 - ip вашего сервера на интерфейсе igb0, т.е. gateway для клиентов
| |
| * subnet 10.100.0.0 netmask 255.255.0.0 - клиентская сеть
| |
| * range 10.100.64.0 10.100.80.255 - диапазон ip адресов, которые выдает dhcp сервер клиентам. Должен попадать в subnet. Желательно взять диапазон с запасом: ip должно быть в несколько раз больше чем ваших клиентов.
| |
| | |
| В админке NoDeny в настройках в разделе «ip pool» создаем ту же сеть, какая указана в конфиге в параметре range, при этом тип ip должен быть «динамический».
| |
| | |
| В разделе «Кабинет клиента» добавляем модуль dhcp.
| |
| | |
| ===Перенаправлние клиентов на веб-заглушку===
| |
| | |
| В файле /usr/local/nodeny/cfg/noserver.cfg.pm устанавливаем в 1 параметр
| |
| | |
| <pre>
| |
| $forward_enabled = 1;
| |
| </pre>
| |
| | |
| Перезапускаем noserver.pl
| |
| | |
| <source lang="bash">
| |
| kill -9 `ps axu | grep noserver | grep -v grep | awk '{ print $2 }'`
| |
| perl /usr/local/nodeny/noserver.pl -d &
| |
| </source>
| |
| | |
| Смотрим, появилась ли команда fwd в правилах фаервола:
| |
| | |
| <source lang="bash">
| |
| ipfw show | grep fwd
| |
| </source>
| |
| | |
| Если не появилась, пробуем:
| |
| | |
| <source lang="bash">
| |
| ipfw add 65534 fwd 127.0.0.1,8080 tcp from any to any 80
| |
| </source>
| |
| | |
| Если ошибка - необходимо скомпилировать ядро FreeBSD с опцией «options IPFIREWALL_FORWARD»
| |
| | |
| Если web-заглушка (модуль cap) не запускается по умолчанию, то либо в ее конфиге ставим параметр run => 1 либо (рекомендуется) запускаем отдельным процессом (и ставим автозапуск в /etc/rc.local):
| |
| | |
| <source lang="bash">
| |
| /usr/bin/perl /usr/local/nodeny/nokernel.pl -m=cap -d &
| |
| </source>
| |
| | |
| Также запускаем модуль dhcp, но его не обязательно запускать отдельным процессом как в примере:
| |
| | |
| <source lang="bash">
| |
| /usr/bin/perl /usr/local/nodeny/nokernel.pl -m=dhcp -d &
| |
| </source>
| |
| | |
| ===Тестируем===
| |
| | |
| Запускаем dhcp-сервер и смотрим лог NoDeny
| |
| | |
| <source lang="bash">
| |
| /usr/local/etc/rc.d/isc-dhcpd forcestart
| |
| tail -f /usr/local/nodeny/logs/dhcp.events.log
| |
| </source>
| |
| | |
| Включаем клиентский компьютер и убеждаемся, что он получил ip по dhcp.
| |
| | |
| В логе должно отобразиться подобное
| |
| | |
| <pre>
| |
| [commit] ip=10.100.65.98, mac=0:1d:2a:ff:22:88, mac_ok=001d2aff2288 | Необходима регистрация мака
| |
| </pre>
| |
| | |
| Это означает, что клиенту выдан ip, но мак пока не известен NoDeny. Если есть желание (или у вас что-то не получается), вы можете посмотреть в БД таблицу mac_uid - там будет зарегистрирован данный мак, ip, время, а uid = 0. Команда mysql:
| |
| | |
| <source lang="sql">
| |
| SELECT *, INET_NTOA(ip) FROM mac_uid;
| |
| </source>
| |
| | |
| Если с клиентского компьютера открыть любую страницу, то запрос будет перехвачен заглушкой и выведено сообщение, что необходимо ввести логин и пароль. После их ввода, мак адрес должен быть привязан к id клиента - это можно проверить той же mysql командой, указанной выше.
| |
| | |
| Вы должны ввести логин и пароль не позднее чем через 10 минут от момента получения ip - это защита от ситуации, когда кто-то вручную пропишет ip и попытается его зарегистрировать.
| |
| | |
| ==Вариант Dchp + Radius==
| |
| | |
| Настройка Radius описана [[Dhcp+Radius|здесь]]
| |
| | |
| Теперь необходимо настроить dhcp-сервер, чтобы он делал запросы на Radius. Isc-dhcpd пока не умеет это. Поэтому установим виртуальную машину с mikrotik os и будем использовать его dhcp. Установим virtualbox:
| |
| | |
| <source lang="bash">
| |
| pkg install virtualbox-ose
| |
| </source>
| |
| <source lang="bash">
| |
| pkg install virtualbox-ose-additions
| |
| </source>
| |
| <source lang="bash">
| |
| kldload vboxdrv
| |
| </source>
| |
| <source lang="bash">
| |
| echo 'vboxdrv_load="YES"' >> /boot/loader.conf
| |
| echo 'vboxnet_enable="YES"' >> /etc/rc.conf
| |
| /usr/local/etc/rc.d/vboxnet onestart
| |
| </source>
| |
| | |
| | |
| Создаем виртуальный интерфейс для связи с Mikrotik:
| |
| | |
| <source lang="bash">
| |
| VBoxManage hostonlyif create
| |
| VBoxManage hostonlyif ipconfig vboxnet0 --ip 192.168.255.1
| |
| </source> | |
| | |
| | |
| Качаем виртуальную машину с Mikrotik
| |
| | |
| <source lang="bash"> | |
| cd /usr/local/nodeny
| |
| pkg install wget
| |
| wget http://nodeny.com.ua/Mikrotik-disk1.vmdk
| |
| wget http://nodeny.com.ua/Mikrotik.ovf
| |
| </source>
| |
| | |
| Импортируем
| |
| | |
| <source lang="bash">
| |
| VBoxManage import Mikrotik.ovf
| |
| </source>
| |
| | |
| Меняем мак интерфейса, поскольку он меняется в импортированной виртуальной машине.
| |
| | |
| <source lang="bash">
| |
| VBoxManage modifyvm Microtik --macaddress1=080027F3F92B
| |
| VBoxManage modifyvm Microtik --macaddress2=0800277719E8
| |
| </source>
| |
| | |
| Интерфейс, который смотрит в сеть клиентов (em1):
| |
| | |
| <source lang="bash">
| |
| VBoxManage modifyvm Microtik --bridgeadapter1 em1
| |
| </source> | |
| | |
| Запускаем виртуалку:
| |
| | |
| <source lang="bash"> | |
| VBoxManage startvm Microtik --type headless
| |
| </source>
| |
| | |
| Через минуту логинимся:
| |
|
| |
|
| <source lang="bash">
| | ==С использованием Radius== |
| telnet -l admin 192.168.255.2
| |
| </source>
| |
|
| |
|
| Логин: admin, пароль пустой
| | Устанавливается radius-сервер, который будет посредником между dhcp-сервером и NoDeny. |
|
| |
|
| Выполняем на Mikrotik
| | # Абонент включает компьютер, тот делает dhcp запрос на получение ip |
| | # Dhcp-сервер принимает запрос и посылает mac на Radius |
| | # Radius запускает mysql-процедуры, которые по mac находят абонента и получают его ip |
| | # Radius посылает ip dhcp-серверу |
| | # Dhcp выдает ip абоненту |
| | <br> |
|
| |
|
| <pre>
| | ==Без использования Radius== |
| /ip dhcp-server network set dns-server=192.168.2.1 gateway=192.168.2.1 netmask=24 0
| |
| </pre>
| |
|
| |
|
| Здесь 192.168.2.1 - ip шлюза, т.е сервера NoDeny
| | # Абонент включает компьютер, тот делает dhcp запрос на получение ip |
| | # Dhcp выдает ip адрес из своего пула. Обратите внимание - ip не запрашивается у NoDeny |
| | # Dhcp сообщает NoDeny какой ip он выдал абоненту |
| | # NoDeny у себя отмечает, что данный ip привязан такому-то абоненту |
| | <br> |
|
| |
|
| Автозапуск
| | ==Формирование конфига== |
|
| |
|
| <source lang="bash">
| | NoDeny периодически формирует для dhcp конфигурационный файл, в котором по данным, взятым из биллинга, прописываются связки mac -> ip |
| echo 'vboxheadless_enable=YES' >> /etc/rc.conf
| |
| echo 'vboxheadless_machines=Microtik' >> /etc/rc.conf
| |
| echo 'vboxheadless_user=root' >> /etc/rc.conf
| |
| </source>
| |