Маршрутизация на 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 для работы как этот сценарий требует.

Другие вопросы по тегам