Как можно разобрать заголовок протокола PROXY версии 2 и использовать проанализированные значения для выбора серверной части?
В частности, я подключаюсь из одной учетной записи AWS к другой, используя конечную точку VPC PrivateLink с включенным PROXY v2. Сюда входит идентификатор конечной точки согласно документы.
Заголовок протокола прокси также включает идентификатор конечной точки. Эта информация кодируется с использованием настраиваемого вектора типа длины-значения (TLV) следующим образом.
Моя цель - подключиться от ресурса A в учетной записи 1 к ресурсу B в учетной записи 2. План - ресурс A -> PrivateLink -> NLB (с включенным PROXY v2) -> HAProxy -> ресурс B.
Мне нужно определить идентификатор конечной точки VPC PrivateLink во внешнем интерфейсе HAProxy, чтобы выбрать правильный сервер. Как это может быть сделано? Я не понимаю, как вызвать собственный парсер в конфигурации HAProxy, и возможно ли это вообще? Это? Если да, то как это можно сделать?
Причина, по которой я не могу просто использовать исходный IP-адрес: в моей архитектуре частные IP-адреса могут перекрываться. В приведенном выше примере будет несколько учетных записей, действующих как учетная запись 1, поэтому мне нужно выполнить маршрутизацию назначения на основе идентификатора конечной точки, а не исходного IP-адреса, предоставленного при использовании PROXY.
Примеры
Фигово
Это наш текущий сценарий. В нем невозможно различить два входящих соединения от разных VPC, имеющих одно и то же пространство частных IP-адресов.
frontend salt_4506_acctA_front
bind 10.0.1.32:4506 accept-proxy
mode tcp
default_backend salt_4506_acctA_back
backend salt_4506_acctA_back
balance roundrobin
mode tcp
server salt-master-ecs 192.168.0.88:32768
Если нам нужно направить соединения для VPC acctB с использованием одного и того же IP-адреса, различить будет невозможно.
Идеально
Идеальным решением было бы изменить это на что-то вроде следующего (хотя я понимаю, что это не сработает; это просто псевдоконфигурация).
frontend salt_4506_acctA_front
bind *:4506 accept-proxy if endpointID == vpce-xxxxxxx1
mode tcp
default_backend salt_4506_acctA_back
backend salt_4506_acctA_back
balance roundrobin
mode tcp
server salt-master-ecs 192.168.0.88:32768
Любые другие варианты вместо HAProxy для маршрутизации пункта назначения на основе идентификатора конечной точки также приемлемы, но HAProxy казался очевидным кандидатом.