Я ' Есть ли эта возможность в операционных системах или на основе Unix или ?
Для BSD я бы посмотрел в relayd (8)
- его родной для OpenBSD, но я считаю, что FreeBSD тоже имеет порт. Он довольно мощный и может делать больше, чем несколько вещей (например, прокси, балансировщик нагрузки, шлюз приложений), включая то, что вы запрашиваете.
Прочтите справочные страницы, особенно разделы «Правила фильтрации» и «Протоколы»:
Определенно переходите к списку рассылки openbsd 'misc', если у вас есть проблемы. Сообщество работает быстро, а автор часто доступен.
relayd
тесно связан с пакетным фильтром pf
, что позволяет ему совместно создавать правила для уровней 3 и 7
Проблема, которую я вижу здесь, заключается в том, что вам нужно принять TCP-соединение, прежде чем вы увидите http-запрос. Таким образом, даже если бы система могла использовать данные уровня приложения, у нее не было бы этих данных в то время, когда ей нужно решить, куда должно идти соединение.
Я не думаю, что есть большой выбор, кроме как иметь «обратный прокси» который завершает TCP-соединение от клиента, а затем устанавливает прямое TCP-соединение с исходным сервером.