Построение хорошо работающего балансировщика нагрузки похоже на построение прокси-сервера, хотя еще сложнее - ни одна из них не является простой задачей, поскольку вам придется понимать и обрабатывать несколько протоколов и т. Д. В обоих направлениях ...
Я бы порекомендовал использовать для этого существующую библиотеку ... Ниже приведены ссылки на прокси-серверы, которые, я думаю, очень помогут в создании балансировщика нагрузки:
Еще одной полезной основой могут быть SSH-библиотеки - некоторые включают поддержку туннелирования, которая является частью того, что вам нужно
IMHO .NET может быть не лучшим выбором для балансировщика нагрузки на уровне TCP, так как для этого требуется максимальная производительность ... в зависимости от вашего точного сценария, возможно, даже потребуется собрать модуль ядра для достижения приемлемого уровня производительность - сборка модуля ядра невозможна в .NET, только в C / C ++ (или для тех, кто действительно хочет испортить ассемблер) ...
Замечание:
ЕСЛИ вы можете изменить клиентскую сторону, ТОГДА может быть гораздо более эффективный вариант для достижения того, чего вы хотите ... вы бы внедрили центральную службу, выполняющую "логическую балансировку нагрузки", клиенты спрашивают эту центральную службу, какой бэкэнд они следует подключиться и затем подключиться напрямую ... после завершения они просто сигнализируют об этом центральному сервису ... может быть, даже лучше получить "информацию о загрузке" от внутренних машин / сервисов и рассчитать на основе этого ...