Прокси-сервер базы данных SQL Azure с включенным брандмауэром в диапазоне IP-адресов

У меня есть следующая настройка

  • База данных SQL Azure с включенным брандмауэром, поэтому она будет разрешать подключения только с IP-адресов 104.xxx
  • Виртуальная машина Linux, размещенная в Azure, в том же месте, что и база данных Azure, с внешним IP-адресом 104.xxx
  • Локальная виртуальная машина Linux, способная подключать виртуальную машину Azure через vnet, с внешним IP-адресом 91.xxx

. Цель состоит в том, чтобы иметь возможность подключить локальную виртуальную машину к базе данных SQL, используя виртуальную машину, размещенную в Azure, в качестве прокси.

Я попытался настроить его двумя способами, с помощью модуля потоковой передачи Nginx + RTMP, как описано здесь Использование прокси-сервера TCP для подключения к базе данных SQL через VPN , со следующим nginx.conf

events {
  worker_connections  1024;
}
stream {
  upstream sqlvm {
    server sqldb.database.windows.net:1433;
  }
  server {
    listen 1433;
    proxy_pass sqlvm;
  }
}

И второй способ с HAProxy в режиме tcp .

listen sqldb
    bind *:1433 
    mode tcp
    server sqldb sqldb.database.windows.net:1433 check port 1433 inter 1000

В обоих случаях соединение с клиентом SQL (например, sqlcmd ) таким же образом не работает.

# 10.x.x.x is the IP of Azure VM in this setup
$ sqlcmd -S 10.x.x.x,1433 -d dbName -U user@sqldb.database.windows.net -P password
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Cannot open server 'sqldb' requested by the login. Client with IP address '91.x.x.x' is not allowed to access the server.  To enable access, use the Windows Azure Management Portal or run sp_set_firewall_rule on the master database to create a firewall rule for this IP address or address range.  It may take up to five minutes for this change to take effect..

Та же команда работает при выполнении на прокси-виртуальной машине.

Так или иначе, Azure SQL знает исходный IP-адрес клиента и блокирует его, e даже если он проходит через прокси.

Как это возможно, учитывая, что мы прокси на уровне TCP? Есть ли обходной путь / рабочая конфигурация для этой установки?

0
задан 27 April 2020 в 21:58
1 ответ

Кажется, ответ на этот вопрос находится в документации по Архитектуре подключения Azure SQL.

Политика подключения

По умолчанию: это политика подключения, действующая на всех серверах после создания, если только вы явно не измените политику подключения на прокси или перенаправление. Политика по умолчанию — перенаправление для всех клиентских подключений, исходящих из Azure (например, с виртуальной машины Azure), и прокси-сервер для всех клиентских подключений, исходящих извне (например, подключений с вашей локальной рабочей станции).

Это означает, что первое соединение проходит через прокси, но после перенаправления оно полностью обходит прокси.

В случае описанной выше настройки решение состояло в том, чтобы переместить проксирующую виртуальную машину за пределы Azure. Это также можно сделать, изменив режим подключения к БД на режим прокси (но в обмен на производительность)

0
ответ дан 28 April 2020 в 10:24

Теги

Похожие вопросы