web-dev-qa-db-ja.com

OpenWRTルーターを介して行われたすべてのDNSリクエストをログに記録する方法は?

Dnsmasqを実行しているOpenWRTルーターがあります。ルーター経由で要求された各ドメインを含むファイルを作成したいと思います。出力は次のようになります。

google.com
cnn.com
wikipedia.com
news.google.com
gmail.com

理想的には重複はありません。おそらく、必要に応じて重複を削除するcronジョブをセットアップできます。現在、私はそれらをログに記録するための良い方法を見つけ出そうとしています。 dnsmasqのオプションを見ました。次のオプションが見つかりました:

 -q, --log-queries                       Log DNS queries.
 -8, --log-facility=<facilty>|<file>     Log to this syslog facility or file. (defaults to DAEMON)
--log-dhcp                          Extra logging for DHCP.
--log-async[=<integer>]             Enable async. logging; optionally set queue length.

OpenWRTでは、これらの設定は/etc/init.d/dnsmasqファイルに埋め込まれているようです。運が悪いので設定してみました。 :-(私の目標を達成する簡単な方法はありますか?

ああ!小さなハッカーを使って、ログファイルに書き込むことができました。ただし、このリストを作成するために必要なデータがありません。たぶんdnsmasqは私がやりたいことを行えないのですか?

11
exvance

設定ファイルを編集できます:

vi /etc/dnsmasq.conf

    # /etc/dnsmasq.conf
    log-dhcp
    log-queries
    log-facility=/tmp/dnsmasq.log

または、別の構成ファイルを編集します。

vi /etc/config/dhcp

    config dnsmasq
        ...
        option logdhcp '1'
        option logqueries '1'
        option logfacility '/tmp/dnsmasq.log'

次に、サービスを再起動します。

/etc/init.d/dnsmasq restart

ログファイルは、tail+awkを使用してリアルタイムで解析できます。

$ vi dnsmasq.awk

    #!/usr/bin/awk -f

    BEGIN {
      OFS = ",";
    }

    $5 == "query[A]" {
      time = mktime( \
        sprintf("%04d %02d %02d %s\n", \
          strftime("%Y", systime()), \
          (match("JanFebMarAprMayJunJulAugSepOctNovDec",$1)+2)/3, \
          $2, \
          gensub(":", " ", "g", $3) \
        ) \
      );
      query = $6;
      Host = $8;
      print time, Host, query;
    }

$ chmod +x dnsmasq.awk

$ tail -f /tmp/dnsmasq.log | ./dnsmasq.awk

1468999090,192.168.1.100,google.com
1468999092,192.168.1.101,youtube.com
1468999095,192.168.1.102,facebook.com
1468999097,192.168.1.100,qa.sockets.stackexchange.com

より高度な方法は、ファイルビートを介してリアルタイムでELKにログを送信することです。

14
kev

あなたはtcpdumpをインストールして、ポート53に行くパケットを嗅ぐことができます

tcpdump -i eth0 -l -vvv dst Host 192.168.1.100 and dst port 53 >> dump.log

このファイルは非常に速く拡大し、ルーターのメモリがすぐに不足します。 USBスティックを使用してログを保存すると、これを防ぐことができます。

4
Joe

/etc/config/dhcpに追加:

config dnsmasq
    [...]
    option logqueries '1'

そして、dnsmasqを再起動します。

ログはシステムログに書き込まれ、ターミナルで、またはLuCiを介してlogread -fで表示されます。

2
dersimn

ルーターを使用している場合、内部フラッシュメモリにログを大量に書き込みたいとすると、フラッシュメモリの寿命が短くなり、フラッシュメモリが壊れる可能性があります。

ログをサードパーティのサービスに表示してもかまわない場合は、代わりにOpenDNSを使用して目的を達成することをお勧めしますか?

概念的に

  1. ルーターがWAN= IPを変更するとすぐに、新しいIPをOpenDNSに通知する必要があります。
  2. DNSルックアップにOpenDNSサーバーを使用するようにルーターを構成する必要があります。
  3. ネットワークのDNSルックアップ履歴は、数時間の遅延の後でもOpenDNSダッシュボードに表示されます。ここでは、ドメインがクエリされた回数が上位から順に表示され、1時間あたりのルックアップを示すグラフも表示されます。

細部

私が書いたチュートリアル からの引用

OpenDNS DNS-O-Maticのセットアップ

まず、ログを維持するためにDNS-O-MaticおよびOpenDNSのアカウントが必要です。

  1. DNS-O-Matic(www.dnsomatic.com)アカウントにサインアップします。特殊文字を含まないパスワードを使用してください。私が覚えている限りでは、これはOpenWRTの設定に問題を引き起こしました。長さを長くすることにより、パスワードの強度の損失を補うことができます。
  2. 同じログイン資格情報を使用して、OpenDNSダッシュボード(dashboard.opendns.com)にサインインします
  3. [設定]で、ネットワークに名前を付けます。私はそれを「家」と呼びます
  4. 設定:<Your network label>、これを選択
  5. 統計とログをクリックします
  6. 統計とログを有効にする
  7. DNS-O-Maticに戻る
  8. サービスを追加する、OpenDNS
  9. ホームネットワークを選択してください

OpenWRTの構成

OpenWRTを設定して、パブリックIPアドレスが変更されたとき、つまりルーターの再起動、WANリンクのドロップと再接続など)が発生したときに、DNS-O-Maticサービスを介してOpenDNSを更新する必要があります。

注:これらの手順は、OpenWRT Chaos Calmer用です。

重要:ルーターの空き容量によっては、非SSLオプションを使用する必要がある場合があります。

  1. System > Softwareに移動します
  2. リストを更新する
  3. SSLを使用する場合は、ca-certificatesおよびwgetをインストールします
  4. SSLを使用したくない、または使用できない場合は、wget-nosslをインストールしてください
  5. ddns-scriptsおよびluci-app-ddnsをインストールします
  6. サービス>ダイナミックDNSに移動します
  7. 新しいエントリを追加し、それをdnsomaticと呼びます
  8. 選択-カスタム-DDNSサービスプロバイダー
  9. 何も置換せずに、カスタム更新URLをhttp://[USERNAME]:[PASSWORD]@updates.dnsomatic.com/nic/update?hostname=all.dnsomatic.com&myip=[IP]&wildcard=NOCHG&mx=NOCHG&backmx=NOCHGに設定します
  10. ホスト名をdnsomatic.comに設定します
  11. ユーザー名とパスワードを入力してください
  12. SSLオプションを使用している場合は、[HTTPセキュアを使用]をオンにします
  13. URLの[IP]部分は、[詳細設定]の[IPアドレスソース]フィールドと[ネットワーク]フィールドで定義されているとおりに置き換えられます。
  14. 保存して適用
0
Leow Kah Man