マルチインスタンスサーバーでのSQL Server Reporting Services(SSRS)IP処理


9

Tl; Dr

マルチインスタンスSQL Serverに専用のIPアドレスとポート(162.xxx.xxx.51:1433)を持つSQL Serverインスタンス(SQLSERVER01-i01)があります(Windows Server上の各SQL Serverインスタンスには独自のIPアドレスがあります) )これらはすべて1つのWindowsサーバー(SQLSERVER01 / 162.xxx.xxx.50)で実行されています。

また、独自のIPアドレスとポート(168.xxx.xxx.71:1433)を持つ専用のReporting Servicesインスタンス(SQLSERVERRS01-i01)があり、独自のIPアドレス(168を持つ別のWindowsサーバー(SQLSERVERRS01)で実行されています.xxx.xxx.70)。

専用のReporting Servicesサーバーには、またはを介してAPPL1アクセスできるアプリケーションがあります。 http://SQLSERVERRS01-i01:80/Reports_APPL1http://SQLSERVERRS01:80/Reports_APPL1

*:80ホストヘッダーのReporting Services構成の構成により、SSRSは両方の要求を取得します。

各IP範囲の間に複数のファイアウォールがあります。つまり、IP-to-IPまたはIPrange-to-IP接続ごとに特定のルールを適用する必要があります。ただし、2つのサーバーが関与している場合、セキュリティでは常にファイアウォール内のIP-to-IPルールである必要があると規定されています。

質問

(さらに下のスクリーンショットに基づく)

Reporting ServicesサーバーがSQLサーバーインスタンス(162.xxx.xxx.51)に接続してデータを取得すると、Windowsサーバーの基になるIPアドレス(168.xxx.xxx.70 /推奨)との接続が常に構築されます)SSRSが実行されているか、または(時々)SQL Server Reporting ServicesインスタンスのIPアドレス(168.xxx.xxx.71)を使用しますか?

これは、IP-to-IPアプローチを使用したファイアウォールルールの設定に関連しています。ポート1433を介した168.xxx.xxx.71から162.xxx.xxx.51への接続、または168.xxx.xxx.70から162.xxx.xxx.51への接続を定義するルールを適用する必要がありますポート1433。

現在、私は両方のファイアウォールルールに適用します。

ボーナス質問

専用IPアドレスと通信するようにReporting Servicesサーバーを構成できますか?この場合は168.xxx.xxx.71アドレスです。

私が探していない答え

ファイアウォールの構成を最適化する方法や、ネットワークにゾーニングの概念を実装する方法についてのアドバイスは求めていません。(すでにパイプラインに入っています)。さらに、SQL ServerとSSRSを同じサーバー上に置くことで問題が解決することを示すフィードバックには興味がありません。私はそれを知っており、喜んでそれを行いますが、SSRSコンポーネントと一緒に実行するために必要なサードパーティのソフトウェアについては。

できます

私が持っている構成は、SSRSとSQL Serverインスタンスの間に両方のファイアウォールルールを適用すると機能します。

168.xxx.xxx.71 --> 162.xxx.xxx.51 : 1433
168.xxx.xxx.70 --> 162.xxx.xxx.51 : 1433

安全にファイアウォールルールを1つ減らし、すべてが引き続き機能することを確認したいと思います。(下のスクリーンショットを参照)
編集:これまでに読んだ記事は、2番目のルールだけが必要であることを示唆していますが、保証はありません。

私がすでに相談した記事

  1. SQL Serverインストール
    ベースの記事のセキュリティに関する考慮事項

  2. SQL Serverアクセス​​を許可するようにWindowsファイアウォールを構成する
    この記事では、SQL Serverのファイアウォール構成に関する他のすべての記事を示します。

  3. データベースエンジンアクセス用のWindowsファイアウォールを構成する
    IPアドレスの単語は使用されません。

  4. レポートサーバーアクセス用のファイアウォールの構成
    この記事は、次のように非常に興味深いものでした。

    外部コンピューターのSQL Serverリレーショナルデータベースにアクセスする場合、またはレポートサーバーデータベースが外部SQL Serverインスタンスにある場合は、外部コンピューターのポート1433および1434を開く必要があります。

    ...ただし、IP構成/設定/デフォルトについてはまだ触れていません。

  5. マルチホームWindowsコンピューターでのソースIPアドレスの選択

  6. Windows Server 2008およびWindows VistaのソースIPアドレス選択の機能は、以前のバージョンのWindowsの対応する機能とは異なります

