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

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

ただいまの
回答率

89.55%

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

解決済

回答 4

投稿

  • 評価
  • クリップ 1
  • VIEW 1,406

Wataru0926

score 5

環境

・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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • SurferOnWww

    2019/07/06 09:46

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

    キャンセル

  • Wataru0926

    2019/07/06 19:48

    コメントありがとうございます。
    規定のインスタンスです。

    キャンセル

  • SurferOnWww

    2019/07/06 21:18

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

    キャンセル

回答 4

+1

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/06 19:58

    takasima20さん

    コメントありがとうございます。

    当該のサーバーに対して、グローバルIPアドレスでPPTP接続できることは確認しているのですが、
    これは当該のサーバーに到達しているという証左にはならないでしょうか?

    キャンセル

  • 2019/07/06 20:17

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

    キャンセル

  • 2019/07/06 22:52

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

    キャンセル

checkベストアンサー

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 19:56

    Secretさん

    コメントありがとうございます。

    ・接続文字列、ファイアウォール、SQL Server構成マネージャで開いているポートは14333で一致していることを確認しました。
    ・ファイアウォールで該当ポートをブロックする設定はなく、当IPアドレスに対して外部から入れるように設定されていることも確認しました。
    ・外部からのPingに応答しているのはルーターではないでしょうか?
    ・ルーターで該当ポートを外部に開放しているんですよね。。

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

    ↑試してみます。

    キャンセル

  • 2019/07/07 13:27

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

    キャンセル

0

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/07/06 20:20

    y_waiwaiさん

    コメントありがとうございます。

    仰る通りです。
    以下の点を疑って原因の切り分けを行ったのですが、全て問題なかったのです。。

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

    キャンセル

0

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

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.55%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • SQL Serverに関する質問
  • SQL Serverにて、ローカルIPで接続できるのに、グローバルIPアドレスで接続できない原因について。本当に困っています、どなたかご教示ください。