Estou tentando configurar o openvpn em um dos meus contêineres lxd para permitir o acesso à rede do contêiner. O servidor parece funcionar e eu consigo acessar (ping) contêineres que têm uma rota estática apontando para o servidor openvpn para minha rede externa / de origem.
Eu gostaria de não ter que alterar a tabela de roteamento de cada contêiner e pensei em ocultar os clientes vpn por trás do servidor vpn usando NAT.
iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -d 10.144.79.0/24 -j SNAT --to-source 10.144.79.127
ou
iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -d 10.144.79.0/24 -j MASQUERADE
Produz uma regra que, acredito, deve conseguir isso. Mas ping
pacotes do cliente vpn ainda parecem vir do 10.8.0.0/24-adress atribuído, em vez de serem mascarados para 10.144.79.127.
A primeira regra produz:
root@openvpn:~# iptables -L -n -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 10.8.0.0/24 10.144.79.0/24 to:10.144.79.127
Mas o tcpdump
no alvo de ping em 10.144.79.0/24 ainda se parece com:
13:56:10.930826 IP 10.8.0.6 > 10.144.79.212: ICMP echo request, id 33133, seq 10093, length 64
13:56:10.930855 IP 10.144.79.212 > 10.8.0.6: ICMP echo reply, id 33133, seq 10093, length 64
O que obviamente só funciona se .212
souber encaminhar 10.8.0.0/24
sobre 10.144.79.127
.
O encaminhamento está ativo:
root@openvpn:~# cat /proc/sys/net/ipv4/ip_forward
1
root@openvpn:~# sysctl -p
net.ipv4.ip_forward = 1
Eu configurei três virtualbox vm's para verificar se eu posso fazer o NAT funcionar quando o LXD não faz parte da equação, e isso funciona como esperado.
Por que o contêiner ignora a regra POSTROUTING?