Настройка домашнего Linux-роутера с Wi-Fi через VPN

Вопрос или проблема

Я настраиваю старый сервер в качестве домашнего роутера. У меня есть достаточный опыт работы с 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. Обращается внимание на следующие моменты:

  1. Появляется интерфейс tun0, связанный с VPN.
  2. Создаются маршруты типа 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, рассмотрите следующие шаги:

  1. Перенастройте маршрутизацию:

    • Пересмотрите ваши маршруты, когда VPN активен. Важно, чтобы маршруты к вашим локальным сети и узлам были настроены правильно и не прокладывались через VPN, например, оставив:
      192.168.8.0/24 dev wlp3s0 proto kernel scope link src 192.168.8.1
  2. Обновите iptables-правила:

    • Убедитесь, что все касающееся NAT и маршрутизации корректно конфигурируется:
      -A POSTROUTING -o tun0 -j MASQUERADE
    • Последняя строка – важный элемент для перенаправления исходящих пакетов правильно через VPN.
  3. Гибкость в работе с различными VPN:

    • Для работы с несколькими конфигурациями VPN создайте несколько .ovpn файлов и создайте скрипт, который будет управлять переключением между ними в зависимости от вашего выбора.
  4. Диагностика и отладка:

    • Используйте команды ip route для проверки маршрутов.
    • Проверьте логи OpenVPN и сетевые журналы для выявления ошибок.
  5. Деактивация IPv6:

    • Вы указали, что уже отключили IPv6 через настройку GRUB, что отлично, если его поддержка не нужна в вашей сети.

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

Оцените материал
Добавить комментарий

Капча загружается...