Informações básicas
- Estou usando um sistema Linux para rotear o tráfego para um pequeno bloco de endereços IPv4 públicos (habilitando o encaminhamento de IP em
sysctrl.conf
). - O roteador está se conectando ao ISP
eth1
usando PPPoE. - O endereço de peer local usado para ppp é um endereço IP configurado manualmente que foi especificado pelo ISP. O endereço do peer local é
10.0.0.10
. - O endereço de peer remoto usado para ppp também é um endereço IP configurado manualmente que foi especificado pelo ISP. O endereço do peer local é
10.0.0.9
. A rota padrão do roteador é
10.0.0.9
via10.0.0.10
.O roteador está conectado a um switch Ethernet via
eth0
.eth0
está configurado para usar um dos endereços públicos.- O switch conecta todos os outros hosts públicos. Cada host conectado usa um endereço IP público.
10.0.0.9
ISP ----------+
| 10.0.0.10 X.X.X.X
+------------- (eth1) ROUTER (eth0) --------------- SWTICH
|
+-- X.X.X.Y
+-- X.X.X.Z
...
Meu problema
Tudo funciona como esperado, exceto os programas em execução no roteador. Qualquer aplicativo que eu execute no roteador usa 10.0.0.10
como endereço IP de origem ao iniciar conexões com a internet. Isso é compreensível, pois eth1
é onde a internet está disponível. No entanto, como o endereço não é roteável publicamente, apt
, ping
e outros programas não funcionam. Se eu definir explicitamente o endereço de origem nos aplicativos que o suportam (ou seja ping
, ), os aplicativos funcionam.
Minha pergunta
Como posso configurar o roteador para rotear pacotes desconhecidos via eth1
/ 10.0.0.9
enquanto também uso o endereço IP público eth0
como fonte padrão ao iniciar novas conexões?
Nota: Vou considerar que a LAN do seu roteador é 192.0.2.0/24 e seu IP da LAN na eth0 é 192.0.2.1/24, para poder dar explicações concretas e uma solução.
Seu ISP, para poupar alguns endereços IP públicos, atribuiu a você IPs privados para fins de roteamento interno. Tudo bem porque esse IP nunca deve ser visto do lado de fora (e seria rapidamente descartado pelo Strict Reverse Path Forwarding ao longo do caminho se alguma vez colocado no fio além do roteador ISP, ou se não, como não roteável, nunca obterá um responder). Mas isso torna sua configuração mais complexa para evitar que esse IP seja usado em todos os casos, exceto na conectividade com o ISP, do seu roteador.
Você provavelmente tem algo semelhante a isso (pode ser um pouco diferente, não importa):
É possível, por exemplo, que você tenha
default via 10.0.0.9 dev ppp0 src 10.0.0.10
, ou quevia 10.0.0.9
nem apareça, já que é um link de camada 3 em vez de um link de camada 2, tornandovia
desnecessário (mas ainda aceito). Basta adaptar as configurações abaixo de acordo.Atualmente, o kernel escolhe o IP aparentemente mais adequado, aquele configurado no mesmo lado para acessar a Internet, já que nada lhe diz o contrário (ou diz explicitamente para usar o IP que você não deseja):
Você só precisa substituir o comportamento de roteamento quando o kernel verificar como acessar a Internet e indicar um endereço IP de origem preferencial específico. Esteja ciente de que você pode perder a conectividade em caso de erros e problemas imprevistos. Tenha acesso alternativo (console), se possível:
É isso, seu roteador irá rotear como de costume, mas quando precisar escolher um IP de saída originado localmente, selecionará 192.0.2.1 a menos que explicitamente informado de outra forma (ex: processo vinculando explicitamente o IP de origem em seu soquete).
Esta rota deve ser definida novamente cada vez que o link é desconectado e depois ativado. Cabe a você integrar isso em algum script pppoe, após o link estar totalmente estabelecido.
Observe também que o nome da interface ppp0 pode mudar para ppp1 ou qualquer outro nome. Cabe a você lidar com isso em seus scripts de configuração.
Métodos alternativos para definir esta mesma configuração de rota:
Se a métrica original foi definida (ou seja, não era 0, digamos que era 100), você pode adicionar uma rota padrão alternativa com uma métrica menor em vez de substituir a anterior:
Se você tem medo da interação de várias ferramentas envolvidas no pppoe que podem remover a rota acima, você pode instalar essa configuração em uma tabela de roteamento alternativa e dar a ela precedência nas regras de roteamento, com uma cópia parcial da tabela principal para evitar interrupções. Isso ainda terá que ser refeito após cada desconexão/reconexão, pois a rota ainda desaparecerá. Aqui
iif lo
é especial e realmente significa "pacote de saída originado localmente" em vez de entrada, e 109 é um valor de tabela escolhido arbitrário:Se você adicionou outras entradas de roteamento na tabela principal, é provável que também tenha que copiá-las acima.
Assim como você disse. Os outros clientes no switch com seu roteador como gateway possuem endereços IP públicos. Seu roteador não. Ele tem um endereço de LAN que não será roteado. Como seu provedor de serviços de Internet NÃO forneceu um endereço público, o roteador NÃO poderá sair.
Se você tiver outro ip público, crie uma configuração de eth virtual na eth1 e roteie-a corretamente. Então seu roteador pode sair também.