Tendo essa configuração em casa, acho que sei como fazer isso.
Seu roteador linux terá duas interfaces físicas. Vou chamá-los de eth0
(conectado à sua rede interna e com um endereço IP estático) e eth1
(conectado ao seu provedor e, presumivelmente, um endereço fornecido via DHCP).
Ativando o encaminhamento de pacotes
No arquivo /etc/sysctl.conf
, pode haver duas linhas que correspondam ao seguinte:
# Controls IP packet forwarding
net.ipv4.ip_forward = 0
Se não, você precisará adicionar pelo menos a última linha. Aqui está uma peça importante: altere 0 para 1 . Isso diz ao kernel, profundamente, para enviar pacotes de uma interface para outra, se as tabelas de roteamento no roteador linux dizem que é a próxima etapa. Em seguida, você precisará reinicializar ou executar o seguinte comando: echo 1 > /proc/sys/net/ipv4/ip_forward
.
Configurando o NAT
Neste momento, tudo o que sai da eth0 ou da eth1 está saindo com o mesmo endereço IP que aparece. Então, o Google receberá pings de 192.168.1.x (ou seja qual for o seu esquema de IP). O problema é que esses endereços IP não podem ser roteados pela Internet pública. Então você terá que dizer ao seu roteador Linux para modificar os pacotes de saída para que eles possam ser roteados de volta para você. Eu fiz isso com a seguinte regra:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Isso informa ao sistema que, depois de ter feito todo o roteamento (porque está na cadeia POSTROUTING iptables), e se a interface de saída for eth1 ("- o eth1"), aplique MASQUERADE de destino. Isso significa "alterar o endereço IP de origem para ser o endereço IP da interface.
Configurando o DHCP
Neste ponto, seu sistema está fazendo o básico. Você terá, no entanto, que configurar cada sistema conectado para ter um IP & aponte para servidores DNS externos. Isso pode ser alterado com um pacote chamado dhcp
. Instale-o e configure-o para inicializar na hora de início. No meu sistema baseado no Red Hat, isso pode ser feito com dois comandos: yum install dhcp
e chkconfig dhcpd on
. No entanto, ele não fará nada porque você não configurou o DHCP sobre qual é o seu esquema de IP e em quais interfaces ele deve escutar (embora eu possa estar errado). Abaixo está o que seu /etc/dhcpd.conf
poderia ter:
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
#
ddns-update-style interim;
#include "/var/named/chroot/etc/rndc.key";
subnet 192.168.1.0 netmask 255.255.255.0
{
authoritative;
range 192.168.1.10 192.168.1.100;
option routers 192.168.1.1;
option domain-name-servers 192.168.1.1;
}
max-lease-time 14400; #4 hours
default-lease-time 14400; #4 hours
Alguns pontos importantes aqui:
- Linha de sub-rede: este deve ser o endereço de rede para eth0. A máscara de rede também deve corresponder.
- Linha de intervalo: é onde você define os endereços de início e fim da sua rede interna. Eu strongmente recomendo que isso exclua o endereço do próprio roteador linux.
- Linha de roteadores de opção: é aqui que você informa aos clientes qual será o gateway padrão deles. No caso que você descreveu, este será o endereço IP da eth0 do roteador linux.
- Opção domain-name-servers line: é aqui que você informa aos clientes quais serão seus servidores DNS. Você pode usar
option domain-name-servers 208.67.222.222 208.67.220.220
se quiser usar o OpenDNS,option domain-name-servers 8.8.8.8 8.8.4.4
se quiser usar o DNS público do Google ouoption domain-name-servers 192.168.1.1
se quiser configurar o sistema para lidar com tudo isso.
Agora você pode começar fazendo (em um sistema baseado em Red Hat), service dhcpd start
como root. Se você não estiver usando o Red Hat ou um derivado, então você precisará executar o script de inicialização para esse sistema.
O tempo de concessão é definido em segundos. Pelo menos de acordo com a documentação que consegui encontrar, às vezes os clientes solicitarão uma duração específica de concessão, caso em que as instruções de tempo de locação máxima e de tempo mínimo de locação são verificadas e ajustadas para caber dentro desses limites. Outras vezes, os clientes não solicitam uma duração de concessão, em cujo caso o tempo de concessão padrão é usado.
Isso é seguro em termos de não servir outros clientes do seu ISP com o DHCP da rede interna porque o DHCPD não exibirá um endereço se não souber sobre o esquema de IP da interface em que ele entrou. Portanto, se uma solicitação dhcp vier em eth1, que possui um IP de 123.45.67.89, a configuração do DHCP não possui um bloco de sub-rede para esse IP. Por isso, não enviará nenhuma oferta DHCP para essa solicitação. Mas se ele entrar em eth0, que tem um IP de 192.168.1.1, ele tem um bloco de sub-rede que corresponde a esse endereço e oferece DHCP.
Configurando o DNS
Este pode ser o mais simples de todos. No meu sistema RHEL 5.1, foi instalar, iniciar e apontar clientes para ele. Fora da caixa, ele é configurado para apontar para os servidores de nomes raiz e servir clientes em qualquer interface que esteja ativa na inicialização do DNS.
Para instalar, tenha em mente que não é dnsd, é nomeado. Não é o passado de nomear. Em vez disso, leia como "nome-D".
yum install named #installation
service named start #start it for right now
chkconfig named on #set it to start at system boot.