Прозрачное Socks5 проксирование приложений в linux | ||
Сети > Маршрутизация Потребовалось мне как-то запустить игру, которая запускается под wine, через прокси. Поднял ssh-туннель, запустил игру через proxychains, и… игра не смогла соединиться с сервером, хотя chromium без проблем работал и показывал ip прокси. Попробовал tsocks — игра вообще не запустилась. Можно, конечно, было настроить VPN-туннель с помощью того же ssh, но сервер — VPS, под OpenVZ, у которого по умолчанию выключен TUN, что привело бы к письму в техподдержку и ожиданию. Итак, пятиминутное гугление привело меня к заброшенному проекту Transocks, который, в отличие от proxychains и tsocks, которые подгружают свои библиотеки и перехватывают сетевые вызовы, слушает определенный порт и перенаправляет все, что в него пришло, через socks4 прокси. К сожалению, transocks у меня не собрался, и я начал гуглить дальше. Оказывается, у проекта есть два форка: transocks_ev на c и transocks_em на ruby. Первый поддерживает Socks5, не поддерживает авторизацию и UDP. Второй же поддерживает Socks5, UDP, *BSD, но тоже, вроде бы, не поддерживает авторизацию(не нашел в коде, а документации нет). Так как UDP мне не нужно, я остановился на transocks_ev.
Сборка Собрать transocks_ev очень просто: достаточно скачать Makefile и transocks_ev.c со страницы проекта, установить libevent и выполнить make У нас появился бинарник transocks_ev tranSOCKS-ev - libevent-based transparent SOCKS5-Proxy Usage: ./transocks_ev [-f] [-p Port] [-H IP-Address] [-s port] [-S IP-Address] -f Do not fork into background upon execution -p Bind our server-socket to this port -H Listen on this IP-Address for incomming connections -s Expect SOCKS5-Server on this Port -S Expect SOCKS5-Server on this IP-Address Так как я поднимал ssh-туннель на порту 4441, запускаю transocks_ev с такими параметрами: ./transocks_ev -p 4445 -H 127.0.0.1 -s 4441 -S 127.0.0.1 Теперь у нас на порту 4445 висит сервер, который будет пускать все запросы через наш socks5. Немного похоже на NAT, только на определенном порту. Настройка Перенаправлять пакеты будем с помощью iptables. Я решил сделать подобие proxychains, чтобы можно было запустить любое приложения через прокси, а не просто проксирование по адресу или порту(хотя для игры сгодится и оно). Создаем новую группу proxified: sudo groupadd proxified Редактируем /etc/sudoers так, чтобы мы могли запускать приложения под этой группой. Должно быть что-то вроде этого: valdikss ALL=(ALL:ALL) ALL Теперь перейдем к настройкам iptables. sudo iptables -t nat -I OUTPUT -m owner --gid-owner proxified -p tcp -j REDIRECT --to-ports 4445 Эта команда будет перенаправлять все пакеты от приложений с группой proxified на transocks сервер. Запуск Запускаем приложение с группой proxified sudo -g proxified chromium-browser Вот и всё. Этот метод может быть использован для гарантированной проксификации всей системы, либо даже для прозрачной проксификации на роутере. Если вам нужно использовать прокси с аутентификацией, то установите 3proxy локально и укажите в нем ваш прокси как прокси сервер верхнего уровня. Источник:
http://habrahabr.ru/blogs/linux/116360/
|
||
Комментарии | ||