В сегодняшней статье настроим DHCP на Ubuntu Server 20.04 на раздачу как IP адресов версии 4, так и IP адресов версии 6.
DHCP — сетевой протокол, позволяющий сетевым устройствам автоматически получать IP-адрес и другие параметры, необходимые для работы в сети TCP/IP. Если сказать ещё проще, то это программное обеспечения для автоматической настройки вашей сети.
Все привыкли при подключении к домашней сети, например ноутбука по WiFi или телефона, вводить только пароль от сети, а при подключении по витой паре вообще никаких настроек не производить. Вот тут, как раз нам и понадобиться наш DHCP сервер. Он займется раздачей: IP адреса, DNS сервера, установкой маски сети, и другими необходимыми параметрами входящими в его компетенцию.
Начальная конфигурация:
Ubuntu Server 20.04
Настроенный DNS сервер.
Одна сетевая карта для выхода в интернет.
Вторая сетевая карта для локальной сети.
Установка DHCP сервера
Для установки нашего dhcp сервера воспользуемся пакетом isc-dhcp-server входящий в официальный репозиторий Ubuntu. Подключаемся к нашему серверу по ssh или же просто на сервере набираем следующие команды:
sudo apt update && sudo apt dist-upgrade -y && sudo apt install isc-dhcp-server
- Данными командами мы обновили наш сервер и установили пакет DHCP сервера.
На этом установка закончена, приступаем к настройке.
Назначаем статический IP адрес локальному интерфейсу
Для работы нашего DHCP сервера одному из интерфейсов — локальному, необходимо назначить статический IP адрес. Для этого нам необходимо отредактировать файл утилиты netplan. Как это сделать я описывал ТУТ.
Настройка DHCP IP4 и IP6 на Linux
Настройка IP4 DHCP сервера
Для начала настроим наш DHCP сервер на раздачу протокола версии 4. Для этого необходимо сконфигурировать файл dhcpd.conf
.
Открываем конфигурационный файл:
sudo nano /etc/dhcp/dhcpd.conf
Отредактируем его в соответствии с моим листингом:
ddns-update-style none;
authoritative;
log-facility local7;
subnet 10.5.5.0 netmask 255.255.255.0 {
range 10.5.5.100 10.5.5.200;
option domain-name-servers 10.5.5.1;
option domain-name "lan";
option subnet-mask 255.255.255.0;
option routers 10.5.5.1;
option broadcast-address 10.5.5.255;
default-lease-time 600;
max-lease-time 3600;
# host my_PC {
# hardware ethernet ab:22:0b:4d:11:1d;
# fixed-address 10.5.5.2;
# }
}
- subnet — блок в котором описывается наша сеть (пул IP адресов и маска сети).
- range — диапазон IP адресов выдаваемых клиенту.
- option domain-name-servers — тут прописываем ip адрес сервера dns (можно например от google).
- option domain-name — название домена вашей сети. В моем случае «lan».
- option subnet-mask — маска сети. Что такое маска и как её выбрать можно посмотреть в Википедии.
- option routers — ip адрес роутера. У нас это наша же машина.
- option broadcast-address — широковещательный адрес в сети, обычно это последний адрес сети «255».
- default-lease-time — время аренды адреса у сервера.
- max-lease-time — максимальное время аренды адреса у сервера.
- host — в данном блоке описывается настройки для выделенных IP адресов сетевого оборудования в сети. Сетевым оборудованием могут выступать как принтеры, сканеры, ip-телефоны так и различные девайсы (телевизоры планшеты, умные интернет вещи и т.д.), для которых необходимо зафиксировать определенный IP адрес.
- hardware ethernet — MAC адрес сетевой карты для которой фиксируется IP адрес.
- fixed-address — фиксированный IP адрес.
Так же если вы хотите, чтобы DHCP сервер обрабатывал запросы только с определенной сетевой карты, необходимо произвести ещё одну манипуляцию с конфигом isc-dhcp-server’а. Сперва узнаем название наших интерфейсов:
ifconfig
- необходимо установить пакет
net-tools
.
или
ip addr
У меня вывод следующий, у вас может быть другой, но суть от этого не меняется:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.5.5.1 netmask 255.255.255.0 broadcast 10.5.5.255
inet6 fe80::3445:5dff:fec7:c68c prefixlen 64 scopeid 0x20<link>
ether 36:45:5d:c7:c6:8c txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 4c:ed:fb:da:8b:c9 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Локальная петля (Loopback))
RX packets 112 bytes 15791 (15.7 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 112 bytes 15791 (15.7 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
У меня интерфейс eth0 смотрит в локальную сеть.
Настроим наш dhcp сервер на прослушивания только этого интерфейса. Открываем следующий файл для редактирования:
sudo nano /etc/default/isc-dhcp-server
В конце находим похожую строчку, снимаем с нее комментарий (#
) и дописываем название нашего интерфейса:
INTERFACESv4="eth0"
- eth0 — имя нашего интерфейса
После данной манипуляции наш DHCP сервер будет принимать и отправлять запросы только от интерфейса eth0
.
Настройка forwarding пакетов IPv4
Для прохождения пакетов из интернета в нашу локальную сеть необходимо настроить forwarding (пересылку) пакетов через наш сервер. Для этого произведем корректировку конфигурационного файла утилиты sysctl
.
sudo nano /etc/sysctl.conf
Снимите комментарий со следующей строки:
net.ipv4.ip_forward=1
Выходим с сохранением и применим сделанные изменения:
sudo sysctl -p
Настройка NAT IPv4
Для того чтобы пакеты попадали из интернета нам в локальную сеть мало лишь настроить forwarding , необходимо еще включить NAT. Для этого воспользуемся утилитой iptables
.
sudo iptables -t nat -A POSTROUTING -o eth1 -s 10.5.5.0/24 -j MASQUERADE
Перезагружаем сервис:
sudo systemctl restart isc-dhcp-server.service
Все на этом настройка DHCP сервера для протокола IPv4 закончена. Теперь при подключении какого-либо устройства к вашему серверу данный девай получит настройки в автоматическом режиме.
Настройка IPv6 DHCP сервера
Давайте теперь настроим наш DHCP сервер на раздачу протокола IPv6. Для этого необходимо сконфигурировать файл dhcpd6.conf
.
Открываем конфигурационный файл:
sudo nano /etc/dhcp/dhcpd6.conf
Отредактируем его в соответствии с моим листингом:
# Enable RFC 5007 support (same than for DHCPv4)
allow leasequery;
default-lease-time 2592000;
preferred-lifetime 604800;
option dhcp-renewal-time 3600;
option dhcp-rebinding-time 7200;
allow leasequery;
option dhcp6.name-servers fe00:a:b:100::1;
option dhcp6.domain-search "lan";
option dhcp6.info-refresh-time 21600;
subnet6 fe00:a:b:100::/64 {
range6 fe00:a:b:100::10 fe00:a:b:100::30;
range6 fe00:a:b:100::/64 temporary;
option dhcp6.name-servers fe00:a:b:100::1;
option dhcp6.domain-search "lan";
}
- subnet6 — блок в котором описывается наша сеть (пул IP адресов и маска сети).
- range6 — диапазон IP адресов выдаваемых клиенту.
- option dhcp6.name-servers — тут прописываем ip адрес сервера dns (можно например от google).
- option dhcp6.domain-search — название домена вашей сети. В моем случае «lan».
- option routers — ip адрес роутера. У нас это наша же машина.
- default-lease-time — максимальное время аренды адреса у сервера.
- preferred-lifetime — время аренды адреса.
- option dhcp-rebinding-time — время T2 повторного запроса
- option dhcp-renewal-time — время T1 продления.
Как видите все очень похоже на настройку IPv4.
Также, как и с IPv4, настроим для IPv6 прослушивания только определенного интерфейса. Открываем файл для редактирования.
sudo nano /etc/default/isc-dhcp-server
В конце находим похожую строчку, снимаем с нее комментарий (#
) и дописываем название нашего интерфейса:
INTERFACESv6="eth0"
- eth0 — имя нашего интерфейса.
Настройка forwarding пакетов IPv6
Для прохождения пакетов из интернета в нашу локальную сеть необходимо настроить forwarding (пересылку) пакетов через наш сервер. Для этого произведем корректировку конфигурационного файла утилиты sysctl
.
sudo nano /etc/sysctl.conf
Снимите комментарий со следующей строки:
net.ipv6.conf.all.forwarding=1
Выходим с сохранением и применим сделанные изменения:
sudo sysctl -p
Настройка NAT IPv6
Как и с IPv4 для IPv6 также включаем NAT. Для этого воспользуемся утилитой ip6tables
.
sudo ip6tables -t nat -A POSTROUTING -o eth1 -s fe00:a:b:100::/64 -j MASQUERADE
Перезагружаем сервис:
sudo systemctl restart isc-dhcp-server6.service
Установка radvd
Если посмотреть статус DHCP сервера, то мы увидим что наш isc-dhcp-server
запустился, только вот настройки шлюза наши клиенты автоматом не получат. А это значит, что все команды такие как: ping, nslookup и т.д. будут завершатся неудачей. Для токо чтобы клиенты получили шлюз автоматом, нам необходимо установить и настроить ещё одну утилиту под названием radvd
.
sudo apt install radvd
Настройка radvd
Создадим файл настроек для утилиты radvd.
sudo nano /etc/radvd.conf
заполним его в соответствии с моим листингом:
interface eth0
{
AdvSendAdvert on;
prefix fe00:a:b:100::/64 {
AdvOnLink on;
AdvAutonomous on;
};
};
- interface — сетевой интерфейс, смотрящий в вашу локальную сеть,
- prefix — это ваша сеть IPv6.
Перезагружаем сервис radvd
/etc/init.d/radvd restart
Все на этом настройка DHCP сервера для протокола IPv6 закончена. Теперь при подключении какого-либо устройства к вашему серверу данный девай получит настройки в автоматическом режиме.
[endtxt]
. . . .
- Тест скорости дисков в Linux
- Как запустить команду в фоне в Linux
- Ошибка несоответствие размеров GPT PMBR
- nginx: [warn] protocol options redefined
- Как включить поддержку linux в windows 11