Приветствую всех читателей Хабра. В этой статье я расскажу как сделать маршрутизатор из компьютера на Linux. На самом деле, сделать такой роутер несложно. Для реализации этого проекта подойдет любое устройство на Debian/Ubuntu Server, имеющее парочку сетевых карт и возможность раздавать Wi‑Fi. Важно учесть, использует ли ваш провайдер PPPoE, так как статья не описывает настройку девайса для работы с этим протоколом. Для чего нужен x86 роутер? У него есть плюс: он может стать полноценным домашним сервером, ведь вы можете запускать другие сервисы на нем, а маршрутизация становится еще одной задачей для относительно мощного x86 железа.
Немного о сервере
За основу роутера я взял древний ПК. Он очень слаб для повседневных задач, так как в нем нет даже дискретной видеокарты, а два ядра 45 нм 2009 года плохо справляются даже с современными браузерами. Представляю вашему вниманию характеристики этого «монстра»:
AMD Athlon II X2 250
8 гб DDR3 2 канала
ASRock 760GM‑GS3
SSD SATA 128 гб
HDD 500 гб
Хоть он и слаб для повседневных задач, но он мощнее любого домашнего роутера. Однако в таком виде он не заменит домашний маршрутизатор. Ему не хватает как минимум второй сетевой карты и точки доступа Wi‑Fi, поэтому я докупил на маркетплейсах:
Сетевую карту на чипе Intel I210
Роутер Huawei AX1 Lite
Для WAN я взял сетевую карту на чипе Intel I210, ee можно найти по цене менее 1200 рублей. Для Linux она подходит отлично, драйвер в ядре стабильный, заводится из коробки в любом дистрибутиве. Роутер Huawei AX1 Lite за 800 рублей будет переведен в режим моста, то есть станет точкой доступа WI‑Fi и коммутатором. Конечно, раздавать Wi‑Fi и подключаться по проводу к серверу можно и другими способами, но данный вариант простой и бюджетный, две железки обошлись мне менее чем в 2000 ₽ Теперь, сервер может становиться полноценным роутером, осталось только настроить.
Точка доступа
Здесь нет ничего сложного. Нужно лишь подключиться к локальной сети, зайти в настройки роутера, задать имя сети и пароль (для новых роутеров), выставить свои настройки Wi‑Fi и выбрать «Режим моста» или «Точка доступа» (зависит от производителя, название может отличаться). Также, необходимо отключить DHCP, ведь IP адресами займется x86 роутер.
Подготовка ОС
Запускаем сервер. Заходим под пользователем root (чтобы не писать sudo каждый раз). Обновляем пакеты:
apt update && apt upgrade
Теперь, установим нужные пакеты. Это утилита для управления файрволом nftables (сама подсистема вшита в ядро) и DHCP сервер dnsmasq:
apt install nftables dnsmasq
Необходимо включить форвардинг в ядре Linux. Этим, мы разрешаем системе заниматься маршрутизацией. Для этого, записываем в файл:
echo "net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.d/99-routing.conf sysctl --system
Нужно узнать имена наших интерфейсов. Для WAN я буду использовать Intel I210, для LAN встроенный в плату Realtek. Самый простой способ узнать названия сетевых карт, ввести:
watch -n 1 "ip -br a"
Теперь можно подключить что‑нибудь к одной из сетевых карт (WAN/LAN или другой ПК) и смотреть, какой сетевой карте присвоен интерфейс. У меня enp2s0 это I210 (для WAN), а enp3s0 — Realtek материнской платы (для LAN).
Настройка /etc/network/interfaces
В /etc/network/interfaces необходимо добавить:
# enp3s0 замените на ваш LAN интерфейс auto enp3s0 # Задаем статический IP для LAN iface enp3s0 inet static address 192.168.1.1 netmask 255.255.255.0 # enp2s0 замените на ваш WAN auto enp2s0 # Позволяем провайдеру выдать IP WAN интерфейсу iface enp2s0 inet dhcp
Применяем изменения на лету:
systemctl restart networking.service
NFTables
В NFTables необходимо добавить NAT (подмену IP адресов, необходимо для выхода в Интернет). Здесь все просто: тип inet для всего трафика, тип цепочки nat, хук postrouting (после маршрутизации, непосредственно перед отправкой пакета), приоритет 0 (priority filter), имя интерфейса и маскарадинг. Вот так выглядит рабочий конфиг:
table inet Router { chain NAT { type nat hook postrouting priority filter; policy accept; oifname "enp2s0" masquerade # Замените enp2s0 на ваш WAN интерфейс } }
Конфиг нужно вставить в /etc/nftables.conf. Также, NFTables нужно добавить в автозагрузку:
systemctl enable --now nftables.service
Dnsmasq
Чтобы маршрутизатор мог раздавать IP адреса в локальной сети, необходимо поднять DHCP сервер. Вот мой конфигурационный файл:
interface=enp3s0 # Замените на ваш LAN интерфейс dhcp-range=192.168.1.50,192.168.1.150,255.255.255.0,12h # Диапозон IP от 50 до 150, маска /24, аренда dhcp-option=3,192.168.1.1 # Шлюз dhcp-option=6,192.168.1.1 # DNS сервер локальной сети # DNS серверы для самого роутера server=1.1.1.1 server=8.8.8.8 # Кэш cache-size=1000
Добавляем DHCP‑DNS сервер в автозагрузку:
systemctl enable --now dnsmasq
Заключение
Роутер полностью настроен. Можно подключаться к сети, заданной в настройках точки доступа (в моем случае Huawei AX1 Lite). Вы можете поднять SSH, настроить Zapret или B4 для обхода блокировок, файловое хранилище, блокировщик рекламы и многое другое. Всем удачи!
Комментарии (48)

gionet
26.07.2026 10:10Мало .. мало! Надо еще прикрутить всякие штуки для обхода DPI , блокировки рекламы и пр. Раз уж вы накатили линуксы, так уж используйте по полной преимущества

cheshircat
26.07.2026 10:10Статья какая-то поверхностная.
Основная проблема старого железа - энергопотребление. Сколько этот роутер съест киловатт-часов в простое?
Второй момент скорость маршрутизации. Не увидел тестов. Для 100Mbps нормально, но сможет ли он вытянуть 500Mbps, 1Gbps?

JBFW
26.07.2026 10:10А интернет канал у автора вытянет 500, 1G?
Это просто к тому, что далеко не везде есть необходимость в гигабитных сетевых портах. Толку-то от гигабита, если там какой-нибудь gsm-модем или оптика на 50/100 Мбит...

DennisP
26.07.2026 10:10Локальный nas никто не отменял. Который в общем-то и напрашивается реализовать силами самого "роутера"

MPfromLINUX Автор
26.07.2026 10:10Сколько ест в ватт-часах замерить достаточно тяжело, в простое 40 вт-ч навскидку. Гигабит вытягивает, Realtek на плате гигабитный, I210 тоже, cat 5e 8 жил. Процессорной мощности для маршрутизации полностью хватает.

Domestomag
26.07.2026 10:10Нат для гигабита он потянет не напрягаясь, скорее всего даже через опенвпн сможет гигабит прокачивать.

korn3r
26.07.2026 10:10у проца aes-ni нету, откуда там гигабит на OpenVPN?

Domestomag
26.07.2026 10:10Брутфорс Ж) Core2Duo E7500 с ddr2 шифрует aes256 со скоростью 150мбайт/с а chacha20-poly1305 все 500.

korn3r
26.07.2026 10:10ну да.... на мегагерцах. и это скорее всего замеры самим openssl чисто по шифрованию. в реальности (на фактическом openvpn соединении) это будет мегабит 100 + забитый под 100% проц.

VenbergV
26.07.2026 10:10Попробуйте версии 2.7+. И ядро Linux 6.16. Там DCO вошло в ядро.

korn3r
26.07.2026 10:10а толку? гигабита на openvpn у вас все равно не будет. скорее всего даже если там i7 с aes-ni
и как бы он там усердно не оффлоадил, основной пожиратель проца это шифрование. кто бы его ни делал - юзерспейс или ядро - на таком проце это делается программно.

Vladekk
26.07.2026 10:10А почему не вытянет?
У меня в качестве сервера помощнее ноут, правда, но вполне тянет 700-800 мегабит. Это вроде бы близко к теоретической пропускной. Процессор при этом занят на несколько процентов только. Да и то, подозреваю, из-за сетевых дисков.
Раздумваю, стоит ли объединить роутер с сервером, чтоб сервак был ближе к интернету, но для этого придется купить usb3 сетевуху.
А вообще, автор поднял воспоминания, как у меня в общаге был инет 30 килобайт в секунду и роутер на основе пентиума 120 мегагерц. Стоял там мандрейк с shorewall, работал отлично.

alexs963
26.07.2026 10:10Для dhcp можно использовать встроенный в systemd:
# cat 21-home-lan.network [Match] Name=enp5s0 [Network] Address=192.168.0.1/24 Gateway=192.168.0.1 DHCPServer=true [DHCPServer] DefaultLeaseTimeSec=259200 MaxLeaseTimeSec=604800 PoolOffset=0 PoolSize=0 EmitDNS=yes DNS=192.168.0.1 #DNS=8.8.8.8 EmitNTP=yes NTP=192.168.0.1 EmitRouter=yes [DHCPv4] ClientIdentifier=mac [DHCPServerStaticLease] MACAddress=xx:xx:xx:xx:xx:xx Address=192.168.0.200
4chemist
26.07.2026 10:10Универсальность systemd одновременно радует и пугает. Параллельный запуск, конфигурация сети, синхронизация времени, ресолвинг имён, логирование, управление контейнерами, планировщик задач...
Жду когда в systemd реализуют wpa_supplicant чтобы секрет для авторизации в WiFi сетях тоже в конфигурации systemd прописывались. Корневой раздел с линуксом у моего отчуждаемого хранилища с жесткими дисками лежит на флешке самсунг фит. Эта флешка переехала уже три раза на другое железо. При переезде поднимается все, кроме автоматического подключения к WiFi. Хочется убрать костыль через переименование сетевого контроллера WiFi правилами udev.

alexs89
26.07.2026 10:10Круто, но почему не OpenWRT в качестве ОС? Минималистичная система, супер удобная веб морда, гигантский репозиторий софта специально под роутеры, поддержка докера и другие радости Linux.

MPfromLINUX Автор
26.07.2026 10:10Просто, x86 роутер это полноценный домашний сервер. OpenWRT лучше для роутеров, но Debian позволяет без проблем делать сервер на x86 железе. Репозиторий у OpenWRT хороший, но узконаправленный, заточенный для обычных роутреров. А из этого можно сделать домашний комбайн.

DennisP
26.07.2026 10:10Какие функции вы планируете (хотели бы) реализовать в этом комбайне? На первый взгляд многие интересные функции (типа сервера видеонаблюдения с хоть какой-то детекций или immich) просто не потянут на этом железе

MPfromLINUX Автор
26.07.2026 10:10Думаю торрент качалку сделать, а декодирование видео свалю на тв бокс Vontar X3. AdGuard и что-нибудь для обхода блокировок поставлю, Filebrowser уже стоит.

korn3r
26.07.2026 10:10интересно какая загрузка проца будет с торрентами и запретом на таком старичке.

Domestomag
26.07.2026 10:10Околонулевая. Должна быть. Торренты во времена компов 2ядра-2гига процессор не напрягали.

Vladekk
26.07.2026 10:10Я в общаге качал торренты под линуксом на хдд 5200 и 120 МГц пентиуме. Тормозило порядочно, особенно при запуске, но в целом работало все хорошо.

MPfromLINUX Автор
26.07.2026 10:10Athlon хоть и древний, но 2 ядра 3 ГГц уже хорошо, для качалки торрентов сгодится. HDD Toshiba, помню что 2017 года, вроде 7200 оборотов. Думаю, справится без проблем.

alexs89
26.07.2026 10:10OpenWRT вполне подходит для домашнего сервера, основной функцией которого является маршрутизация пакетов. Благодаря докеру из любого вычислительного устройства, поддерживающего докер, можно сделать что угодно. Разумеется, на Debian тоже можно реализовать все, что угодно, но у OpenWRT роутерная часть настраивается значительно проще и без дополнительных пакетов.

eri
26.07.2026 10:10Опенврт это ОС написанная на Баше. Пакеты урезанны для работы в минимум оперативки и флешки. Да вкорячить что-то стороннее туда без пересборки с СДК Опенврт довольно сложно хотябы потому, что это не Libc.

little-brother
26.07.2026 10:10Альтернативой этому системнику может быть прошитая TV-коробка под Armbian. Проц и памяти там за глаза, электричество почти не ест. Из существенных минусов: первый - есть только один порт Ethernet и тот зачастую сотка, а второй - диски можно подключить только через USB-переходник. Теоретически есть аппаратное декодирование для медиа-сервера, но на практике, думаю, будет работать так себе.
Для совмещенного устройства роутера/NAS самый простым вариантом видится плата на N100.

MPfromLINUX Автор
26.07.2026 10:10Согласен, всякие N100 ноутбучные для подобных задач лучше всего подходят. Тв бокс на Amlogic S905X тоже хочу прошить на Armbian, но из него хочу почтовый сервер поднять на своем домене.

VenbergV
26.07.2026 10:101) Какой дистрибутив все же используете?
2) По привычной практике nftables.conf должен начинаться с:#!/usr/sbin/nft -fflush rulesettable inet filter {chain input {type filter hook input priority filter; policy drop;}chain forward {type filter hook forward priority filter; policy drop;}chain output {type filter hook output priority filter; policy drop;}}Иначе он ничего не фильтрует и все пропускает.
3) Еще вы не указали ничего для ipv6.
korn3r
26.07.2026 10:10output то за что? :)

