Я видел, как это использовалось во многих проектах на базе Android, таких как «ProxyDroid» и «SSHTunnel».
Если вы устанавливаете соединение с прокси-сервером или туннелем SSH, то с помощью iptables все TCP-запросы будут перенаправлены через созданный вами туннель.
Это должно быть что-то вроде «-I OUTPUT -p tcp --destination-not xxx.xxx.xx.xx --redirect-to xx.xxx.xx.xx:port», но я не смог найти никаких примеров по этому поводу и не знаю, следует ли вставлять это в nat или что-то еще + я понятия не имею, нужно ли мне иметь больше одного правила, например: еще одно для входящих подключений.
РЕДАКТИРОВАТЬ:
Похоже, что использовать туннель напрямую невозможно. Или я не нашел, как это сделать без использования агента. Мне пришлось установить программу под названием redsocks, которая выступала в качестве локального сервера, чтобы это заработало.
Что касается команд iptables, используемых здесь, то это:
# do not redirect connection sent to localhost so redirected connections can reach
# its destination, otherwise we'll stuck in a loop.
iptables -t nat -A OUTPUT -d 127.0.0.0/8 -j ACCEPT
# Redirect all tcp connections except ones that are going to my tunnel server
# to the local redsocks port
iptables -t nat -A OUTPUT -p tcp ! -d tunnel.ip.goes.here -j REDIRECT --to-ports 31338
Репозиторий RedSocks:https://github.com/darkk/redsocks
Теперь все работает отлично, но мне все еще нужно узнать, можно ли это сделать без Redsocks (подключившись к туннелю напрямую).
решение1
Вы имеете в виду настроить VPN для бедных через SSH? Если да, то вот документация Ubuntu для этого:
https://help.ubuntu.com/community/SSH_VPN
По сути, вы используете опцию «-w», чтобы настроить новый интерфейс tun0 и начать маршрутизацию через него. iptables
не участвует, хотя вам потребуется настроить маршруты.
Обратите внимание, что использование TCP через TCP может бытьплохая идеяЛучшим вариантом может стать простой VPN, например OpenVPN, но это будет сложнее, чем быстрый и грязный туннель SSH.