A situação é
comum: você tem uma conexão banda larga em casa ou
escritório e gostaria de que mais de um computador pudesse
accessar a Internet.
Entretanto, o seu provedor (Cable ou
ADSL) limita o acesso a apenas 1 MAC address registrado.
As soluções mais comuns
são:
-
Comprar um roteador simples;
-
Usar o Windows e ?compartilhar?
a conexão de rede (ecle! :P); -
Colocar uma segunda placa de rede
em um computador e configurá-lo como um roteador.
A compra de um equipamento de
roteamento tem as vantagens de sua instalação ser
simples e você não precisar deixar um computador ligado
o tempo inteiro. As desvantagens são o custo e a falta de
flexibilidade para configurar outras coisas, como traffic
shapping.
Usar o compartilhamento do Windows não
é uma boa idéia. Imagine o overhead
que deve haver na rede! Essa análise valeria um outro
artigo…
Este documento
trata da implementação da última alternativa. A
figura mostra a sua situação inicial.
Internet
|
|
------------
| Cable/ DSL |
| Modem |
------------
|
| Ethernet Card eth0 - IP Público
-----/------
| Computer |
| A |
------------
Ethernet Card eth0 - Não Configurada
-----/------
| Computer |
| B | O Sem Internet :,(
------------ `-|-
/
O computador A conecta-se ao provedor e
recebe, através de DHCP, um IP público. O provedor
cadastrou o MAC address dessa placa de rede e só aceita
solicitações de IP desta placa, portanto não
funciona você simplesmente ligar um hub ou switch
no Modem. Os outros computadores nunca receberiam um IP do provedor.
O que vamos fazer primeiramente é
instalar uma segunda placa de rede no computador A e configurar uma
rede interna entre esses dois computadores.
Internet
|
|
------------
| Cable/DSL |
| Modem |
------------
|
| Ethernet Card eth0 - IP Público
-----/------
| Computer |
| A |
-----/------
| Ethernet Card eth1 - IP 192.168.0.1
|
| Rede Interna 192.168.0.0/24
|
| Ethernet Card eth0 - IP 192.168.0.2
-----/------ Default Gateway 192.168.0.1
| Computer |
| B |
------------
As redes 192.168.0.0/16, 172.16.0.0/12
e 10.0.0.0/8 são faixas de IP reservados para rede privativas.
Para maiores detalhes consulte o RFC1918.
A ligação entre os dois
computadores pode ser através de um cabo cross,
ou com a utilização de um hub
ou switch.
Para configurar os endereços IP
nas interfaces você pode utilizar o comando ifconfig, ou
algum utilitário de configuração como
o linuxconf.
Na estação A:
[root@malkovich
root]# ifconfig eth1 192.168.0.1 netmask 255.255.255.0 broadcast
192.168.0.255
Na estação B:
[root@localhost
root]# ifconfig eth0 192.168.0.2 netmask 255.255.255.0 broadcast
192.168.0.255
O default gateway do
computador B deve ser o computador A. Para isso use o comando route
ou ainda o linuxconf.
[hlbog@malkovich
hlbog]# route add default gw 192.168.0.1
Verifique, no computador A, o arquivo
/etc/resolv.conf. Este arquivo contém o servidor DNS
fornecido pelo provedor. Configure no computador B este arquivo com
as mesmas linhas.
[hlbog@malkovich
hlbog]# cat /etc/resolv.conf
nameserver
200.xxx.xxx.xxx
nameserver
200.xxx.xxx.xxx
search
dominio.com.br local
Teste a conexão entre as duas
estações. Do computador A faça um ping
para o outro.
[hlbog@malkovich
hlbog]# ping 192.168.0.2
PING
192.168.0.2 (192.168.0.2) 56(84) bytes of data.
64
bytes from 192.168.0.2: icmp_seq=1 ttl=127 time=2.03 ms
64
bytes from 192.168.0.2: icmp_seq=2 ttl=127 time=2.07 ms
64
bytes from 192.168.0.2: icmp_seq=3 ttl=127 time=2.06 ms
--
192.168.0.2 ping statistics —
3
packets transmitted, 3 received, 0% packet loss, time 2017ms
rtt
min/avg/max/mdev = 2.035/2.056/2.073/0.040 ms
E do computador B
para o IP 192.168.0.1
[hlbog@localhost
hlbog]# ping 192.168.0.1
PING
192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64
bytes from 192.168.0.1: icmp_seq=1 ttl=127 time=2.04 ms
64
bytes from 192.168.0.1: icmp_seq=2 ttl=127 time=2.00 ms
—
192.168.0.1 ping statistics —
2
packets transmitted, 2 received, 0% packet loss, time 1006ms
rtt
min/avg/max/mdev = 2.005/2.026/2.048/0.049 ms
Caso você não
obtenha resposta, verifique se você não está
filtrando o computador B na configuração do iptables
do computador A.
Execute o comando
abaixo como root, em A, para aceitar pacotes ICMP (ping)
vindos de B (192.168.0.2).
[root@malkovich
root]# iptables -A INPUT -p icmp -s 192.168.0.2 -j ACCEPT
E teste o ping
novamente.
A configuração das interfaces de rede pode ser feita de forma permanente alterando-se os arquivos adequados a sua distribuição. No Slackware (BSD-like convention) altere o arquivo /etc/rc.d/rc.inet1.conf, no Mandrake e semelhantes (System V convention), os arquivos para cada interface estão em /etc/sysconfig/network-scripts/ e seus nomes iniciam com o prefixo ifcfg- seguido do nome da interface, por exemplo, ifcfg-eth0. Segue abaixo uma listagem do arquivo /etc/sysconfig/network-scripts/ifcfg-eth0, para o computador B.
Caso você tenha usado o linuxconf para configurar as interfaces, esse procedimento não é necessário, pois as alterações permanecerão após o boot.
DEVICE="eth0"
BOOTPROTO="static"
IPADDR="192.168.0.2"
NETMASK="255.255.255.0"
GATEWAY="192.168.0.1"
ONBOOT="yes"
Estando a rede
interna funcional, vamos partir para a configuração do
computador A como um roteador. O primeiro ponto é habilitar
esta funcionalidade no Linux. Isto pode ser feito alterando-se
manualmente o conteúdo do arquivo
/proc/sys/net/ipv4/ip_forward.
[root@malkovich
root]# echo 1 > /proc/sys/net/ipv4/ip_forward
O seu conteúdo default
é 0 (zero).
Entretanto,
desta forma, esta configuração não fica
permanente. No próximo boot da máquina ela será
perdida.
Para
torná-la permanente, configure o arquivo /etc/sysctl.conf,
alterando o seguinte trecho (para Slackware veja instruções seguintes):
#
Substitua 0 por 1 e # No Slackware basta você tornar executável o script /etc/rc.d/rc.ip_forward:
Controls IP packet forwarding
net.ipv4.ip_forward
= 0
salve o arquivo.
Controls IP packet forwarding
net.ipv4.ip_forward
= 1
[root@malkovich
root]# chmod 755 /etc/rc.d/rc.ip_forward
O próximo
passo é configurar a chain FORWARD do netfilter no computador A, para que aceite rotear pacotes de/para o computador
B.
[root@malkovich
root]# iptables -A FORWARD -s 192.168.0.2 -j ACCEPT
[root@malkovich
root]# iptables -A FORWARD -d 192.168.0.2 -j ACCEPT
[root@malkovich
root]# iptables -P FORWARD DROP
O último
comando coloca a política default proibindo forward
de qualquer outra fonte que não case com alguma das regras
criadas.
Finalmente, devemos
fazer o MASQUERADE. Isso vai criar um mapeamento em que todas as
conexões vindas de B com destino a Internet (forwarding)
sairão com o endereço IP configurado na interface eth0
do computador A. É uma forma
de NAT, só que mais indicada quando se está trabalhando
com IP dinâmico na interface de saída.
[root@malkovich
root]# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
A interface eth0, neste exemplo, é a interface de saída do computador (roteador) ligado ao provedor. No seu caso o nome dessa interface pode ser outro. O ADSL, por exemplo, cria uma interface ppp0 para conexão com a Internet.
Teste
a conectividade da estação B com a Internet.
[hlbog@localhost
hlbog]# ping www.linuxit.com.br
Caso
esteja tendo problemas verifique novamente as configurações
apresentadas e preste
especial
atenção se a configuração do iptables
das estações não está proibindo a
comunicação entre elas.
Você pode gerar um log da regra de FORWARD, na estação A, para acompanhar o que está acontecendo.
[root@malkovich
root]# iptables -I FORWARD 1 -j LOG –log-level 5 –log-prefix ‘FW > ‘
[root@malkovich
root]# tail -f /var/log/messages
Se o roteamento está sendo feito mas não há resposta do site, verifique também a resolução de nomes em B.
[root@localhost
root]# host www.linuxit.com.br
Host www.linuxit.com.br not found: 2(SERVFAIL)
Caso receba o erro acima, corrija o arquivo /etc/resolv.conf.
Tudo funcionando? Salve
a configuração do iptables. Você pode usar
o comando:
[root@malkovich
root]# iptables-save > /etc/sysconfig/iptables
Normalmente,
o iptables restaura as configurações após
um boot através deste arquivo.
Pronto,
seu computador está atuando como um router para a
rede interna. Esta rede pode ser expandida facilmente colocando-se um
hub, e configurando
as
outras estações apropriadamente, de acordo com as
instruções aqui apresentadas.
Não
esqueça também de configurar cuidadosamente filtros de
pacotes no roteador e nas outras estações, através
do iptables, para implementar alguma segurança na sua
rede.
Qualquer
sugestão, melhoria ou correção pode ser enviada
ao meu email.
A versão em PDF deste artigo pode ser encontrada na seção de downloads do SouNerd.com.
Abraços,
–
hlbog