Что я пробовал
- Изменение таблицы системных маршрутов (RouteAdd/RouteDelete) до/после запуска: работает, но работает грубо и влияет на весь трафик, соответствующий маршруту.
- Перехват и повторное внедрение на основе WinDivert для каждого процесса: многообещающе, но сложно создать пару сокетов для надежной обработки идентификаторов, и возникают проблемы с производительностью.
- Драйвер выноски платформы фильтрации Windows (WFP): найдены ссылки, но я не хочу писать драйвер ядра, если это возможно.
Каковы стандартные и надежные подходы Windows для маршрутизации трафика от конкретного процесса через определенный интерфейс (Wintun) из пользовательский режим C #? В частности:
- Существует ли поддерживаемый API или шаблон пользовательского режима для привязки исходящих сокетов процесса к определенному интерфейсу или маршруту без драйвера ядра?
- Если нет, то рекомендуемый подход:
- изменить IP-маршруты (грубо) или
- использовать WinDivert в пользовательском режиме (и каковы предостережения) или
- реализовать драйвер WFP (насколько распространено/необходимо)?
- Практические соображения: производительность, надежность, требуемые повышенные привилегии, подводные камни, которые нарушают работу приложений (игры/VoIP).
Среда:
- Windows 11
- .NET 10
- Wintun + tun2socks (процесс пользовательского режима)
- Цель: разделенный туннель для каждого процесса как для TCP, так и для UDP (игры)
Подробнее здесь: https://stackoverflow.com/questions/798 ... -ip-rotato