[Ubuntu-BR] Dúvida com Roteamento para a VPN

Daniel Bastos dbastos+0 em toledo.com
Segunda Agosto 17 18:36:46 UTC 2009


In article <841DFE97ADB72746BFA745E6844B7E62056BE7 em kont-mail.kontact.com.br>,
Gustavo Tadeu wrote:

> Eu não sei como fasso esse roteamento, nunca fiz rotas no Linux.
> Alguém poderia me dar uma Luz?

O que você precisa é realmente de uma luz, porque só alguém que de
fato tem acesso à informação que você tem (e é capaz de verificar a
veracidade dela) pode saber exatamente o que você precisa. Isto é,
esse nem é um caso onde alguém possa te dar o peixe, sem o
conhecimento.

O roteamento de um sistema é uma tabela que lista, essencialmente,
padrões de endereços e seus destinos. Você pode ver a tabela
solicitando ao netstat; diga -r.

%netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
77.250.91.0     *               255.255.255.0   U         0 0          0 eth0
172.16.31.0     *               255.255.255.0   U         0 0          0 if0
default         my.gateway.com  0.0.0.0         UG        0 0          0 eth0

Meu endereço é 77.250.91.80. Logo, pertence à rede 77.250.91. Quando
envio um dado para um computador na mesma rede (e isso é determinado
pelo netmask), então o kernel sabe que deve entregar o pacote à
interface eth0 pois o pacote casa com a primeira regra da tabela.

Se o computador, o qual que envio dados, não pertencer a esta rede,
então o kernel verifica a próxima regra, que é a linha do meio na
tabela. Se eu digo ``ping 172.16.31.4'' então este pedido casa com a
linha do meio, e o kernel entrega o pacote à eth1.

Se não for nenhuma das duas, o kernel entrega o pacote ao computador
cujo endereço é aquele que o nome my.gateway.com representa. Ou seja,
a palavra ``default'' casa com qualquer destino, o netmask 0.0.0.0
representa a Internet inteira.

Quando o pacote chegar em my.gateway.com, esse computador saberá
(espera-se) o que fazer com o dado, e o processo lá é essencialmente o
mesmo.

Dê uma olhada nos flags. A letra U significa ``Up.'' A rota é
atualmente válida. Pode usar. A letra ``G'' significa gateway; alguém
que pode te ajudar a atingir o seu destino.

O símbolo '*' na segunda coluna, significa que a rota ali é direta; ou
seja, não passará por um gateway. Se, ao invés de *, vemos um endereço
qualquer, então é porque dispachamos a ordem para alguém com mais
conhecimento sobre outras partes da rede.

Se você deseja alterar esta tabela do kernel, você pode pedir ao
programa route. Diga algo como add <regra> <responsável>. Exemplo.

# route add 1.2.3.4 gw 172.16.31.150

A regra é que qualquer pacote que vá 1.2.3.4 deve ser entrega ao
gateway 172.16.31.150. Nesse caso, a regra é especifica a um certo
computador; aquele cujo endereço é 1.2.3.4. A regra poderia ser uma
rede, com um netmask a ser considerado.

%netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
1.2.3.4         dsd1            255.255.255.255 UGH       0 0          0 if0
(...)

%ping dsd1
PING dsd1 (172.16.31.150) 56(84) bytes of data.
64 bytes from dsd1 (172.16.31.150): icmp_seq=1 ttl=255 time=0.367 ms
(...)

Aquele gateway vem a ter um nome; dsd1. Se eu enviar algum dado para
1.2.3.4 agora, o dsd1 deverá recebê-la. 

%ping -c 1 1.2.3.4
PING 1.2.3.4 (1.2.3.4) 56(84) bytes of data.

--- 1.2.3.4 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

O dsd1 resolveu ignorar meu pedido. Mas ele recebeu o pacote, e é isso
que importa.

# hostname
dsd1

# tcpdump -i if0 'dst host 1.2.3.4'             
tcpdump: listening on if0, link-type EN10MB
07:44:36.582647 172.16.31.1 > 1.2.3.4: icmp: echo request (DF)
(...)

O computador 172.16.31.1 é o mesmo que 77.250.91.80; o dono das
tabelas acima. Ou seja, o pacote vem dele.

(*) Informação

Os manuais do openbsd são educacionais. Mas um mero manual não te
instrui muito facilmente. Existem livros sobre o assunto, de um ponto
de vista UNIX, o que pode ser interessante. Por exemplo, UNIX Network
Programming, por W. Richard Stevens.





More information about the ubuntu-br mailing list