Sing-Box + OpenVPN на одной машине

Здраствуйте.
Нужна помощь сетевых богов. У меня есть пару десятков клиентов OpenVPN, которые используют его для доступа в рабочую локалку и получают через него определенные маршруты (push route x.x.x.x 255.255.255.255)
С тех пор как наши западные партнеры стали блокировать подключения с IP-адресов РФ надо еще и прикидываться нероссийскими пользователями для условного microsoft.com, типикал кейс.
В общем, задумка следующая, OpenVPN остается для доступа в локалку и прочим рабочим серверам, Sing-Box используется для доступа к запрещенке и всё на одной машине, работают параллельно.
Конфиг Sing-Box следующий

{
    "log": {
      "level": "debug"
    },
    "inbounds": [
      {
	"tag": "tun-in",
        "type": "tun",
        "interface_name": "tun10",
        "inet4_address": "172.16.250.1/30",
        "auto_route": true,
        "inet4_route_exclude_address": [
    	  "192.168.222.0/24",
    	  "192.168.96.0/20"
	],
        "strict_route": false,
        "sniff": true,
	"domain_strategy": "prefer_ipv4"
     }
    ],
      "outbounds": [
	{
	  "type": "direct",
	  "tag": "direct-out"
	},
        {
	  "tag": "canada-02-out",
          "type": "vless",
          "server": "x.x.x.x",
          "server_port": 443,
          "uuid": "xxxxxxxxxxxxxxxxxxxxxxxxx",
          "flow": "xtls-rprx-vision",
          "tls": {
            "enabled": true,
            "insecure": false,
            "server_name": "linux.org",
            "utls": {
              "enabled": true,
              "fingerprint": "chrome"
            },
            "reality": {
              "enabled": true,
              "public_key": "xxxxxxxxxxxxxxxxxxxxxxxxx",
              "short_id": "xxxxxxxxxxxxxxxxxxxxxxxxx"
            }
          }
	}
    ],
    "route": {
      "rules": [
	    {
		  "domain": [
			"ifconfig.co",
			"rutracker.org",
			"eth0.me"
		  ],
		  "domain_suffix": [
			".atlassian.net",
			".atlassian.com",
			".rutracker.org",
			".eth0.me"
		  ],
		  "outbound": "canada-02-out"
	}
      ],
      "final": "direct-out",      
      "auto_detect_interface": true
    }
  }


Проблем несколько:

  1. я не до конца понимаю, как работает outbound direct
    Пример. OpenVPN пушит роут на 1.2.3.4, который имеет имя site1.example.com через свой туннель. 1.2.3.4 пускает на себя только если трафик идет через туннель (в ACL allow OpenVPN address). По идее конфиг Sing-Box этот адрес должен пустить напрямую, а таблица маршрутизации уже отправит трафик в туннель OpenVPN. Но судя по tcpdump трафик отправляется от адреса tun-интерфейса Sing-Box и на этом все. Пока не пропишешь адрес 1.2.3.4 в inet4_route_exclude_address, тогда работает. Обязательно прописать все адреса, которые пушит OpenVPN в таблицу исключений Sing-Box или есть способ проще? Outbound Direct это разве не системная таблица маршрутизации? Или таблица маршрутов Sing-Box превалирует над дефолтной? На линуксе это можно переиграть, а на винде как?

  2. Допустим, сервер xray доступен только при подключении OpenVPN, так настроен ACL сервера xray. Конфиг тот же, но без подключенного OpenVPN работать не должно. OpenVPN пушит роут для адреса outbound canada-02-out
    Проблема: не работает и с подключенным OpenVPN. Домены прописанные в Rules → Canada-02-out не отвечают вообще. В логах Sing-Box - io/timeout %addr_of_outbound_canada-02-out%:443
    Зачем так сложно? OpenVPN умеет в LDAP, а SingBox нет.

Спасибо!

системный socks5 прокси не подойдёт? fakeip/smartdns не рассматривал? (это роутинг через подмену днс ответов)

Хотел бы иметь прозрачный прокси через tun. Без лишних настроек со стороны клиента, сунул конфиг и пусть работает. И чтобы работало не только из браузеров.

fakeip/smartdns не рассматривал? (это роутинг через подмену днс ответов)

не рассматривал, не в курсе как это работает

tun проблемный, иногда не работает по неизвестным причинам, прокси работает везде и его может быть достаточно (если нужная прога его поддерживает)

По поводу первой проблемы. Есть подозрение, что outbound direct отправляет всё, что вы ему скармливаете, в интерфейс, имеющий выход в интернет, а не просто в таблицу маршрутизации устройства. А интерфейс этот определяется параметром "auto_detect_interface": true. Попробуйте убрать этот параметр совсем или поставить ему значение false. Возможно это сломает что-то другое, т.к. у вас ещё в tun прописан параметр "auto_route": true, тогда придётся вручную прописывать маршруты и правила для sing-box и отключать ещё и этот параметр. А может и так проканает. Но я ни в чём не уверен. Просто попробуйте. Когда разрабатывал скрипт для работы sing-box на своём роутере Асус, тоже столкнулся с проблемой, что директ не попадал в основную таблицу маршрутизации роутера. Но там я сразу не использовал автороут, т.к. это ломало работу роутера, и потому все маршруты и правила для sing-box создаются скриптом. Когда убрал из конфига "auto_detect_interface": true, direct outbound заработал как надо.
Ну и так, к сведению- строчку "final": "direct-out", можно не писать, т.к. первым в outbounds у вас прописан direct, то всё, кроме прописанного в правилах route.rules, по умолчанию и так будет попадать в него.
По поводу второй проблемы подумайте в следующем направлении- sing-box запущенный с параметром "auto_route": true в конфиге, перестраивает маршруты и правила в системе таким образом, чтобы весь трафик устройства шел через него. С openvpn дел не имел, и как он там работает, х.з., но что-то не представляю как могут две проги одновременно работать в режиме vpn на одном устройстве, особенно если как минимум одна из них тянет всё одеяло на себя. И представлять, если честно, лень.

Спасибо, но при "auto_detect_interface": false вообще все ломается и в логах бесконечные ошибки

Друго вопрос. Как заставить sing-box не пушить свой DNS-сервер? Мне не нужен резолвинг от Sing-Box, все DNS-серверы у меня в туннеле OpenVPN. DNS-сервер от Sing-Box вызывает лаг в резолвинге, поскольку он ничего не отдает полминуты, а потом в ход идут другие системные резолверы

Отвечаю на собственный вопрос, надо отключать auto_route. Иначе никак. Глянул в сорцы, если переменная в true, то пушится днс-сервер.
Короче, походу надо фича-реквест постить, чтобы это поведение регулировалось отдельной опцией

Не ожидайте ничего от автора, он скорее всего сразу же закроет issue. Он много хороших идей забраковал по неизвестным причинам. Я ему задал вопрос что не так с моим issue и он меня вообще забанил.