Назад | Перейти на главную страницу

Доступ к экземпляру за ELB через сервер OpenVPN

Я хочу перенаправить трафик через сервер openvpn только для некоторых определенных доменов (dev.mydomain.com, admin.mydomain.com, jira.mydomain.com и т. Д.), Которые размещены на некоторых машинах ec2 и находятся за некоторыми ELB ( у каждого из них 2 зоны доступности - значит, у него 2 общедоступных IP-адреса), а домены управляются через route53.

В моей конфигурации сервера vpn у меня есть

push "route 54.72.xxx.xyz 255.255.255.255 10.8.0.1 1" # dev.mydomain.com
push "route 54.72.xxx.xyz 255.255.255.255 10.8.0.1 1" # 2nd IP for dev.mydomain.com
....

для каждого домена. К сожалению, эти IP-адреса AWS ELB время от времени меняются, и мне приходится обновлять конфигурацию сервера вручную.

Вы знаете решение этой проблемы?

Есть два основных способа решить эту проблему:

  1. Держать публичный доступ к разработчик, админ, Джира и только необязательно маршрутизировать трафик через VPN. Похоже, вы сейчас этим занимаетесь. Вам придется постоянно преобразовывать имена хостов в IP-адреса, поскольку IP-адреса иногда меняются, как вы знаете.

    • Один из способов - обновить конфигурацию сервера push route линии время от времени, например с помощью cron.

      В твоем openvpn.conf на сервере добавьте строку, которая заставит его читать дополнительную конфигурацию из отдельного файла:

      dev tun
      server ...
      config /etc/openvpn/elb-routes.inc # <- This file gets updated automatically
      

      Затем создайте cron работа который запускает этот скрипт каждый час:

      #!/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
      

      Он обновит список толкать маршруты в /etc/openvpn/elb-routes.inc с самыми последними IP-адресами ELB, чтобы вы всегда получали правильные маршруты.

      Вы можете пойти еще лучше и подключить этот скрипт к Событие CloudWatch который создается каждый раз, когда IP-адрес ELB изменяется, чтобы немедленно обновить его :)


    • Другой вариант - сделать Имя хоста ELB для разрешения IP на клиенте. Сделать это удалять то push route из конфигурации сервера и вместо этого динамически создавайте маршруты при подключении клиента.

      Для этого создайте openvpn вверх сценарий на клиенте который будет вызываться каждый раз при подключении к VPN:

      script-security 2
      up /etc/openvpn/up.sh
      

      Затем в /etc/openvpn/up.sh вы можете разрешить текущие IP-адреса ваших ELB и создать соответствующие маршруты:

      #!/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
      

      Обратите внимание, что вам понадобится host команда от bind9-host (Ubuntu) или bind-utils (Fedora) пакеты.

      Теперь каждый раз, когда вы запускаете свое соединение OpenVPN, он будет запускать этот скрипт, разрешать имена хостов и запускать такие команды:

      # 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
      

      Для получения дополнительной информации о Скрипты OpenVPN up / down проверить Страница руководства OpenVPN, а именно разделы для --up, --script-security и Environmental variables.


  2. Другой и лучший вариант ИМО - ограничить доступ к разработчик, админ, Джира только в VPN и вообще не разрешать доступ без VPN.

    Это не то, о чем вы просите в вопросе, но это может быть хорошим вариантом для повышенная безопасность - никто без VPN не сможет получить доступ к этим узлам с ограниченным доступом.

    Для этого просто измените ELB на Схема: внутренняя - это даст им только частные IP-адреса (например, из диапазона 172.31.0.0/16) и, если ваш VPN настроен для маршрутизации всего трафика от ваших клиентов на 172.31.0.0/16, у вас будет единственный доступ к разработчик, админ, Джира через VPN.


Надеюсь, один из этих методов сработает для вас :)