
Gostaria de saber se tenho um VPS com 2 Interfaces de Rede (1.1.1.1 E 2.2.2.2) e 1.1.1.1 definida como primária...
eth0 = 1.1.1.1
eth0:1 = 2.2.2.2
Agora quero rotear todo o tráfego para domain.com (não conheço o domínio se estiver usando Cloudflare) para passar pelo IP 2.2.2.2 eth0:1
ex1:
se eu executar,
wget domain.com
ele passará por 2.2.2.2 eth0:1
, mas execute,wget google.com
ele passará por 1.1.1.1 eth0
ex2:
se eu for para "whatismyip.com" para passar pela eth0, ele mostrará que meu IP é "1.1.1.1",
mas se eu for para "whatismyipaddress.com", será pass-thru eth0:1, então mostrará que meu IP é "2.2.2.2"
Responder1
Existem algumas coisas a considerar:
O roteamento Linux não lida com nomes de domínio
Existem muitas opções de configuração para roteamento no Linux, mas nenhuma que aceite nomes de domínio simples. Afinal, estamos falando de roteamento IP. Portanto, devem ser definidas regras para endereços IP, que obviamente serão "quebradas" quando o(s) registro(s) DNS de um domínio mudarem.
Preferência de interface
Neste caso, existem 2 interfaces que fornecem uma rota para a mesma sub-rede (0.0.0.0/0, também conhecida como Internet). Para dizer ao Kernel para preferir uma interface específica, precisamos aplicar o Policy-Based Routing (PBR).
Como o nome indica, o roteamento baseado em políticas funciona definindo uma política (também conhecida como "regra") para determinar qual interface usar. Sem políticas, o kernel escolherá a primeira rota que corresponda à rede de destino.
Rotas, regras, tabelas
O kernel usa rotas para determinar como lidar com pacotes. Uma rota é uma definição simples que inclui o endereço de destino e o link (interface) a ser usado.
As rotas são agrupadas em tables
, cuja tabela utilizada depende das políticas definidas.
Uma policy
(ou regra) informa ao kernel qual tabela examinar para rotear pacotes. A definição da política inclui a origem, o destino e a tabela de roteamento de um pacote a serem examinados.
Exibir rotas e políticas atuais
Para exibir as rotas atualmente utilizadas pelo sistema, execute
ip route
Isso mostra todas as entradas na main
tabela de roteamento. Outras tabelas podem ser acessadas executando ip route show table <tablename>
.
Para exibir as políticas usadas atualmente, execute
ip rule
Isto lista todas as políticas/regras usadas pelo kernel. Eles são iterados de cima para baixo, até que uma regra corresponda ao pacote que está sendo tratado.
Exemplo
echo "101 out1" >> /etc/iproute2/rt_tables
ip rule add from all to 3.4.5.6 table out1
ip route add default via 10.0.0.1 dev eth0 src 1.1.1.1 table out1
ip route add 10.0.0.0/8 dev eth0 src 1.1.1.1 table out1
Esses comandos criarão uma nova tabela de roteamento out1
e a adicionarão 10.0.0.1
como gateway de acesso à internet. O tráfego enviado 3.4.5.6
(que precisa ser substituído por um endereço IP real e resolvido do domínio de destino) será enviado através do gateway padrão definido na out1
tabela, usando o dispositivo eth0
e o IP especificados 1.1.1.1
.
Eu recomendo a leitura de alguns tutoriais e guias existentes para se familiarizar com a terminologia. Procure por iproute2
e linux advanced routing and traffic control
.
E por último, mas não menos importante: teste suas alterações antes de aplicá-las em um sistema ativo. Erros acontecem, eu pessoalmente prefiro fritar uma VM em vez de um servidor remoto.