Назад | Перейти на главную страницу

nginx tcp прокси-маршрутизация на основе sni

Я хочу создать tcp-прокси на основе SNI. Серверная часть восходящего потока - это кластер openshift, и я хочу заблокировать доступ к определенным проектам по IP.

поэтому идея состоит в том, чтобы использовать прокси-сервер tcp с несколькими VIP.

Использовать или разрешить ...

VIP1; если SNI = *. openshift.acme.com И не находится в других VIP (по умолчанию)

VIP2; если SNI = * -project1.openshift.acme.com

VIP3; если SNI = * -project2.openshift.acme.com

VIP-адреса находятся за брандмауэром, который определяет, кто может получить доступ к каким VIP-адресам.

он предназначен для предотвращения использования VIP1 для доступа к другим проектам путем изменения SNI на VIP с помощью записи hosts. И VIP2 и VIP3 должны пересылать только те SNI, которые соответствуют фильтру регулярных выражений.

Я попытался записать рабочую логику на основе модуля потока nginx с логикой и реальным сочетанием кода.

stream {
  upstream openshift-backend {
   server infra-node1:443;
   server infra-node2:443;
   server infra-node3:443;
  }
  server {
    listen       192.168.0.1:443;
    proxy_pass   $upstream;
    ssl_preread  on;
    if $ssl_preread_server_name = ".openshift.acme.com" AND "not in other server blocks";
  }
  server {
    listen       192.168.0.2:443;
    proxy_pass   $upstream;
    ssl_preread  on;
    if $ssl_preread_server_name = = ~(*.-project1)\.openshift\.acme\.com$;
  }
  server {
    listen       192.168.0.3:443;
    proxy_pass   $upstream;
    ssl_preread  on;
    if $ssl_preread_server_name = = ~(*.-project2)\.openshift\.acme\.com$;
  }

Я бы предпочел использовать nginx и сквозную передачу. Но если это невозможно, я открыт для любого другого решения.

Большое спасибо