Eu tenho um servidor Linux que é um endpoint OpenVPN, mas também hospeda um servidor web. Quando meu cliente se conecta ao endereço do servidor da web, os pacotes viajam para fora da VPN. Com razão, já que a rota para o servidor definida pelo OpenVPN é mais específica do que a rota padrão para entrar na VPN. No entanto, vejo isso como um "vazamento".
Por isso, tentei configurar uma configuração semelhante à do Wireguard (o Wireguard é ótimo, mas preciso do OpenVPN porque precisa ser TCP).
Baseei minha configuração na página Wireguard, bem como em outras questões: Evitar loop de roteamento com FwMark no Wireguard (Tiremos o chapéu para a palestra realizada lá!) Roteando fwmark para gateway VPN usando nftables mark
Apesar da configuração, o Wireshark mostra que as solicitações http/https ainda passam pela interface física e não pela interface vpn tun0. Quando olho para as marcas de pacotes com rastreamento do monitor NFT, parece que a metamarca está definida corretamente e apenas os pacotes apropriados (de/para a porta 1194) aparecem.
Então eu suspeitei que isso fosse:
- a regra pbr que não funciona conforme o esperado.
- a marcação do pacote que não acontece com antecedência suficiente.
Tentei alterar a cadeia para marcar os pacotes de saída como:
- digite saída do gancho de rota
- tipo saída de gancho de filtro
- --> sem mais sorte
Esses comandos retornam o seguinte:
- ip rule:
0: from all lookup local
32764: from all lookup main suppress_prefixlength 0
32765: not from all fwmark 0x4 lookup vpn
32766: from all lookup main
32767: from all lookup default
- ip route show table vpn:
default dev tun0 scope link
- ip route:
default via 10.8.0.1 dev tun0 proto static metric 50
default via 192.168.1.1 dev wlp4s0 proto dhcp src 192.168.1.10 metric 600
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.2 metric 50
END.POINT.IP.ADDRESS via 192.168.1.1 dev wlp4s0 proto static metric 50
192.168.1.0/24 dev wlp4s0 proto kernel scope link src 192.168.1.10 metric 600
-nft list ruleset:
table inet vpn {
chain premangle {
type filter hook prerouting priority mangle; policy accept;
ip saddr END.POINT.IP.ADDRESS tcp sport 1194 meta nftrace set 1
meta mark set ct mark
}
chain postmangle {
type filter hook postrouting priority mangle; policy accept;
ip daddr END.POINT.IP.ADDRESS tcp dport 1194 meta nftrace set 1
ip daddr END.POINT.IP.ADDRESS tcp dport 1194 meta mark set 0x00000004
meta mark 0x00000004 ct mark set meta mark
}
}
- traceroute -n --fwmark=0x4 END.POINT.IP.ADDRESS
shows it goes via the physical interface out of the vpn (as expected)
- traceroute -n END.POINT.IP.ADDRESS
shows it goes via the physical interface out of the vpn (UNWANTED)
Muito obrigado antecipadamente !