Как разобрать настраиваемый заголовок протокола PROXY v2 для настраиваемой маршрутизации в конфигурации HAProxy?

Как можно разобрать заголовок протокола 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 казался очевидным кандидатом.


person theherk    schedule 10.01.2018    source источник


Ответы (1)


Похоже, AWS использует «2.2.7. Зарезервированные диапазоны типов», как описано в https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt, поэтому вам нужно будет проанализировать эту часть самостоятельно.

Это могло быть возможно в lua, может, я еще не эксперт в lua ;-)

person Aleksandar    schedule 11.01.2018
comment
У меня проблемы с пониманием того, где lua появляется на картинке. Я вижу несколько способов проанализировать содержимое заголовка, но не вижу, как включить это в конфигурацию HAProxy. - person theherk; 12.01.2018
comment
Протокол прокси находится перед любым заголовком http, поэтому вам нужно будет посмотреть, можно ли перехватить этот шаг. - person Aleksandar; 12.01.2018
comment
Я имел в виду заголовок PROXY, а не HTTP-заголовок. Кажется, HAProxy должен иметь возможность извлекать TLV и обеспечивать сопоставление в ACL. - person theherk; 12.01.2018
comment
Что ж, для этого нет метода выборки. Вклад приветствуется. - person Aleksandar; 13.01.2018
comment
Я определенно рассмотрю вопрос о внесении вклада, когда у меня будет полный отчет о том, что возможно, и я полностью пойму, какую форму примет этот вклад, но я все еще чувствую, что могу упустить из виду необходимые детали. В основном я бы хотел увидеть возможность использовать acl vpce tlv(0xEA) -m end v-1234. - person theherk; 15.01.2018
comment
Я запросил в списке рассылки haproxy, если это возможно. mail-archive.com/[email protected]/msg28713.html < / а> - person Aleksandar; 15.01.2018