Программное обеспечение tun2socks (Linux, Windows) создает виртуальный сетевой интерфейс, который перенаправляет все входящие TCP-соединения через указанный прокси-сервер. Он может использовать только прокси-сервер SOCKS и по умолчанию может только перенаправлять TCP, хотя UDP также может быть перенаправлен, если вы можете запустить мой перенаправитель udpgw
где-то за SOCKS. Предполагая, что вы соответствуете этим требованиям, вот как вы можете настроить его:
Сначала создайте виртуальный интерфейс и настройте его. В Linux:
openvpn --mktun --dev tun0 --user <your_user>
ifconfig tun0 10.0.0.1/24
Или в Windows просто установите OpenVPN, чтобы получить виртуальный интерфейс TAP-Win32, и назначьте ему IP 10.0.0.1, маску сети 255.255.255.0.
Затем запустите tun2socks, который выполняет фактическую пересылку:
badvpn-tun2socks --tundev tun0
--netif-ipaddr 10.0.0.2 --netif-netmask 255.255.255.0
--socks-server-addr <socks_server_address>:<socks_port>
Здесь 10.0.0.2
- это IP-адрес виртуального маршрутизатора внутри виртуального интерфейса. Он должен находиться в той же подсети, что и подсеть, назначенная самому виртуальному интерфейсу (10.0.0.1/24
). В Windows вместо tun0
используйте:
--tundev "tap0901:<display_name_of_TAP-Win32_device>:10.0.0.1:10.0.0.0:255.255.255.0"
На этом этапе вы должны пропинговать виртуальный маршрутизатор 10.0.0.2
(в этом случае ответит запущенная программа tun2socks
). Для пересылки соединений через прокси все, что вам нужно сделать, это направить их через виртуальное устройство. В Linux:
route add default gw 10.0.0.2 metric 0
Или на Windows:
route add 0.0.0.0 mask 0.0.0.0 10.0.0.2 metric 0
Критическая часть здесь - то, что маршрут переопределяет любой существующий маршрут по умолчанию. Кроме того, если ваш сервер SOCKS не находится в локальной сети, вы должны добавить маршрут исключения с более высокой метрикой, чтобы предотвратить перенаправление соединений обратно в виртуальный интерфейс. Смотрите ссылку вверху для получения дополнительной информации.