Вопрос или проблема
Мы используем OpenBSD 7.6 и имеем соединение OpenVPN, созданное с помощью pkg_add openvpn
(openvpn-2.6.12) и записью этого в /etc/hostname.tun0
с перезагрузкой после сохранения:
up
!/usr/local/sbin/openvpn --daemon --config /etc/openvpn/my-config.ovpn
Наш публичный IP-адрес совпадает с адресом сервера OpenVPN при проверке (хорошо). Однако, когда соединение с сервером OpenVPN разрывается, интернет-трафик утечет из VPN, и вместо этого будет виден наш публичный IP-адрес (плохо).
Как мы можем настроить этот компьютер так, чтобы весь трафик, отправляемый на/из интернета, проходил исключительно через соединение OpenVPN, и если это соединение будет прервано/не подключено, любые попытки доступа в интернет блокировались?
-
ifconfig
показывает, что у нас естьbcm0
как наш Ethernet иtun0
как наше соединение OpenVPN. У этого компьютера есть только один Ethernet-порт. -
netstat -R
показывает, что у нас есть только один Rdomain,0
, и интерфейсыlo0 bge0 enc0 tun0 pflog0
находятся под ним с таблицами маршрутизации только0
. -
Нам все еще нужен доступ к компьютеру через локальные IP-адреса, независимо от того, установлено ли соединение OpenVPN/прервано/не подключено.
Я просмотрел мануалы route
, rdomain
, trunk
, ifconfig
, openvpn
, но не могу заставить это работать правильно.
Я пробовал добавить rdomain 0
в /etc/hostname.tun0
и rdomain 1
в /etc/hostname.bge0
и перезапустил, но это сломало локальные SSH-соединения (мне пришлось вернуть эти изменения, чтобы это исправить).
Вкратце: нам нужно заблокировать весь интернет-трафик от всех процессов, если соединение OpenVPN не установлено. Локальный IP-трафик — единственное, что может/должно работать независимо от этого соединения, из-за того, что локальные IP-адреса разрешаются на локальные устройства, а ничего на сервере OpenVPN (который мы не контролируем).
Ответ или решение
Чтобы решить проблему утечек интернет-трафика при отключении OpenVPN на OpenBSD 7.6, вам потребуется реализовать несколько мер, которые позволят блокировать все интернет-соединения, если VPN-соединение разрывается. Давайте подробно рассмотрим шаги, необходимые для достижения этой цели.
1. Настройка OpenVPN
Как вы уже делали, убедитесь, что OpenVPN запускается корректно. В вашем файле /etc/hostname.tun0
вы имеете следующие строки:
up
!/usr/local/sbin/openvpn --daemon --config /etc/openvpn/my-config.ovpn
Эта настройка позволяет вам автоматически запускать OpenVPN при загрузке системы. Однако, помимо этого, необходимо настроить маршрут и правила брандмауэра.
2. Использование PF (Packet Filter)
OpenBSD использует PF (Packet Filter) для управления сетевыми пакетами. Для того чтобы заблокировать интернет-трафик, когда OpenVPN отключен, нам нужно внести некоторые изменения в конфигурацию PF.
Конфигурирование PF
-
Редактирование файла конфигурации PF
Откройте или создайте файл/etc/pf.conf
и добавьте следующие правила:ext_if = "bcm0" # Ваш внешний интерфейс tun_if = "tun0" # Интерфейс OpenVPN # Разрешаем локальный трафик pass in on $ext_if from !($ext_if) to any pass out on $ext_if from any to !($ext_if) pass in on $tun_if all pass out on $tun_if all # Блокируем весь интернет трафик, если tun0 не активен block out on $ext_if from any to any pass out on $ext_if from any to any route-to ($tun_if) keep state
Эти правила позволят блокировать весь исходящий интернет-трафик, если VPN-соединение отсутствует. Тем не менее, весь трафик, проходящий через
tun0
, будет разрешен. -
Включение PF
После редактирования конфигурации вам необходимо запустить PF:
pfctl -f /etc/pf.conf pfctl -e
3. Автоматическое восстановление подключения
Можно рассмотреть возможность настройки автоматического восстановления VPN-соединения, чтобы избежать долгих простоев. Это можно сделать через настройки OpenVPN или при помощи скриптов, которые будут отслеживать состояние соединения и поднимать его при необходимости.
4. Проверка конфигурации
Проверьте работоспособность вашей конфигурации, запустив tcpdump
или ping
из другого устройства в локальной сети, когда OpenVPN соединение активно и когда оно разорвано. Вы должны увидеть, что интернет-трафик блокируется, когда VPN отключен.
5. Поддержание локальных соединений
Как вы указали, вам необходимо поддерживать доступ к устройству через локальные IP-адреса. Убедитесь, что в вашей конфигурации PF указаны правила для локального трафика, чтобы он не блокировался.
Заключение
С помощью вышеописанных шагов вы сможете изолировать интернет-трафик вашего устройства, используя OpenVPN как единственный путь доступа в интернет. Это обеспечит безопасность и защиту ваших данных при использовании публичных сетей. Не забывайте регулярно проверять состояние вашего VPN-соединения и корректность работы настроек брандмауэра.