Como usar o sshuttle em um roteador executando o openwrt?

6

Estou usando um roteador TP-Link TL-WR1043ND executando OpenWrt e Gárgula . Gostaria de encaminhar todo o tráfego da minha rede local (servido pelo roteador) para um servidor remoto de forma transparente. Essencialmente como um proxy de meias funcionaria, apenas sem a necessidade de configurar as máquinas clientes conectadas para proxy.

Eu li que sshuttle é o caminho a percorrer para esse tipo de requisito. Depois de muito mexer, finalmente consegui satisfazer todos os pré-requisitos, e posso começar o sshuttle sem nenhuma mensagem de erro, assim:

./sshuttle --dns -vvr [email protected] 0/0

Onde XXXXXX é meu nome de usuário em um servidor remoto YY.YY.YY.YY sshuttle parece inicializar muito bem, sem mensagens de erro, adiciona todas as regras necessárias ao iptables, mas depois que o proxy local é estabelecido, não consigo conectar em qualquer lugar da minha rede local. Esta é a saída do 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', '[email protected]', '--', '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 '--'
[email protected]'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)

Eu não tenho ideia de como começar a depurar esse problema. Se eu parar o sshuttle, ele removerá as regras do iptables e as conexões de rede funcionarão novamente:

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.

Alguém conseguiu configurar uma instância sshuttle em funcionamento no openwrt? Ou existe alguma outra maneira de conseguir o que eu preciso aqui (proxy transparente em um roteador openwrt)?

Pergunta relacionada e não respondida: sshuttle em um roteador DD-WRT / OpenWRT

    
por András Szepesházi 05.09.2013 / 11:21

3 respostas

9

Por sorte, recebi uma resposta do grupo sshuttle do google do autor do sshuttle. Ele escreveu:

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.

E isso funciona perfeitamente! Use:

./sshuttle -l 0.0.0.0 --dns -vvr [email protected] 0/0

    
por 09.09.2013 / 19:53
4

Algumas coisas que me enganaram:

A partir do estoque OpenWRT 12.09 AA, você precisa instalar estes pacotes:

  1. python (com dependências, consome 3-4 MB de flash)
  2. iptables-mod-nat-extra
  3. iptables-mod-ipopt

Em seguida, para o SSH no servidor remoto usando uma chave SSH, você deve criar uma chave no formato Dropbear:

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

E, finalmente, forneça a localização da chave na linha de comando sshuttle :

./sshuttle -e "ssh -i /root/.ssh/id_rsa" -l 0.0.0.0 -r [email protected] 0/0 -vv --dns
    
por 17.10.2013 / 20:30
0

No roteador GL-AR300M que executa o OpenWrt Chaos Calmer 15.05 o procedimento parece ser ligeiramente diferente do que o @trapezoid descreveu. Talvez não seja um bom estoque de OpenWRT (eu não reinstalei depois de comprar), ou é apenas a passagem do tempo.

Eu instalei os pacotes que eles nomearam, ou seja, python iptables-mod-nat-extra iptables-mod-ipopt .

Para o login baseado em chave ssh funcionar, não precisei gerar uma chave ssh especial, mas a% usual foi suficiente, mas o autorized_keys precisou ser movido para /etc/dropbear/ (ou seja, ssh-copy-id didn coloque no diretório correto).

    
por 03.03.2017 / 16:14