記事5および6はJames(dba.se)から親切に提供されました。それらは現在最も適切な答えのようです。ただし、複数のIPが割り当てられているNICが1つしかないのに対して、1つの記事で複数のNICの使用について言及しているのは少し懐疑的です。トム(dba.se)もアドバイスと一般的なコメントを寄せています。

dba.stackexchange.comにない理由

最初はこの質問の複雑な性質のため、serverfault.comにこの質問を投稿することに抵抗がありました。この質問には、SQL Server固有の傾向とWindows Server固有の傾向の両方があります。最終的に私はそれをここに投稿することにしました。これは、Windows ServerのIPを処理するためのものだと思うからです(より良い言葉を失うため)。

モデレーターがdba.stackexchange.comでより良い応答を得ると考えている場合は、質問をそこに移動してください。

長い説明

私たちの環境には、複数のSQL Serverインスタンスと複数のIP設定をホストするWindowsサーバーがあります。複雑なファイアウォール構成、専用のSQL Server Reporting Services(SSRS)サーバーを追加し、次のような環境を作成します。

環境の概要

基本的に、個々のIPアドレスで最大15(15)のSQL Serverインスタンスを実行する1つのWindowsサーバーを持つことができます。同じことが専用のReporting Servicesインスタンスにも当てはまります。

ファイアウォールルール

現在、さまざまなIP範囲はゾーンとして構成されていません。つまり、各ファイアウォールルールをIP-to-IPまたはIPrange-to-IPルールとして個別に構成する必要があります。2つのサーバーが関係する場合、セキュリティにより、常にIP-to-IPルールでなければならないことが規定されています。各SQL Serverインスタンスには、サーバーからサーバーへのリンクまたはクライアントからサーバーへのリンクなど、通信に関与するファイアウォール用の独自のルールセットがあります。ファイアウォールルールを適用すると、現在4〜6週間の待機期間が発生します。ファイアウォールルールの量を減らすと、ネットワークセキュリティチームへのプレッシャーが軽減されます。

SQL ServerインスタンスのIP構成

専用IPおよびポートでのみピックアップするようにSQL Serverインスタンスを構成するには、SQL Server構成マネージャーユーティリティの一部の設定を変更します。最初のステップは、SQL Server構成マネージャーを起動し、左側のセクションでSQL Serverネットワーク構成を選択することですInstanceNameのプロトコル。左ペインで、TCP / IPプロトコル名を左クリックし、プロトコルを有効にします。次に、プロトコルを再度左クリックして、[ TCP / IPのプロパティ ] ウィンドウを表示します。

次に、次の設定がプロトコルレジスタに設定されていることを確認します。

Enabled           : Yes
Listen All        : No

ではIPなアドレスはは(例えばこの例では、Reporting Servicesのサーバーのために、それは168.xxx.xxx.71のためになる)、当該IPアドレスに対して次の設定を確認してください登録

Active            : Yes
Enabled           : Yes
IP Address        : 168.xxx.xxx.71
TCP Dynamic Ports : 
TCP Port          : 1433

注: TCP動的ポートの設定は、0(ゼロ)だけでなく空であることも重要です。

これで、ポート1433を使用して168.xxx.xxx.71のデータベース接続のみをピックアップするSQL Serverインスタンスが作成されました。

SQL Serverインスタンスの概要

SQL Server Browserサービスは実行されておらず、個々のSQL Serverインスタンスはそれぞれ、ポート1433で独自のIPアドレスのみを使用するように構成されています。GENERALというSQL Serverインスタンスがあり、ホスト名SQLSERVER01と2つのIPアドレス162.xxxを持つWindowsサーバー.xxx.50(ホスト)と162.xxx.xxx.51(SQLインスタンス)次の構成項目になります。

Windows Server      : SQLSERVER01 
Windows Server IP   : 162.xxx.xxx.50
SQL Server Instance : SQLSERVER01-i01 (DNS A record)
SQL Server Instance : GENERAL (can only be used on the host itself)
SQL Server IP/Port  : 162.xxx.xxx.51:1433

SQL Serverは、162.xxx.xxx.50:1433の要求を取得しません。SQLServer構成マネージャーユーティリティでこのIPアドレスをリッスンするように構成されているSQL Serverインスタンスがないためです。SQL Serverは、SQLSERVER01-i01(ポート1433)または162.xxx.xxx.51,1433の要求のみを取得します。

