Bem, como sempre, quando recebi uma pergunta complicada, sou capaz de respondê-la depois de um dia inteiro de trabalho.
Para o servidor / gateway
Digamos que o padrão do meu servidor (interface e IP público) seja d.d.d.d para o resto do meu exemplo.
1) Obtenha um IP de failover (IP adicional), para este exemplo digamos que é f.f.f.f
2) Uma vez recebido, adicione este ip a /etc/network/interfaces
auto eth0:0
iface eth0:0 inet static
address f.f.f.f
netmask 255.255.255.255
broadcast f.f.f.f
Em seguida, aplique as alterações com: /etc/init.d/networking restart
3) Configure um servidor openvpn. Há muitos tutoriais por aí ... A maioria são tutoriais horríveis em sua maior parte. O único conselho que posso dar é começar a partir das configurações padrão que você pode encontrar na ajuda dirs depois de instalar o openvpn.
Então, partes importantes da configuração necessária para conseguir um servidor adequado para nosso propósito.
De minha parte, o arquivo de configuração é /etc/openvpn/servervpn.conf
# IP and protocols
local d.d.d.d # Listen to your default server IP
port 1194 # Default port, perfectly fine to me
proto udp # Heard there were issues with tcp
dev tap # Can use tun as well
# Certificates and encryption
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
tls-auth ta.key 0
cipher AES-256-CBC
# Tunnel network
server 10.8.0.0 255.255.255.0 # I'm sticking to default range which is fine
comp-lzo
# DNS servers provided by opendns.com.
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
# Keepalive
keepalive 10 120
# Safety
user nobody
group nogroup
persist-key
persist-tun
# Logging
status openvpn-status.log
log-append /var/log/openvpn.log
verb 5
mute 20
Em seguida, reinicie o serviço com systemctl restart [email protected]
Se a configuração não for perfeitamente perfeita, nenhum erro e nenhum logging serão fornecidos, portanto, boa sorte para encontrar o que está errado.
4) Iptables
Você precisa redirecionar o tráfego que entra no failover para o túnel VPN e retransmitir os pacotes do cliente VPN para a rede também. Essa é a parte que foi a mais dolorosa de encontrar ... Então, espere que você goste.
Substitua f.f.f.f pelo seu failover ip, e 10.8.0.0/24 é a rede VPN padrão, portanto, mude de acordo se não usar a padrão.
Cuidado, o último IP é o IP do meu cliente VPN, pode mudar, mas para mim é 10.8.0.4
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to-source f.f.f.f
iptables -t nat -A PREROUTING -d f.f.f.f -j DNAT --to-destination 10.8.0.4
Para o lado do cliente VPN (servidor inicial)
1) Atribuir um IP fixo para o seu servidor doméstico usando a atribuição de MAC, então o IP do servidor local para mim é 192.168.1.2, mas isso não importa muito
2) Redirecionar a porta 1194 udp (porta padrão para o OpenVPN, mas você pode usar o que quiser) para o seu IP do servidor local, no meu caso 192.168.1.2
3) Instale o openvpn e conecte-se ao seu servidor VPN. Muitos tutoriais, mas configurações importantes em /etc/openvpn/client.conf
no meu caso:
client
remote d.d.d.d 1194 # your server main/default IP
dev tap # can use tun as well
proto udp # tcp seems to have issues
remote my-server-1 1194
resolv-retry infinite
user nobody
group nogroup
# Try to preserve some state across restarts.
persist-key
persist-tun
# Certs
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
tls-auth ta.key 1
cipher AES-256-CBC # Might vary depending on how you set it
# Compression
comp-lzo
# Log verbosity
verb 3
Em seguida, reinicie o cliente: systemctl reinicie o [email protected]
Certifique-se de que sua política de firewall esteja configurada para aceitar todos (a menos que você saiba o que está fazendo) e esteja pronto para começar.
Agora, ele deve agir como se o seu IP de failover fosse o IP do seu servidor doméstico, exceto que seus serviços precisam ouvir o IP da VPN ou 0.0.0.0.
Espero que este post seja útil para os outros.
Descobri o iptables necessário graças a este artigo francês, então graças a eles: link