InquirerMarcos swears in Zalameda as chief justicePunchEx-Kwara ADC spokesperson defects to APCThe Jerusalem PostGunman behind deadly Krakow mass shooting dies in hospital as investigation into motives continues한겨레지역 유일 상급종합병원 울산대병원 노조 “구조조정 중단하라”N + 1Океан стал синее и зеленее вблизи Большого мусорного пятнаZDF heuteAktuelle Pressemitteilungen des ZDFObservador DesportoTrump admite provável encontro com Xi e Putin na ChinaRFI 中文日本国家安保战略将不提中国“威胁”只提“挑战”سكاي نيوز عربيةأبوظبي تشهد رقما قياسيا عالميا لسيارة BYD الكهربائية الخارقةEuronewsTrump calls Nvidia chief Jensen Huang an 'honorable guy' amid spy allegationsDaily MailThey fought for their country. Their reward? Euthanasia. Veterans with serious injuries or PTSD reveal they are being invited to end their lives under Canada's assisted dying systemBBC News BrasilAtirador mata 6 em praça no centro de Cracóvia, na Polônia, e morre após confronto com a polícia
The Daily Newsstand · Free, Always
Monday, November 9, 2026

Маршрутизатор на стероидах из старого ноутбука

Translate

Благодаря открытой ОС Linux что угодно можно превратить в маршрутизатор: старый ноутбук, мини-ПК, ненужный десктоп, который собрались выкинуть. Вносим небольшие изменения в конфигурацию сети — и старый девайс получит новую функциональность:

Полгода назад мы публиковали перевод на эту тему. Американский разработчик оказался настолько шокирован запретом правительства на импорт роутеров потребительского сегмента, что решил самостоятельно собрать аналогичное устройство. Как он выразился, собрать роутер можно из чего угодно, что хоть отдалённо называется компьютером.

Маршрутизатор из любого устройства

Некоторым людям кажется, что маршрутизатор и компьютер — это разные вещи. Наверное, потому что опыт работы с командной строкой на сетевом оборудовании отличается от опыта работы на ПК. Но на самом деле разницы практически нет, просто на ПК мы обычно работаем с файлами и папками, а в маршрутизаторе — с процессами. Команды и цели взаимодействия сильно отличаются.

Но в принципе это стандартный Linux-компьютер и там, и там. Можно сделать роутер из старого мини-ПК...

crappy router

Кустарный маршрутизатор из старого мини-ПК на процессоре Celeron 3205U 1,5 ГГц обеспечивает скорость 820–850 Мбит/с по проводу и 300 Мбит/с по Wi-Fi

...или ноутбука:

trash router

Ещё один самодельный маршрутизатор. Старый ноутбук ThinkPad T60, сетевая карта PCIe (тоже из хлама), древний коммутатор Cisco 2960 на 100 Мбит/с, роутер D-Link для раздачи Wi-Fi

Нужное железо (тоже старое) можно докупить на барахолке за копейки, при этом функциональность самодельного Linux-маршрутизатора с программной точки зрения будет как у самого навороченного роутера. Его можно программировать как угодно и устанавливать любой софт: торрент-клиент, медиасервер для раздачи фильмов по сети и др.

Это маршрутизатор «на стероидах» с функциональностью домашнего мини-сервера. При этом он ещё блокирует рекламные домены, телеметрию и прочий мусор.

Маршрутизатор из ноутбука

Предположим, у нас в наличии старый ноутбук под Debian 13. Как сделать из него умный маршрутизатор с блокировкой рекламы и другими интеллектуальными функциями?

Debian 13 позволяет запустить точку доступа на ноутбуке без всяких ручных настроек Linux

Debian 13 позволяет запустить точку доступа на ноутбуке без всяких ручных настроек Linux

Конечно, Debian 13 позволяет запустить точку доступа без всяких ручных настроек, как и почти любой смартфон. Но нас интересует не эта ограниченная функциональность, а полнофункциональный маршрутизатор, к которому можно подключиться по Ethernet и который может обрабатывать пакеты. Для этого нужно настраивать Linux вручную.

С программной точки зрения любое Linux-устройство можно сделать частью сетевой инфраструктуры, если настроить ядро для пропуска сетевого трафика. Требуется всего семь изменений в конфигурации.

Некоторые из изменений также описаны в вышеупомянутой статье «Как превратить в маршрутизатор что угодно» и в других статьях на Хабре (раз, два, три).

1. Включить IP-форвардинг (ip_forward=1)

Чтобы активировать обработку и пересылку пакетов в ядре Linux, начинаем с сетевых функций в ядре. В каждом Android-устройстве с функцией точки доступа сделаны те же изменения.

Путешествие пакета начинается с внешнего интерфейса. Сетевая карта (NIC) сигнализирует о прерывании, драйвер извлекает фрейм в кольцевой буфер памяти через DMA, где аппаратное обеспечение записывает данные в RAM без участия CPU. Сетевой стек ядра забирает оттуда пакет, удаляет заголовок Ethernet и проверяет IP-адрес назначения.

В этот момент ядро обращается к своей таблице маршрутизации. Если адрес назначения совпадает с одним из интерфейсов машины, пакет поднимается по сетевому стеку к процессу, ожидающему его обработки. Если адрес назначения не соответствует ни одному локальному интерфейсу и IP-маршрутизация отключена, ядро сбрасывает пакет и увеличивает счётчик в /proc/net/snmp.

Если мы хотим включить маршрутизацию, то нужно внести изменения в систему, чтобы ядро могло передать пакет на другой хост.

Настройки IP-форвардинга находятся в файле /etc/sysctl.d/10-forward.conf. Вносим туда одно изменение:

# /etc/sysctl.d/10-forward.conf
net.ipv4.ip_forward=1
Редактируем файл 10-forward.conf в редакторе Nano

Редактируем файл 10-forward.conf в редакторе Nano

Чтобы применить настройку без перезагрузки, выполняем команду sudo sysctl --system.

/etc/sysctl.d/ — конфигурация параметров ядра в рантайме. Во время загрузки системы systemd-sysctl.service читает все conf-файлы отсюда (плюс /etc/sysctl.conf) и записывает все параметры в соответствующие пути /proc/sys/.

Точечная нотация в коде выше — это просто перевод пути, то есть net.ipv4.ip_forward соответствует /proc/sys/net/ipv4/ip_forward. Запись 1 сообщает стеку IPv4 не отбрасывать пакеты с нелокальными адресами, а отправлять их через хук FORWARD.

Запись 1 в sysctl.d/10-forward.conf делает это изменение постоянным при каждой перезагрузке. Значение можно проверить в любой момент:

cat /proc/sys/net/ipv4/ip_forward
Проверяем значение ip_forward после редактирования файла 10-forward.conf

Проверяем значение ip_forward после редактирования файла 10-forward.conf

2. Прописать мост. Объединяем два интерфейса в один сегмент

Домашняя сеть обслуживает проводных и беспроводных клиентов в одной подсети. Конфигурация создаёт сетевой мост br0 и подключает к нему eth1 (второй порт с переходника USB-Ethernet) и wlan0 в качестве портов-участников. В нашей конструкции будет WAN (встроенный Ethernet, eth0), LAN (мост br0 из USB-Ethernet, eth1) и Wi-Fi (wlan0). Для более подробной информации см. документацию по мостам в ядре Linux.

Это важно для маршрутизации, потому что ядро назначает IP-адреса интерфейсам, а не физическим портам. Если интерфейсу br0 назначили адрес 192.168.0.1, то у маршрутизатора единственный адрес LAN, независимо от того, подключён клиент проводным или беспроводным способом. Оба интерфейса передают трафик в одной подсети и общаются на уровне 2 без необходимости маршрутизации между ними.

В десктопном Debian лучше использовать консольную утилиту nmcli (NetworkManager), см. неофициальную инструкцию.

Просмотр всех сетевых подключений с помощью утилиты nmcli

