Вопрос или проблема
Я настраиваю старый сервер в качестве домашнего роутера. У меня есть достаточный опыт работы с Linux. Я пробовал различные решения (OpenWRT, OPNSense и т. д.), но пока я ближе всего к успеху с Ubuntu.
У сервера есть один интерфейс Ethernet (enp2s0) и один интерфейс Wi-Fi (wlp3s0), при этом Wi-Fi является локальной сетью.
Мне нужен простой роутер, чтобы весь трафик, поступающий из Wi-Fi, (опционально) маршрутизировался через OpenVPN.
Иногда я хочу использовать VPN, иногда я хочу использовать другой VPN-сервер, а иногда не хочу использовать VPN вообще. Поэтому, по крайней мере, для начала я запускаю OpenVPN в командной строке с конфигурационным файлом ovpn.
Я также хочу отключить IPv6, что я сделал, установив командную строку GRUB на “ipv6.disable=1”.
Я настроил dnsmasq и hostapd, чтобы роутер работал без VPN. Я могу запустить OpenVPN, но тогда роутер перестает маршрутизировать. Я не знаю, является ли это проблемой брандмауэра, маршрутизации или и тем и другим. Я подозреваю, что мне нужно возиться с маршрутами, но я не знаю достаточно об этом, чтобы задать грамотный вопрос. Буду благодарен за любую помощь.
Обычные маршруты:
default via 192.168.100.1 dev enp2s0 proto dhcp src 192.168.100.10 metric 100
192.168.8.0/24 dev wlp3s0 proto kernel scope link src 192.168.8.1
192.168.100.0/24 dev enp2s0 proto kernel scope link src 192.168.100.10 metric 100
192.168.100.1 dev enp2s0 proto dhcp scope link src 192.168.100.10 metric 100
Маршруты, когда VPN работает:
default via 192.168.100.1 dev enp2s0 proto dhcp src 192.168.100.10 metric 100
10.96.0.0/16 dev tun0 proto kernel scope link src 10.96.0.28
95.173.217.158 via 192.168.100.1 dev enp2s0
128.0.0.0/1 via 10.96.0.1 dev tun0
192.168.8.0/24 dev wlp3s0 proto kernel scope link src 192.168.8.1
192.168.100.0/24 dev enp2s0 proto kernel scope link src 192.168.100.10 metric 100
192.168.100.1 dev enp2s0 proto dhcp scope link src 192.168.100.10 metric 100
Правила брандмауэра:
# Сгенерировано iptables-save v1.8.10 (nf_tables) в Пн Фев 17 13:40:43 2025
*filter
:INPUT ACCEPT [21532:1909554]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [21453:2055160]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p icmp -m state --state NEW -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i tun0 -j ACCEPT
-A FORWARD -i wlp3s0 -o tun0 -j ACCEPT
-A FORWARD -i tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i enp2s0 -o wlp3s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlp3s0 -o enp2s0 -j ACCEPT
-A INPUT -i enp2s0 -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Завершено Пн Фев 17 13:40:43 2025
# Сгенерировано iptables-save v1.8.10 (nf_tables) в Пн Фев 17 13:40:43 2025
*nat
:PREROUTING ACCEPT [398:78593]
:INPUT ACCEPT [220:16896]
:OUTPUT ACCEPT [243:18615]
:POSTROUTING ACCEPT [21:1530]
-A POSTROUTING -o enp2s0 -j MASQUERADE
COMMIT
Ответ или решение
Настройка домашнего маршрутизатора Linux с Wi-Fi через VPN – это задача, требующая тщательного понимания сетевых концепций и конфигурации программного обеспечения. Рассмотрим, как можно настроить сервер для выполнения роли маршрутизатора с поддержкой OpenVPN, используя интерфейсы Ethernet (enp2s0) и Wi-Fi (wlp3s0).
Теория
Основная задача — направить весь трафик из локальной сети Wi-Fi через VPN-сервис, предоставляя возможность выбора разных серверов VPN или полного отказа от его использования. Это требует корректной настройки маршрутизации и правил брандмауэра. Также важно понимание работы таких инструментов, как dnsmasq для DHCP и hostapd для реализации точки доступа.
Основные понятия, которые необходимо учитывать:
- Маршрутизация: Определяет, как пакеты данных направляются из одной сети в другую. В нашем случае необходимо будет изменять маршруты при активации/деактивации VPN.
- OpenVPN: Программное обеспечение, обеспечивающее шифрованное соединение через интернет между вашей сетью и удаленным сервером.
- iptables: Инструмент для настройки сетевых фильтров и NAT на уровне ядра Linux.
Пример
На примере описанной вами конфигурации, вы уже успешно настроили dnsmasq и hostapd, что позволяет устройствам подключаться к вашей сети и получать IP-адреса. Однако, при запуске OpenVPN маршрутизация перестает работать, что указывает на возможные проблемы с изменением таблицы маршрутизации и применением правил брандмауэра.
Стандартно, при запуске OpenVPN, добавляются маршруты, которые перенаправляют весь интернет-трафик через туннель VPN. Обращается внимание на следующие моменты:
- Появляется интерфейс
tun0
, связанный с VPN. - Создаются маршруты типа
128.0.0.0/1
и0.0.0.0/1
, которые жёстко перенаправляют почти весь трафик через туннель.
Ваши текущие iptables-правила показывают, что у вас настроено перенаправление трафика из wlp3s0
в tun0
:
-A FORWARD -i wlp3s0 -o tun0 -j ACCEPT
-A FORWARD -i tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Эти правила позволяют трафику от клиентов сети Wi-Fi выходить через VPN, но вам также необходимо удостовериться, что на каждом этапе маршрутизации правильно обрабатываются возвращающиеся пакеты.
Применение
Чтобы самостоятельно устранить остановку маршрутизации при использовании VPN, рассмотрите следующие шаги:
-
Перенастройте маршрутизацию:
- Пересмотрите ваши маршруты, когда VPN активен. Важно, чтобы маршруты к вашим локальным сети и узлам были настроены правильно и не прокладывались через VPN, например, оставив:
192.168.8.0/24 dev wlp3s0 proto kernel scope link src 192.168.8.1
- Пересмотрите ваши маршруты, когда VPN активен. Важно, чтобы маршруты к вашим локальным сети и узлам были настроены правильно и не прокладывались через VPN, например, оставив:
-
Обновите iptables-правила:
- Убедитесь, что все касающееся NAT и маршрутизации корректно конфигурируется:
-A POSTROUTING -o tun0 -j MASQUERADE
- Последняя строка – важный элемент для перенаправления исходящих пакетов правильно через VPN.
- Убедитесь, что все касающееся NAT и маршрутизации корректно конфигурируется:
-
Гибкость в работе с различными VPN:
- Для работы с несколькими конфигурациями VPN создайте несколько
.ovpn
файлов и создайте скрипт, который будет управлять переключением между ними в зависимости от вашего выбора.
- Для работы с несколькими конфигурациями VPN создайте несколько
-
Диагностика и отладка:
- Используйте команды
ip route
для проверки маршрутов. - Проверьте логи OpenVPN и сетевые журналы для выявления ошибок.
- Используйте команды
-
Деактивация IPv6:
- Вы указали, что уже отключили IPv6 через настройку GRUB, что отлично, если его поддержка не нужна в вашей сети.
Следуя этим рекомендациям и подробно проверяя каждый шаг, вы сможете с высокой вероятностью избавиться от проблем с маршрутизацией и добиться стабильной работы вашего домашнего маршрутизатора через VPN. Возможно, некоторым правкам потребуется дополнительное изучение специфических нюансов вашего оборудования и конфигурации, что принесет вам ценный опыт работы с сложными сетевыми настройками в Linux.