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 routelinhas de tempos em tempos , por exemplo usandocron.Em seu
openvpn.confno 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 automaticallyEm 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.serviceEle atualizará a lista de rotas push em
/etc/openvpn/elb-routes.inccom 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 routeda 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.shEm seguida, em
/etc/openvpn/up.shvocê 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 doneNote que você precisará do comando
hostdos 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 $devPara mais informações sobre scripts up / down do OpenVPN , verifique a página de manual do OpenVPN , ou seja, seções para
--up,--script-securityeEnvironmental 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ê:)