Socks5 DNS sing-box

Приветствую, друзья! Есть такая задача: нужно резолвить DNS имена на стороне socks5 прокси. Например, если в браузере Firefox поставить галочку на пункте “отправлять DNS запросы через socks5”, то браузер не будет резолвить DNS локально, а сразу будет отправлять запрос на подключение не с IP, а с именем хоста. Как реализовать такую же функциональность, но чтобы направить в socks5 трафик всех приложений? Думал, что sing-box fakeip как раз для этого используется. Но когда настроил, оказалось, что да, он на DNS запрос отвечает фейковым IP (например из диапазона 198.18.0.0/15), но при запросе к этому адресу, все равно лезет его разрезолвливать. Да, можно резолвить через TCP 1.1.1.1 и запросы направить через прокси. Но нужно, чтобы использовались именно нативные DNS, как в случае с Firefox. Также пробовал выставить в конфиге sing-box в inbound (type: tun) параметр “sniff_override_destination”: true, но безуспешно. Подскажите, можно ли эту задачу в принципе решить с помощью sing-box? Или посоветуйте другой аналогичный софт, в котором это возможно реализовать. Спасибо!

Не совсем понял, что вы хотите, но что-то похожее есть в Proxifier:

Да, нужна именно эта функциональность, как в Proxifier. Но чтобы софт был открытый и его можно было запустить, например, на OpenWRT роутере, как sing-box.

Convert TUN/TAP to Socks5/HTTP proxy
Так и не понял, что вы хотите сделать, прозрачный прокси, или SOCKS5 прокси который будет резолвить имена не локально, а через исходящий прокси? За OpenWRT ничего не знаю, так что умываю руки.

тоже ничего не понял. автор, перефразируй

Спасибо за ответы! Хочу направить весь трафик всех приложений через прокси. Но плюс ещё и чтобы ДНС тоже резолвились через этот же прокси. Причем не через публичные днс (1.1.1.1, 8.8.8.8), а через те, что используются на стороне прокси. Предполагается, что заворачивание трафика будет происходить на маршрутизаторе, в качестве которого будет выступать роутер OpenWRT или PC с Linux.

Это возможно сделать, не подскажу как, но имейте ввиду, что часть приложений не будет работать (VoIP, UDP hole punching, ICMP tunnel).

Да, это понятно, что чтобы работал UDP это нужна поддержка на стороне прокси. Но в данный момент интересует именно нативный резолвинг ДНС, как вы показали в Proxifier.

вы никак не сделаете чтобы приложения сами отказались от системного днс и начали резолвить через сокс, нужно перехватывать днс на уровне системы и направлять куда нужно (например через sing-box проксировать 127.0.0.1:53 на x.x.x.x:53 в proxy outbound)

Перехватить и направить DNS - не проблема. Уже сделано так, что приложения используют DNS от sing-box с опцией fakeip. Т.е. каждое имя резолвится в IP из диапазона 198.18.0.0/15. А запросы к этим IP идут в sing-box. Проблема именно в том, что sing-box сам резолвит DNS имена и вместо фейковых IP подставляет настоящие. Вот мой вопрос в том, можно ли как-то настроить sing-box так, чтобы он в подключение по socks5 подставлял имена хостов вместо IP адресов?

Если даже такой опции нет, то возможность пропатчить есть, думаю. Взяв доменое имя из таблицы сопоставления имя ↔ фейковый IP.

Там можно настроить прокси.

Спасибо, посмотрю.

В общем, удалось решить задачу. Надо в качестве inbound использовать tproxy (вероятно, redirect тоже будет работать). В режиме tun почему-то не захотела работать опция sniff_override_destination. А с tproxy всё нормально: ДНС выдаются нативные, те, что использует socks5 прокси. Всем спасибо за советы!

1 Like