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

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



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. Segundo minha experiência, o
Google é um dos poucos que lida perfeitamente com esses pacotes
"inchados".

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. 

A regra que usei foi:

  iptables -t mangle -A POSTROUTING -p tcp -m tcp --tcp-flags \
	   SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu -o ppp0

Apesar de ter descoberto que o problema era no MSS, tive dificuldades
para refinar esta regra, pois muitas referências apontavam algumas
diferenças, como:

- man iptables:

 iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
                     -j TCPMSS --clamp-mss-to-pmtu
		     
- pppoeconf

  iptables -o ppp0 --insert FORWARD 1 -p tcp --tcp-flags
  SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS
   --clamp-mss-to-pmtu


Para mim só funcionou com "-t mangle -A POSTROUTING", me baseando em
"http://www.hgfelger.de/mss/mss-clamp";.


-- 
Douglas Augusto
                                                             [Netiqueta]
§ Respostas e comentários devem vir após o texto original ou parágrafo a
  parágrafo.



Reply to: