質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

4回答

4567閲覧

SQL Serverにて、ローカルIPで接続できるのに、グローバルIPアドレスで接続できない原因について。本当に困っています、どなたかご教示ください。

Wataru0926

総合スコア12

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

1クリップ

投稿2019/07/05 12:39

環境

・Windows server 2012R
・SQLserver2008 R2
・VB.net

前提・実現したいこと

SQLserver2008 R2で開発したシステムをグローバルIPアドレスで繋げて使用できるようにしたいです。

(前提・検証済みの内容)
・ローカルIPアドレスとグローバルIPアドレスの紐付けが正しいことは検証済み
・SQL serverのポート(14333)をプライベート・パブリック・ドメインで解放しています。
・開発したシステムにバグはありません。

発生している問題・エラーメッセージ

固定IPアドレスを使用しており、ローカルIPアドレスとグローバルIPアドレスの紐付けはルーター・サーバーの設定で完了しています。
以下の記述を行った場合に、グローバルIPアドレスだと接続ができなくなります。
(※以下は続けて記述していません。それぞれコメントアウトして記述して試しました。)

【接続可能】
Public Cn = New SqlClient.SqlConnection("Server=ローカル固定IP,14333;User ID=ユーザーID;Password=パスワード;Initial Catalog=インスタンス名")

【接続不可】
Public Cn = New SqlClient.SqlConnection("Server=グローバル固定IP,14333;User ID=ユーザーID;Password=パスワード;Initial Catalog=インスタンス名")

当記述は、現在運用しているサーバーでは、正常に接続されます。
現在運用しているサーバーと同じ設定でかつ、同じ内容で固定されたIPアドレスを使用しているのに、なぜ動作しないのか分かりません。

エラーメッセージ

グローバルIPアドレスで繋げた場合に、以下のエラーメッセージが出力されます。

SQL Server への接続を確立しているときにネットワーク関SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。 (provider: TCP プロバイダ, error: 0 - 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。)連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。 (provider: TCP プロバイダ, error: 0 - 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。)

該当のソースコード

上記でも記載していますが、以下の記述だと、エラーになり、接続が出来なくなります。

**Public Cn = New SqlClient.SqlConnection("Server=グローバル固定IP,14333;User ID=ユーザーID;Password=パスワード;Initial Catalog=インスタンス名")
**

試したこと

以下サイトは一例ですが、ファイアウォールの設定・SQL serverの設定・cmdを使用したping送信等全て行っており、正常に動作する別サーバーとの設定内容の差異も確認して修正しています。

http://ivystar.jp/database/sql-server/how-to-be-able-to-connect-from-the-outside-in-sql-server/
https://qiita.com/Nanakusajp/items/7211a5721e725fc6329c

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/07/05 13:09

別ネットワークからグローバルIPにPING打って通るんでしょうか
Wataru0926

2019/07/05 13:21

早速の御回答、ありがとうございます。別ネットワークからもグローバルIPにping通ります。
YAmaGNZ

2019/07/05 13:40

どのようなネットワーク構成なのか分かりませんが、ルーティングが出来ていなさそうに思えます。 ローカルIPアドレスとグローバルIPアドレスの紐付けが正しいことは検証済みとのことですが、どのように確認されたのでしょうか?
退会済みユーザー

退会済みユーザー

2019/07/06 00:37

接続文字列に指定したポート 14333 は間違ってませんか?
退会済みユーザー

退会済みユーザー

2019/07/06 00:46

既定のインスタンスなのか名前つきインスタンスなのか、どっちなのかを教えて下さい。
Wataru0926

2019/07/06 10:48

コメントありがとうございます。 規定のインスタンスです。
退会済みユーザー

退会済みユーザー

2019/07/06 12:18

そもそもがおかしいので問題外かもしれませんが、では接続文字列の Initial Catalog=インスタンス名 とは何ですか?
guest

回答4

0

現在運用しているサーバーと同じ設定でかつ、同じ内容で固定されたIPアドレスを使用しているのに、なぜ動作しないのか分かりません。

そのサーバーとこのサーバーでは貴殿が認識できていない差異がある
ってことでしょうな。
または、ローカルIPアドレスでアクセスした時のクライアントの設定と
グローバルIPアドレスでアクセスした時のクライアントの設定が
違っているという可能性も。

あと、pingが通ったからといって本当にそのサーバーに届いているかの
証左には足りないんじゃないかなあ。
せめて適当なプロトコルでやりとりできるかの確認は必要かと。

投稿2019/07/05 14:38

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Wataru0926

2019/07/06 10:58

takasima20さん コメントありがとうございます。 当該のサーバーに対して、グローバルIPアドレスでPPTP接続できることは確認しているのですが、 これは当該のサーバーに到達しているという証左にはならないでしょうか?
YAmaGNZ

