<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
	<id>https:///index.php?action=history&amp;feed=atom&amp;title=Dhcp_%D0%B1%D0%B5%D0%B7_Radius</id>
	<title>Dhcp без Radius - Історія редагувань</title>
	<link rel="self" type="application/atom+xml" href="https:///index.php?action=history&amp;feed=atom&amp;title=Dhcp_%D0%B1%D0%B5%D0%B7_Radius"/>
	<link rel="alternate" type="text/html" href=""/>
	<updated>2026-05-05T15:51:43Z</updated>
	<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id></id>
		<title>Sv: /* Вариант Dchp + Radius */</title>
		<link rel="alternate" type="text/html" href=""/>
		<updated>2019-09-20T10:18:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Вариант Dchp + Radius&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;===Схема работы===&lt;br /&gt;
&lt;br /&gt;
Dhcp-сервер работает автономно от NoDeny. Т.е. выдает ip адреса на свое усмотрение! Dhcp-сервер обычно запоминает какому мак-адресу выдавал какой ip, т.е одно устройства скорее всего будет получать постоянно один и тот же ip, однако, это не гарантируется и, вообще, неважно для NoDeny.&lt;br /&gt;
&lt;br /&gt;
Как выглядит сам процесс:&lt;br /&gt;
&lt;br /&gt;
* Абонент включает компьютер и получает ip от dhcp-сервера. При этом dhcp-сервер запускает скрипт modules/dhcp/events.pl.&lt;br /&gt;
* events.pl смотрит какому абоненту принадлежит мак-адрес (либо же комбинация мак+свич+порт) и привязывает ip, который выдал dhcpd, к его учетке. Абонент получает доступ в интернет.&lt;br /&gt;
* В случае, если мак устройства абонента неизвестен биллингу, абонент, открыв браузер и введя любой адрес, попадает на заглушку, на которой ему сообщается «для получения доступа в интернет введите логин и пароль».&lt;br /&gt;
* После ввода логина и пароля, NoDeny запоминает, что мак-адрес (либо же комбинация мак+свич+порт) принадлежит такому-то абоненту.&lt;br /&gt;
* При последующих подключениях логин и пароль запрашиваться не будут пока не будет сменено устройство либо точка подключения (в случае использования option 82).&lt;br /&gt;
&lt;br /&gt;
====Комментарий по Option 82====&lt;br /&gt;
&lt;br /&gt;
Без использования управляемого оборудования, dhcp не достаточно безопасно т.к. злоумышленник может подделать мак-адрес. Option 82 заставляет свичи информировать dhcp-сервер о том, с какого свича и какого порта пришел запрос. Поэтому подделка мака не приведет к успеху, поскольку мак свича и номер порта, злоумышленник не сможет подделать (если он подключен к свичу с option 82, естественно).&lt;br /&gt;
&lt;br /&gt;
==Установка==&lt;br /&gt;
&lt;br /&gt;
Ставим dhcp-сервер&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pkg install isc-dhcp43-server&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автозапуск и логирование&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo 'dhcpd_enable=YES' &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
echo 'dhcpd_flags=&amp;quot;-q&amp;quot;' &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
echo 'dhcpd_withuser=root' &amp;gt;&amp;gt; /etc/rc.conf&lt;br /&gt;
echo '!dhcpd' &amp;gt;&amp;gt; /etc/syslog.conf&lt;br /&gt;
echo 'local7.*  /var/log/dhcpd.log' &amp;gt;&amp;gt; /etc/syslog.conf&lt;br /&gt;
touch /var/log/dhcpd.log&lt;br /&gt;
touch /usr/local/nodeny/logs/dhcp.events.log&lt;br /&gt;
killall -HUP syslogd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Настраиваем dhcp-сервер&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ee /usr/local/etc/dhcpd.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
log-facility local7;&lt;br /&gt;
option domain-name-servers 1.1.1.1;&lt;br /&gt;
&lt;br /&gt;
subnet 10.100.0.0 netmask 255.255.0.0 {&lt;br /&gt;
    range 10.100.64.0 10.100.80.255;&lt;br /&gt;
    interface igb0;&lt;br /&gt;
    option routers 10.100.0.1;&lt;br /&gt;
    default-lease-time 1800;&lt;br /&gt;
    max-lease-time 1800;&lt;br /&gt;
    on commit {&lt;br /&gt;
        set ClientIP  = binary-to-ascii(10, 8, &amp;quot;.&amp;quot;, leased-address);&lt;br /&gt;
        set ClientMac = binary-to-ascii(16, 8, &amp;quot;:&amp;quot;, substring(hardware, 1, 6));&lt;br /&gt;
        set SwitchMac = &amp;quot;&amp;quot;;&lt;br /&gt;
        set SwitchPort =&amp;quot;&amp;quot;;&lt;br /&gt;
        if exists agent.circuit-id&lt;br /&gt;
        {&lt;br /&gt;
            set SwitchMac = binary-to-ascii(16, 8, &amp;quot;:&amp;quot;, suffix(option agent.remote-id, 6));&lt;br /&gt;
            set SwitchPort = binary-to-ascii(10, 8, &amp;quot;:&amp;quot;, suffix(option agent.circuit-id, 1));&lt;br /&gt;
        }&lt;br /&gt;
        execute(&amp;quot;/usr/bin/perl&amp;quot;, &amp;quot;/usr/local/nodeny/modules/dhcp/events.pl&amp;quot;, &amp;quot;commit&amp;quot;,&lt;br /&gt;
                ClientIP, ClientMac, SwitchMac, SwitchPort);&lt;br /&gt;
    }&lt;br /&gt;
    on expiry {&lt;br /&gt;
        set ClientIP  = binary-to-ascii(10, 8, &amp;quot;.&amp;quot;, leased-address);&lt;br /&gt;
        execute(&amp;quot;/usr/bin/perl&amp;quot;, &amp;quot;/usr/local/nodeny/modules/dhcp/events.pl&amp;quot;, &amp;quot;expiry&amp;quot;, ClientIP);&lt;br /&gt;
    }&lt;br /&gt;
    on release {&lt;br /&gt;
        set ClientIP  = binary-to-ascii(10, 8, &amp;quot;.&amp;quot;, leased-address);&lt;br /&gt;
        execute(&amp;quot;/usr/bin/perl&amp;quot;, &amp;quot;/usr/local/nodeny/modules/dhcp/events.pl&amp;quot;, &amp;quot;release&amp;quot;, ClientIP);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* interface igb0 - интерфейс, к которому подключены клиенты&lt;br /&gt;
* option routers 10.100.0.1 - ip вашего сервера на интерфейсе igb0, т.е. gateway для клиентов&lt;br /&gt;
* subnet 10.100.0.0 netmask 255.255.0.0 - клиентская сеть&lt;br /&gt;
* range 10.100.64.0 10.100.80.255 - диапазон ip адресов, которые выдает dhcp сервер клиентам. Должен попадать в subnet. Желательно взять диапазон с запасом: ip должно быть в несколько раз больше чем ваших клиентов.&lt;br /&gt;
&lt;br /&gt;
В админке NoDeny в настройках в разделе «ip pool» создаем ту же сеть, какая указана в конфиге в параметре range, при этом тип ip должен быть «динамический».&lt;br /&gt;
&lt;br /&gt;
В разделе «Кабинет клиента» добавляем модуль dhcp.&lt;br /&gt;
&lt;br /&gt;
===Перенаправлние клиентов на веб-заглушку===&lt;br /&gt;
&lt;br /&gt;
В файле /usr/local/nodeny/cfg/noserver.cfg.pm устанавливаем в 1 параметр&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$forward_enabled = 1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Перезапускаем noserver.pl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -9 `ps axu | grep noserver | grep -v grep | awk '{ print $2 }'`&lt;br /&gt;
perl /usr/local/nodeny/noserver.pl -d &amp;amp;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Смотрим, появилась ли команда fwd в правилах фаервола:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipfw show | grep fwd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если не появилась, пробуем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ipfw add 65534 fwd 127.0.0.1,8080 tcp from any to any 80&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ошибка - необходимо скомпилировать ядро FreeBSD с опцией «options IPFIREWALL_FORWARD»&lt;br /&gt;
&lt;br /&gt;
Если web-заглушка (модуль cap) не запускается по умолчанию, то либо в настройках Ядро -&amp;gt; Web-заглушка устанавливаем параметр &amp;quot;Запускать модуль при запуске ядра NoDeny&amp;quot; в &amp;quot;да&amp;quot;, либо (рекомендуется) запускаем отдельным процессом (и ставим автозапуск в /etc/rc.local):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/bin/perl /usr/local/nodeny/nokernel.pl -m=cap -d &amp;amp;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также запускаем модуль dhcp, но его не обязательно запускать отдельным процессом как в примере:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/bin/perl /usr/local/nodeny/nokernel.pl -m=dhcp -d &amp;amp;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Тестируем===&lt;br /&gt;
&lt;br /&gt;
Запускаем dhcp-сервер и смотрим лог NoDeny&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/local/etc/rc.d/isc-dhcpd forcestart&lt;br /&gt;
tail -f /usr/local/nodeny/logs/dhcp.events.log &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включаем клиентский компьютер и убеждаемся, что он получил ip по dhcp.&lt;br /&gt;
&lt;br /&gt;
В логе должно отобразиться подобное&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[commit] ip=10.100.65.98, mac=0:1d:2a:ff:22:88, mac_ok=001d2aff2288 | Необходима регистрация мака&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это означает, что клиенту выдан ip, но мак пока не известен NoDeny. Если есть желание (или у вас что-то не получается), вы можете посмотреть в БД таблицу mac_uid - там будет зарегистрирован данный мак, ip, время, а uid = 0. Команда mysql:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT *, INET_NTOA(ip) FROM mac_uid;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если с клиентского компьютера открыть любую страницу, то запрос будет перехвачен заглушкой и выведено сообщение, что необходимо ввести логин и пароль. После их ввода, мак адрес должен быть привязан к id клиента - это можно проверить той же mysql командой, указанной выше.&lt;br /&gt;
&lt;br /&gt;
Вы должны ввести логин и пароль не позднее чем через 10 минут от момента получения ip - это защита от ситуации, когда кто-то вручную пропишет ip и попытается его зарегистрировать.&lt;/div&gt;</summary>
		<author><name>Sv</name></author>
	</entry>
</feed>