Dhcp без Radius: відмінності між версіями

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку
Немає опису редагування
 
(Не показані 4 проміжні версії цього користувача)
Рядок 7: Рядок 7:
* Абонент включает компьютер и получает ip от dhcp-сервера. При этом dhcp-сервер запускает скрипт modules/dhcp/events.pl.
* Абонент включает компьютер и получает ip от dhcp-сервера. При этом dhcp-сервер запускает скрипт modules/dhcp/events.pl.
* events.pl смотрит какому абоненту принадлежит мак-адрес (либо же комбинация мак+свич+порт) и привязывает ip, который выдал dhcpd, к его учетке. Абонент получает доступ в интернет.
* events.pl смотрит какому абоненту принадлежит мак-адрес (либо же комбинация мак+свич+порт) и привязывает ip, который выдал dhcpd, к его учетке. Абонент получает доступ в интернет.
* В случае, если мак устройства абонента неизвестен биллингу, абонент, открыв браузер и введя любой адрес, попадает на заглушку, на которой ему сообщается "для получения доступа в интернет введите логин и пароль".
* В случае, если мак устройства абонента неизвестен биллингу, абонент, открыв браузер и введя любой адрес, попадает на заглушку, на которой ему сообщается «для получения доступа в интернет введите логин и пароль».
* После ввода логина и пароля, NoDeny запоминает, что мак-адрес (либо же комбинация мак+свич+порт) принадлежит такому-то абоненту.
* После ввода логина и пароля, NoDeny запоминает, что мак-адрес (либо же комбинация мак+свич+порт) принадлежит такому-то абоненту.
* При последующих подключениях логин и пароль запрашиваться не будут пока не будет сменено устройство либо точка подключения (в случае использования option 82).
* При последующих подключениях логин и пароль запрашиваться не будут пока не будет сменено устройство либо точка подключения (в случае использования option 82).
Рядок 15: Рядок 15:
Без использования управляемого оборудования, dhcp не достаточно безопасно т.к. злоумышленник может подделать мак-адрес. Option 82 заставляет свичи информировать dhcp-сервер о том, с какого свича и какого порта пришел запрос. Поэтому подделка мака не приведет к успеху, поскольку мак свича и номер порта, злоумышленник не сможет подделать (если он подключен к свичу с option 82, естественно).
Без использования управляемого оборудования, dhcp не достаточно безопасно т.к. злоумышленник может подделать мак-адрес. Option 82 заставляет свичи информировать dhcp-сервер о том, с какого свича и какого порта пришел запрос. Поэтому подделка мака не приведет к успеху, поскольку мак свича и номер порта, злоумышленник не сможет подделать (если он подключен к свичу с option 82, естественно).


===Схема работы с Radius===
==Установка==
Dhcp-сервер работает с NoDeny через Radius аналогично pppoe.
 
* Клиент включает компьютер, который шлет запрос на dhcp-сервер. Тот в свою очередь шлет запрос в Radius.
* Радиус запускает NoDeny mysql-процедуру получения ip по мак адресу (комбинации мак+свич+порт). В ответ получает гостевой ip (в админке помечаются тегом guest в пуле ip)
 
==Вариант без Radius==


Ставим dhcp-сервер
Ставим dhcp-сервер
Рядок 157: Рядок 151:


Вы должны ввести логин и пароль не позднее чем через 10 минут от момента получения ip - это защита от ситуации, когда кто-то вручную пропишет ip и попытается его зарегистрировать.
Вы должны ввести логин и пароль не позднее чем через 10 минут от момента получения ip - это защита от ситуации, когда кто-то вручную пропишет ip и попытается его зарегистрировать.
==Вариант Dchp + Radius==
Настройка Radius описана <b>[[Dhcp+Radius|здесь]]</b>
Теперь необходимо настроить  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">
telnet -l admin 192.168.255.2
</source>
Логин: admin, пароль пустой
Выполняем на Mikrotik
<pre>
/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
Автозапуск
<source lang="bash">
echo 'vboxheadless_enable=YES' >> /etc/rc.conf
echo 'vboxheadless_machines=Microtik' >> /etc/rc.conf
echo 'vboxheadless_user=root' >> /etc/rc.conf
</source>

Поточна версія на 10:18, 20 вересня 2019

Схема работы

Dhcp-сервер работает автономно от NoDeny. Т.е. выдает ip адреса на свое усмотрение! Dhcp-сервер обычно запоминает какому мак-адресу выдавал какой ip, т.е одно устройства скорее всего будет получать постоянно один и тот же ip, однако, это не гарантируется и, вообще, неважно для NoDeny.

Как выглядит сам процесс:

  • Абонент включает компьютер и получает ip от dhcp-сервера. При этом dhcp-сервер запускает скрипт modules/dhcp/events.pl.
  • events.pl смотрит какому абоненту принадлежит мак-адрес (либо же комбинация мак+свич+порт) и привязывает ip, который выдал dhcpd, к его учетке. Абонент получает доступ в интернет.
  • В случае, если мак устройства абонента неизвестен биллингу, абонент, открыв браузер и введя любой адрес, попадает на заглушку, на которой ему сообщается «для получения доступа в интернет введите логин и пароль».
  • После ввода логина и пароля, NoDeny запоминает, что мак-адрес (либо же комбинация мак+свич+порт) принадлежит такому-то абоненту.
  • При последующих подключениях логин и пароль запрашиваться не будут пока не будет сменено устройство либо точка подключения (в случае использования option 82).

Комментарий по Option 82

Без использования управляемого оборудования, dhcp не достаточно безопасно т.к. злоумышленник может подделать мак-адрес. Option 82 заставляет свичи информировать dhcp-сервер о том, с какого свича и какого порта пришел запрос. Поэтому подделка мака не приведет к успеху, поскольку мак свича и номер порта, злоумышленник не сможет подделать (если он подключен к свичу с option 82, естественно).

Установка

Ставим dhcp-сервер

pkg install isc-dhcp43-server

Автозапуск и логирование

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

Настраиваем dhcp-сервер

ee /usr/local/etc/dhcpd.conf
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 1800;
    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);
    }
}
  • 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 параметр

$forward_enabled = 1;

Перезапускаем noserver.pl

kill -9 `ps axu | grep noserver | grep -v grep | awk '{ print $2 }'`
perl /usr/local/nodeny/noserver.pl -d &

Смотрим, появилась ли команда fwd в правилах фаервола:

ipfw show | grep fwd

Если не появилась, пробуем:

ipfw add 65534 fwd 127.0.0.1,8080 tcp from any to any 80

Если ошибка - необходимо скомпилировать ядро FreeBSD с опцией «options IPFIREWALL_FORWARD»

Если web-заглушка (модуль cap) не запускается по умолчанию, то либо в настройках Ядро -> Web-заглушка устанавливаем параметр "Запускать модуль при запуске ядра NoDeny" в "да", либо (рекомендуется) запускаем отдельным процессом (и ставим автозапуск в /etc/rc.local):

/usr/bin/perl /usr/local/nodeny/nokernel.pl -m=cap -d &

Также запускаем модуль dhcp, но его не обязательно запускать отдельным процессом как в примере:

/usr/bin/perl /usr/local/nodeny/nokernel.pl -m=dhcp -d &

Тестируем

Запускаем dhcp-сервер и смотрим лог NoDeny

/usr/local/etc/rc.d/isc-dhcpd forcestart
tail -f /usr/local/nodeny/logs/dhcp.events.log

Включаем клиентский компьютер и убеждаемся, что он получил ip по dhcp.

В логе должно отобразиться подобное

[commit] ip=10.100.65.98, mac=0:1d:2a:ff:22:88, mac_ok=001d2aff2288 | Необходима регистрация мака

Это означает, что клиенту выдан ip, но мак пока не известен NoDeny. Если есть желание (или у вас что-то не получается), вы можете посмотреть в БД таблицу mac_uid - там будет зарегистрирован данный мак, ip, время, а uid = 0. Команда mysql:

SELECT *, INET_NTOA(ip) FROM mac_uid;

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

Вы должны ввести логин и пароль не позднее чем через 10 минут от момента получения ip - это защита от ситуации, когда кто-то вручную пропишет ip и попытается его зарегистрировать.