Приветствую. Для Windows я делаю так:
1 — Создаю необходимое количество виртуальных интерфейсов TAP, Wintun или DCO (не поддерживает сжатие).
2 — Присваиваю им необходимые названия в сетевых подключениях.
3 — Настраиваю конфигурацию OpenVPN на определённый интерфейс, например:
windows-driver wintun
dev tun
dev-type tun
dev-node "OpenVPN Wintun"
Эту конфигурацию можно вписать в отдельный файл и включить в клиентский файл:
config ..\\device.txt
4 — Настраиваю метрики интерфейсам.
Просмотр списка индексов интерфейсов в PowerShell:
Get-NetIPInterface | Format-Table -AutoSize
Назначение метрики:
Set-NetIPInterface -InterfaceIndex "<индекс>" -InterfaceMetric "<значение>" -PolicyStore "PersistentStore"
Set-NetIPInterface -InterfaceIndex "<индекс>" -InterfaceMetric "<значение>"
Первая строка сохраняет метрику, вторая тут же применяет. Значение метрик следует выбирать кратной 1000, например, для Loopback Pseudo-Interface 1
1000, для LAN
2000, для OpenVPN Wintun
3000. Итоговая метрика назначения будет суммой значения метрики маршрута и значения метрики интерфейса. (В этом примере broadcast пакет будет идти на интерфейс с наименьшей метрикой, если они нужны для каких-то приложений в локальной сети, которые не поддерживают рассылку на все интерфейсы в системе, то следует назначить интерфейсу локальной сети метрику меньше, либо настроить статический маршрут для назначения 255.255.255.255.)
Аналоги этих команд в cmd:
netsh interface ipv4 show subinterfaces
set subinterface “<имя>” mtu=<значение> store=persistent
После этого все подключения в системе без биндинга будут идти через интерфейс LAN
.
5 — Настраиваю менеджер тунелей GOST. Пример конфигурации:
services:
# Direct SOCKS5
- name: service-socks-LAN
addr: "[::1]:1000"
interface: "LAN"
resolver: resolver-local
handler:
type: socks5
metadata:
udp: true
listener:
type: tcp
# SOCKS5 over OpenVPN Wintun
- name: service-socks-OpenVPN-Wintun
addr: "[::1]:1001"
interface: "OpenVPN Wintun"
resolver: resolver-local
handler:
type: socks5
metadata:
udp: true
listener:
type: tcp
# DNS resolver
resolvers:
- name: resolver-local
nameservers:
- addr: "udp://[::1]:53"
ttl: -1
# Logging
log:
level: warn
format: text
output: stdout
Так, в примере, на 1000 порту будет прокси напрямую, на 1001 будет прокси через виртуальный интерфейс. (К сожалению, в GOST сломано проксирование UDP через SOCKS5 и требует самостоятельного патчинга в случае необходимости.)
6 — Для настройки policy based routing для приложений использую Proxifier (UDP не поддерживает). Есть аналог без GUI socksify / proxifyre (UDP поддерживает).
7 — ???
8 — PROFIT