ct

    Bittorrent por trás de um firewall ou NAT

    Dicas do Guia do Hardware

    Assim como outros programas P2P, o bittorrent consegue funcionar sem maiores problemas por trás de um firewall ou através de uma conexão compartilhada via NAT. Mas, ao mesmo tempo, muita gente que o utiliza desta maneira reclama da lentidão para baixar arquivos. No caso de arquivos muito procurados, onde existe uma oferta muito grande é possível conseguir baixar na velocidade máxima da conexão, mas no caso de arquivos onde a oferta é menor é comum baixar a 3 ou 4 KB/s numa conexão via ADSL, o que faz os downloads demorarem uma eternidade...Carlos E. Morimoto
    11/09/2004


    Assim como outros programas P2P, o bittorrent consegue funcionar sem maiores problemas por trás de um firewall ou através de uma conexão compartilhada via NAT. Mesmo sem nenhuma porta de entrada disponível, o cliente consegue se conectar ao tracker e negociar o download e upload dos arquivos.

    Mas, ao mesmo tempo, muita gente que o utiliza desta maneira reclama da lentidão para baixar arquivos. No caso de arquivos muito procurados, onde existe uma oferta muito grande é possível conseguir baixar na velocidade máxima da conexão, mas no caso de arquivos onde a oferta é menor é comum baixar a 3 ou 4 KB/s numa conexão via ADSL, o que faz os downloads demorarem uma eternidade...

    Isso acontece por um motivo simples. O bittorrent aceita conexões nas portas 6881 à 6889 (ele tenta primeiro a 6881 e depois vai tentando as demais caso ela esteja fechada). Estas portas são usadas para que o tracker (o servidor que coordena o download e upload dos arquivos) possa requisitar que o seu micro envie dados para outros micros da rede.

    Se estas portas estão fechadas no seu micro as suas taxas de upload serão mais baixas, já que o tracker não tem como "mandar" o seu micro transmitir dados a outros o que torna a negociação muito mais lenta. Muita gente vai achar isso bom, afinal o que interessa é baixar logo os arquivos o mais rápido possível e sair de fininho não é mesmo?

    Se você é dessa opinião, lamento dizer que no bittorrent as coisas não funcionam assim. O protocolo tem um sistema de compensação, que faz com que você consiga baixar os arquivos na medida que você também contribui. Isso significa que se você contribui pouco, tambem vai demorar mais para baixar.

    No bittorrent o tracker rastreia as taxas de upload e download de cada micro, e mantém um cálculo da "oferta" e da "demanda" de um determinado arquivo. Se temos 10 micros compartilhando e mais 10 micros tentando baixar, então a oferta é de mais ou menos 2/1 (os que estão baixando também compartilham o arquivo), de modo que você vai conseguir baixar aproximadamente 2 KB para cada 1 KB que der de upload.

    Se por outro lado tem muita gente tentando baixar e poucos com o arquivo completo dando upload, então a taxa pode ser de 1/1 ou menos.

    Numa linha ADSL a taxa de upload é apenas metade da taxa de download. Numa situação normal o upload ficará estável em uns 13 KB/s e o download ficará um pouco acima disso. Se as portas 6881 à 6889 estão fechadas, então o upload provavelmente será mais baixo, mas o download ficará muito mais lento e instável.

    - Ok, ok, eu entendi, como eu faço então para abrir as tais portas e poder baixar os arquivos mais rápido?

    Se você está rodando o firewall localmente, ou seja você está usando o micro que está conectado na Internet, então você precisa apenas abrir as portas. No linux a regra para o iptables será:

    # iptables -A INPUT -p tcp --destination-port 6881:6889 -j ACCEPT

    Se por outro lado você está usando o micro Linux para compartilhar a conexão com outros micros da rede local, então você deve usar as linhas abaixo para redirecionar as portas (forward) para o micro onde você está usando o bittorrent:

    # iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 6881:6889 -j DNAT --to-dest 192.168.0.3
    # iptables -A FORWARD -p tcp -i ppp0 --dport 6881:6889 -d 192.168.0.3 -j ACCEPT
    # iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 6881:6889 -j DNAT --to-dest 192.168.0.3
    # iptables -A FORWARD -p udp -i ppp0 --dport 6881:6889 -d 192.168.0.3 -j ACCE

    Observe que o "ppp0" corresponde à interface que está conectada na Internet. Se você acessa via ADSL PPPoE ou via modem então a interface é essa mesma, mas, se você acessa através de algum serviço que utilize ip fixo, ou o endereço seja obtido via dhcp (sem autenticação) então a interface será eth0 ou eth1. Use o comando "ifconfig" em caso de dúvidas.

    Não se esqueça de substituir o "192.168.0.3" pelo endereço IP correto do micro que você deseja que receba as portas.

    Se você tem dois ou mais micros na rede interna que vão usar o bittorent, você pode distribuir as portas entre eles. Se forem 3 micros, cada um pode ficar com 3. Você poderia usar as regras abaixo:

    # iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 6881:6883 -j DNAT --to-dest 192.168.0.3
    # iptables -A FORWARD -p tcp -i ppp0 --dport 6881:6883 -d 192.168.0.3 -j ACCEPT
    # iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 6881:6883 -j DNAT --to-dest 192.168.0.3
    # iptables -A FORWARD -p udp -i ppp0 --dport 6881:6883 -d 192.168.0.3 -j ACCEPT

    # iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 6887:6889 -j DNAT --to-dest 192.168.0.4
    # iptables -A FORWARD -p tcp -i ppp0 --dport 6887:6889 -d 192.168.0.4 -j ACCEPT
    # iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 6887:6889 -j DNAT --to-dest 192.168.0.4
    # iptables -A FORWARD -p udp -i ppp0 --dport 6887:6889 -d 192.168.0.4 -j ACCEPT

    # iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 6884:6886 -j DNAT --to-dest 192.168.0.5
    # iptables -A FORWARD -p tcp -i ppp0 --dport 6884:6886 -d 192.168.0.5 -j ACCEPT
    # iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 6884:6886 -j DNAT --to-dest 192.168.0.5
    # iptables -A FORWARD -p udp -i ppp0 --dport 6884:6886 -d 192.168.0.5 -j ACCEPT

    Lembre-se que nenhum ser humano normal fica digitando estas linhas manualmente cada vez que ligar o micro. Ao invés disso, simplesmente copie tudo para dentro de um arquivo de texto e transforme-o em um executável usando o comando "chmod +x". Depois disso basta executar o arquivo ou colocá-lo para inicializar junto com o sistema através de algum arquivo de inicialização.




    Blog:

    Add to Google

    » Gostou do texto? Veja nossos livros impressos:
    Hardware | Redes | Servidores | Kurumin 7

    ... ou encontre o que procura usando a busca:

cb
Livros de Carlos E. Morimoto HOME