Управление двумя VPN-соединениями одновременно на Linux с помощью Policy Based Routing.
- ✅ Разделение DNS — маршрутизация DNS-запросов через разные серверы в зависимости от домена
- ✅ Маршрутизация по политикам (PBR) — маршрутизация трафика через разные VPN-соединения
- ✅ Автоопределение — автоматическое определение VPN-интерфейсов
- ✅ Простой CLI — удобный интерфейс командной строки
- ✅ YAML-конфигурация — человекочитаемый формат конфигурации
Этот инструмент решает проблему одновременного использования корпоративного VPN и личного VPN для обхода интернет-ограничений. Идеально подходит для:
- Удалённых сотрудников, которым нужен доступ к корпоративным ресурсам
- Пользователей в регионах с интернет-ограничениями
- Любых случаев, когда нужны одновременные VPN-соединения
# Клонируйте репозиторий
git clone https://github.com/maks/dual-vpn-router.git
cd dual-vpn-router
# Установите зависимости
go mod tidy
# Сборка
go build -o dual-vpn ./cmd
# Установка (опционально)
sudo cp dual-vpn /usr/local/bin/
sudo chmod +x /usr/local/bin/dual-vpn# 1. Инициализация конфигурации
sudo dual-vpn init
# 2. Отредактируйте конфигурацию под ваши VPN
sudo nano /etc/dual-vpn/config.yaml
# 3. Подключите ваши VPN (сначала используйте ваш VPN-клиент!)
# - Корпоративное VPN-соединение
# - Глобальное VPN-соединение
# Убедитесь, что ОБА VPN подключены перед продолжением!
# 4. Настройка маршрутизации
sudo dual-vpn setup
# 5. Проверка статуса
dual-vpn status
# 6. Очистка при завершении (или отключении VPN)
sudo dual-vpn cleanup- Сначала подключите ваши VPN через ваш VPN-клиент (WireGuard, OpenVPN и т.д.)
- Подключите корпоративный VPN
- Подключите глобальный VPN
- Убедитесь, что оба VPN активны (проверьте через
sudo dual-vpn status) - Затем выполните
sudo dual-vpn setup
- Сначала выполните
sudo dual-vpn cleanup- Это восстановит DNS в исходное состояние
- Это удалит все правила маршрутизации
- Затем отключите ваши VPN через ваш VPN-клиент
Скрипт создаёт временные конфигурации DNS и маршрутизации. Если вы отключите VPN до выполнения cleanup:
- DNS-запросы могут завершиться ошибкой (указывают на DNS-серверы VPN, которые недоступны)
- Правила маршрутизации могут оставаться активными (указывают на отключённые VPN-интерфейсы)
- Сеть может находиться в несогласованном состоянии
Всегда выполняйте cleanup ПЕРЕД отключением VPN!
ВАЖНО: Вы должны вручную отредактировать файл конфигурации с вашими реальными корпоративными DNS-серверами, доменами и сетевыми диапазонами. Конфигурация по умолчанию содержит значения-заполнители.
Выполните sudo dual-vpn init для создания конфигурации по умолчанию в /etc/dual-vpn/config.yaml, затем отредактируйте её:
sudo nano /etc/dual-vpn/config.yaml-
dns.domains: Замените на ваш корпоративный домен(ы)name: Ваш корпоративный домен (например,company.internal)servers: IP-адреса ваших корпоративных DNS-серверов
-
routing.corp_networks: Добавьте корпоративные сетевые диапазоны- Эти сети будут маршрутизироваться через корпоративный VPN
- Распространённые диапазоны:
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
-
vpns.interface: Проверьте названия ваших VPN-интерфейсов- Выполните
ip link showпосле подключения VPN для просмотра имён интерфейсов - Распространённые имена:
tun0,wg0,ppp0
- Выполните
# ===== ЭТО НЕОБХОДИМО ИЗМЕНИТЬ =====
dns:
listen_addr: 127.0.0.1:53 # ОК: Оставьте как есть
fallback:
- 8.8.8.8 # ОК: Оставьте как есть (публичный DNS)
- 8.8.4.4 # ОК: Оставьте как есть (публичный DNS)
domains:
- name: corporate.example.com # ИЗМЕНИТЕ: Ваш корпоративный домен
servers:
- 192.168.1.1 # ИЗМЕНИТЕ: IP вашего корпоративного DNS-сервера
- 192.168.1.2 # ИЗМЕНИТЕ: IP вашего корпоративного DNS-сервера (если есть)
routing:
corp_table_id: 200 # ОК: Оставьте как есть
corp_networks:
- 10.0.0.0/8 # ОК: Оставьте, если ваша компания использует эти диапазоны
- 172.16.0.0/12 # ОК: Оставьте, если ваша компания использует эти диапазоны
- 192.168.0.0/16 # ОК: Оставьте, если ваша компания использует эти диапазоны
vpns:
- name: corporate # ОК: Оставьте как есть
interface: tun0 # ПРОВЕРЬТЕ: Выполните 'ip link show' для проверки имени интерфейса
auto_detect: true # ОК: Оставьте как есть
type: corporate # ОК: Оставьте как есть
- name: global # ОК: Оставьте как есть
interface: wg0 # ПРОВЕРЬТЕ: Выполните 'ip link show' для проверки имени интерфейса
auto_detect: true # ОК: Оставьте как есть
type: global # ОК: Оставьте как есть| Параметр | Описание | Пример |
|---|---|---|
dns.listen_addr |
Адрес, где dnsmasq слушает DNS-запросы | 127.0.0.1:53 |
dns.fallback |
DNS-серверы по умолчанию для некорпоративных доменов | 8.8.8.8 |
dns.domains[].name |
Имя корпоративного домена | company.internal |
dns.domains[].servers |
IP-адреса корпоративных DNS-серверов | 192.168.1.1 |
routing.corp_table_id |
ID таблицы маршрутизации для корпоративного трафика | 200 |
routing.corp_networks |
Сети, маршрутизируемые через корпоративный VPN | 10.0.0.0/8 |
vpns[].interface |
Имя VPN-интерфейса | tun0 |
vpns[].type |
Тип VPN: corporate или global |
corporate |
- Слой DNS: Использует dnsmasq для маршрутизации DNS-запросов к разным серверам в зависимости от домена
- Слой маршрутизации: Использует PBR для маршрутизации трафика через разные VPN-интерфейсы
- Автонастройка: Диспетчер NetworkManager для автоматической конфигурации
| Команда | Описание |
|---|---|
dual-vpn init |
Создать файл конфигурации по умолчанию |
dual-vpn setup |
Настроить двойную VPN-маршрутизацию (выполнить ПОСЛЕ подключения VPN) |
dual-vpn cleanup |
Удалить все правила маршрутизации и восстановить DNS (выполнить ПЕРЕД отключением VPN) |
dual-vpn status |
Показать текущий статус |
Да, скрипт НЕ управляет VPN-соединениями автоматически. Вы должны:
- Подключать VPN вручную через ваш VPN-клиент (NetworkManager, WireGuard, OpenVPN и т.д.)
- Выполнить
dual-vpn setupПОСЛЕ подключения обоих VPN - Выполнить
dual-vpn cleanupПЕРЕД отключением VPN
Скрипт управляет только конфигурацией DNS и маршрутизации, а не самими VPN-соединениями.
- Linux (Ubuntu/Debian/Arch)
- NetworkManager
- dnsmasq
- systemd-resolved (опционально)
- iptables/iproute2
Команда dual-vpn init создаёт конфигурацию-заготовку. Вы обязаны отредактировать её вручную:
sudo dual-vpn init
sudo nano /etc/dual-vpn/config.yamlБез правильной конфигурации маршрутизация не будет работать корректно. Убедитесь, что вы:
- Указали ваш реальный корпоративный домен(ы) в
dns.domains - Указали IP-адреса корпоративных DNS-серверов в
dns.domains[].servers - Добавили корпоративные сетевые диапазоны в
routing.corp_networks - Проверили, что имена VPN-интерфейсов соответствуют вашей конфигурации в
vpns[].interface
MIT License
Правки и поиск багов приветствуется! Не стесняйтесь отправлять Pull Request.
linux, vpn, pbr, policy based routing, dual vpn, split routing, подключить два впн одновременно, два впн на одном компьютере, ip routing, dns routing, настройка двух vpn, split dns, политика маршрутизации, два vpn на linux, корпоративный vpn и личный vpn одновременно