Добрый день дорогой читатель, данное повествование не является
истиной в последней инстанции, это некая наработка по настройке Debian в роли маршрутизатора (в дальнейшем не только функции маршрутизации будет выполнять) установленный на мини ПК на борту которого имеется шесть сетевых интерфейсов. В контексте повествования сделан особый акцент на настройку iptables (по умолчанию политика блокировать) подробно разберем используемые правила.
Для начала, давайте немного настроим Debian 13 и дадим права на использование sudo нашему пользователю:
да именно su - надо входить иначе не сработает usermod
su -
редактируем конфиг sudo раскоментировав строку %sudo ALL=(ALL:ALL) ALL
nano /etc/sudoers #
для наглядности выполнена команда что бы убедится что текущий пользователь не состоит в группе sudo
groups john
следует добавить его в группу
usermod -aG sudo john
если все сделано верно выполнив повторно команду ниже подтвердит об этом
groups john
что наглядно демонстрирует скриншот ниже
примерно так должен выглядеть конфиг sudoers
далее следует перезапустить, что бы права вступили в силу напомню команда
reboot
И так, система следующая, маршрутизатор(шести портовый мини пк на борту Debian 13) в первый порт подключен кабель от роутера раздающий интернет, остальные пять портов будут использоваться для подключения других устройств.
План действий таков:
- Настроить первый сетевой интерфейс в качестве WAN через который будет доступ в интернет
- Настроить сетевой мост который объединит остальные пять портов в виртуальный сетевой интерфейс со своей подсетью
- Настроить DHCP сервер для раздачи IP в подсеть сетевого моста
- Настроить маршрутизацию для доступа в интернет из подсети сетевого моста
Установка необходимых пакетов.
Выполнив следующую команду установим все необходимые пакеты
sudo apt install bridge-utils isc-dhcp-server iptables-persistent
- bridge-utils - управления бриджами.
- isc-dhcp-server - DHCP-сервера.
- iptables-persistent - межсетевой экран
Настройка сетевого моста(bridge)
для создания сетевого моста(bridge) и автоматического старта при запуске есть два варианта:
- внести изменения описанные ниже в файл /etc/network/interfaces
- создать файл /etc/network/interfaces.d/br0
выберу второй вариант, выполнив следующую команду
sudo nano /etc/network/interfaces.d/br0
далее внесем следующие данные, это объединит интерфейсы в одну подсеть и br0 станет виртуальным интерфейсом.
auto br0
iface br0 inet static # мост будет со статическим адресом
address 192.168.1.1 # адрес маршрутизатора который мы настраиваем
netmask 255.255.255.0 # маска подсети
bridge_ports enp2s0 enp3s0 enp4s0 enp5s0 enp6s0# мост содержащий сетевые порты, у вас могут быть другие названия сетевых интерфейсов, будьте внимательны
bridge_stp on # Spanning Tree Protocol протокол включен
bridge_fd 0 # отключена задержка пересылки пакетов
Bridge_stp - режим STP (Spanning Tree Protocol) активен на мостовом устройстве. Это указывает, что на сетевом мосту (bridge) работает протокол остовного дерева (Spanning Tree Protocol), который предназначен для предотвращения образования петель в сети путем блокировки избыточных соединений.
bridge_fd - в сетевом мосте (бридже) отключена задержка пересылки пакетов. Значение 0 указывает на нулевую задержку, что ускоряет работу моста, но может быть небезопасным в определенных конфигурациях.
Для того что бы сетевой мост появился в списке сетевых интерфейсов следует перезапустить демона выполнив следующую команду
sudo systemctl restart networking
sudo systemctl status networking
для того что бы убедиться в этом достаточно выполнить любую из команд ниже
ip a # покажет все сетевые интерфейсы
или
ip link show br0 # покажет сетевой мост br0
Настройка DHCP-сервера
DHCP будет автоматически раздавать IP-адреса устройствам в бридж-сети. Внесем изменения в конфиг /etc/default/isc-dhcp-server
sudo nano /etc/default/isc-dhcp-server
и укажем интерфейс сетевого моста:
...
INTERFACESv4="br0"
...
Далее отредактируем конфиг /etc/dhcp/dhcpd.conf
sudo nano /etc/dhcp/dhcpd.conf
и внесем следующие настройки будущей подсети :
...
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option domain-name-servers 8.8.8.8, 8.8.4.4;
}
...
давайте разберем что за настройки
- subnet 192.168.1.0 netmask 255.255.255.0 - подсеть 192.168.1.0 маска 255.255.255.0
- range 192.168.1.10 192.168.1.200; - Диапазон IP: 192.168.1.10–200.
- option routers 192.168.1.1; - Шлюз: 192.168.1.1 (IP бридж).
- option domain-name-servers 8.8.8.8, 8.8.4.4; - DNS: Google DNS (или ваши).
далее проверьте конфиг быть может что то написано неверно, выполнив следующую команду
sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf
если ошибок нет то переходим к запуску DHCP сервер (в автозапуск он уже добавлен) выполнив следующие пару команд
sudo systemctl start isc-dhcp-server
sudo systemctl status isc-dhcp-server
если статус isc-dhcp-server содержит проблемы смотрим логи выполнив следующую команду:
sudo journalctl -u isc-dhcp-server
Настройка маршрутизации и nat в iptables
Переходим к настройки iptables
Проверим разрешена ли пересылка пакетов, для этого откроем конфиг /etc/sysctl.conf.
sudo nano /etc/sysctl.conf
Нюанс. Если используете Debian 13 то создаем файл конфига командой ниже так как такого конфига нет
sudo nano /etc/sysctl.d/sysctl.conf
и проверим следующий параметр
...
net.ipv4.ip_forward=1 # разрешена пересылка пакетов
...
что бы вступило в силу следует перезапустить систему, команду уже знаете
для начала настроим доступ к интернету самого маршрутизатора, иначе как поддерживать систему в актуальном состоянии. Для просмотра состояния iptables будем использовать следующую команду
sudo iptables -nvL --line-numbers
как видим по умолчанию политика все соединения разрешены, изменим политику iptables на DROP, следующими командами, то бишь по умолчанию iptables все соединения блокирует
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP
что бы вернуть интернет доступ на маршрутизатор надо внести следующие разрешающие правила в цепочку входящие:
добавляем разрешающее правило связанные и установленные соединения в цепочку входящие
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
добавляем разрешающее правило для интерфейса loopback в цепочку входящие, это потребуется для определенных сервисов которые возможно буду использовать в дальнейшем
sudo iptables -A INPUT -i lo -j ACCEPT
добавляем разрешающее правило для протокола ICMP в цепочку входящие для ответа на получение команды ping, в принципе опционально
sudo iptables -A INPUT -p icmp -j ACCEPT
а так же в цепочку исходящие
добавляем разрешающее правило связанные и установленные соединения в цепочку исходящие
sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
добавляем разрешающее правила для отправки DNS запросов, открыв порт 53 для протоколов TCP и UDP в цепочку исходящие
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
добавляем разрешающее правило для отправки DHCP запросов, открыв порт 67 и 68 для протокола UDP в цепочку исходящие
sudo iptables -A OUTPUT -p udp --dport 67:68 -j ACCEPT
добавляем разрешающие правила для отправки DHCP запросов, открыв порты 80 и 443 для протокола TCP в цепочку исходящие, думаю http и https понятны для чего
sudo iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
добавляем разрешающее правило для протокола ICMP в цепочку исходящее для отправки команды ping, в принципе опционально
sudo iptables -A OUTPUT -p icmp -j ACCEPT
интернет на маршрутизаторе должен появиться сразу
переходим к правилам для для перенаправления трафика с enp1s0 на br0 и обратно, для доступа в интернет:
добавляем правило маскарадинга в таблицу NAT в цепочку построутинга трафик направляется из маршрутизатора в интерфейс enp1s0
sudo iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE
добавляем разрешающее правило в цепочку перенаправления из интерфейса enp1s0 в сетевой мост br0 которое в свою очередь разрешает связанные и установленные соединения
sudo iptables -A FORWARD -i enp1s0 -o br0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
добавляем разрешающее правило в цепочку перенаправления из сетевой мост br0 в сетевой интерфейс enp1s0
sudo iptables -A FORWARD -i br0 -o enp1s0 -j ACCEPT
Для сохранения правил выполним команду ниже:
sudo netfilter-persistent save
как видно судя по пакетам правила отрабатывают, выполнив команду
sudo iptables -nvL --line-numbers
посмотреть правила которые внесены можно командой
sudo iptables -S
Подведем итоги. В результате мы получаем маршрутизатор на Debian'е получает интернет из подсети 192.168.0.0 на первый сетевой интерфейс, остальные сетевые интерфейсы объединены в сетевой мост использующий подсеть 192.168.1.0 поднятый в этой подсети DHCP сервер назначает IP в порты сетевого моста и доступ в интернет для устройств сетевого моста используя nat и маршрутизацию iptables.
Более подробнее о возможностях и управлении iptables можно изучить в статье "iptables часть 1 основы управления правилами"
За основу взята документация по iptables, а так же информация с форумов по данной тематике, информация других пользователей размещенная на
просторах всемирной паутины и собственные наработки.
За сим откланиваюсь...