Маршрутизация на AWS OpenVPN multi-VPC + ClassicLink
У меня проблемы с подключением между серверами в многорегиональной сети, которую я настраиваю в AWS, так как не все серверы доступны из любой точки сети.
Я подключаю VPC (A) в eu-central-1 к другому (B) в eu-southeast-1 через туннель openvpn, при этом второй VPC подключается через ClassicLink к узлам EC2-Classic (EC2). Это соединение устанавливается через пару пиринговых серверов: пиринг-а в VPC A и пиринг-b в VPC B. Пользователи подключаются через openvpn к VPC A через сервер openvpn vpnserver-a.
Схема сети выглядит следующим образом:
+---------+ +---------+ +---------+ +----+
|user | |VPC A | |VPC B | |EC2 |
|172.20/16+---+172.29/16+---+172.31/16+---+10/8|
+---------+ +---------+ +---------+ +----+
VPN VPN ClassicLink
Проблема в том, что я не могу установить ни одно из этих соединений:
- пользователь любого узла в EC2
- любой узел в VPC A к любому узлу в EC2
- любой узел в EC2 к любому узлу в VPC A
Соединения от пользователя к VPC A & B и между VPC A & B работают нормально.
Я подозреваю, что есть проблема в маршрутизации, но я не смог ее решить.
Маршрутизация настроена так:
- vpnserver-a публикует маршруты 172.29/16, 172.31/16 и 10/8 пользователю (файл конфигурации openvpn)
- peering-a публикует маршруты 172.31 / 16 и 10/8 в VPC A (файл конфигурации openvpn)
- peering-b публикует маршруты 172.29 / 16 и 172.20/16 в VPC B (файл конфигурации openvpn)
- таблица маршрутов в VPC A, маршруты 172.31 / 16 и 10/8 к peering-a (таблица маршрутизации подсети AWS VPC)
- таблица маршрутов в маршрутах VPC B 172.29 / 16 и 172.20/16 к peering-b (таблица маршрутизации подсети AWS VPC)
Сетевые ACL открыты для всего трафика между этими подсетями. Группы безопасности также настроены на прием соединений.
Я провел некоторую (базовую) проверку пакетов с помощью tcpdump, чтобы попытаться понять, работают ли маршруты с такими результатами: - Попытка подключения от узла a в VPC A к узлу ec2 в EC2, я вижу пакеты, проходящие через peering-a и peering-b, но не достигает node-ec2 - при попытке подключения от узла ec2 к node-a я даже не вижу пакетов, достигающих peering-b
Поэтому я подозреваю, что маршрутизация в ClassicLink включает дополнительную настройку, о которой я не знаю.
Как я могу настроить недостающие маршруты? Это вообще возможно?
Спасибо!
1 ответ
ClassicLink не поддерживает доступ к чему-либо за пределами VPC.
Вы замечаете, что нет таблицы маршрутов, которая применяется к трафику из ClassicLink - маршруты оттуда обратно к вашим экземплярам в этом VPC неявны, и, следовательно, нет способа доставить внешний трафик обратно в ваш экземпляр "peering-b".
Строго говоря, следующее конкретно не говорит о том, что оно не будет работать, потому что VPN-соединения, на которые они ссылаются, являются VPN-соединениями, предоставляемыми аппаратной VPN-службой VPC, а не соединениями, которые вы проектируете с помощью своего собственного экземпляра...
ClassicLink не поддерживает транзитивные отношения вне VPC. Связанный экземпляр EC2-Classic не будет иметь доступа ни к какому VPN-соединению, конечной точке VPC или интернет-шлюзу, связанному с VPC. Аналогично, ресурсы на другой стороне VPN-соединения или интернет-шлюза не будут иметь доступа к связанному экземпляру EC2-Classic.
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html
... однако, последствия есть, и тот факт, что на машинах ClassicLink нет настраиваемой таблицы маршрутов VPC, которая обрабатывает их трафик, поступающий к VPC, означает, что у вас нет технически даже способа попытаться настроить ваш VPC для работы как этот сценарий требует.