Skip to content

Latest commit

 

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dual-vpn-router

Управление двумя 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

Запуск (правильный порядок)

  1. Сначала подключите ваши VPN через ваш VPN-клиент (WireGuard, OpenVPN и т.д.)
    • Подключите корпоративный VPN
    • Подключите глобальный VPN
  2. Убедитесь, что оба VPN активны (проверьте через sudo dual-vpn status)
  3. Затем выполните sudo dual-vpn setup

Завершение работы (правильный порядок)

  1. Сначала выполните sudo dual-vpn cleanup
    • Это восстановит DNS в исходное состояние
    • Это удалит все правила маршрутизации
  2. Затем отключите ваши 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

Обязательные изменения

  1. dns.domains: Замените на ваш корпоративный домен(ы)

    • name: Ваш корпоративный домен (например, company.internal)
    • servers: IP-адреса ваших корпоративных DNS-серверов
  2. routing.corp_networks: Добавьте корпоративные сетевые диапазоны

    • Эти сети будут маршрутизироваться через корпоративный VPN
    • Распространённые диапазоны: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
  3. 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

Как это работает

  1. Слой DNS: Использует dnsmasq для маршрутизации DNS-запросов к разным серверам в зависимости от домена
  2. Слой маршрутизации: Использует PBR для маршрутизации трафика через разные VPN-интерфейсы
  3. Автонастройка: Диспетчер NetworkManager для автоматической конфигурации

Команды

Команда Описание
dual-vpn init Создать файл конфигурации по умолчанию
dual-vpn setup Настроить двойную VPN-маршрутизацию (выполнить ПОСЛЕ подключения VPN)
dual-vpn cleanup Удалить все правила маршрутизации и восстановить DNS (выполнить ПЕРЕД отключением VPN)
dual-vpn status Показать текущий статус

Нужно ли вручную управлять VPN-соединениями?

Да, скрипт НЕ управляет 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

Без правильной конфигурации маршрутизация не будет работать корректно. Убедитесь, что вы:

  1. Указали ваш реальный корпоративный домен(ы) в dns.domains
  2. Указали IP-адреса корпоративных DNS-серверов в dns.domains[].servers
  3. Добавили корпоративные сетевые диапазоны в routing.corp_networks
  4. Проверили, что имена 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 одновременно

About

Подключить два впн одновременно / двойной vpn как сделать

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages