Encaminhar conexões em 0.0.0.0:80 a 127.0.0.1:9091

1

Estou tentando configurar um relay de tor.

Para permitir a apresentação de uma página web estática explicando o que é que eu quero que o servidor escute nas portas 80 e 443.

Para permitir o uso de contabilidade / hibernação (largura de banda do acelerador após um limite de dados ter sido atingido) eu preciso do processo para ligar a 1024 números de porta (para que um usuário não privilegiado possa religar as portas) ).

Por isso, minha configuração tor é semelhante a:

ORPort 443 NoListen
ORPort 127.0.0.1:9090 NoAdvertise
DirPort 80 NoListen
DirPort 127.0.0.1:9091 NoAdvertise
DirPortFrontPage /etc/tor/tor-exit-notice.html

Depois de iniciar o servidor, posso acessar o arquivo html localy:

$ wget 127.0.0.1:9091                                  
--2013-08-12 14:27:49--  http://127.0.0.1:9091/
Connecting to 127.0.0.1:9091... connected.
HTTP request sent, awaiting response... 200 OK
Length: 6762 (6.6K) [text/html]
Saving to: 'index.html'

100%[=============================>] 6,762       --.-K/s   in 0.005s  

2013-08-12 14:28:15 (1.21 MB/s) - 'index.html' saved [6762/6762]

E as portas parecem abertas corretamente:

$ sudo netstat -lnp | grep tor
tcp        0      0 127.0.0.1:9050          0.0.0.0:*               LISTEN      6328/tor        
tcp        0      0 127.0.0.1:9090          0.0.0.0:*               LISTEN      6328/tor        
tcp        0      0 127.0.0.1:9091          0.0.0.0:*               LISTEN      6328/tor

Para que a última parte funcione, onde as conexões em 0.0.0.0:80 são redirecionadas para 127.0.0.1:9091, tentei usar o iptables.

$ sudo iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 443 -j DNAT --to-destination 127.0.0.1:9090
$ sudo iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j DNAT --to-destination 127.0.0.1:9091
$ sudo iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443 to:127.0.0.1:9090
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:127.0.0.1:9091

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Mas quando eu me conecto ao ip externo na porta 80 não obtenho resposta.

Eu tentei com o ip_forward ligado e desligado, e não funciona:

$ sudo sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
$ sudo sysctl net.ipv4.ip_forward=0
net.ipv4.ip_forward = 0

Eu até experimentei o MASQUERADE-ing, mas ele não funciona, e eu não acho que seja necessário:

$ sudo iptables -t nat -A POSTROUTING -j MASQUERADE

Eu também tentei PREROUTING por sugestão abaixo, mas não funciona:

$ sudo iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 -j REDIRECT --to-port 127.0.0.1:9091
iptables v1.4.14: REDIRECT: Bad value for "--to-ports" option: "127.0.0.1:9091"
Try 'iptables -h' or 'iptables --help' for more information.

O que estou fazendo de errado?

O servidor é um raspberry pi, executando wheezy apenas com a interface de rede integrada conectada diretamente à internet com um ip público.

    
por azzid 12.08.2013 / 14:48

2 respostas

1

Isso deve funcionar:

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 \
          -j REDIRECT --to-ports 127.0.0.1:9091
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 443 \
          -j REDIRECT --to-ports 127.0.0.1:9090
    
por 24.09.2013 / 00:56
1

Você pode tentar ativar o roteamento para localhost no kernel:% sysctl -w net.ipv4.conf.eth0.route_localnet=1 quando eth0 é a NIC da máquina.

Veja a resposta aceita nesta postagem: link

    
por 20.10.2016 / 19:34