Просмотр всех сетевых подключений с помощью утилиты nmcli

Например, следующая команда создаёт мост br0:

sudo nmcli con add ifname br0 type bridge con-name br0
Мост br0 создан

Мост br0 создан

Потом можно назначить мосту IP-адрес:

sudo nmcli con modify br0 ipv4.method manual ipv4.addresses 192.168.0.1/24

После создания моста нужно добавить в него интерфейсы (например, второй проводной порт eth1). Примерно таким образом:

# Добавляем проводной порт локальной сети в мост
sudo nmcli con add type bridge-slave ifname eth1 master br0 con-name br0-eth1
# Поднимаем мост
sudo nmcli con up br0

Для более удобной настройки есть смысл использовать утилиту NetworkManager (nmtui) с визуальным текстовым интерфейсом:

sudo apt-get install network-manager
sudo nmtui
NetworkManager (nmtui). Здесь можно в визуальном режиме создавать, редактировать и активировать сетевые подключения

NetworkManager (nmtui). Здесь можно в визуальном режиме создавать, редактировать и активировать сетевые подключения

В дальнейшем мы будем управлять wlan0 через hostapd, так что Wi-Fi попадёт в мост потом через параметр bridge=br0 в hostapd.conf.

Чтобы NetworkManager не перехватывал Wi-Fi-интерфейс у hostapd, отключаем его управление:

sudo nmcli device set wlan0 managed no

3. Активация политик nftables: установка хуков

Теперь нужно определить правила обработки пакетов nftables в Netfilter.

Netfilter — это общая система фильтрации пакетов на уровне ядра, которая предоставляет точки подключения к сетевому стеку, а nftables (через nf_tables) — современный движок классификации пакетов, работающий поверх этих точек подключения. Он заменил iptables в качестве предпочтительного интерфейса.

Установка nftables:

sudo apt install nftables
sudo systemctl enable --now nftables

Правила файрвола и NAT прописываются в /etc/nftables.conf. Вот фрагмент цепочки forward внутри table:

chain forward {    type filter hook forward priority 0; policy drop;    iifname "eth0" oifname "br0" ct state { established,related } counter accept    iifname "br0"  oifname "eth0" ct state { new,established,related } counter accept    counter
}

В этой настройке точки доступа br0 — мост для локальной сети, который агрегирует трафик от проводных клиентов и беспроводных клиентов, управляемых hostapd. Два правила в цепочке FORWARD напрямую соответствуют двум направлениям потока трафика через маршрутизатор. Правило 1: от WAN к LAN (обратный и связанный трафик) и правило 2: от LAN к WAN (исходящий трафик). Это позволяет клиентам LAN свободно устанавливать соединения с интернетом, но из интернета невозможно инициировать соединения внутрь сети — классическая схема.

В конце стоит счётчик для остальных пакетов, которые не соответствуют ни одному из вышеуказанных правил (и, следовательно, будут отброшены). Полезно для мониторинга.

Более подробно о настройках Netfilter читайте здесь.

4. Подсистема conntrack

Правила ct state { established, related } и ct state { new, established, related } выше ссылаются на conntrack, подсистему отслеживания соединений ядра.

Устанавливаем программу conntrack для диагностики:

sudo apt-get install conntrack

Conntrack отслеживает трафик, проходящий через Netfilter, и ведёт таблицу активных потоков.

5. Политики NAT и Masquerade

Теперь нужно определить правила, изменяющие адреса отправителя в пакетах на хосте.

В домашних сетях используется частное адресное пространство в диапазонах 10.0.0.0/8, 172.16.0.0/12 и 192.168.0.0/16. В публичном интернете нет маршрутов ни к одному из этих диапазонов. В каждом пакете из локальной сети нужно заменить исходный адрес на публичный IP-адрес маршрутизатора, иначе хост никогда не получит ответы из интернета.

Эту функцию выполняет цепочка postrouting на хуке POSTROUTING:

chain postrouting {    type nat hook postrouting priority 100; policy accept;    oifname "eth0" counter masquerade
}

