Правильно ли я понимаю, что socksify сотоварищи работает только на динамически линкованных бинарниках? А вот есть небольшая прога на Go, собрана статически, и ее запросы к веб-серверам очень хочется завести на прокси-сервер. Смотреть на redsocks + фаервол, или есть еще какие-то варианты?
Создать tun0 на основе SOCKS и прокинуть к нему маршрут.
redsocks (очень трудный) или пересобрать прогу в shared. Для этого её обычно достаточно собрать на той же машине, а не кросскомпилом.
В случае с redsocks надо ещё мутить с dumb dns (я так и не осилил), или dns запросы пойдут напрямую (даже при использовании http прокси!). Тогда надо убедиться в их безопасности (dnscrypt, vpn).
user@host:~$ http_proxy=socks5://PROXYSERVER:PORT /path/to/your/golang-bin
не?
или вопрос был как поднять прокси? тогда причем тут бинарник?
Не все проги уважают эти настройки. Но можно тоже попробовать.
Вопрос был как проксировать непроксируемые статические бинарники (которые не имеют своих настроек прокси). Дело в том, что простые линуксовые проксификаторы proxychains и torsocks работают только с shared бинарниками.
Я думал он свое завести не может, тем более вроде как линукс мысли сразу про опенсорс. Чужое надо сажать в виртуалку и на уровне интерфейса смотреть куда оно полезло. В идеале вообще не связываться.
Если программа поддерживает выбор интерфейса (bind to interface/address), используйте tun2proxy/tun2socks и аналоги, и указывайте их tun-интерфейс.
Если не поддерживает, то дополнительно добавьте правило маршрутизации конкретного пользователя в отдельную таблицу маршрутизации (ip rule … uidrange 1001-1001 table …
), в которой будет маршрут через tun2socks, и запускайте программу от отдельного пользователя (sudo -u user2 ./app
).
Можно с помощью sing-box поднимать дефолтный tun интерфейс и делать маршрутизацию по имени или пути процесса, а остальное пускать напрямую (или куда вам угодно, это ж sing-box):
конфиг для наглядности, не проверялся, может содержать глупости
{
"log": {
"level": "debug"
},
"route": {
"rules": [
{
"process_name": [
"curl"
],
"process_path": [
"/usr/bin/curl"
],
"default_interface": "eth0",
// "outbound": "mixed-in", // если socks прокси локальный, а не удалённый, а то вы не уточнили.
"outbound": "socks-out"
}
],
"final": "direct"
},
"inbounds": [
{
"type": "tun",
"tag": "tun",
"interface_name": "tun0",
"domain_strategy": "ipv4_only",
"address": "10.100.0.1/30",
"auto_route": true
},
// {
// "type": "mixed", // нужно если socks прокси локальный, а не удалённый, а то вы не уточнили.
// "tag": "mixed-in",
// "listen": "127.0.0.1",
// "listen_port": 1080,
// "sniff": true,
// "domain_strategy": "ipv4_only"
// }
],
"outbounds": [
{
"type": "direct",
"tag": "direct"
},
{
"type": "dns",
"tag": "dns-out"
},
{
"type": "socks",
"tag": "socks-out",
"server": "10.20.30.40",
"server_port": 1080,
"version": "5",
"username": "admin",
"password": "admin"
}
]
}
Ух, сколько полезного сразу! Благодарю
Может и поздно, но добавлю еще одно решение: