Estou executando o WireGuard em um contêiner Podman. Tenho uma configuração Hub and Spoke como esta
Client A <--> Hub <--> Client B
|
|
Internet
Esta é minha configuração WireGuard no Hub atualmente
[Interface]
PrivateKey = ...
Address = 10.8.0.1/24, fdcc:ad94:bacf:61a4::cafe:1/112
ListenPort = 51820
MTU = 1420
PostUp = iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -s fdcc:ad94:bacf:61a4::cafe:0/112 -o eth0 -j MASQUERADE; ip6tables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -A FORWARD -o wg0 -j ACCEPT;
PostDown = iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE; iptables -D INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -s fdcc:ad94:bacf:61a4::cafe:0/112 -o eth0 -j MASQUERADE; ip6tables -D INPUT -p udp -m udp --dport 51820 -j ACCEPT; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -D FORWARD -o wg0 -j ACCEPT;
# Client A
[Peer]
PublicKey = hcU3LDJmlsInRSDFErt+Kp2CZBRzSggvmfOkSKcGx1A=
PresharedKey = ...
AllowedIPs = 10.8.0.2/32, fdcc:ad94:bacf:61a4::cafe:2/128
Mas como o Hub está executando o AlmaLinux 9.5 no OCI, tive que configurar o iptables para usar iptables-legacy.
Agora estou tentando migrar para nftables
Esta é a nova configuração
[Interface]
...
PostUp = nft add table inet wg_table; nft add chain inet wg_table postrouting { type nat hook postrouting priority 100 \; }; nft add rule inet wg_table postrouting ip saddr 10.8.0.0/24 oifname eth0 masquerade; nft add rule inet wg_table postrouting ip6 saddr fdcc:ad94:bacf:61a4::cafe:0/112 oifname eth0 masquerade; nft add chain inet wg_table input { type filter hook input priority 0 \; policy accept \; }; nft add rule inet wg_table input udp dport 51820 accept; nft add chain inet wg_table forward { type filter hook forward priority 0 \; policy accept \; }; nft add rule inet wg_table forward iifname "wg0" accept; nft add rule inet wg_table forward oifname "wg0" accept;
PostDown = nft delete table inet wg_table
...
Tentei ficar o mais próximo possível da regra original do iptables por enquanto.
Mas não funciona usando meu telefone, não consigo me conectar à internet com as novas regras. Mesmo usando iptables-nft, não funciona
Isso pode ocorrer porque o nftables também precisa de uma cadeia no gancho de pré-roteamento para executar o nat: ele não precisa de nenhuma regra interna, mas precisa dela para habilitar o caminho de volta.
Notas laterais:
As 2 regras devem ser irrelevantes, já que a política de hook padrão é aceitar. Eu removeria a "policy accept" da cadeia de hooks, já que as 2 regras permitirão de qualquer forma.
Eu recomendo fortemente usar um script de "formato de saída" do nftables, que evita repetir os comandos nft(..) e mostra a coisa muito mais estruturada visualmente. https://wiki.nftables.org/wiki-nftables/index.php/Scripting#File_formats
xxxxx meta nftrace set 1
então: No console:nft monitor trace
Tchau