7

Я использую маршрутизатор 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

3 ответа3

10

К счастью, я получил ответ в sshuttle google group от автора sshuttle. Он написал:

Возможно, вам придется добавить '-l 0.0.0.0' (это строчная буква L), чтобы sshuttle прислушивался к прослушиванию соединений, отличных от localhost (самого маршрутизатора). По соображениям безопасности sshuttle не будет маршрутизировать трафик других людей по умолчанию.

И это работает отлично! Использование:

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

4

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

На складе 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

На маршрутизаторе 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 didn ' положить его в правильном каталоге).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .