Я видел, как это используется во многих проектах на базе 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 Repo: https://github.com/darkk/redsocks
Теперь все работает отлично, но мне все еще нужно знать, можно ли это сделать без redsocks (подключение к туннелю напрямую).
Вы хотите настроить VPN для бедняков через SSH? Если это так, для этого есть некоторая документация Ubuntu:
https://help.ubuntu.com/community/SSH_VPN
По сути, вы должны использовать опцию «-w», чтобы настроить новый интерфейс tun0 и начать маршрутизацию через него. iptables
не участвует, хотя вам нужно будет настроить маршруты.
Обратите внимание, что выполнение TCP через TCP может быть плохая идея. Лучшим вариантом может быть простой VPN, такой как OpenVPN, но это будет сложнее, чем быстрый и грязный туннель ssh.