Existem duas maneiras principais de resolver isso:
-
Mantenha acesso público a dev , administrador , jira e apenas direcione o tráfego pela VPN. Isso é o que você parece estar fazendo agora. Você terá que reavaliar os nomes de host para IPs, pois os IPs ocasionalmente mudam como você sabe.
-
Uma maneira é atualizar a configuração do servidor
push route
linhas de tempos em tempos , por exemplo usandocron
.Em seu
openvpn.conf
no servidor adicione uma linha que fará com que ele leia a configuração adicional de um arquivo separado:dev tun server ... config /etc/openvpn/elb-routes.inc # <- This file gets updated automatically
Em seguida, crie um trabalho cron que execute este script a cada hora:
#!/bin/bash -e # Resolve each of the ELB_HOSTNAMES below and update the server config ELB_HOSTNAMES="dev.mydomain.com admin.mydomain.com jira.mydomain.com" for ELB_HOSTNAME in ${ELB_HOSTNAMES}; do for ELB_IP in $(host -t A ${ELB_HOSTNAME} | awk '/has address/{print $NF}'); do echo "push \"route ${ELB_IP} 255.255.255.255 vpn_gateway 1\"" done done > /etc/openvpn/elb-routes.inc systemctl reload openvpn.service
Ele atualizará a lista de rotas push em
/etc/openvpn/elb-routes.inc
com os IPs mais recentes dos ELBs para que você sempre obtenha as rotas corretas.Você pode ir ainda mais extravagante e conectar este script no Evento CloudWatch que é criado toda vez que o IP do ELB é alterado para que seja atualizado imediatamente:)
-
Outra opção é fazer o nome do host ELB ao IP resolvendo no cliente . Para fazer isso remova o comando
push route
da configuração do servidor e crie as rotas dinamicamente quando o cliente se conectar.Para isso, crie um script openvpn up no cliente que será chamado toda vez que você se conectar à VPN:
script-security 2 up /etc/openvpn/up.sh
Em seguida, em
/etc/openvpn/up.sh
você pode resolver os IPs atuais dos seus ELBs e criar as rotas apropriadas:#!/bin/bash # Resolve each of the ELB_HOSTNAMES below and insert route through the VPN ELB_HOSTNAMES="dev.mydomain.com admin.mydomain.com jira.mydomain.com" for ELB_HOSTNAME in ${ELB_HOSTNAMES}; do for ELB_IP in $(host -t A ${ELB_HOSTNAME} | awk '/has address/{print $NF}'); do ip route add $ELB_IP via $route_vpn_gateway dev $dev done done
Note que você precisará do comando
host
dos pacotesbind9-host
(Ubuntu) oubind-utils
(Fedora).Agora, toda vez que você abrir sua conexão OpenVPN, ele executará esse script, resolverá os nomes de host e executará comandos como este:
# IPs for dev.mydomain.com ... ip route add 52.65.12.34 via $route_vpn_gateway dev $dev ip route add 13.211.56.78 via $route_vpn_gateway dev $dev
Para mais informações sobre scripts up / down do OpenVPN , verifique a página de manual do OpenVPN , ou seja, seções para
--up
,--script-security
eEnvironmental variables
.
-
-
Outra opção melhor e IMO é restringir o acesso a dev , administrador , jira a VPN somente e não permita acesso sem VPN.
Isso não é o que você está pedindo na pergunta, mas pode ser uma boa opção para aumentar a segurança - ninguém sem a VPN conseguirá acessar esses hosts restritos.
Para isso, basta alterar os ELBs para o Esquema: interno - que dará a eles apenas endereços IP privados (por exemplo, do intervalo 172.31.0.0/16) e supondo que sua VPN esteja configurada para rotear todos os tráfego para 172.31.0.0/16 de seus clientes, você terá acesso somente a dev , admin , jira pela VPN.
Espero que um desses métodos funcione para você:)