Я хочу перенаправить трафик через сервер 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 время от времени меняются, и мне приходится обновлять конфигурацию сервера вручную.
Вы знаете решение этой проблемы?
Есть два основных способа решить эту проблему:
Держать публичный доступ к разработчик, админ, Джира и только необязательно маршрутизировать трафик через 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
.
Другой и лучший вариант ИМО - ограничить доступ к разработчик, админ, Джира только в VPN и вообще не разрешать доступ без VPN.
Это не то, о чем вы просите в вопросе, но это может быть хорошим вариантом для повышенная безопасность - никто без VPN не сможет получить доступ к этим узлам с ограниченным доступом.
Для этого просто измените ELB на Схема: внутренняя - это даст им только частные IP-адреса (например, из диапазона 172.31.0.0/16) и, если ваш VPN настроен для маршрутизации всего трафика от ваших клиентов на 172.31.0.0/16, у вас будет единственный доступ к разработчик, админ, Джира через VPN.
Надеюсь, один из этих методов сработает для вас :)