No ambiente que estou configurando o servidor tem 3 interfaces, duas interfaces do link e uma dos clientes.
Agora precisamos definir o IP de cada uma delas.
No meu caso, a interface do meu link principal é a 're1', vou configurar ela manualmente e depois configurar no 'rc.conf', para que na hora do boot do servidor já fique configurada.
IP da interface:
# ifconfig re1 187.64.174.186/30
Gateway:
# route add default 187.64.174.85
Obs.: Devemos configurar o DNS:
# ee /etc/resolv.conf
nameserver 8.8.8.8
Feito isto, o servidor já deve está disponível para internet. Agora devemos configurar o segundo link em uma outra interface, que no meu caso é a 'bge0'.
# ifconfig bge0 186.68.173.182/30
Nesse momento não precisamos colocar o rota default porque já colocamos no passo anterior, e no momento não precisamos dessa rota default.
Por fim vamos configurar a interface do Gateway de seus clientes, no meu caso a 're2':
# ifconfig re2 192.168.1.1/24
Agora todas as interfaces estão com IP, vou colocar todas essas configurações no 'rc.conf', não coloquei antes para fins didático. Não é preciso fazer as configurações das interfaces que eu fiz acima, basta apenas seguir o exemplo do 'rc.conf' e reiniciar o servidor que o mesmo já vai iniciar com todas as configurações das interfaces.
Meu 'rc.conf' ficou da seguinte forma:
# ee /etc/rc.conf
# CONFIGURACAO DAS INTERFACES
# Link 1
ifconfig_re1="inet 187.64.174.186/30"
#Link 2
ifconfig_bge0="inet 186.68.173.182/30"
#Clientes
ifconfig_re1="inet 192.168.1.1/24"
#GATEWAY DEFAULT
defaultrouter="187.64.174.85"
Pronto, agora estão todas as interfaces configuradas.
Vamos agora configurar o PF, para fazer o NAT dos clientes e assim eles poderem saírem para a internet.
Para o PF funcionar é necessário adicionar no 'rc.conf': pf_enable="YES", e também o: gateway_enable="YES".
Pode ser logo abaixo da configuração do Gateway:
# ee /etc/rc.conf
pf_enable="YES"
gateway_enable="YES"
Feito isto, vamos fazer backup do arquivo de configuração do 'pf.conf' e criar um novo.
# mv /etc/pf.conf /etc/pf.conf.old
Vamos criar um novo arquivo com as seguintes configurações:
# ee /etc/pf.conf
nat on re1 from 192.168.1.0/24 to any -> 187.64.174.186
nat on bge0 from 192.168.1.0/24 to any -> 186.68.173.182
Agora é só salvar, para carregar o arquivo de configurações devemos digitar:
# pfctl -f /etc/pf.conf
# pfctl -e /etc/pf.conf
A primeira regra no arquivo de configuração faz que os clientes da faixa: 192.168.1.0/24, saiam "nateado" pelo IP: 187.64.174.186 (que é meu IP do link principal).
A outra regra só vai funcionar caso o primeiro link fique indisponível, e assim o segundo link vai assumir e todos os clientes vão sair pelo IP: 186.68.173.182.
Neste momento, todos seus clientes estarão navegando.
Agora vem o 'Ifstated', a parte mais importante desse artigo.
Vamos fazer um backup do arquivo de configuração padrão o 'ifstated.conf':
# mv /usr/local/etc/ifstated.conf /usr/local/etc/ifstated.conf.old
Vamos criar um novo 'ifstated.conf' com as novas configurações:
# ee /usr/local/etc/ifstated.conf
init-state master
if_up="re1.link.up"
net = '( "ping -q -c 1 -t 1 187.64.174.85 > /dev/null" every 5 )'
state master {
if ( $net) {
run "route delete default && route add default 187.64.174.85"
}
if ( ! $net) {
run "route delete default && route add default 186.68.173.181"
}
}
Veja que o arquivo de configuração não tem segredo nenhum.
Ele faz uma checagem de ping no seu Gateway principal 187.64.174.85 a cada 5 segundos. Caso nesse tempo o Gateway fique indisponível, ele vai alterar a rota para o 186.68.173.181.
Depois de 5 segundos ele faz um checagem novamente o Gateway principal e caso ele volte a ficar disponível, automaticamente vai alterar a rota para o Gateway principal.
Você pode escolher para fazer a checagem de ping no Gateway do seu roteador e também diminuir ou aumentar o tempo de checagem, isto depende de você.
Feito tudo isso, preciso colocar Daemon para fazer a checagem, digitando:
# ifstated -f /usr/local/etc/ifstated.conf
Pronto, agora o Daemon está rodando e checando seu link a cada 5 segundos, e assim temos um alta disponibilidade.