No meu caso as três conexões tinham IP fixo. Mesmo assim os scripts foram preparados para funcionar também com conexões com IP dinâmico.
Por isso parte da configuração é feita automaticamente quando a conexão é estabelecida.
3) Personalizar script de conexão
Assim que que uma conexão PPP é estabelecida, os scripts da pasta /etc/ppp/ip-up.d são executados em ordem alfabética. Se você está com uma instalação limpa, não terá problemas com a ordem desse script.
Crie um arquivo nessa pasta, com o nome que desejar:
#!/bin/sh -e
# This script is called with the following arguments:
# Arg Name Example
# $1 Interface name ppp0
# $2 The tty ttyS1
# $3 The link speed 38400
# $4 Local IP number 12.34.56.78
# $5 Peer IP number 12.34.56.99
# $6 Optional ``ipparam'' value foo
# Cada conexão será a roda padrão em apenas uma das tabelas que criamos em /etc/iproute2/rt_tables
# Identificar qual tabela usar
case "$PPP_IFACE" in
ppp1)
TABELA="GVT1"
REDE="1"
;;
ppp2)
TABELA="GVT2"
REDE="2"
;;
ppp3)
TABELA="OI1"
REDE="3"
;;
esac
# Acrescentar a rota para o gateway do provedor na tabela correta
ip route add $PPP_REMOTE dev $PPP_IFACE src $PPP_LOCAL table $TABELA
# Acrescentar a rota padrão na tabela correta
ip route add default via $PPP_REMOTE dev $PPP_IFACE table $TABELA
# Mascarar conexões de saída
# Todas os pacotes saindo por essa conexão terão seu IP de origem modificado, para usar o IP dessa conexão
iptables -t nat -A POSTROUTING -o $PPP_IFACE -s ! $PPP_LOCAL -j SNAT --to-source $PPP_LOCAL
# Desativar filtro de entrada
echo 0 > /proc/sys/net/ipv4/conf/$PPP_IFACE/rp_filter
# Conexões de entrada devem sair pela mesma rota de entrada
# Isso é necessário para evitar que, por exemplo, você tente acessar seu firewall por SSH
# pela conexão da GVT, e receba a resposta pela conexão da OI
iptables -t mangle -A OUTPUT -s $PPP_LOCAL -j MARK --set-mark $REDE
# Atualizar tabela de rotas
ip route flush cache
Esse script define a rota padrão para cada uma das conexões ADSL. Veja que a tabela é escolhida de acordo com o número da conexão ppp (ppp1, ppp2 ou ppp3). Por isso é importante que cada provedor/conexão tenha sempre
o mesmo número.
4) Personalizar script de desconexão
Assim que que uma conexão PPP é encerrada, os scripts da pasta /etc/ppp/ip-down.d são executados.
Crie um arquivo nessa pasta, com o nome que desejar:
#!/bin/sh -e
# This script is called with the following arguments:
# Arg Name Example
# $1 Interface name ppp0
# $2 The tty ttyS1
# $3 The link speed 38400
# $4 Local IP number 12.34.56.78
# $5 Peer IP number 12.34.56.99
# $6 Optional ``ipparam'' value foo
# Removendo a regra que mascarava o IP das conexões
iptables -t nat -D POSTROUTING -o $PPP_IFACE -s ! $PPP_LOCAL -j SNAT --to-source $PPP_LOCAL
# Removendo marcação de conexões de entrada
iptables -t mangle -D OUTPUT -s $PPP_LOCAL -j MARK --set-mark $REDE
Não é necessário remover a rota padrão das tabelas. Quando a conexão é encerrada, a rota é eliminada automaticamente.
IMPORTANTE: Lembre-se de dar permissão de execução para todos os scripts que você criar:
# chmod u+x /caminho/para/o/script