Что понадобится для работы
Создание отдельного программного шлюза позволяет связать внешнюю сеть и домашний сегмент либо соединить две разные локальные подсети с полным контролем над фильтрацией пакетов.
Перед началом настройки подготовьте необходимое оборудование и софт:
- Компьютер под управлением Arch Linux с установленной базовой системой.
- Как минимум два физических сетевых интерфейса: один адаптер для внешней сети (или вышестоящего роутера), второй — для внутренней локальной сети. В качестве альтернативы допустимо использовать один адаптер в схеме «router-on-a-stick», но для этого потребуется управляемый коммутатор с поддержкой VLAN.
- Сетевой кабель (витая пара UTP), а также коммутатор или хаб для подключения клиентских устройств к внутреннему порту.
- Пакеты управления сетью (
netctlлибо встроенныйsystemd-networkd) и DNS/DHCP-сервер (dnsmasq).
Если вам не требуется собирать отдельный шлюз на ПК, а нужно просто расширить покрытие беспроводной зоны, проще узнать, как настроить старый роутер в качестве повторителя Wi-Fi. Для полного контроля маршрутизации перейдем к конфигурации адаптеров.
Шаг 1. Определение и именование сетевых интерфейсов
Служба systemd по умолчанию присваивает сетевым картам постоянные предсказуемые имена (например, enp2s0, enp1s1), которые не меняются между перезагрузками. Для удобства администрирования их можно использовать как есть или переименовать в соответствии с их назначением:
extern0— внешний интерфейс, направленный в сторону провайдера, модема или первой сети (WAN);intern0— внутренний интерфейс, к которому подключается локальная сеть (LAN).
- Проверьте текущие имена сетевых карт через команду
ip link. - Определите, какой порт физически подключен к аплинку, а какой смотрит во внутренний сегмент.
Шаг 2. Настройка IP-адресации через netctl
Инструмент netctl позволяет настроить параметры каждого сетевого адаптера через профили. Для работы маршрутизатора создаются два независимых файла конфигурации.
- Создайте профиль для внешнего порта в файле
/etc/netctl/extern0-profile:
Description='Public Interface.'
Interface=extern0
Connection=ethernet
IP=dhcp
- Создайте профиль для внутреннего интерфейса в файле
/etc/netctl/intern0-profile:
Description='Private Interface'
Interface=intern0
Connection=ethernet
IP=static
Address=('10.0.0.1/24')
- Включите автозапуск созданных профилей:
netctl enable extern0-profile
netctl enable intern0-profile
Альтернативный вариант: настройка через systemd-networkd
Если вы предпочитаете штатные средства systemd без использования netctl, примените демон systemd-networkd:
- Настройте получение адреса по DHCP-клиенту для внешнего интерфейса (
extern0). - Задайте статический IP-адрес (например,
10.0.0.1/24) для внутреннего интерфейса (intern0). - Примените внесенные изменения командой:
networkctl reload
Шаг 3. Подключение PPPoE или ADSL (при необходимости)
Если интернет поступает через ADSL-модем или прямое подключение PPPoE, маршрутизацию берет на себя пакет ppp.
- Переведите ADSL-модем в режим моста (RFC1483 или half-bridge), иначе модем будет выполнять функции второго роутера, вызывая двойную трансляцию адресов.
- Установите пакет
ppp. - Скопируйте шаблон профиля для редактирования:
cp /etc/netctl/examples/pppoe /etc/netctl/
- Откройте скопированный файл и укажите интерфейс подключения к модему (обычно
extern0), а также учетные данные провайдера. При использовании PPPoE создавать отдельный профильextern0-profileс DHCP не требуется, так как соединение будет работать через виртуальный интерфейсppp0.
Шаг 4. Установка и настройка DHCP и DNS через dnsmasq
Клиентские устройства в подсети должны автоматически получать сетевые параметры и адреса DNS-серверов. Для этой задачи в Linux доступны разные решения: устаревший dhcpd (замененный проектом Kea), встроенный сервер systemd-networkd, форк pi-hole-ftl или легковесный dnsmasq, совмещающий функции DHCP и DNS.
- Установите пакет
dnsmasqс помощью пакетного менеджера. - Откройте конфигурационный файл
/etc/dnsmasq.conf. - Ограничьте прослушивание входящих запросов исключительно внутренним интерфейсом, чтобы запросы не поступали снаружи:
interface=intern0
- Укажите пул выдаваемых IP-адресов и время аренды в том же файле конфигурации, после чего запустите и включите службу
dnsmasq.
После базовой настройки сети не забывайте о безопасности клиентских машин: изучите, как настроить бесплатную защиту ПК: антивирус, права и пароли, чтобы изолировать потенциальные угрозы.
Если не получилось
- Клиенты не получают IP-адрес автоматически. Убедитесь, что служба
dnsmasqзапущена и привязана именно к внутреннему интерфейсу (intern0). Проверьте, что на сетевой карте назначен статический IP-адрес с корректной маской подсети. - Интерфейс отключается при выдергивании провода. При использовании
netctlв профиль локальной сети обязательно добавьте директивуSkipNoCarrier=yes, иначе интерфейс перейдет в неактивное состояние. - Нет доступа во внешнюю сеть через модем. Проверьте режим работы ADSL-устройства. Если модем не переведен в режим моста (bridge), он продолжает функционировать как шлюз по умолчанию, блокируя авторизацию PPPoE на программном роутере.
- Имена интерфейсов изменились после обновления. Если вы опираетесь на предсказуемые имена
systemd(enp2s0), сверьте выводip link: после добавления новых карт расширения нумерация шины PCIe может измениться.




