A visão geral de alto nível é esta: eu tenho um servidor Impish Ubuntu com duas interfaces, endereços de 172.16.2.103/24
e 10.1.2.10/24
. Gostaria que o tráfego padrão passasse pelo gateway 172.16.2.254
. No entanto, quando eu especifico um endereço de origem, 10.1.2.10
quero que ele tenha um gateway de 10.1.2.254
. O que se segue funciona 99% das vezes, mas desejo que o kernel selecione o IP de origem 172.16.2.103
mesmo ao entrar em contato com o 10.1.2.0/24
. Isso foi possível, /etc/networks/interfaces
mas não consegui descobrir usando o netplan.
Isto é o que tenho na minha configuração do netplan:
network:
ethernets:
ens160:
addresses:
- 172.16.2.103/24
routes:
- to: 0.0.0.0/0
via: 172.16.2.254
nameservers:
addresses:
- 10.1.2.1
search:
- localdomain
optional: yes
ens192:
addresses:
- 10.1.2.10/24
routing-policy:
- from: 10.1.2.10
table: 10
routes:
- to: 0.0.0.0/0
via: 10.1.2.254
table: 10
optional: yes
version: 2
Como eu disse, isso funciona bem principalmente. Eu tenho uma política de roteamento (também conhecida como regra IP), o que significa que se eu alterar o endereço de origem dos pacotes, procuro a tabela de roteamento 10. No entanto, há uma rota adicional que desejo remover do main.
Isto é o que tenho quando verifico as tabelas de roteamento:
IN1: me@host:~$ ip route
OUT1: default via 172.16.2.254 dev ens160 proto static
OUT2: 172.16.2.0/24 dev ens160 proto kernel scope link src 172.16.2.103
OUT3: 10.1.2.0/24 dev ens192 proto kernel scope link src 10.1.2.10
IN2: me@host:~$ ip route list table 10
OUT5: default via 10.1.2.254 dev ens192 proto static
Gostaria que o OUT3 fosse removido ou, com mais precisão, movido para a tabela de roteamento 10, para que não houvesse link da camada 2 para 10.1.2.0/24 na tabela de roteamento principal. Eu posso fazer isso manualmente assim:
me@host:~$ sudo ip route del 10.1.2.0/24 dev ens192
Mas não consigo ver como incorporar isso no netplan. Anteriormente, eu teria adicionado uma declaração up, /etc/network/interfaces
mas isso não é mais uma opção.
Desde já, obrigado.
Responder1
Eu não chamaria isso de solução, mas sim de solução alternativa. Meu problema era que eu queria remover uma rota indesejada: a solução alternativa é criaroutrorota com maior precedência!
network:
ethernets:
ens160:
addresses:
- 172.16.2.103/24
routes:
- to: 0.0.0.0/0
via: 172.16.2.254
# ** ADDITIONAL ROUTE **
- to: 0.0.0.0/0
via: 172.16.2.254
table: 172
# **********************
nameservers:
addresses:
- 10.1.2.1
search:
- localdomain
optional: yes
ens192:
addresses:
- 10.1.2.10/24
routing-policy:
- from: 10.1.2.10
table: 10
# ** ADDITIONAL ROUTING POLICY **
- to: 172.16.2.0/24
table: 172
# *******************************
routes:
- to: 0.0.0.0/0
via: 10.1.2.254
table: 10
optional: yes
version: 2
Observe a política de roteamento adicional e a rota para a interface ens160. Isso criará outra tabela de roteamento chamada 172, e esta terá uma rota padrão igual à rota padrão da tabela principal (172.16.2.254). Agora, quando eu roteiopara172.16.2.0/24, em vez de passar pela tabela principal com a rota errada, ele passará pela tabela de roteamento 172.
Ainda gostaria de saber se existe uma maneira de excluir a rota da tabela principal, mas agora tenho um sistema funcionando, então em 2 semanas marcarei esta como a solução aceita.