Доступ к экземпляру SQL Server через NAT - PullRequest
5 голосов
/ 14 марта 2012

Я пытаюсь получить доступ к SQL Server, который отображается через сопоставление IP NAT.Все порты открыты.Я не знаю подробностей о NAT, если он уместен, поскольку это где-то еще в компании, спрятанной в кучу красной ленты.

Вот что я понял.Когда вы пытаетесь получить доступ к именованному экземпляру SQL Server, клиент спрашивает, на каком порту запущен именованный экземпляр.Если я RDP в SQL Server, я могу использовать netstat, чтобы узнать порт этого экземпляра и может успешно подключиться через брандмауэр.Однако подключение через имя экземпляра не работает.Я предполагаю, что сервер в какой-то момент отвечает своим внутренним IP-адресом, и клиент использует его.

Кто-нибудь знает, правда ли это и есть ли способ обойти это?

Ответы [ 2 ]

6 голосов
/ 14 марта 2012

Обнаружение протокола прослушивающего порта экземпляра зависит от службы браузера SQL Server .Это использует UDP на 1434. С переадресацией NAT UDP 1434 ваш клиент должен иметь возможность взаимодействовать со службой обозревателя SQL Server (, если Пакет ответа UDP обозревателя SQL Server может достичь клиента, большой если), но даже успешное взаимодействие поставит вашего клиента в затруднительное положение: теперь, когда он знает порт динамического прослушивания SQL Server, как он достигает этого?NAT должен был бы динамически переадресовывать порт, выбранный SQL Server, или он должен был бы переадресовывать все порты.

Что я рекомендую, это чтобы ваш SQL Server прослушивал настроенную конфигурацию, статически назначенный, порт.См. Как настроить экземпляр SQL Server для прослушивания определенного TCP-порта или динамического порта .У вашего NAT вперед этот порт.Затем в вашем клиенте используйте этот порт явно в строке подключения.Не используйте 1433, стандартный порт, так как я предполагаю, что перед NAT стоит общедоступный интернет, а 1433 подвергается постоянному и частому сканированию всех видов ботов и подлых кластеров.

3 голосов
/ 14 марта 2012

Настройте именованный экземпляр для запуска на статическом порту с помощью диспетчера конфигурации SQL Server.В диспетчере конфигурации SQL Server Network Configuration -> Protocols for <named instance> -> TCP/IP -> Properties.

enter image description here

Затем укажите имя хоста и порт для именованного экземпляра в строке подключения.Имя хоста и номер порта указываются в следующем формате (при условии, что имя хоста Test и порт прослушивания 1492):

... Server='Test,1492'; ...

...