Aqui está o meu diagrama de rede:
56.56.56.56 192.168.0.1/24
MAC:AA:BB:CC:DD:EE:01
___________
---| Modem 1 |-------
| ___________ | ___________
Internet ---| | Switch |--------| Machine |
| ___________ | ___________
---| Modem 2 |------- 192.168.0.3/24
___________
67.67.67.67 192.168.0.2/24
MAC:AA:BB:CC:DD:EE:02
- Ambos os modems encaminham as mesmas portas da internet para a máquina.
- A máquina por trás dos modems deve responder adequadamente a qualquer solicitação vinda da Internet. por exemplo, os pacotes do Modem 1 retornam pelo Modem 1, os pacotes do Modem 2 retornam pelo Modem 2.
- A máquina tem apenas uma porta de rede e o switch não é gerenciado.
- A máquina usa
Netplan
, iptables e iproute2 para configuração de rede.
Acabei obtendo minha solução do artigo e comentários em Policy Routing no Linux com base no endereço MAC do remetente e na referência Netplan.io em Policy-Routing .
O truque é marcar e CONNTRACK os pacotes de entrada pelo endereço MAC de origem para uma tabela de roteamento separada via
iptables -t mangle
, e então dizer ao Netplan para usar a tabela para rotear os pacotes de saída apropriadamente.Primeiro, precisamos de tabelas para que nossos pacotes sejam agrupados:
Anexe o seguinte ao arquivo
/etc/iproute2/rt_tables
:Em seguida, informe ao Netplan sobre as tabelas, rotas e marcas:
Esta primeira parte informa
netplan
que os pacotes nessas diferentes tabelas precisam de rotas padrão diferentes. A segunda parte diz que alguns pacotes terão umfwmark
from iptables, e esses pacotes devem ser agrupados nessas tabelas.Em seguida, diga
iptables
para marcar os pacotes pelo endereço MAC de origem, mas apenas quando não for da rede local (um pequeno script):Em seguida, diga ao netplan para gerar e aplicar:
e voilá!
RESPOSTA DE BÔNUS
Se você tiver mais de uma rede interna (por exemplo, uma VPN via IP não local), use
ipset
eiptables
-m set ! -match-set alias
, por exemploentão no script iptables ....
Verificação
Verifique as regras de fwmark para rotear tabelas:
Verifique o roteamento mangle do iptables:
Verifique as rotas da tabela de saída: