DHCPD 2: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 31: Строка 31:
 
По этой причине задача номер один при отладке сервера - сделать конфиг который всегда выдает адреса (но не обязательно маршрутизируемые) что бы видеть что прислал клиент, что добавил свитч и/или релей и тд.
 
По этой причине задача номер один при отладке сервера - сделать конфиг который всегда выдает адреса (но не обязательно маршрутизируемые) что бы видеть что прислал клиент, что добавил свитч и/или релей и тд.
   
  +
<BR>
  +
Мой минимальный конфиг такой
  +
<PRE>
  +
ddns-update-style none;
  +
default-lease-time 36000;
  +
max-lease-time 72000;
  +
authoritative;
  +
log-facility local6;
   
  +
log(info,
  +
concat(
  +
"log start\n",
  +
"-->", binary-to-ascii(10, 8, ".", packet(0, 1000)),
  +
"\n",
  +
"-->", binary-to-ascii(10, 8, ".", packet(0, 1000)),
  +
"\n",
  +
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,0,1))),2), ":",
  +
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":",
  +
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":",
  +
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2), ":",
  +
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2), ":",
  +
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":",
  +
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2),
  +
"\n",
  +
"log end\n"
  +
  +
)
  +
);
  +
  +
  +
class "any" { match if (binary-to-ascii(16, 8, ":", substring(hardware, 0, 1)) = "1"); }
  +
#class "b8" { match if (binary-to-ascii(16, 8, ":", substring(hardware, 1, 1)) = "b8"); }
  +
class "b9" { match if (binary-to-ascii(16, 8, ":", substring(hardware, 1, 1)) = "b9"); }
  +
  +
# b8:27:eb:24:8d:f2
  +
  +
class "never_match" { match if ( binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 2, 2)) = "4096" );}
  +
  +
  +
  +
shared-network "networks"
  +
{
  +
subnet 172.31.99.0 netmask 255.255.255.0 { }
  +
subnet 10.32.99.0 netmask 255.255.255.0 { }
  +
subnet 10.30.0.1 netmask 255.255.255.255 { }
  +
  +
  +
  +
subnet 10.5.0.0 netmask 255.255.255.0 {
  +
option subnet-mask 255.255.255.0;
  +
option broadcast-address 10.5.0.255;
  +
option routers 10.4.0.1;
  +
pool {
  +
range 10.5.0.2 10.5.0.253;
  +
default-lease-time 10;
  +
max-lease-time 10;
  +
deny members of "never_match";
  +
deny members of "b9";
  +
allow members of "any";
  +
  +
}
  +
}
  +
}
  +
<PRE>
  +
  +
Тут определены 3 класса - any, под который должен попадать любой запрос (1 в нулевом байте означает тип ether)
  +
<PRE>
  +
class "any" { match if (binary-to-ascii(16, 8, ":", substring(hardware, 0, 1)) = "1"); }
  +
</PRE>
  +
Класс для клиентов с b9 в первом байте МАК-адреса
  +
<PRE>
  +
class "b9" { match if (binary-to-ascii(16, 8, ":", substring(hardware, 1, 1)) = "b9"); }
  +
</PRE>
  +
Класс который никогда не сработает (VLAN ID = 4096) - он нужен при автоненерации в качестве заглушки для случая если в какой-то момент нет ни одного клиента в сабнете
  +
<PRE>
  +
class "never_match" { match if ( binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 2, 2)) = "4096" );}
  +
</PRE>
  +
  +
Далее
  +
<PRE>
  +
deny members of "never_match";
  +
deny members of "b9";
  +
allow members of "any";
  +
</PRE>
  +
* Явно запретить известного клиента b9
  +
* Явно разрешить всех
   
 
=Ссылки=
 
=Ссылки=

Версия 14:04, 17 февраля 2021

DHCPD

Заметки по настройке isc dhcpd

Скрипт запуска (тестовый)

Запуск в нейспейсе

#!/bin/bash.

rm    ./dhcpd.leases2 ./dhcpd.leases2~
touch ./dhcpd.leases2


ip netns exec DHCP /usr/sbin/dhcpd \
    -cf ./dhcpd.conf \
    -lf ./dhcpd.leases2 \
    -pf ./dhcpd.pid \
    -f \
    -d \
    -tf ./trace-output-file \
    dhcp_to_main_ns

Прежде чем начать - логгирование

Уточнить! Странно но внятный лог можно получить только при выдаче адреса - те если сервер адрес не выдал то (почему?!) конструкции вида

log(info, concat("Client ",binary-to-ascii(16, 8, ":", substring(hardware, 0, 4))));

Не срабатывают

По этой причине задача номер один при отладке сервера - сделать конфиг который всегда выдает адреса (но не обязательно маршрутизируемые) что бы видеть что прислал клиент, что добавил свитч и/или релей и тд.


Мой минимальный конфиг такой

ddns-update-style none;
default-lease-time 36000;
max-lease-time 72000;
authoritative;
log-facility local6;

log(info,
    concat(
        "log start\n",
        "-->", binary-to-ascii(10, 8, ".", packet(0, 1000)),
        "\n",
        "-->", binary-to-ascii(10, 8, ".", packet(0, 1000)),
        "\n",
        suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,0,1))),2), ":",
        suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":",
        suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":",
        suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2), ":",
        suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2), ":",
        suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":",
        suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2),
        "\n",
        "log end\n"

    )
);


class "any" { match if (binary-to-ascii(16,  8, ":", substring(hardware, 0, 1)) = "1");  }
#class "b8"  { match if (binary-to-ascii(16,  8, ":", substring(hardware, 1, 1)) = "b8"); }
class "b9"  { match if (binary-to-ascii(16,  8, ":", substring(hardware, 1, 1)) = "b9"); }

# b8:27:eb:24:8d:f2

class "never_match"  {    match if (        binary-to-ascii(10, 16, "",  substring(option agent.circuit-id, 2, 2)) = "4096"    );}



shared-network "networks"
{
    subnet 172.31.99.0  netmask 255.255.255.0 { }
    subnet 10.32.99.0 netmask 255.255.255.0 { }
    subnet 10.30.0.1  netmask 255.255.255.255 { }



    subnet 10.5.0.0 netmask 255.255.255.0 {
        option subnet-mask 255.255.255.0;
        option broadcast-address 10.5.0.255;
        option routers 10.4.0.1;
        pool    {
            range 10.5.0.2 10.5.0.253;
            default-lease-time 10;
            max-lease-time 10;
            deny  members of "never_match";
            deny  members of "b9";
            allow members of "any";

        }
    }
}
<PRE>

Тут определены 3 класса - any, под который должен попадать любой запрос (1 в нулевом байте означает тип ether) 
<PRE>
class "any" { match if (binary-to-ascii(16,  8, ":", substring(hardware, 0, 1)) = "1");  }

Класс для клиентов с b9 в первом байте МАК-адреса

class "b9"  { match if (binary-to-ascii(16,  8, ":", substring(hardware, 1, 1)) = "b9"); }

Класс который никогда не сработает (VLAN ID = 4096) - он нужен при автоненерации в качестве заглушки для случая если в какой-то момент нет ни одного клиента в сабнете

class "never_match"  {    match if (        binary-to-ascii(10, 16, "",  substring(option agent.circuit-id, 2, 2)) = "4096"    );}

Далее

            deny  members of "never_match";
            deny  members of "b9";
            allow members of "any";
  • Явно запретить известного клиента b9
  • Явно разрешить всех

Ссылки