Как превратить любой ПК в роутер на Linux

Пошаговое руководство: настраиваем iptables, DHCP, DNS и NAT на обычном ПК с двумя сетевыми картами. Превращаем Linux-машину в полноценный роутер за 30 минут.

Обложка: Как превратить любой ПК в роутер на Linux

Перевод-адаптация статьи How to turn anything into a router Ника Бэйли.

Правительство США анонсировало политику, фактически запрещающую импорт новых потребительских роутеров. Но оказывается, роутер можно собрать буквально из любого компьютера. Автор оригинальной статьи использует мини-ПК на Linux в качестве домашнего роутера уже несколько лет: ни одного серьёзного сбоя, единственная замена — дешёвый mSATA-диск.

Мини-ПК, настольный компьютер, одноплатник, стоечный сервер, старый ноутбук — подойдёт всё, что запускает Linux и имеет пару USB-портов. В этой статье разберём полную настройку на Debian: от выбора железа до правил firewall.

Ключевые тезисы

— Роутер — это обычный компьютер с Linux, двумя сетевыми интерфейсами и несколькими пакетами.

— Для сборки хватит мини-ПК, старого ноутбука или одноплатника с USB-Ethernet-адаптером.

— Всё ПО — hostapd, dnsmasq, bridge-utils — входит в стандартные репозитории Debian.

— Настройка занимает около часа и не требует глубоких знаний сетей.

Выбор железа

Идеальный вариант — компактный пассивно охлаждаемый мини-ПК. Однако подойдёт практически что угодно. Главное условие: два Ethernet-интерфейса. Если у устройства только один — выручит обычный USB-Ethernet-адаптер. Это чуть менее надёжно, чем встроенный порт, но для домашней сети вполне достаточно.

Пример из практики автора: мини-ПК на Celeron 3205U (два ядра, 1,5 ГГц) без проблем выдаёт 820–850 Мбит/с по кабелю и около 300 Мбит/с по Wi-Fi. Даже такой скромный процессор с запасом тянет трафик целого дома или небольшого офиса.

Для совсем экстремальных случаев: в 2016 году автор собрал роутер из ThinkPad T60 (подобранного на мусорке), ExpressCard-PCIe-моста, безымянной Ethernet-карты и свитча Cisco 2960 за $10. Выглядело как куча хлама — но работало.

Архитектура сети

После настройки интерфейсы распределяются так: eth0 — WAN (внешняя сеть, интернет), eth1 — проводная LAN, wlan0 — Wi-Fi LAN.

eth1 и wlan0 объединяются в мост br0 — проводные и беспроводные устройства оказываются в одной сети. Нужно больше портов? Просто добавьте USB-Ethernet-адаптеры и включите их в мост.

Используемое ПО: hostapd для Wi-Fi точки доступа, dnsmasq для DHCP и DNS, bridge-utils для объединения портов. Статья покрывает только IPv4 — IPv6 в домашней LAN по-прежнему создаёт больше проблем, чем решает.

Установка Debian

Установка стандартная, но стоит учесть несколько нюансов:

  • В BIOS отключить PXE-загрузку по сети
  • Выставить минимальную частоту процессора, но отключить power management для USB и PCI-устройств
  • Включить опцию «Restore after AC Power Loss» — роутер должен запускаться сам после отключения питания
  • Если устройство не стартует без монитора — вставить HDMI-заглушку (dummy dongle)
  • Включить репозиторий non-free-firmware — большинство Wi-Fi-адаптеров без него не работает

После базовой установки доставьте прошивку для своего Wi-Fi-адаптера. Для Intel:

			sudo apt install firmware-iwlwifi
		

Для Realtek:

			sudo apt install firmware-ath9k-htc
		

Для совсем старого железа (Atheros и подобные):

			sudo apt install firmware-atheros
		

Установка пакетов

Три пакета — это всё необходимое. Итого около 250 пакетов на системе:

			sudo apt install bridge-utils hostapd dnsmasq
		

Переименование сетевых интерфейсов

В современном Linux интерфейсы называются по физическому расположению: например, enp0s31f6. Чтобы не запутаться, зафиксируем привычные имена eth0, eth1 через systemd.network.

