ルックアップに基づいてBINDでスクリプトを実行することは可能ですか


9

ローカルネットワーク上でBINDをDNSサーバーとして設定し、ルックアップを取得したときにスクリプトを実行することは可能ですか?

着信DNSルックアップに基づいてPythonまたはBashスクリプトを実行したいのですが、どうすれば解決できますか?

Bindで可能な場合は方法を教えてください。可能でない場合は、Ubuntuで実行される他のDNSサーバーの実装で可能かどうかを教えてください。

どうもありがとうございました。


1
これは少し奇妙に見えます。達成しようとしていることを聞いてもいいですか。
sr_

それはちょっと奇妙かもしれません;)私がやろうとしていることは、ルックアップの宛先IPが特定の外国にある場合、私のデータベースでルックアップすることです。特定のISP、または場合によってはVPN接続へのルーターとしても機能するサーバー。多くのルートを設定しようとしましたが、99%は使用されず、パフォーマンスは非常に悪いです。オンデマンドで実行できる場合、DNSのパフォーマンスは低下しますが、私の場合、影響はありません。
Gunnar

うーん、ハンガリーのウェブサイトがGoogle Ad-blahを使用しているとしたら、これはひどく失敗するかもしれませんね。(しかし、私には申し訳ありませんが、代替案はありません。)
sr_

あなたが何をしなければならないのかというと、地理的な場所と照合しなければならないIPからリクエストを受け取るので、私はあなたが何を達成しようとしているのかについて興味があります。特定のルートを介してそのIPに応答するサーバー。リクエストがすでにBINDにしたので意味がありませんか?
Karlson、2012

あなたが達成しようとしていることの私の推測が正しい場合(非標準のゲートウェイを介して特定の接続をルーティングする)、それを行うために間違った場所にバインドしていませんか?ポリシールーティングやiptablesを調べましたか?
Alexios

回答:


1

BINDログの解析やBINDへの干渉をまったく必要としない2つの追加オプションを考えることができます。

1)ポートのミラーリング-パケットを複製して、アプリケーションがリッスンしている別のポートに送信し、DNS要求を解析して、アクションを実行します。dpktまたはscapyまたは同様のパケットクラフトライブラリは、生のリクエストを解析するのに役立ちます。

2)あるタイプのパケットスニッフィングライブラリを使用して、要求を受動的に監視します。以下は使用例scapyです。

from scapy.all import *

def handler(req):
    if req.haslayer(DNS) and req.getlayer(DNS).qr == 0:
        ip = req.getlayer(IP)
        dns = req.getlayer(DNS)

        q = dns.qd
        print q.qname # simply print domain name


if __name__ == '__main__':
    sniff(iface="eth0", filter="udp and port 53", prn=handler, store=0)

明らかに、これは単なる原始的な例です。照会されたドメインの名前のみを出力しますが、もちろん、大量のロジックを追加できます。scapyのドキュメントを参照すると、DNSリクエストのすべてのフィールドがすぐに利用できることがわかります。


これは面白いですね。これを調べます。ありがとう:-)
Gunnar

0

これは、bind-serverログを監視することで実行できます(クエリのログ記録をオンにする必要があります)。幸運を...


すべてのバインドクエリをログに記録すると、パフォーマンスが著しく低下することに注意してください。私が上でこれをお勧めしません任意の生産レベル権威サーバー。
Shadur

そのbind-serverの負荷に依存します。また、ログをRAMディスクなど/dev/shmに書き込むこともできます。
Nils

ログを記録swatchし、ログでOSSECを実行してスクリプトを呼び出します。いずれにしても、長期的にはあまり良い考えではありません。
ジョディC

0

イベントはバインドに実装されているようなものはありません。それは必要ありません。

一部の組織で一部のユーザーへのアクセスを制限するために使用されているアプリケーションファイアウォールを見回すことができます。そこではあなたが望むものを達成するより多くのチャンスがあります。

ルートの設定も良い考えのようです。結局、バインドとトリガーされたスクリプトの実行で達成したいことも非効率的です。次のことを行う必要があります。

for each dest IP 
look up through your database  
if match set the route
then the OS will see and use the root

ルートの負荷の設定は問題ではなく、パフォーマンスに顕著な影響を与えることはありません。企業のルーターにはいくつのルートがあると思いますか?何百?完全ではない...そして、それらは必ずしも豪華なハードウェア構成を持っているわけではありません。真剣に、あなたは大丈夫です、深刻なオペレーティングシステムは、多くのルートを処理し、ルックアップを最適化するように特別に設計されています。

そもそもやりたいことは、ルーティングテーブルの上にデータベースを使用することです。これは別の種類のデータベースになります。複雑にしないでおく。BGPサーバーでは、多くのルートが実際には政治的/経済的理由で選択/推奨され、各ISP /組織はそれを行うことができ、これらすべてがこの目的のために特定のルートを追加します。多くの場合、通過費用や裁判所命令がこのような措置の原因です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.