Сценарии использования¶
Практические руководства для типичных развёртываний r-vpn.
Выбор режима¶
r-vpn поддерживает два режима работы:
| Сценарий | Рекомендуемый режим |
|---|---|
| Проксирование для отдельных приложений (браузер, конкретные приложения) | SOCKS5 |
| Полный VPN устройства (весь трафик) | TUN |
| Мобильные устройства (iOS, Android) | TUN (встроенный) |
| Подключение к удалённой сети как к локальной | TUN |
| Split tunnel: часть трафика через VPN, часть напрямую | Любой с настройкой split_tunnel |
Оба режима используют одно и то же шифрование X3DH + Double Ratchet. Разница заключается в том, как трафик достигает VPN.
Удалённый доступ к рабочему столу¶
Подключайтесь к рабочему компьютеру из дома так, будто вы находитесь в офисной сети. Используйте RDP, VNC, SSH или любой другой инструмент удалённого доступа, не открывая порты в публичный интернет.
Что решает эта задача¶
- RDP/VNC, открытые в интернет, являются распространённым вектором атак
- Корпоративные файрволы часто блокируют порты RDP
- Вам нужен доступ к офисному принтеру, файловым ресурсам и внутренним инструментам
Настройка¶
1. Конфигурация сервера
Сервер должен находиться в вашей офисной сети с включённым TUN-режимом и настроенным NAT:
[server]
bind_address = "0.0.0.0:443"
tls_cert_file = "/etc/letsencrypt/live/your-office-server.com/fullchain.pem"
tls_key_file = "/etc/letsencrypt/live/your-office-server.com/privkey.pem"
identity_key_file = "/etc/rvpn/server_identity.key"
websocket_path = "/api/v1/ws"
[server.network]
nat_enabled = true
dhcp_range = "10.200.0.0/24"
dns_servers = ["1.1.1.1", "8.8.8.8"]
2. Конфигурация клиента
Маршрутизируйте только подсеть вашей офисной сети через VPN. Не маршрутизируйте весь трафик:
server_address = "wss://your-office-server.com/api/v1/ws"
identity_key_file = "~/.config/rvpn/identity.key"
prekey_bundle = "~/.config/rvpn/prekey-bundle.json"
[tun]
enabled = true
routes = ["10.100.0.0/16"] # Подсеть вашей офисной сети
mtu = 1420
Это маршрутизирует только трафик, предназначенный для 10.100.0.0/16 (вашей офисной сети), через VPN. Весь остальной трафик (просмотр, стриминг) использует ваше обычное домашнее подключение.
3. Проверка подключения
# Принудительный curl через TUN-интерфейс (tun0 на macOS/Linux, utun# на iOS)
curl --interface tun0 https://ifconfig.me
# Должен вернуть IP офисной сети (ваш VPN-туннельный IP)
# Если маршрутизация работает, обычный curl тоже должен работать без --interface
# Должен достичь офисного сервера
ping 10.100.0.50
Что работает через туннель¶
- RDP:
10.100.0.50:3389 - VNC:
10.100.0.51:5900 - SSH:
ssh user@10.100.0.52 - SMB файловые ресурсы:
\\10.100.0.53\share - Внутренние веб-приложения:
http://10.100.0.54:8080
Объединение приватных сетей¶
Соедините несколько серверов в разных местоположениях в одну защищённую приватную сеть. Все серверы и клиенты выглядят так, будто находятся в одной локальной сети, независимо от физического расположения.
Что решает эта задача¶
- Соединение офисов в разных городах без выделенных линий
- Доступ к облачным виртуальным машинам как к устройствам в одной сети
- Запуск кластерного программного обеспечения, требующего обнаружения на уровне LAN
Архитектура¶
Офис A (10.100.0.0/24) Облачный регион (10.200.0.0/24)
| |
rvpn-server-TUN rvpn-server-TUN
(10.100.0.1) (10.200.0.1)
\ /
\ /
\---------------------------/
|
Клиенты rvpn получают IP
в соответствующих диапазонах
DHCP и могут обращаться
ко всем подсетям
Настройка сервера (каждое местоположение)¶
Каждое местоположение запускает один rvpn-server в TUN-режиме. dhcp_range на каждом сайте должен быть уникальным:
server.toml офиса A:
[server]
bind_address = "0.0.0.0:443"
tls_cert_file = "/etc/letsencrypt/live/office-a.example.com/fullchain.pem"
tls_key_file = "/etc/letsencrypt/live/office-a.example.com/privkey.pem"
identity_key_file = "/etc/rvpn/server_identity_office_a.key"
websocket_path = "/api/v1/ws"
[server.network]
nat_enabled = true
dhcp_range = "10.100.0.0/24"
dns_servers = ["10.100.0.1"]
server.toml облачного региона:
Маршрутизация клиента для доступа к нескольким подсетям¶
Для доступа к обеим подсетям клиенту нужны маршруты для обеих:
[tun]
enabled = true
routes = ["10.100.0.0/16", "10.200.0.0/16"] # Охватывает обе подсети: офисную и облачную
mtu = 1420
Или, если вам нужен полный туннель (весь трафик через VPN), просто используйте routes = ["0.0.0.0/0"].
Приватный DNS для разрешения имён¶
Для использования имён хостов вместо IP во всех местоположениях настройте приватный DNS-сервер:
[server.network]
nat_enabled = true
dhcp_range = "10.100.0.0/24"
dns_servers = ["10.100.0.1"] # Ваш приватный DNS-сервер
Направьте ваш приватный DNS на 10.100.0.1. Добавьте записи хостов:
Среды разработки¶
Удалённый доступ к серверам разработки, базам данных и микросервисам так, будто они работают локально. Полезно при работе из дома или в поездках.
Что решает эта задача¶
- Среды разработки находятся в приватной сети и недоступны извне
- Вам нужно тестировать вебхуки, вызывающие localhost
- Вы хотите использовать локальные URL разработки без их изменения
Сценарий 1: Доступ ко всем сервисам разработки¶
Маршрутизируйте всю сеть разработки через VPN:
server_address = "wss://your-dev-server.com/api/v1/ws"
identity_key_file = "~/.config/rvpn/identity.key"
prekey_bundle = "~/.config/rvpn/prekey-bundle.json"
[socks5]
listen_address = "127.0.0.1:1080"
[dns_proxy]
enabled = true
listen_address = "127.0.0.1:53"
Настройте системный DNS на 127.0.0.1:53. Теперь dev.internalcompany.com разрешается корректно, и весь трафик разработки проходит через VPN.
Сценарий 2: Доступ только к конкретным сервисам разработки¶
Используйте TUN-режим с конкретными маршрутами, чтобы не замедлять всё подключение:
[tun]
enabled = true
routes = [
"10.50.0.0/24", # Сеть разработки
"192.168.1.0/24", # Домашняя сеть (остаётся прямой)
]
mtu = 1420
Доступ к базам данных¶
Для прямых подключений к базам данных используйте SOCKS5 прокси:
# MySQL
mysql -h 10.50.0.20 -P 3306 --protocol=TCP
# PostgreSQL
psql -h 10.50.0.21 -p 5432
# MongoDB
mongosh "mongodb://10.50.0.22:27017"
Настройте ваш GUI для баз данных (DBeaver, TablePlus, DataGrip) на подключение через SOCKS5 по адресу 127.0.0.1:1080.
Локальная разработка с вебхуками¶
Если ваш сервер разработки вызывает localhost:3000 с удалённого API, VPN-туннель позволяет удалённому API достичь вашей локальной машины:
- Ваша машина разработки подключается в TUN-режиме
- Удалённый сервис вызывает публичный IP вашего сервера
- Сервер туннелирует запрос через VPN к вашей машине разработки
- Ваш локальный сервис отвечает через туннель
Мультиоблачная настройка¶
Соедините серверы в AWS, GCP, Azure или других облачных провайдерах в одну приватную сеть без использования VPN провайдеров или открытия сервисов в публичный интернет.
Что решает эта задача¶
- Кросс-облачные базы данных без публичных эндпоинтов
- Приватная связь между сервисами в разных облачных регионах
- Нет необходимости в VPN-решениях конкретного облачного провайдера
- Единая топология сети независимо от облачного провайдера
Архитектура¶
AWS us-east-1 (10.0.0.0/24) GCP europe-west1 (10.1.0.0/24)
| |
rvpn-server-TUN rvpn-server-TUN
(10.0.0.1) (10.1.0.1)
| |
+-------- rvpn туннель --------+
|
Клиенты получают IP
в соответствующих диапазонах
DHCP и могут обращаться
ко всем подсетям
Конфигурация сервера для каждого облака¶
server.toml AWS:
[server]
bind_address = "0.0.0.0:443"
tls_cert_file = "/etc/rvpn/certs/cert.pem"
tls_key_file = "/etc/rvpn/certs/key.pem"
identity_key_file = "/etc/rvpn/server_identity.key"
websocket_path = "/api/v1/ws"
[server.network]
nat_enabled = false # NAT отключён -- нужна прямая маршрутизация
dhcp_range = "10.0.0.0/24"
dns_servers = ["10.0.0.53"] # Внутренний DNS в этом местоположении
server.toml GCP:
Группы безопасности и файрволы¶
Файрвол каждого облачного провайдера должен разрешать:
- Входящий TCP порт 443 из диапазонов IP VPN-туннеля
- Для кросс-локального взаимодействия -- разрешить диапазон VPN IP другой локации
Для групп безопасности AWS:
Inbound: TCP 443 from 10.0.0.0/16 (диапазон IP VPN)
Inbound: TCP 443 from 10.1.0.0/16 (диапазон VPN другого облака)
Конфигурация клиента¶
Доступные сценарии¶
- Репликация баз данных между облаками: MySQL на
10.0.0.30:3306к PostgreSQL на10.1.0.30:5432 - Приватные реестры контейнеров:
registry.internal:5000независимо от места запуска - Внутренние API:
api.internal:8080без публичных эндпоинтов - Репликация бэкапов: rsync между серверами без прохождения через публичный интернет
Руководство по split tunneling¶
Split tunneling позволяет решать, какой трафик проходит через VPN, а какой использует обычное интернет-подключение.
Когда использовать split tunneling¶
Используйте split tunneling для:
| Сценарий | Настройка |
|---|---|
| Стриминговые сервисы (Netflix, Spotify) | Обход по стране или конкретным IP |
| Игры | Обход IP игровых серверов для снижения задержки |
| Локальные сетевые устройства | Обход подсетей домашней/офисной LAN |
| Банковские приложения | Обход или туннелирование в зависимости от политики безопасности |
| Серверы разработки | Туннелирование только вашей сети разработки |
Избегайте split tunneling для:
| Сценарий | Рекомендация |
|---|---|
| Недоверенные публичные Wi-Fi | Полный туннель |
| Доступ к конфиденциальным аккаунтам | Полный туннель |
| Обход фильтров контента на работе | Полный туннель (может нарушать политику) |
Понимание логики обхода¶
Исходящий пакет -> Проверка правил обхода ->
-> Совпадает с обходом? -> Отправить напрямую (без шифрования)
-> Нет совпадения? -> Отправить через VPN-туннель
Обход проверяется до шифрования. Совпадающий трафик никогда не попадает в VPN-туннель.
Обход по стране¶
Это обходит трафик к IP-адресам, зарегистрированным в этих странах. Полезно, когда:
- Вы за границей и хотите получить доступ к отечественному контенту без замедления
- Стриминговые сервисы, блокирующие иностранные IP
Ограничение: Обход по стране использует данные диапазонов IP APNIC. Крупные CDN могут обслуживать контент с IP в нескольких странах.
Обход по сети (CIDR)¶
Обход конкретных диапазонов IP независимо от страны:
Типичные обходные сети:
- 192.168.0.0/16 -- Домашняя/офисная LAN
- 10.0.0.0/8 -- Приватные сети
- 172.16.0.0/12 -- Docker, VPN, другие приватные подсети
Обход по доменам¶
Обход трафика к конкретным доменам:
bypass-domains.txt:
Обход по доменам использует DNS-разрешение: домен разрешается локально (не через VPN), и полученные IP обходят туннель.
Туннелирование по доменам (принудительный VPN)¶
Принудительно направляйте конкретные домены через VPN, даже если они в противном случае обходятся:
Это полезно, когда: - Ваш провайдер дросселирует конкретные сервисы - Вы хотите принудительно направить стриминг через VPN для приватности
Блокировка рекламы¶
Блокирует известные рекламные и трекинг-домены на уровне DNS. Заблокированные домены сразу возвращают NXDOMAIN. Работает параллельно с правилами обхода: обходные домены разрешаются локально без блокировки рекламы.
Комбинирование правил¶
Правила оцениваются в следующем порядке:
tunnel_networks/tunnel_domains(принудительно через VPN)bypass_networks/bypass_domains/builtin_bypass_countries(принудительно напрямую)- По умолчанию (полный туннель в TUN-режиме, прокси в SOCKS5-режиме)
Тестирование конфигурации split tunnel¶
# Проверьте ваш выходной IP (должен быть VPN-сервер, если через туннель)
curl https://api.ipify.org
# Проверьте конкретный IP
curl --socks5 127.0.0.1:1080 https://api.ipify.org
# Тест разрешения DNS через туннель
dig @127.0.0.1 example.com
# Трассировка маршрута
traceroute 8.8.8.8
Соображения безопасности¶
Когда использовать полный туннель (без split tunnel):
- В недоверенных публичных сетях (кафе, отель, аэропорт Wi-Fi)
- Когда требуется максимальная приватность
- Когда правила обхода могут случайно исключить конфиденциальный трафик
Риск split tunneling:
Трафик, обходящий VPN, виден вашему провайдеру и оператору локальной сети. Если вы обходите банковские сайты, ваш провайдер видит, что вы к ним обращались. Оцените, приемлемо ли это для вашей модели угроз.
Риск обхода по стране:
Стриминговые сервисы могут обнаружить использование VPN другими способами (валюта платежа, история аккаунта, GPS-локация). Обход по стране делает трафик внешне отечественным, но не изменяет эти другие сигналы.