NGINX アクセス モジュールと内部 DNS: ローカル クライアントのみを許可する方法

NGINX アクセス モジュールと内部 DNS: ローカル クライアントのみを許可する方法

serverfault で検索しましたが、これに対する答えは見つかりませんでした。正しいキーワードを知らないだけかもしれませんし、概念的な誤解かもしれません。どなたか助けていただければ幸いです。

状況:

  1. 私のローカルサービスはNGINXリバースプロキシの背後で実行されています
  2. 私はルーター上の LAN DNS (Draytek)*.example.com へのローカル要求をローカル サーバー (192.168.1.2) に直接解決します。

インターネットに接続していなくても、ドメインはローカル サーバーに解決され、すべてのサービスにアクセスできます。これが、私が LAN DNS を使用する理由です。これまでのところ、順調です。

ここで、ローカルクライアントのみが特定のサービスにアクセスできるようにしたいのですが、NGINX アクセス モジュールと:

allow 192.168.1.0/24;
deny all;

しかし、NGINX はクライアントの IP (192.168.1.100) ではなくルーターのパブリック IP のみを認識するため、すべてのリクエストが拒否されます。

[...] access forbidden by rule, client: 123.123.123.123, server: service.example.de, request: [...]"

私の質問は次のとおりです:

このシナリオでは、NGINX 上のローカル クライアントとリモート クライアントをどのように区別すればよいでしょうか?

ネットワーク図へのリンク


答え1

まず前提/条件は、ルータがX-転送先ヘッダーまたは類似のもの(実際のクライアント IP のトレースを保持)

まずクライアントのIPを解決する必要があります。ngx_http_realip_モジュール

そこで提供されている設定例:

set_real_ip_from  192.168.1.0/24;
set_real_ip_from  192.168.2.1;
set_real_ip_from  2001:0db8::/32;
real_ip_header    X-Forwarded-For;
real_ip_recursive on;

これにより、アクセス チェックに使用される IP が正しいもの (実際のクライアント) になります。

注意すべき点は、このような構成では、X-Forwarded-Forヘッダーにルーターを追加しようとすると、自動的にproxy_add_x_forwarded_forでは、追加されたIPは前のディレクティブによって変更されているため、この特定のケースについては議論されています。スタックオーバーフローについて

関連情報