Все кортежи (tuple), то есть сочетания «частный IP, частный порт, публичный IP, публичный порт, протокол» хранятся в таблице conntrack на протяжении всего времени соединения, их можно просмотреть напрямую:

sudo conntrack -L
Каждая строка показывает исходные и обратные кортежи для активного потока, а также состояние соединения и обратный отсчёт времени

Каждая строка показывает исходные и обратные кортежи для активного потока, а также состояние соединения и обратный отсчёт времени

Старые потоки устаревают, и conntrack удаляет их записи, что является ключевым механизмом для предотвращения неограниченного роста таблицы NAT. Соединения TCP истекают после закрытия сессии или после настраиваемого периода бездействия. Для UDP действуют более короткие таймеры.

6. DHCP и DNS

Каждое устройство в локальной сети должно знать свой IP-адрес, маску подсети, шлюз в интернет и адрес DNS-сервера. Инструмент Dnsmasq создан для домашних сетей и небольших клиентов — как раз наш случай. Он широко используется на смартфонах и точках доступа, а также для поддержки виртуальных сетей. Dnsmasq включён в большинство дистрибутивов Linux, а также встроен в NetworkManager, который мы использовали ранее.

NetworkManager выполняет функции DHCP-сервера и DNS. Он запускает собственный экземпляр dnsmasq и динамически управляет конфигурацией по мере подключения и отключения интерфейсов.

Интеграция активируется указанием dns=dnsmasq в /etc/NetworkManager/NetworkManager.conf

Интеграция активируется указанием dns=dnsmasq в /etc/NetworkManager/NetworkManager.conf

7. Демон hostapd для раздачи Wi-Fi

Демон hostapd нужен для работы точек доступа и аутентификации. В Debian 13 он бывает замаскирован (masked), то есть systemd регистрирует службу, но блокирует её запуск, чтобы предотвратить запуск неконфигурированной открытой сети.

Ограничение снимается командой systemctl unmask hostapd. Если пакета нет в системе, его нужно установить, а потом разблокировать:

sudo apt install hostapd 
sudo systemctl unmask hostapd
Установка пакета hostapd и его активация в системе (unmask)

Установка пакета hostapd и его активация в системе (unmask)

Перед запуском нужно проверить, что в файле /etc/hostapd/hostapd.conf заданы корректные настройки (интерфейс, SSID, пароль и параметр bridge=br0).

Затем команда sudo systemctl enable --now hostapd запускает демон и регистрирует его для будущих загрузок:

Блокировка рекламы через Pi-hole

Для блокировки рекламы, трекеров и телеметрии на самодельном Linux-маршрутизаторе применяется DNS-фильтрация (DNS Sinkhole). Вместо Dnsmasq можно развернуть полноценный Pi-hole (или AdGuard Home) в Docker-контейнере или настроить блокировку напрямую через уже запущенный Dnsmasq.

Pi-hole предоставляет удобный веб-интерфейс, графики, гибкие белые/чёрные списки и автоматически обновляемые базы рекламных доменов. Инструкция по установке здесь.

Запуск скрипта для установки:

curl -sSL https://install.pi-hole.net | bash

Скрипт запускает автоматический инсталлятор:

По окончании работы инсталлятора генерируется пароль для админки:

Панель администратора сразу доступна на http://192.168.0.112:80/admin:

По окончании установки нужно будет настроить dnsmasq как клиент Pi-hole или отключить его и использовать Pi-hole как единственный DNS.

Итого

Итогом всех этих изменений является работающий x86-маршрутизатор на базе ноутбука с блокировкой рекламы. Как мы уже упоминали, ноутбук ещё удобно использовать как домашний мини-сервер для скачивания торрентов, раздачи контента по сети, веб-хостинга и др. Маршрутизатор ведь работает 24/7 и всегда в онлайне. Только нужно продумать вопросы безопасности и изоляции сервисов, а ещё как защитить батарею ноутбука (через настройки энергопитания), чтобы она не вздулась от постоянной работы.

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.