Для каждого сетевого интерфейса создайте файл /etc/systemd/network/10-persistent-ethX.link (где X — номер интерфейса):

			[Match]
MACAddress=AA:BB:CC:DD:00:11

[Link]
Name=ethX
		

MAC-адреса своих интерфейсов узнайте командой ip link show. Создайте по одному такому файлу для каждого Ethernet-порта.

Настройка Wi-Fi через hostapd

USB-Wi-Fi-адаптер будет работать как точка доступа. Это не заменит выделенный AP-девайс по качеству сигнала, но в небольшом помещении работает вполне приемлемо. Если Wi-Fi критичен — лучше подключить к LAN-порту старый роутер в режиме точки доступа.

Создайте конфиг /etc/hostapd/hostapd.conf:

			interface=wlan0
bridge=br0
hw_mode=g
channel=11
ieee80211d=1
country_code=US
ieee80211n=1
wmm_enabled=1

ssid=My Cool and Creative Wi-Fi Name
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=mysecurepassword
		

По умолчанию служба hostapd замаскирована (masked). Размаскируйте и запустите:

			sudo systemctl unmask hostapd
sudo systemctl enable --now hostapd
		

Настройка сетевых интерфейсов

eth0 — внешний интерфейс (WAN, получает IP по DHCP от провайдера). br0 — внутренний мост с фиксированным адресом. Обратите внимание: у LAN-интерфейса нет шлюза по умолчанию.

Файл /etc/network/interfaces:

			allow-hotplug eth0
allow-hotplug eth1
auto wlan0
auto br0

iface eth0 inet dhcp

iface br0 inet static
    bridge_ports eth1 wlan0
    address 192.168.1.1/24
		

После этого перезагрузите устройство. Если сеть не поднялась, проверьте ошибки:

			journalctl -e -u networking.service
		

При успешной настройке вывод команды должен быть таким:

			$ sudo brctl show br0

bridge name     bridge id            STP enabled    interfaces
br0             8000.xxxxx           no             eth1
                                                    wlan0
		

IP Forwarding

Без IP forwarding роутер не будет пробрасывать пакеты между интерфейсами. Создайте файл /etc/sysctl.d/10-forward.conf:

			net.ipv4.ip_forward=1
		

Примените изменения:

			sudo systemctl restart systemd-sysctl.service
		

Настройка firewall через nftables

Правила firewall и NAT управляются через nftables — современную замену iptables. Конфиг /etc/nftables.conf:

			#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        ct state { established,related } counter accept
        ip protocol icmp counter accept
        iifname "br0" tcp dport { 22, 53 } counter accept
        iifname "br0" udp dport { 53, 67, 68 } counter accept
        counter
    }

    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
    }

    chain output {
        type filter hook output priority 0; policy accept;
        counter
    }
}

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

Этот конфиг делает три вещи: включает NAT (masquerade), блокирует весь входящий трафик извне и разрешает роутеру работать как DNS, DHCP и SSH-сервер для локальной сети.

Включите nftables при загрузке:

			sudo systemctl enable nftables.service
		

Перед изменением правил всегда проверяйте конфиг на валидность:

			sudo nft -c -f /etc/nftables.conf
		

В отличие от устаревшего iptables, nftables позволяет перезагружать правила без разрыва соединений:

			sudo systemctl reload nftables.service
		

DHCP и DNS через dnsmasq

dnsmasq — компактная альтернатива паре isc-dhcp-server + bind9. Конфиг элементарный. Создайте /etc/dnsmasq.conf:

			interface=br0
listen-address=0.0.0.0
dhcp-range=192.168.1.50,192.168.1.250,255.255.255.0,6h
dhcp-option=option:router,192.168.1.1
dhcp-option=option:dns-server,192.168.1.1
cache-size=10000
		

DHCP-диапазон: 192.168.1.50 — 192.168.1.250, аренда на 6 часов. Адреса 192.168.1.2 — 192.168.1.49 остаются для статических назначений.

			sudo systemctl enable dnsmasq
		

Бонус: последовательный порт (Serial/UART)

