[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [resolvido: Problema com MSS] Velox: duas placas de rede e compartilhamento



Douglas A. Augusto wrote:

No dia 19/05/2005 às 14:56,
"Douglas A. Augusto" <douglas.augusto@pop.com.br> escreveu:


Tenho aqui em casa uma máquina com o Velox instalado (eth1-ppp0) e uma
pequena rede local (192.168.0.0) através da interface eth0 (endereçada
como 192.168.0.2), de modo que a máquina com Velox funciona como
gateway.

A conexão funciona muito bem para a máquina Velox, mas nas máquinas da
rede curiosamente só consigo "pingar" e acessar via ssh máquinas
remotas. Não posso por exemplo acessar uma página web, dar 'apt-get
update', ou coisas afins.

Cheguei a pensar que o vilão seria o firewall, mas isso se repete ao
deixá-lo desligado (liberado).

Para deixar a história mais esquisita ainda, via web, consigo acessar
apenas o site do Google. Para os outros sites os nomes são resolvidos,
e até parece que carregarão, mas pára em: "Aguardando resposta de..."


Mais uma vez, obrigado àqueles que tentaram me ajudar. O problema era
menos trivial, e vou explicar abaixo.

Em um compartilhamento (masquerade), o cabeçalho de pacotes TCP que vêm
das máquinas na rede é acrescido de alguns bytes para identificar que o
pacote é de uma máquina da rede, isto é, aquelas que usam a máquina
conectada à internet como gateway.
O problema é que alguns provedores (onde estão hospedados os sites) não
podem (ou não querem) aceitar um pacote que contenha essas informações
extras, fazendo a conexão literalmente parar. Parece-me que os pacotes
sobe uma conexão ADSL tendem a ser maiores.

Isso é um 'problema' antigo e clássico - pelo que entendo do que vc explica tem a ver com o MTU (maximun transfer unit ou algo do tipo). No caso da rede ethernet é 1500 bytes, mas o pppoe (que é usado em redes ADSL) 'rouba' alguns desses 1500 bytes pra ele, assim sobram menos que os tradicionais 1500 bytes pra um usuário. O micro que autentica no pppoe já se acerta sozinho, mas roteia solenemente pacotes maiores, fragmentando-os. Veja mais detalhes abaixo...

No fundo, pelo que eu estou vendo, vc fez as regras de compartilhamento na mão, certo? Pq não usar uma ferramenta que automatiza o processo?

Segundo minha experiência, o
Google é um dos poucos que lida perfeitamente com esses pacotes
"inchados".

Essa eu não entendi... quem lida com os pacotes é o gateway, não o servidor web...

Depois de muito pesquisar, descobri que há uma maneira de limitar o
tamanho "pacotes", restringindo o que é chamado de 'Maximum Segment
Size', ou simplesmente MSS. Isso é feito adicionando-se uma regra
especial no 'iptables', garantindo que os pacotes TCP, oriundos de
máquinas em compartilhamento e com o MSS maior que um valor apropriado,
sejam ajustados para o valor correto --o que sobrar de dados é
"empacotado" em um outro pacote.
[...]
Para mim só funcionou com "-t mangle -A POSTROUTING", me baseando em
"http://www.hgfelger.de/mss/mss-clamp";.

Veja só a man page do iptables, ela descreve bem o problema:

[...]
   TCPMSS
This target allows to alter the MSS value of TCP SYN packets, to control the maximum size for that connection (usually limiting it to your outgoing interface's MTU minus 40). Of course, it can only be used in conjunction with -p tcp. This target is used to overcome criminally braindead ISPs or servers which block ICMP Fragmentation Needed packets. The symptoms of this problem are that everything works fine from your Linux firewall/router, but machines behind it can never exchange large packets:
        1) Web browsers connect, then hang with no data received.
        2) Small mail works fine, but large emails hang.
        3) ssh works fine, but scp hangs after initial handshaking.
Workaround: activate this option and add a rule to your firewall configuration like:
        iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
                    -j TCPMSS --clamp-mss-to-pmtu




Reply to: