私のLinuxルーターでローカルDNSサーバーが実行されています。私のLAN(192.168.1.0/24)からの要求のみを許可するように設定しました。また、サーバーが独自にDNSに照会できることを願っています。これを行うには、127.0.0.1もソースとして受け入れます。
問題は、ボックスが自分で実行するすべてのクエリにソースIPが自分の外部IPに設定されていることです。tcpdump
サーバーが127.0.0.1で独自に照会すると、パケットは宛先IP 127.0.0.1のインターフェイスに到着しますが、送信元lo
IPは私のISPのIPです。
使用してdig -b
も役に立ちません。同じ効果が発生します。
つまり、許可されたIPにISPのIPを明示的に追加しないと、DNSルックアップはローカルでは機能しません。私のIPは動的である可能性があるため、これは本質的に完全なIP範囲をDNSサーバーに追加することを意味します。ソースIPが正しく設定されているので、私のLAN上のコンピュータでは問題にならないようです。問題は、サーバー自体に対するローカルクエリに関連しています。
私は、サーバーが明示的なソースIPアドレス(必ずしもソースインターフェイスである必要はありません)を使用して独自にクエリするように指示できるようにしたいと思います。これは可能ですか?
答え1
サーバーのメインインターフェイス以外のソースクエリを設定するには、query-source
in BINDオプションを使用します。
サーバー/デーモンによって開始されたクエリのみがそのIPを使用して実行されるように設定されています。
注意してください内部/ RFC 1918個人アドレスの場合、外に出るときにNATをしなければなりません。
私のサーバーによると、次の場所にあります/etc/bind/named.conf.options
。
options {
query-source address X.X.X.X;
}
XXXXはあなたのIPアドレスです。
別のオプションは、IPアドレスが登録され、DNS名に基づいてルールが適用される動的DNSサービスを使用することです。もちろん、IPアドレスが変更されるたびにルールを再適用するためにスクリプトをDHCPフックとして配置する必要があるという軽微な不快感があります。
答え2
@roaimaのコメントは私を正しい方向に導いた。
私のiptables POSTROUTINGルールは次のとおりです。
-t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to <my public IP>
ルータの独自のIPを除外するために上記のルールを追加すると、すべての問題が解決されます。
-t nat -I POSTROUTING 1 -s 192.168.1.1 -j ACCEPT
@roaima、答えで投稿したい場合は共感を押していただきます。