2019/07/06 11:17

SQLServerの動作しているサーバがPPTPサーバということでしょうか?
Wataru0926

2019/07/06 13:52

おっしゃる通りです、試しに接続してみたのです。
guest

0

皆様、たくさんのコメントありがとうございました。

以下のコマンドを実行したことで、そもそも指定のポートにアクセスができていないという事実を知ることができました。

**Test-NetConnection 111.111.111.111 -Port 14333
(111.111.111.111は本物のグローバルIPで入力してください) **

原因は、ルーターで1433アクセスを許可してなかったせいでした。

これは、前任者から引き継いだルーター設定で、問い合わせても前任者に的確な回答をもらえなかったせいで莫大な時間を費やす結果となってしまいました。
(もちろん、私の知識不足が根本原因であります。)

皆様、ありがとうございました。

投稿2019/07/07 08:47

Wataru0926

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

すでに皆さんが仰られていることと重複する内容ではありますが、以下を確認することをお勧め致します。

SQL Serverの既定のポートは1433ですが、今回14333を使われているということで、見間違いが起こりやすいように思います。サーバーおよび接続文字列だけ14333に設定しておきながら、ファイアウォールだけ1433にしていたといったパターンはないでしょうか?
ポートを変えるなら、全然違う番号に変えるほうが良いように思います。
接続文字列、ファイアウォール、SQL Server構成マネージャで開いているポートが一致しているかを落ち着いて確認してみてください。

ファイアウォールで該当ポートをブロックする設定がないかどうかチェックしてみてください。解放とブロックの両方があった場合、大抵ブロックが優先されます。セキュリティに厳しい前任者から引き継いだ場合などはありがちです。

外部からのPingに応答しているのはルーターではないでしょうか?
Pingのルーティング設定までしていれば、SQL Serverマシンの応答だとは思いますが・・・。
外部からWindows PowerShellにて以下のように打って、TcpTestSucceededがTrueになるか試すほうが良いでしょう。

Test-NetConnection 111.111.111.111 -Port 14333
(111.111.111.111は本物のグローバルIPで入力してください)

ルーターのルーティング設定をしていても、ルーターが該当ポートを外部に開放していない場合も、質問者さんと同じような事例に行きつきます。家庭用で使われるルーターの場合、最初からポート開放されていますのでルーティング設定だけで接続可能となりますが、YAMAHAやCiscoの業務用ルーターの場合、全ポートが閉じられている状態から、自分でポートを開けていかなければなりません。(メーカーのモデルによります)
余談ですが、業務用ルーターの設定を変える場合、先に設定ファイルのバックアップを取ることをお勧めします。設定でやらかすと全端末が一切通信できなくなる恐ろしい事態もあり得ます。

投稿2019/07/06 02:56

Secret

総合スコア220

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Wataru0926

2019/07/06 10:56

Secretさん コメントありがとうございます。 ・接続文字列、ファイアウォール、SQL Server構成マネージャで開いているポートは14333で一致していることを確認しました。 ・ファイアウォールで該当ポートをブロックする設定はなく、当IPアドレスに対して外部から入れるように設定されていることも確認しました。 ・外部からのPingに応答しているのはルーターではないでしょうか? ・ルーターで該当ポートを外部に開放しているんですよね。。 Test-NetConnection 111.111.111.111 -Port 14333 (111.111.111.111は本物のグローバルIPで入力してください) ↑試してみます。
Wataru0926

2019/07/07 04:27

ためしたところ、Falseとなりました。 つまり、何らかの要因により、ポートがブロックされているということでしょうか。 調べる方法がありましたら、ご教示ください。
guest

0

あとは、お約束ながら、ファイアウォールソフトやウィルスソフトでブロックされてないか、を調べてみることですね。

で、そもそもの話になりますが、こういうトラブルシュートする場合、

・ローカルIPアドレスとグローバルIPアドレスの紐付けが正しいことは検証済み

・SQL serverのポート(14333)をプライベート・パブリック・ドメインで解放しています。
・開発したシステムにバグはありません。

という前提がホンマに正しいのか、をまず疑うべきではあります。

投稿2019/07/05 13:27

y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Wataru0926

2019/07/06 11:20

y_waiwaiさん コメントありがとうございます。 仰る通りです。 以下の点を疑って原因の切り分けを行ったのですが、全て問題なかったのです。。 ・ローカルIPアドレスとグローバルIPアドレスの紐付けが正しいことは検証済み ・SQL serverのポート(14333)をプライベート・パブリック・ドメインで解放しています。 ・開発したシステムにバグはありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問