VenbergV
26.07.2026 10:10Так это голый шаблон. Все запрещено. Теперь его наполняем разрешающими правилами.
Запрещено все, что не разрешено.
korn3r
26.07.2026 10:10голый шаблон обычно output accept имеет. зачем запрещать по-умолчанию исходящие соединения, если это не какой-то сверхузкоспециализированный сервер с настолько повышенными требованиями к безопасности?

korn3r
26.07.2026 10:10#!/usr/sbin/nft -f flush ruleset define WAN = eno1 define LAN = eth0 table inet main { set DROP_IP4 { typeof ip saddr flags interval auto-merge elements = { 127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10, 169.254.0.0/16, 192.0.0.0/24, 224.0.0.0/4, 240.0.0.0/4, 255.255.255.255/32 } } set DROP_IP6 { typeof ip6 saddr flags interval auto-merge elements = { ::/128, ::1/128, ::ffff:0:0/96, ::/96, 100::/64, 2001:10::/28, 3fff::/20, fc00::/7, fe80::/10, ff00::/8 } } chain input_v4 { iif $WAN ip saddr @DROP_IP4 drop } chain input_v6 { icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept } chain output_v4 { iif $WAN ip daddr @DROP_IP4 drop } chain output_v6 { iif $WAN ip6 daddr @DROP_IP6 drop } chain input { type filter hook input priority 0; policy drop; ct state vmap { established : accept, related : accept, invalid : drop } iif lo accept meta protocol vmap { ip : jump input_v4, ip6 : jump input_v6 } iif $LAN accept } chain output { type filter hook output priority 0; policy accept; iif lo accept meta protocol vmap { ip : jump output_v4, ip6 : jump output_v6 } iif $LAN accept } }(Если WAN в приватном диапазоне, его лучше бы убрать из DROP_IP4)