SQL Server Reporting Servicesインスタンスの概要

SQL Server Browserサービスは実行されておらず、個々のSQL Server Reporting Servicesインスタンスは、ポート1433で独自のIPアドレスのみを使用するように構成されています。名前付きSSRS APPL1と2つのIPアドレス168.xxx.xxx.70(ホスト)と168.xxx.xxx.71(SQLインスタンス)で、次の構成項目になります。

Windows Server      : SQLSERVERRS01 
Windows Server IP   : 168.xxx.xxx.70
SQL Server Instance : SQLSERVERRS01-i01 (DNS A record)
SQL Server Instance : GENERAL (can only be used on the host itself)
SQL Server IP/Port  : 168.xxx.xxx.71:1433
Reporting Services  : http://sqlserverrs01-i01/Reports_APPL1
                      http://sqlserverrs01/Reports_APPL1

SQL Serverは、168.xxx.xxx.70:1433の要求を取得しません。これは、SQL Server構成マネージャーユーティリティでこのIPアドレスをリッスンするように構成されているSQL Serverインスタンスがないためです。SQL Serverは、SQLSERVER01-i01(ポート1433)または162.xxx.xxx.71,1433の要求のみを取得します。

ホストヘッダーのReporting Services構成の*:80構成のため、SSRSはhttp:// sqlserverrs01-i01 / Reports_APPL1またはhttp:// sqlserverrs01 / Reports_APPL1のいずれかの要求をピックアップします 。

私が答えを書くことに時間を費やすことをいとわない人に十分な情報を提供したことを願っています。技術的な詳細とリンクを楽しみにしています。

StackEdit作成され、後でstackexchange互換になるように手動で変更されます。

歴史

編集1:初期リリース
編集2:読みやすくするために再フォーマット。説明SF / DBを下に移動しました。Windows Server
Edit 3のホスト名が追加されました。ファイアウォールルールリストの間違ったIPアドレスが修正されました。
編集4:一部の場所でホスティングという言葉を実行に変更しました(非仮想化環境です)。一度の文にIPアドレスを追加
編集5:サポートを参照して参照した記事のリストを追加
編集6:履歴セクションのクリーンアップ


1
ネットワーキングスタックのより低いレベルでそれを解決できれば、SSRSとSQL Native Clientはそれによって煩わされるべきではないと思います。たとえば、あなたは常にあなたがそれで逃げることができ、特定のNICを使用するにSSRSサーバー上のSQL Serverインスタンスへのルートを追加することができれば
トムV - topanswers.xyz試し

1
私の記憶が正しければ、SSRSの専用IPは単にIISバインディングであり(レポートは基本的には豪華なIISサイトです)、通信には使用されません。私の理論をテストする方法はありませんが、SSRSが専用IP経由でSQL Serverデータソースと通信することはないと思います。
Nathan C

回答:


6

前書き

私が最初の調査で見つけたさまざまなドキュメントと、リンクやディスカッションで提供されたドキュメントによると、確実で信頼性の高い、準拠したソリューションが思い付きました。

RFC 3484

さらに下で行われたバイナリ比較と適用されたルールはRFC 3484に準拠しおり、IPv4アドレスに対しても明らかに有効です。

RFC 3484は、ルール8の直後にも次のように述べています。

Rule 8 may be superseded if the implementation has other means of
choosing among source addresses.  For example, if the implementation
somehow knows which source address will result in the "best"
communications performance.

マルチホームWindowsコンピューターでのソースIPアドレスの選択

RFC 3484のすべてのルールがIPv4アドレスに適用されるわけではありません。Microsoftブログの記事「マルチホームWindowsコンピューターでのソースIPアドレスの選択」で、適用されるルールについて説明しています。

Windows Vista / Windows Server 2008の動作のすぐ下に、次のような小さなセクションがあります。

XPと同様に、プログラムがソースIPを指定しない場合、スタックはターゲットIPアドレスを参照し、IPルートテーブル全体を調べて、パケットの送信に最適なネットワークアダプターを選択できるようにします。ネットワークアダプターが選択された後、スタックはRFC 3484で定義されたアドレス選択プロセスを使用し、そのIPアドレスを送信パケットのソースIPアドレスとして使用します。

SQL / SSRSインスタンスにNICが1つしかないので、最初の部分は問題があります。Windows Serverは常に利用可能な唯一のNICを選択します。

