Files
Personal/linux/isc-dhcp.md

106 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Настройка DHCP-сервера и NAT-шлюза на базе isc-dhcp-server
Этот гайд поможет настроить раздачу IP-адресов в локальной сети и организовать доступ в интернет для клиентов через шлюз (Debian/Ubuntu).
### 1. Установка необходимых пакетов
Для работы нам понадобится сам DHCP-сервер и инструменты управления трафиком:
```bash
apt update
apt install isc-dhcp-server iptables
```
### 2. Настройка сетевых интерфейсов
Прежде всего, назначим статический IP-адрес интерфейсу, который смотрит в локальную сеть.
Отредактируйте файл `/etc/network/interfaces`:
```bash
nano /etc/network/interfaces
```
Добавьте конфигурацию для вашего локального интерфейса (например, `enp4s0`):
```text
auto enp4s0
iface enp4s0 inet static
address 172.16.100.1
netmask 255.255.255.0
```
Примените настройки, перезагрузив сеть или подняв интерфейс вручную: `ifup enp4s0`.
### 3. Конфигурация DHCP-сервера
Сделаем резервную копию оригинального конфига и создадим чистый файл:
```bash
mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.ORIG
nano /etc/dhcp/dhcpd.conf
```
Вставьте следующую конфигурацию:
```text
authoritative;
default-lease-time 600;
max-lease-time 10000;
log-facility local7;
# Параметры сети для клиентов
subnet 172.16.100.0 netmask 255.255.255.0 {
range 172.16.100.2 172.16.100.200;
option subnet-mask 255.255.255.0;
option routers 172.16.100.1; # IP этого сервера
option domain-name-servers 8.8.8.8, 8.8.4.4; # Внешние DNS (Google)
# Пример резервации IP по MAC-адресу
host special-device {
hardware ethernet 00:11:22:33:44:55;
fixed-address 172.16.100.250;
}
}
```
### 4. Выбор интерфейса для прослушивания
Укажите DHCP-серверу, на каком интерфейсе ожидать запросы.
Отредактируйте `/etc/default/isc-dhcp-server`:
```bash
nano /etc/default/isc-dhcp-server
```
Найдите строку и впишите ваш локальный интерфейс:
```text
INTERFACESv4="enp4s0"
```
### 5. Настройка маршрутизации (NAT)
Чтобы клиенты могли выходить в интернет через этот сервер, нужно включить пересылку пакетов в ядре и настроить NAT в iptables.
**Включаем IP Forwarding:**
```bash
sysctl -w net.ipv4.ip_forward=1
# Чтобы настройка сохранилась после перезагрузки:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
```
**Настраиваем NAT (Маскарад):**
Укажите ваш **внешний** интерфейс (который смотрит в интернет, например `enp3s0`):
```bash
iptables -t nat -A POSTROUTING -o enp3s0 -j MASQUERADE
```
### 6. Запуск и проверка
Перезапустите DHCP-сервер для применения всех настроек:
```bash
systemctl restart isc-dhcp-server
systemctl status isc-dhcp-server
```
Теперь клиенты в локальной сети будут получать IP-адреса и выходить в интернет через ваш шлюз.
## Дополнение: Сохранение правил NAT (iptables-persistent)
По умолчанию правила `iptables` сбрасываются после перезагрузки. Чтобы NAT работал всегда, используйте утилиту `iptables-persistent`:
1. Установите пакет:
```bash
apt install iptables-persistent
```
*(Во время установки выберите **Yes**, чтобы сохранить текущие правила v4).*
2. Если вы изменили правила позже, обновите сохраненный конфиг вручную:
```bash
iptables-save > /etc/iptables/rules.v4
```