2012-03-14 3 views
5

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

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

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

+1

Instance на номер порта перевода осуществляется SQL службы обозревателя, который прослушивает порт 1434/UDP , Проверьте, что ваш NAT (в режиме DMZ) также публикует все порты udp. – wqw

+0

В моей среде это помогло отключить брандмауэр Windows на машине SQL Server. – scar80

ответ

6

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

Я рекомендую, чтобы ваш SQL Server прослушивал порт, настроенный, статически назначенный. См. How to configure an instance of SQL Server to listen on a specific TCP port or dynamic port. Имейте ваш NAT вперед что порт. Затем ваш клиент явно использует этот порт в строке подключения. Не используйте стандартный порт 1333, так как я предполагаю, что перед NAT - это общедоступный интернет, а 1433 - постоянное и частое сканирование от всех видов ботов и гнусных кластеров.

+1

+1 и 1433 медленно исчезают, потому что он используется для экземпляра * default * (нет имени экземпляра), и Microsoft настоятельно рекомендует никогда не использовать экземпляр по умолчанию (по соображениям безопасности). Поэтому, когда у вас есть именованный экземпляр, 1433 никогда не будет релевантным. –

3

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

enter image description here

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

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

Смежные вопросы