MPfromLINUX Автор
26.07.2026 10:10Debian.
NFTables через systemd enable сам запускается, шебанг в таком случае не обязателен.
Это роутер, как ему заниматься маршрутизацией с input и output в policy drop? Все что делает конфиг в статье: маскарадинг ip v4 и v6.

alexs963
26.07.2026 10:10chain input { type filter hook input priority 0; policy drop; iifname lo accept ct state established,related accept ct state invalid drop tcp dport 443 accept iifname != $income_interface ct state new accept }

Bagatur
26.07.2026 10:10Вот примерно похожее реализовывал на Core2duo с 4 гб оперативы, ssd на 60 ГБ, и на какой-то wifi карте (чтобы на нём же AP поднять) несколько лет назад. Детей с их компом и мобилами посадил на отдельный SSID, с фильтрацией по халявным спискам для SquidFuard (на тот момент было достаточно). Ну и с резервированием по провайдерам (тогда подвели до дома 100МБит по меди и ещё не отключил ADSL, он был в качестве резерва). И всё это было поднято на PFSence - легко и непринуждённо.

theult
26.07.2026 10:10Автор молодчик, нашел старой железке хорошее место)
Тоже совсем недавно накопал j1900 и сетевуху 4х портовую гигабитную.



Granulex
26.07.2026 10:10Автор верно подмечает, что по сырой мощности такой ПК обгоняет бытовой роутер. Возможно, дело всё же не в суммарной мощности, а в одном ядре: и маршрутизация на гигабите, и особенно обработка PPPoE упираются в производительность единственного потока, а не в сумму ядер. Поэтому старый двухъядерник иногда проигрывает копеечной коробочке с аппаратным ускорением – у той маршрутизация вынесена в отдельный чип и от частоты процессора почти не зависит.

MPfromLINUX Автор
26.07.2026 10:10Обработкой PPPoE может заниматься сама Intel I210, вот с маршрутизацией сложнее. Поэтому копеечные коробчки хороши в маршрутизации, но часто плохи в Zapret/AdGuard и здесь полноценный x86 берет свое.
Lev3250
Нет, я сам немного ненормальный и у меня роутером служит opnsense в виртуалке, но всё таки - зачем? Что такого по итогу решил этот ноут в виде роутера, чего не мог сделать тот хуавей, что стал точкой доступа?
MPfromLINUX Автор
Если настроить, может обходить блокировки, блокать рекламу. Пока что только Filebrwoser в докер контейнере поднял. Вообщем, нужно еще многое настраивать, делать комбайн из него, тогда будет смысл. Это просто основа.
Esmertec
проще было установить на него openwrt + zapret + samba имхо
kriostar
Микротик на минипс х86, отлично работает.