Почему Nekoray в режиме TUN не проксирует запросы от Windsurf IDE?
Недавно я перешел на NixOS 25.11 и установил Windsurf IDE. Я включил Nekoray в режиме TUN, и он работает нормально (проверено через curl и в браузере), но когда я пытаюсь сделать запрос к нейросети в Windsurf, получаю ошибку ‘country not allowed’. Проблемы с VPN-сервером нет - на Windows все работает корректно. В Nekoray я вижу трафик от Windsurf и его language_server, который отвечает за AI-функционал, но почему-то этот трафик не идет через прокси.
Логи Nekoray доступны по ссылке: https://pastebin.com/StT6mTqJ
Основная проблема заключается в том, что Nekoray в режиме TUN не корректно обрабатывает маршрутизацию трафика от конкретных процессов, таких как Windsurf IDE и его language_server. Это связано с особенностями настройки процесс-фильтрации и правил маршрутизации в NixOS.
Содержание
- Основные причины проблемы
- Настройка процесс-фильтрации в Nekoray
- Конфигурация маршрутизации для NixOS
- Пошаговое решение проблемы
- Альтернативные подходы
- Проверка и диагностика
Основные причины проблемы
Исходя из анализа логов и распространенных проблем с Nekoray в NixOS, основными причинами являются:
-
Некорректная настройка процесс-фильтрации - Windsurf IDE и language_server могут иметь другие имена процессов, чем те, которые указаны в правилах маршрутизации.
-
Отсутствие необходимых привилегий - В NixOS из-за иммутабельности файловой системы требуется специальная настройка setuid для работы TUN режима.
-
DNS-проблемы - Как указано в исследовании, для работы TUN режима в NixOS необходимо включить
services.resolved. -
Конфликты маршрутизации - Проблема с ‘country not allowed’ указывает на то, что трафик от Windsurf не проходит через прокси, а идет напрямую.
Настройка процесс-фильтрации в Nekoray
Для решения проблемы с маршрутизацией трафика от Windsurf IDE необходимо правильно настроить процесс-фильтрацию:
Определение имен процессов
Сначала нужно определить точные имена процессов Windsurf и language_server:
-
Откройте терминал и выполните:
bashps aux | grep windsurf ps aux | grep language_server
-
Запустите Windsurf и проверьте, как называются его процессы в системе.
Настройка правил маршрутизации
В Nekoray настройте маршрутизацию через JSON-редактор:
- Перейдите в
Настройки → Маршрутизация → Редактор правил - Добавьте следующие правила:
{
"route": {
"final": "proxy",
"rules": [
{
"process_name": ["windsurf", "language_server"],
"outbound": "proxy"
},
{
"ip_is_private": true,
"outbound": "direct"
}
]
}
}
Важно: Убедитесь, что имена процессов соответствуют реальным именам в вашей системе. Если процесс называется иначе, скорректируйте правила.
Конфигурация маршрутизации для NixOS
Включение resolved
Как указано в документации, добавьте в ваш configuration.nix:
services.resolved.enable = true;
Настройка прав доступа для TUN режима
В NixOS требуется специальная настройка для работы TUN режима:
programs.nekoray.tunMode = {
enable = true;
setuid = true;
};
Создание необходимых симлинков
Из-за иммутабельности файловой системы в NixOS может потребоваться создать симлинки:
sudo mkdir -p /usr/local/bin
sudo ln -s /run/current-system/sw/bin/nekoray /usr/local/bin/
sudo ln -s /run/current-system/sw/bin/nekobox_core /usr/local/bin/
Пошаговое решение проблемы
Шаг 1: Проверка и определение имен процессов
# Запустите Windsurf и в другом терминале выполните:
ps aux | grep -i windsurf
ps aux | grep -i language
Запишите точные имена процессов.
Шаг 2: Настройка Nekoray
- Откройте Nekoray
- Перейдите в
Настройки → Маршрутизация → Редактор правил - Вставьте настроенные правила с правильными именами процессов
- Сохраните и перезапустите Nekoray
Шаг 3: Проверка маршрутизации
Добавьте тестовый домен в Настройки → Маршрутизация → Прямые домены для проверки:
api.openai.com
Шаг 4: Включение строгого режима маршрутизации
В Настройки → TUN настройки включите:
Строгий маршрут(Strict Route)Фейковый DNS(Fake DNS)
Альтернативные подходы
Использование System Proxy вместо TUN режима
Если TUN режим продолжает работать некорректно, попробуйте:
- Отключите TUN режим
- Включите
Системный прокси - Настройте Windsurf для использования системных прокси-настроек
Использование vopono
Для сложных сценариев можно использовать vopono:
sudo nix-channel --add https://github.com/jamesmcm/vopono/archive/main.tar.gz vopono
sudo nix-channel --update
sudo nix-env -iA nixos.vopono
# Запуск Windsurf через vopono
vopono -r nekoray windsurf
Проверка и диагностика
Проверка маршрутизации процессов
# Просмотр правил iptables
sudo iptables -L -n -v
sudo ip6tables -L -n -v
# Проверка активных соединений
ss -tulpn | grep windsurf
Тестирование прокси-соединения
# Проверка через curl
curl -x socks5h://127.0.0.1:1080 http://api.openai.com
# Проверка DNS-утечек
nslookup api.openai.com
Логирование для диагностики
Включите подробное логирование в Nekoray:
Настройки → Логирование → Уровень: Debug- Выполните тестовый запрос в Windsurf
- Проанализируйте логи на предмет ошибок маршрутизации
Заключение
Основная проблема с Nekoray в режиме TUN для Windsurf IDE в NixOS заключается в некорректной настройке процесс-фильтрации и специфических особенностях работы NixOS. Ключевые решения включают:
- Точную настройку процесс-фильтрации с правильными именами процессов Windsurf и language_server
- Включение services.resolved для работы DNS в TUN режиме
- Настройку setuid прав для корректной работы TUN интерфейса
- Использование строгого режима маршрутизации для предотвращения утечек трафика
Если стандартные решения не работают, рассмотрите альтернативные подходы вроде использования System Proxy или внешних инструментов вроде vopono для изолированного запуска приложений через прокси.