これまでのところ、RFC 3484とMicrosoftブログを組み合わせると、両方のIPアドレスがソースIPアドレスの有効な候補になります。説明は答えのさらに下に続きます。

ケーブルガイ

Cable Guyの記事The Cable Guyのストロングホストモデルとウィークホストモデルは、ストロングホストの送受信環境とウィークホストの送受信環境でIP選択がどのように機能するかについて詳しく説明しています。良い追加の読み取りですが、ソースIPがどのように選択されているかについて、これ以上の説明はありません。この記事は、既知のRFC 3484に関連しています。

説明できないことを説明する

ソリューションを説明するために、まず問題のIPアドレスを同等のバイナリに変換する必要があります。私の質問ではゲートウェイを提供しなかったので、2つの値を想定します。

送信元IPアドレスとバイナリ表記

関連するIPアドレスの変換されたバイナリ値のリストを次に示します。

10101000.00000001.00000001.01000110   168.xxx.xxx.070/128   Windows Server
10101000.00000001.00000001.01000111   168.xxx.xxx.071/128   SQL Server / SSRS Instance
10101000.00000001.00000001.00000010   168.xxx.xxx.002/128   Gateway (Assumption 1)
10101000.00000001.00000001.01100010   168.xxx.xxx.100/128   Gateway (Assumption 2)
11111111.11111111.11111111.10000000   255.255.255.128/025   Subnet Mask / CIDR

ターゲットIPアドレスとバイナリ表記

10101000.00000000.00000000.00110011   168.xxx.xxx.051/128   SQL Server

例1:SQL / SSRSインスタンスIPよりも低いゲートウェイIP

この例では、ゲートウェイのIPアドレスがSQL Server / SSRSインスタンスのIPアドレス、つまり168.001.001.002よりも低いと仮定します。

Windows ServerとSQL Server / SSRSインスタンスの両方のバイナリアドレスを比較すると、次のようになります。

SQL/SSRS Instance IP
10101000.00000001.00000001.00000010 (Gateway Assumption 1)
10101000.00000001.00000001.01000111 (SQL/SSRS)
-----------------------------------
xxxxxxxx.xxxxxxxx.xxxxxxxx.x------- (x=matching high order bits)

Window Server IP
10101000.00000001.00000001.00000010 (Gateway Assumption 1)
10101000.00000001.00000001.01000110 (Windows)
-----------------------------------
xxxxxxxx.xxxxxxxx.xxxxxxxx.x------- (x=matching high order bits)

結果の例1

この例では、両方のIPアドレスが一致する高位ビット(または最長一致プレフィックス)の量が同じです。これまで、http.sysプロセスは発信通信にどちらかのIPアドレスを使用していました。

例2:SQL / SSRSインスタンスIPよりも高いゲートウェイIP

この例では、ゲートウェイのIPアドレスがSQL Server / SSRSインスタンスのIPアドレス、つまり168.001.001.100よりも大きいと仮定します。

Windows ServerとSQL Server / SSRSインスタンスの両方のバイナリアドレスを比較すると、次のようになります。

SQL/SSRS Instance IP
10101000.00000001.00000001.00000010 (Gateway Assumption 2)
10101000.00000001.00000001.01100010 (SQL/SSRS)
-----------------------------------
xxxxxxxx.xxxxxxxx.xxxxxxxx.x------- (x=matching high order bits)

Windows Server IP
10101000.00000001.00000001.00000010 (Gateway Assumption 2)
10101000.00000001.00000001.01100010 (Windows)
-----------------------------------
xxxxxxxx.xxxxxxxx.xxxxxxxx.x------- (x=matching high order bits)

結果の例2

ゲートウェイのIPアドレスがWindowsサーバーおよびSQL / SSRSインスタンスのIPアドレスよりも高くなっている場合でも、一致する上位ビット(または最長の一致するプレフィックス)の量は同じです。これまで、http.sysプロセスは発信通信にどちらかのIPアドレスを使用していました。

これまでの調査結果のまとめ

これまでのところ、http.sysプロセスがWindowsサーバー(.70)のSQL / SSRSインスタンス(.71)で実行される発信通信に使用するIPアドレスを特定することは不可能です。

「あなたが不可能を排除したとき、どんなに残っていても、ありそうもないが、真実であるに違いない」-シャーロックホームズ

前述のRFCおよびMicrosoftの知識により、送信元IPアドレスを正確に特定/選択/定義できる状況があります。しかし、IPアドレスが互いに近すぎたり、ゲートウェイに近すぎたりする場合は、すべてが運に任されています。またはそれは?

