Как использовать sshuttle на роутере под управлением openwrt?

5449
András Szepesházi

Я использую маршрутизатор TP-Link TL-WR1043ND под управлением OpenWrt и Gargoyle . Я бы хотел прозрачно перенаправить весь трафик из моей локальной сети (обслуживаемой маршрутизатором) на удаленный сервер. По сути, как прокси-сервер socks будет работать, просто без необходимости настраивать подключенные клиентские машины для прокси.

Я читал, что sshuttle - это способ выполнить такое требование. После долгих хлопот мне наконец-то удалось выполнить все предпосылки, и я могу запустить sshuttle без каких-либо сообщений об ошибках, например:

./sshuttle --dns -vvr XXXXXX@YY.YY.YY.YY 0/0 

Где XXXXXX - мое имя пользователя на удаленном сервере YY.YY.YY.YY sshuttle, кажется, инициализируется очень хорошо, сообщений об ошибках нет, добавляет все необходимые правила в iptables, но после того, как локальный прокси-сервер установлен, я не могу подключиться где-либо из моя локальная сеть. Это вывод sshuttle:

Starting sshuttle proxy. Binding: 12300 Listening on ('127.0.0.1', 12300). DNS listening on ('127.0.0.1', 12300). firewall manager ready. c : connecting to server... c : executing: ['ssh', 'XXXXXX@YY.YY.YY.YY', '--', 'P=python2; $P -V 2>/dev/null || P=python; exec "$P" -c \'import sys; skip_imports=1; verbosity=2; exec compile(sys.stdin.read(764), "assembler.py", "exec")\''] c : > channel=0 cmd=PING len=7 (fullness=0) WARNING: Ignoring unknown argument '--' XXXXXX@YY.YY.YY.YY's password: server: assembling 'cmdline_options.py' (29 bytes) server: assembling 'helpers.py' (914 bytes) server: assembling 'ssubprocess.py' (13668 bytes) server: assembling 'ssnet.py' (5446 bytes) server: assembling 'hostwatch.py' (2270 bytes) server: assembling 'server.py' (2370 bytes) s: latency control setting = True s: available routes: s: 69.64.32.0/22 s: > channel=0 cmd=PING len=7 (fullness=0) c : connected. Connected. c : Waiting: 3 r=[3, 5, 9] w=[9] x=[] (fullness=7/0) c : Ready: 3 r=[] w=[9] x=[] c : mux wrote: 15/15 c : Waiting: 3 r=[3, 5, 9] w=[] x=[] (fullness=7/0) s: > channel=0 cmd=ROUTES len=14 (fullness=7) s: Waiting: 1 r=[4] w=[5] x=[] (fullness=21/0) s: Ready: 1 r=[] w=[5] x=[] s: mux wrote: 15/15 s: mux wrote: 22/22 s: Waiting: 1 r=[4] w=[] x=[] (fullness=21/0) c : Ready: 3 r=[9] w=[] x=[] c : < channel=0 cmd=PING len=7 c : > channel=0 cmd=PONG len=7 (fullness=7) c : < channel=0 cmd=ROUTES len=14 firewall manager: starting transproxy. s: Ready: 1 r=[4] w=[] x=[] s: < channel=0 cmd=PING len=7 s: > channel=0 cmd=PONG len=7 (fullness=21) s: mux wrote: 15/15 s: Waiting: 1 r=[4] w=[] x=[] (fullness=28/0) >> iptables -t nat -N sshuttle-12300 >> iptables -t nat -F sshuttle-12300 >> iptables -t nat -I OUTPUT 1 -j sshuttle-12300 >> iptables -t nat -I PREROUTING 1 -j sshuttle-12300 >> iptables -t nat -A sshuttle-12300 -j RETURN --dest 127.0.0.0/8 -p tcp >> iptables -t nat -A sshuttle-12300 -j REDIRECT --dest 0.0.0.0/0 -p tcp --to-ports 12300 -m ttl ! --ttl 42 >> iptables -t nat -A sshuttle-12300 -j REDIRECT --dest 127.0.0.1/32 -p udp --dport 53 --to-ports 12300 -m ttl ! --ttl 42 c : mux wrote: 15/15 c : < channel=0 cmd=PONG len=7 c : received PING response c : Waiting: 3 r=[3, 5, 9] w=[] x=[] (fullness=0/0) s: Ready: 1 r=[4] w=[] x=[] s: < channel=0 cmd=PONG len=7 s: received PING response s: Waiting: 1 r=[4] w=[] x=[] (fullness=0/0) 

Я понятия не имею, как даже начать отладку этой проблемы. Если я остановлю sshuttle, он удалит правила iptables и сетевые подключения снова будут работать:

firewall manager: undoing changes. >> iptables -t nat -D OUTPUT -j sshuttle-12300 >> iptables -t nat -D PREROUTING -j sshuttle-12300 >> iptables -t nat -F sshuttle-12300 >> iptables -t nat -X sshuttle-12300 c : c : Keyboard interrupt: exiting. 

Кому-нибудь удалось настроить работающий экземпляр sshuttle на openwrt? Или есть какой-то другой способ добиться того, что мне нужно здесь (прозрачный прокси на роутере openwrt)?

Связанный и оставшийся без ответа вопрос: sshuttle на маршрутизаторе DD-WRT / OpenWRT

6

3 ответа на вопрос

9
András Szepesházi

Luckily I got an answer at the sshuttle google group from the author of sshuttle. He wrote:

You might need to add '-l 0.0.0.0' (that's a lowercase L) in order to tell sshuttle to listen for connections from other than localhost (the router itself). For security reasons, sshuttle won't route other people's traffic by default.

And it works perfectly! Use:

./sshuttle -l 0.0.0.0 --dns -vvr XXXXXX@YY.YY.YY.YY 0/0

Мой пример использования - запуск sshuttle на хосте для пересылки трафика контейнеров Docker во время их сборки, и это прекрасно работает. Tarnay Kálmán 10 лет назад 0
4
trapezoid

Несколько вещей, которые сбили меня с толку:

На складе OpenWRT 12.09 AA необходимо установить следующие пакеты:

  1. python (с зависимостями, потребляет 3-4 МБ флеш)
  2. iptables-mod-nat-extra
  3. iptables-mod-ipopt

Затем, чтобы подключиться по SSH к удаленному серверу с помощью ключа SSH, вам нужно создать ключ в формате Dropbear:

dropbearkey -t rsa -f /root/.ssh/id_rsa 

И, наконец, укажите расположение ключа в sshuttleкомандной строке:

./sshuttle -e "ssh -i /root/.ssh/id_rsa" -l 0.0.0.0 -r xxxxxx@yy.yy.yy.yy 0/0 -vv --dns 
0
Nobody

На маршрутизаторе GL-AR300M, который работает с OpenWrt Chaos Calmer 15.05, процедура выглядит несколько иначе, чем описанная @trapezoid. Может быть, это не совсем стандартный OpenWRT (я не переустанавливал после покупки), или это просто время.

Я установил пакеты они названы, то есть python iptables-mod-nat-extra iptables-mod-ipopt.

Чтобы логин на основе ssh-ключа работал, мне не нужно было генерировать специальный ssh-ключ, моего обычного было достаточно, но его autorized_keysнужно было переместить /etc/dropbear/(то есть, я ssh-copy-idне поместил его в правильный каталог).

Похожие вопросы