У меня есть система Linux, которая находится за брандмауэром, но она может подключаться к прокси-серверу HTTP, который передает все команды CONNECT. Как я могу настроить систему Linux для выполнения DNS-запросов через TCP через HTTP CONNECT и для установления всех исходящих TCP-соединений (кроме тех, что к прокси-серверу HTTP) через HTTP CONNECT?
Я ищу решение, которое работает в любом процессе, включая статически связанные двоичные файлы, которые вызывают socket(2)
и connect(2)
прямо. (Так LD_PRELOAD
не является приемлемым решением, поскольку не работает со статически связанными двоичными файлами.)
Посмотри на Transocks, который может перехватывать TCP-соединения с iptables и туннелировать их через Socks. Должен работать со статическими двоичными файлами.
DNS поверх TCP существует, но для типичного использования он довольно нестандартен. Я не думаю, что libnsswitch может использовать tcp, но вы можете установить локальный сервер имен, говорящий по tcp dns. Вам нужно будет убедиться, что у вас есть рекурсивный преобразователь где-то снаружи, который будет принимать tcp.
Если вы контролируете машину снаружи, может быть проще настроить несколько vpn для туннелирования трафика UDP; tsocksified openvpn или openssh с параметром -w.