私は(ファイアウォール)ルールを作成する立場にあり、Microsoftは...

実装(それ)には、送信元アドレスから選択する他の手段があります。たとえば、実装が何らかの方法でどの送信元アドレスが「最良の」通信パフォーマンスをもたらすかを知っている場合。

...そして、http.sysプロセスのIPアドレスを決定するために私がしなければならないすべては、目的のIPアドレスを持つファイアウォールルールを1つだけ作成することです。

何が起こるのですか

  1. 168.xxx.xxx.71から168.xxx.xxx.51:1433までのファイアウォールルールを定義します
  2. SQL / SSRSインスタンスのhttp.sysコンポーネントはRFC 3484に準拠し、定義されたルールに従ってソースIPを選択します
  3. (NIC1上の)IPアドレス168.xxx.xxx.71は、ポート1433を介してIPアドレス168.xxx.xxx.51に到達するためのソースIPアドレスとして決定されるため、すべての発信パケットに割り当てられます

利点

  1. 私はRFC 3484の実装を決して妨害していません
  2. 私はルートやARP構成をいじっていません
  3. RFC 3484およびMicrosoftの実装に準拠しています
  4. レジストリ設定やシステム構成をハッキングしていません
  5. ファイアウォールルールが1つ少ない

検証

ファイアウォールルールからIPアドレスを削除する必要はありませんが、設計/定義どおりに機能することを確信しています。要約が続きます。

歴史

編集1最初の投稿
編集2回答を整理、履歴セクションを追加


1
あなたの論理は合理的であるように見え、現在の動作を決定するために明らかにかなりの労力を費やしました。ただし、実装の詳細が予告なしに変更されないという保証がないため、実装の詳細に依存することは危険です。
イェンスエーリッヒ

「壊れた設計」について相互に同意できますか?私はRFC 3484とそのMicrosoftの実装に依存していることに同意しますが、他にどのようなオプションがありますか?安全のために、デュアルファイアウォールルールを使用する必要がありますか?
John aka hot2use 16

1
はい、2つのルールが唯一の安全なオプションです。私はそれが正しく実装されておらず、非常にうまくいっていないことに完全に同意します。
イェンスエーリッヒ

4

SSRSは、いくつかの標準データソースと他の.NETデータソースをサポートします。

https://msdn.microsoft.com/en-ca/library/ms159219.aspx

データソースにSQLネイティブクライアントを使用している場合、ソースIPアドレスを指定するオプションはありません。

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring(v=vs.110).aspx

したがって、ネットワーク接続を設定するときに、Bind()メソッドの実行中にクライアントがIPADDR_ANYを使用するのは当然のことです。これにより、Windowsが決定を下します。

Windows 2008以降のアドレス選択は、ネクストホップと一致する最大ビット数に基づいています。つまり、デフォルトゲートウェイ(または定義した特定のルート)に応じて答えが異なります。

https://blogs.technet.microsoft.com/networking/2009/04/24/source-ip-address-selection-on-a-multi-homed-windows-computer/

ダイアグラムにはルートやゲートウェイについての言及はありませんでした。

幸運を!


デフォルトのゲートウェイとして、168.xxx.xxx.002または168.xxx.xxx.100を想定できます。IP選択プロセスには何の影響もありません。.70と.71の両方のIPアドレスは、一致する最長のプレフィックスが同じです。
John aka hot2use 16

あいまいであるため、skipassource(blogs.technet.microsoft.com/rmilne/2012/02/08/…)を使用することもできますが、すべての送信トラフィックに影響します。それ以外の場合は、両方のルールを作成する必要がありますb / c保証はまったくありません。現在システムが常に同じIPを選択している場合でも、将来の更新により設定が壊れる可能性があります。
イェンスエーリッヒ

記事でSKIPASSOURCEパラメーターについて読み、修正プログラムで導入されたため、IP実装の将来のバージョンで削除される可能性があるという結論に達しました。
John aka hot2use 16

1
私の経験(20年以上)では、修正プログラムは通常、(1)完全にテストされていない修正をすばやく提供する、または(2)永続的なソリューションが開発される一時的な修正を提供するために使用されます。どちらにしても、この機能が削除されるとは思わないでしょう。ただし、他のすべてのファイアウォールルールを調整する必要がある残りの構成b / cに悪影響を与える可能性があります。
Jens Ehrich
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.