Tenho o seguinte código rodando no meu servidor para me permitir fazer SSH no meu servidor mesmo quando o servidor está conectado a uma VPN. O código abaixo roda como um serviço após a inicialização.
ip addr add 192.168.1.113 dev enp1s0 label enp1s0:0
ip rule add from 192.168.1.113 table 402
ip route add default via 192.168.1.1 dev enp1s0:0 table 402
Isso funciona com o OpenVPN, mas não com o WireGuard porque meu cliente WireGuard adiciona algumas regras antes da minha regra acima.
0: from all lookup local
32761: from all lookup main suppress_prefixlength 0
32762: not from all fwmark 0xca6c lookup 51820
32763: from 192.168.1.113 lookup 402
32766: from all lookup main
32767: from all lookup default
Se eu adicionar a regra from 192.168.1.113 lookup 402
depois da conexão wireguard, então posso usar SSH no servidor. Então, estou assumindo que é uma questão de prioridade.
Como posso garantir que minha regra ( 32763
) mantenha a prioridade mesmo depois que o Wireguard se conectar e adicionar essas duas regras ( 32761
, )?32762
SOLUÇÃO COM FALHA:
Aprendi que os números à esquerda são prioridades. Então, tentei definir a prioridade da minha regra mais baixa.
ip rule add from 192.168.1.113 table 402 prio 300
.. mas depois que me conectei à VPN Wireguard, o cliente Wireguard simplesmente colocou suas regras abaixo das minhas em prioridade 299
, e 298
.
298: from all lookup main suppress_prefixlength 0
299: not from all fwmark 0xca6c lookup 51820
300: from 192.168.1.113 lookup 402
Existe alguma maneira de evitar isso? Acho que eu poderia colocar um PostUp
comando no arquivo de configuração do wireguard que altera a prioridade, mas sinto que tem que haver uma solução mais limpa.
A manipulação das suas regras de roteamento é realizada pelo
wg-quick
script; você pode ver a seção relevante aqui . Como ele adiciona as regras sem definir uma prioridade explícita, elas sempre serão adicionadas "abaixo" de quaisquer regras existentes na tabela.Você precisa garantir que sua regra personalizada seja adicionada somente após
wg-quick
ter configurado a interface e as tabelas de roteamento. Você pode fazer isso movendo sua configuração personalizada para um post-up hook . Adicione umaPostUp
diretiva ao seu arquivo de configuração de interface:(O
%i
será substituído pelo nome da interface.)Isso fará
wg-quick
com que o comando fornecido seja executado após abrir a interface. No seuPostUp
script (aqui é/etc/wireguard/scripts/example-postup.sh
, mas pode ser em qualquer lugar), adicione sua regra personalizada. Por exemplo:Provavelmente você desejará adicionar outro script (talvez um
PreUp
ou talvez umPostDown
) para remover essa regra personalizada; caso contrário, na próxima vez que você abrir a interface, você terá o mesmo problema (porque a regra já existirá quandowg-quick
adicionar suas regras personalizadas).