Добро пожаловать обратно, начинающие кибервоины!
Как вы знаете, традиционные аппаратные маршрутизаторы могут быть дорогими, негибкими и часто поставляются с проприетарной прошивкой, ограничивающей ваш контроль. Используя возможности Linux и nftables, вы можете создать индивидуальное решение для маршрутизации, которое обеспечит полный контроль над сетевым трафиком, политиками безопасности и оптимизацией производительности.
Nftables представляет собой эволюцию фреймворка фильтрации пакетов Linux, призванного заменить устаревшую систему iptables более эффективной и гибкой архитектурой. Nftables обеспечивает более понятный синтаксис, более высокую производительность и более мощные функции, что делает его идеальным для создания сложных решений маршрутизации.
Давайте углубимся в детали и превратим стандартную машину Linux в маршрутизатор с помощью nftables!
Прежде чем приступить к настройке маршрутизатора, важно понять, чем nftables отличается от своего предшественника. В отличие от iptables с его предопределёнными цепочками и таблицами, nftables использует более гибкий подход, позволяющий вам самостоятельно определять таблицы и цепочки.
Ключевые компоненты nftables включают в себя:
В этом руководстве я буду использовать Kali 2025, но инструкции должны работать с минимальными изменениями на большинстве современных дистрибутивов Linux. Вам понадобится компьютер как минимум с двумя сетевыми интерфейсами: один для подключения к WAN (интернету) и один для подключения к локальной сети (LAN).
Если вы используете VirtualBox, выполните следующие действия для настройки сетевых интерфейсов:
Выберите вашу виртуальную машину и перейдите в Настройки > Сеть .
При запуске ifconfig вы должны увидеть эти интерфейсы в списке.
Далее давайте убедимся, что nftables установлен:
kali> sudo apt install nftables
Теперь включите запуск службы nftables при загрузке:
kali> sudo systemctl enable nftables
kali> sudo systemctl start nftables
Чтобы наша Linux-машина работала как маршрутизатор, нам нужно включить IP-пересылку. Это позволит ядру пересылать пакеты между интерфейсами.
Отредактируйте файл конфигурации sysctl:
kali> sudo коврик для мыши /etc/sysctl.conf
Найдите или добавьте следующую строку и убедитесь, что она раскомментирована:
net.ipv4.ip_forward=1
Примените изменения:
sudo sysctl -p
Вы можете убедиться, что пересылка включена, проверив:
cat /proc/sys/net/ipv4/ip_forward
Если пересылка включена, то должно возвращаться значение «1».
Теперь настроим сетевые интерфейсы. Настроим eth0 как WAN-интерфейс (обычно с использованием DHCP для получения IP-адреса от интернет-провайдера), а eth1 — как LAN-интерфейс со статическим IP-адресом.
Отредактируйте файл конфигурации сети:
kali> sudo mousepad /etc/network/interfaces
Настройте это следующим образом:
# WAN-интерфейс
авто eth0
iface eth0 inet dhcp
# Интерфейс локальной сети
авто eth1
iface eth1 inet static
адрес 192.168.1.1
маска сети 255.255.255.0
Перезапустите сеть, чтобы применить эти изменения:
kali> sudo systemctl перезапустите сеть
Теперь перейдем к сердцу нашего маршрутизатора — конфигурации nftables. Мы создадим комплексный набор правил, который:
Создайте новый файл конфигурации nftables:
kali> sudo коврик для мыши /etc/nftables.conf
Вот полная конфигурация нашего маршрутизатора:
#!/usr/sbin/nft -f
набор правил очистки
# Определить переменные для интерфейсов
определить WAN_IF = eth0
определить LAN_IF = eth1
определить LAN_NET = 192.168.1.0/24
таблица inet фильтр {
цепочка ввода {
тип фильтра перехват входного приоритета 0; отбрасывание политики;
# Разрешить установленные/связанные соединения
состояние ct установлено,соответствующее принятие
# Разрешить петлю
iifname "lo" принять
# Разрешить локальной сети доступ к маршрутизатору
iifname $LAN_IF принять
# Разрешить ICMP из WAN (для пинга)
iifname $WAN_IF icmp type echo-request accept
# Отбрасывать недействительные соединения
состояние ct недопустимое падение
}
цепь вперед {
тип фильтра перехват переадресация приоритет 0; отбрасывание политики;
# Разрешить установленные/связанные соединения
состояние ct установлено,соответствующее принятие
# Разрешить LAN в WAN
iifname $LAN_IF oifname $WAN_IF принять
# Отбрасывать недействительные соединения
состояние ct недопустимое падение
}
выход цепи {
тип фильтра перехват вывода приоритет 0; политика принята;
}
}
таблица ip nat {
предварительная маршрутизация цепочки {
тип nat hook prerouting приоритет -100; политика принимает;
# Примеры переадресации портов (раскомментируйте и отредактируйте по мере необходимости)
# iifname $WAN_IF tcp dport 80 dnat to 192.168.1.100:80
}
цепочка постмаршрутизации {
тип nat hook postrouting приоритет 100; политика принята;
# Маскарад LAN в WAN
oifname $WAN_IF ip saddr $LAN_NET masquerade
}
}
Сохраните файл и примените конфигурацию:
Кали> sudo nft -f /etc/nftables.conf
Чтобы эти правила сохранялись при перезагрузках, включите службу nftables:
kali> sudo systemctl enable nftables
Теперь, когда наш маршрутизатор настроен, нам нужно настроить DHCP-сервер, чтобы устройства в нашей локальной сети могли автоматически получать IP-адреса. Мы будем использовать для этого dnsmasq, поскольку он легковесен и включает в себя кэширование DHCP и DNS.
Установить dnsmasq:
kali> sudo apt install dnsmasq
Настройте dnsmasq, отредактировав его файл конфигурации:
kali> sudo коврик для мыши /etc/dnsmasq.conf
Измените эти строки:
# Прослушивание только на интерфейсе LAN:
интерфейс=eth1
# Не слушайте в WAN:
без-dhcp-интерфейса=eth0
# Диапазон DHCP и время аренды
dhcp-диапазон=192.168.1.100,192.168.1.200,255.255.255.0,24h
# Доменное имя
домен=home.lan
# Включить DNS-кэширование
размер кэша=1000
# Шлюз по умолчанию
dhcp-option=option:router,192.168.1.1
# DNS-серверы (здесь используется публичный DNS Google)
dhcp-option=6,8.8.8.8,8.8.4.4
Запустите и включите dnsmasq:
kali> sudo systemctl enable dnsmasq
kali> sudo systemctl restart dnsmasq
Для эффективного управления маршрутизатором необходимо иметь возможность отслеживать его работу и устранять неполадки. Вот несколько полезных команд:
Просмотреть текущий набор правил nftables:
kali> sudo nft list ruleset
Проверьте трафик на интерфейсе:
кали> sudo tcpdump -i eth1
Просмотреть таблицу маршрутизации:
Linux с nftables — мощный инструмент! Мы можем организовать брандмауэр, маршрутизатор и DHCP-сервер, имея лишь немного знаний и машину с Linux. Эта конфигурация даёт вам возможность управлять мощным и гибким маршрутизатором за малую долю стоимости. Кроме того, она даёт возможность настраивать маршрутизатор так, как это просто невозможно в коммерческих системах.
Как вы знаете, традиционные аппаратные маршрутизаторы могут быть дорогими, негибкими и часто поставляются с проприетарной прошивкой, ограничивающей ваш контроль. Используя возможности Linux и nftables, вы можете создать индивидуальное решение для маршрутизации, которое обеспечит полный контроль над сетевым трафиком, политиками безопасности и оптимизацией производительности.
Nftables представляет собой эволюцию фреймворка фильтрации пакетов Linux, призванного заменить устаревшую систему iptables более эффективной и гибкой архитектурой. Nftables обеспечивает более понятный синтаксис, более высокую производительность и более мощные функции, что делает его идеальным для создания сложных решений маршрутизации.
Давайте углубимся в детали и превратим стандартную машину Linux в маршрутизатор с помощью nftables!
Шаг №1. Понимание архитектуры Nftables
Прежде чем приступить к настройке маршрутизатора, важно понять, чем nftables отличается от своего предшественника. В отличие от iptables с его предопределёнными цепочками и таблицами, nftables использует более гибкий подход, позволяющий вам самостоятельно определять таблицы и цепочки.
Ключевые компоненты nftables включают в себя:
- Таблицы : пространства имён, содержащие цепочки. Они относятся к определённому семейству адресов (IPv4, IPv6 и т. д.).
- Цепочки : контейнеры для правил с определенными хуками и приоритетами.
- Правила : Фактические инструкции по фильтрации или модификации, применяемые к пакетам.
- Выражения : строительные блоки, из которых состоят правила, позволяющие создавать сложные условия сопоставления.
- Наборы : коллекции элементов для эффективного поиска.
Шаг №2. Настройка вашей машины Linux
В этом руководстве я буду использовать Kali 2025, но инструкции должны работать с минимальными изменениями на большинстве современных дистрибутивов Linux. Вам понадобится компьютер как минимум с двумя сетевыми интерфейсами: один для подключения к WAN (интернету) и один для подключения к локальной сети (LAN).
Если вы используете VirtualBox, выполните следующие действия для настройки сетевых интерфейсов:
Выберите вашу виртуальную машину и перейдите в Настройки > Сеть .
Адаптер 1 (eth0) – подключение к Интернету (WAN)
- Установите флажок «Включить сетевой адаптер».
- Установите «Подключено к» на NAT (или мостовой адаптер , если вам нужен прямой доступ к вашей физической сети)
- Этот адаптер будет служить интерфейсом eth0 внутри виртуальной машины, обеспечивая доступ в Интернет.
Адаптер 2 (eth1) – Внутренняя сеть (LAN)
- Установите флажок «Включить сетевой адаптер».
- Установите «Подключено к» на «Внутренняя сеть»
- Дайте внутренней сети имя (например, intnet ) — обязательно используйте одно и то же имя для всех виртуальных машин, которые должны находиться в одной локальной сети.
- Этот адаптер будет работать как eth1 , подключенный к вашей частной внутренней сети.
При запуске ifconfig вы должны увидеть эти интерфейсы в списке.
Далее давайте убедимся, что nftables установлен:
kali> sudo apt install nftables
Теперь включите запуск службы nftables при загрузке:
kali> sudo systemctl enable nftables
kali> sudo systemctl start nftables
Шаг №3. Включение IP-переадресации
Чтобы наша Linux-машина работала как маршрутизатор, нам нужно включить IP-пересылку. Это позволит ядру пересылать пакеты между интерфейсами.
Отредактируйте файл конфигурации sysctl:
kali> sudo коврик для мыши /etc/sysctl.conf
Найдите или добавьте следующую строку и убедитесь, что она раскомментирована:
net.ipv4.ip_forward=1
Примените изменения:
sudo sysctl -p
Вы можете убедиться, что пересылка включена, проверив:
cat /proc/sys/net/ipv4/ip_forward
Если пересылка включена, то должно возвращаться значение «1».
Шаг №4. Настройка сетевых интерфейсов
Теперь настроим сетевые интерфейсы. Настроим eth0 как WAN-интерфейс (обычно с использованием DHCP для получения IP-адреса от интернет-провайдера), а eth1 — как LAN-интерфейс со статическим IP-адресом.
Отредактируйте файл конфигурации сети:
kali> sudo mousepad /etc/network/interfaces
Настройте это следующим образом:
# WAN-интерфейс
авто eth0
iface eth0 inet dhcp
# Интерфейс локальной сети
авто eth1
iface eth1 inet static
адрес 192.168.1.1
маска сети 255.255.255.0
Перезапустите сеть, чтобы применить эти изменения:
kali> sudo systemctl перезапустите сеть
Шаг №5 Создание конфигурации Nftables
Теперь перейдем к сердцу нашего маршрутизатора — конфигурации nftables. Мы создадим комплексный набор правил, который:
- Позволяет установленным и связанным соединениям
- Выполняет преобразование сетевых адресов (NAT) для нашей локальной сети
- Реализует базовую фильтрацию безопасности
- Обеспечивает пересылку между интерфейсами
Создайте новый файл конфигурации nftables:
kali> sudo коврик для мыши /etc/nftables.conf
Вот полная конфигурация нашего маршрутизатора:
#!/usr/sbin/nft -f
набор правил очистки
# Определить переменные для интерфейсов
определить WAN_IF = eth0
определить LAN_IF = eth1
определить LAN_NET = 192.168.1.0/24
таблица inet фильтр {
цепочка ввода {
тип фильтра перехват входного приоритета 0; отбрасывание политики;
# Разрешить установленные/связанные соединения
состояние ct установлено,соответствующее принятие
# Разрешить петлю
iifname "lo" принять
# Разрешить локальной сети доступ к маршрутизатору
iifname $LAN_IF принять
# Разрешить ICMP из WAN (для пинга)
iifname $WAN_IF icmp type echo-request accept
# Отбрасывать недействительные соединения
состояние ct недопустимое падение
}
цепь вперед {
тип фильтра перехват переадресация приоритет 0; отбрасывание политики;
# Разрешить установленные/связанные соединения
состояние ct установлено,соответствующее принятие
# Разрешить LAN в WAN
iifname $LAN_IF oifname $WAN_IF принять
# Отбрасывать недействительные соединения
состояние ct недопустимое падение
}
выход цепи {
тип фильтра перехват вывода приоритет 0; политика принята;
}
}
таблица ip nat {
предварительная маршрутизация цепочки {
тип nat hook prerouting приоритет -100; политика принимает;
# Примеры переадресации портов (раскомментируйте и отредактируйте по мере необходимости)
# iifname $WAN_IF tcp dport 80 dnat to 192.168.1.100:80
}
цепочка постмаршрутизации {
тип nat hook postrouting приоритет 100; политика принята;
# Маскарад LAN в WAN
oifname $WAN_IF ip saddr $LAN_NET masquerade
}
}
Сохраните файл и примените конфигурацию:
Кали> sudo nft -f /etc/nftables.conf
Чтобы эти правила сохранялись при перезагрузках, включите службу nftables:
kali> sudo systemctl enable nftables
Шаг №6. Настройка DHCP-сервера для клиентов локальной сети
Теперь, когда наш маршрутизатор настроен, нам нужно настроить DHCP-сервер, чтобы устройства в нашей локальной сети могли автоматически получать IP-адреса. Мы будем использовать для этого dnsmasq, поскольку он легковесен и включает в себя кэширование DHCP и DNS.
Установить dnsmasq:
kali> sudo apt install dnsmasq
Настройте dnsmasq, отредактировав его файл конфигурации:
kali> sudo коврик для мыши /etc/dnsmasq.conf
Измените эти строки:
# Прослушивание только на интерфейсе LAN:
интерфейс=eth1
# Не слушайте в WAN:
без-dhcp-интерфейса=eth0
# Диапазон DHCP и время аренды
dhcp-диапазон=192.168.1.100,192.168.1.200,255.255.255.0,24h
# Доменное имя
домен=home.lan
# Включить DNS-кэширование
размер кэша=1000
# Шлюз по умолчанию
dhcp-option=option:router,192.168.1.1
# DNS-серверы (здесь используется публичный DNS Google)
dhcp-option=6,8.8.8.8,8.8.4.4
Запустите и включите dnsmasq:
kali> sudo systemctl enable dnsmasq
kali> sudo systemctl restart dnsmasq
Шаг №8. Мониторинг и устранение неполадок
Для эффективного управления маршрутизатором необходимо иметь возможность отслеживать его работу и устранять неполадки. Вот несколько полезных команд:
Просмотреть текущий набор правил nftables:
kali> sudo nft list ruleset
Проверьте трафик на интерфейсе:
кали> sudo tcpdump -i eth1
Просмотреть таблицу маршрутизации:
Краткое содержание
Linux с nftables — мощный инструмент! Мы можем организовать брандмауэр, маршрутизатор и DHCP-сервер, имея лишь немного знаний и машину с Linux. Эта конфигурация даёт вам возможность управлять мощным и гибким маршрутизатором за малую долю стоимости. Кроме того, она даёт возможность настраивать маршрутизатор так, как это просто невозможно в коммерческих системах.