Добрый день дорогой читатель, данное повествование не является
истиной в последней инстанции, это некая наработка по настройке Debian в роли коммутатора (в дальнейшем не только функции коммутации будет
выполнять) установленный на мини ПК на борту которого имеется шесть
сетевых интерфейсов. В контексте повествования
Сие повествование является прямым продолжением статьи "iptables часть 3 (Debian в роли маршрутизатора)" посвящена эпопеи с мини пк который использовался в роли маршрутизатора.
Напомню мини-пк на борту имеет шесть сетевых интерфейсов одним из которых подключен к основной подсети (192.168.0.0/24) остальные пять были объединены в сетевой мост создававший подсеть (192.168.1.0/24). В дальнейшем потребовалось пробросить трафик MiniDLNA сервер находившегося в подсети 192.168.1.0/24, а клиенты находились в подсети 192.168.0.0/24. Проброс трафика между подсетями не увенчался успехов (либо я запутался в правилах либо маршрутизатор, думаю в этом вся беда), не получилось реализовать обнаружение устройствами сервера DLNA и multicast трафик за пределы подсети сервера (192.168.1.0/24).
Было решено, полностью перенастроить мини-пк из маршрутизатора в коммутатор уровня L2 дабы избавиться от подсети 192.168.1.0/24 облегчить себе жизнь. То бишь мини пк будет расширять сеть на пять дополнительных портов и подключенные клиенты к нему будут находится в основной подсети 192.168.0.0/24.
Работает это так, при объединении сетевых портов eth0...eth5 в сетевой мост br0 они становятся прозрачными как на коммутаторе/свиче и весь трафик между ними проходит напрямую, Debian подключается к этому сетевому мосту изнутри.
На борту мини-пк процессора Celeron 3965U нагрузка при создании программного моста будет зависеть исключительно от объема и типа проходящего трафика. Из небольшого опыта использования подобного устройства поделюсь наблюдениями и предположениями.
Нагрузка при обычном использовании (Интернет). Мой интернет-канал составляет 100 Мбит/с, практически не заметна нагрузка на процессор. Процессор будет загружен примерно на 2–5%. Debian будет работать стабильно, доступ в интернет для самой системы и устройств за ней будет отличным.
Нагрузка при гигабитной передаче данных (Локальная сеть). Если начнете копировать файлы между устройствами внутри моста на скорости 1 Гбит/с нагрузка на процессор может вырасти примерно до 20–40% на одно ядро. Поскольку это программная обработка, каждый пакет прерывает работу процессора. Предел возможностей для этого процессора суммарный трафик около 2–3 Гбит/с. Предположительно если все 6 портов будут одновременно нагружены на полную мощность, процессор может не справится с таким объемом, и скорость упадет. Выводы и предположения сделаны на основе наблюдений переноса данных (фото, видео, софт, игры) по сети общий объем около 1Тб.
Для домашнего использования в целом годится, если не гонять по всем портам круглые сутки терабайты данных, иначе лучше использовать специализированные устройства. Ну довольно размышлений перейдем к практике
Объединение всех сетевых интерфейсов в сетевой мост
Для создания моста из 6 портов в Debian отредактируем файл конфига интерфейсов /etc/network/interfaces предварительно установив пакет bridge-utils. Выполнив команду:
sudo apt install bridge-utils
далее непосредственно перейдем к настройке сетевого моста, но для этого нам потребуются имена сетевых интерфейсов для этого выполним команду
ip a
у меня они enp1s0 enp2s0 enp3s0 enp4s0 enp5s0 enp6s0, у вас могут быть другие имена
sudo nano /etc/network/interfaces
внесем следующее
...
# Настройка моста
auto br0
iface br0 inet dhcp # получение IP для моста от роутера
bridge_ports enp1s0 enp2s0 enp3s0 enp4s0 enp5s0 enp6s0
bridge_stp on # включить STP, если боитесь петель
bridge_fd 0 # минимальная задержка пересылки
...
Напомню о петлях в сети: Если вы соедините порты моста между собой или с другими коммутаторами в кольцо, сеть может «лечь». Для предотвращения этого используйте протокол STP (Spanning Tree Protocol).
IP адрес сетевой мост будет получать от роутера, на нем же зафиксирован по MAC адресу, дабы стал статичным.
Далее перезапустим сетевой сервис:
sudo systemctl restart networking
перезапускается достаточно долго, наберитесь терпения.
Удаленный доступ через ssh
далее переходим к настройки ssh сервера, для удаленного доступа процесс описан в статье "Установка и настройка SSH-сервера" для дальнейшей настройки "умного коммутатора". Удаленное подключение к Debian осуществляется по IP сетевого моста.
По безопасности удаленного доступа по ssh за основу возьмем статьей "iptables часть 4 (настройка доступа к SSH-серверу)" на основе нее напишем правила под "коммутатор"
Хотя в данном случае мини-пк за роутером, а на нем настроено все необходимое. Но все же следует обезопасить операционную систему. Да иногда бываю параноидален:)
Настройка iptables
Для начала установим iptables выполнив следующие команды
sudo apt install iptables iptables-persistent
и запустим
sudo systemctl enable --now netfilter-persistent
sudo systemctl status netfilter-persistent
да в Debian немного иначе чем в Arch'e запускается совсем другой unit
Об управлении правилами можно воспользоваться статьей "iptables часть 1 основы управления правилами" в ней детально описал основы.
Для Celeron 3965U работа с iptables на мосту это критический момент. По умолчанию Linux фильтрует трафик внутри моста так же, как и обычный маршрутизируемый трафик, что может сильно нагрузить процессор при копировании файлов между портами. В данном случае задумываться о фильтрации трафика внутри моста в такой конфигурации не стоит.
Более того, будет правильнее отключить проверку трафика моста средствами iptables.
Почему фильтрация внутри моста в данном случае не нужна:
- Лишняя нагрузка на процессор: Если включить фильтрацию моста (bridge-nf-call-iptables = 1), процессор будет проверять каждый пакет, переходящий с одного порта на другой. Для Celeron 3965U это лишняя работа, которая снизит скорость обмена файлами между вашими устройствами.
- Безопасность: Если мини-ПК стоит внутри локальной сети (за роутером который смотрит в интернет), то роутер уже защищает от внешних атак из интернета.
- Сложность настройки: Фильтрация внутри моста часто ломает работу таких вещей, как DHCP или широковещательные запросы, если не прописать десятки исключений.
Достаточно защитить только саму операционную систему (входящие соединения на IP-адрес моста br0), но оставить проходящий через мост трафик нетронутым.
- Оставим мост "без присмотра": Убедимся, что ядро не заставляет iptables проверять транзитный трафик. По умолчанию в Debian это так, но все же пропишем в конфиг /etc/sysctl.conf следующие строки, так надежнее:
...
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
net.bridge.bridge-nf-call-ip6tables = 0
...
в Debian 13 это делается чуть иначе, создаем файл и в него пишем содержимое описанное выше
sudo nano /etc/sysctl.d/sysctl.conf
- Защитим только вход (INPUT): достаточно настроить простой файервол для портов самого Debian (SSH). Пакеты, предназначенные самому мини-ПК попадают в цепочку INPUT, а которые просто проходят с порта на порт, в FORWARD. В INPUT разрешим SSH (22) и ответы на запросы (ESTABLISHED). Остальное DROP.
FORWARD: установим политику по умолчанию ACCEPT (пусть работает как обычный провод).
OUTPUT: аналогично FORWARD политику по умолчанию ACCEPT
По итогу получим максимальную скорость коммутации близкую к 1 Гбит/с и при этом защищенную ОС. Но вернемся к правилам
# 1. Очищаем текущие правила
iptables -F
iptables -X
Разрешаем всё для самой системы (внутренний интерфейс lo)
iptables -A INPUT -i lo -j ACCEPT
Разрешаем уже установленные соединения (интернет для обновлений будет работать)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Разрешаем SSH, чтобы не потерять доступ
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Разрешаем пинг (полезно для диагностики)
iptables -A INPUT -p icmp -j ACCEPT
ГЛАВНОЕ: Разрешаем весь проходящий трафик. Это гарантирует, что CPU не будет нагружен фильтрацией транзитных пакетов
iptables -P FORWARD ACCEPT # по умолчанию все транзитные разрешены
Закрываем всё остальное на ВХОД к самому Debian
iptables -P INPUT DROP # по умолчанию все входящие запрещены
iptables -P OUTPUT ACCEPT # по умолчанию все исходящие разрешены
Для сохранения правил воспользуемся командой:
sudo netfilter-persistent save
К сожалению не могу провести полноценный тест на нагрузку, нет столько девайсов, что бы подключить к каждому порту и по гонять трафик.
За основу взята документация по iptables и сетям, а так же информация с форумов по данной тематике, информация других пользователей размещенная на просторах всемирной паутины и собственные наработки.
За сим откланиваюсь...