Если на устройстве есть последовательный порт — настройте UART-консоль. В enterprise-оборудовании это стандарт, но для домашнего роутера тоже удобно: управляйте без монитора и клавиатуры через USB-UART-адаптер.

В файле /etc/default/grub добавьте или замените строки:

			GRUB_CMDLINE_LINUX='console=tty0 console=ttyS0,115200n8'
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
		

Активируйте getty на последовательном порту, обновите GRUB и перезагрузите:

			sudo systemctl enable serial-getty@ttyS0.service
sudo update-grub
		

Проверка работы

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

			$ sudo nft list ruleset

table inet filter {
	chain input {
		type filter hook input priority filter; policy drop;
		ct state { established, related } counter packets 1546 bytes 138508 accept
		ip protocol icmp counter packets 1 bytes 84 accept
		iifname "br0" tcp dport { 22, 53 } counter packets 4 bytes 240 accept
		iifname "br0" udp dport { 53, 67, 68 } counter packets 92 bytes 6658 accept
		counter packets 2110 bytes 128536
	}

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

	chain output {
		type filter hook output priority filter; policy accept;
		counter packets 1650 bytes 155966
	}
}
table ip nat {
	chain postrouting {
		type nat hook postrouting priority srcnat; policy accept;
		oifname "eth0" counter packets 101 bytes 15882 masquerade
	}
}
		

Ненулевые счётчики в цепочках forward и postrouting означают, что трафик проходит через роутер. Проверьте DHCP-аренды:

			sudo less /var/lib/misc/dnsmasq.leases
sudo journalctl -eu dnsmasq.service
		

Что ещё можно добавить

Базовая конфигурация работает как полноценный домашний роутер. При желании её можно расширить:

  • VLAN и сегментация сети
  • VPN (удалённый доступ и site-to-site туннели)
  • Динамическая маршрутизация: IGP, BGP
  • IDS/IPS (обнаружение и предотвращение вторжений)
  • Логирование отдельных правил и flow logs
  • Проброс портов в DMZ
  • IPv6
  • Мониторинг в реальном времени
  • Фильтрация и блокировка трафика

Важное правило: не устанавливайте много дополнительного ПО прямо на роутер. Лучше выделить отдельную машину в DMZ или VLAN и пробрасывать на неё трафик. Роутер должен оставаться простым и надёжным.

Частые вопросы
1
Подойдёт ли Raspberry Pi или другой одноплатник?

Да, подойдёт. Raspberry Pi 4 и 5 вполне справляются с ролью роутера. Из минусов — один встроенный Ethernet-порт, поэтому второй интерфейс придётся добавлять через USB. Для небольшой квартиры производительности хватит, но не ждите гигабитных скоростей через USB-адаптер.

2
Почему Debian, а не OpenWRT или pfSense?

OpenWRT и pfSense — отличные решения для сетевых задач, но они требуют специфических знаний. Debian позволяет использовать те же инструменты, что и на любом другом Linux-сервере: знакомый пакетный менеджер, systemd, стандартные конфиги. Это удобнее для тех, кто уже работает с Debian/Ubuntu в других задачах.

3
Как добавить больше устройств в локальную сеть?

Если нужно больше проводных портов — подключите к LAN-порту обычный неуправляемый свитч. Если нужно лучше Wi-Fi — подключите к LAN-порту старый роутер в режиме точки доступа (через LAN-порт, не WAN). Несколько USB-Ethernet-адаптеров тоже можно включить в мост br0.

4
Что делать, если роутер не поднимается после перезагрузки?

Первый шаг — проверить журнал сетевой службы: journalctl -e -u networking.service. Частые причины: неверные MAC-адреса в файлах переименования интерфейсов, опечатка в /etc/network/interfaces, или hostapd не нашёл нужную прошивку Wi-Fi-адаптера. Перезагружайте дважды — иногда первый старт занимает чуть больше времени.

Итого

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

Мини-ПК на базе Celeron или Atom стоит $30–60 на вторичном рынке, потребляет 5–10 Вт и работает годами без обслуживания. Это надёжнее, гибче и дешевле большинства потребительских роутеров — а заодно отличный способ разобраться, как на самом деле работает сеть.