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は私がやりたいことを行えないのですか?
設定ファイルを編集できます:
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にログを送信することです。
あなたはtcpdumpをインストールして、ポート53に行くパケットを嗅ぐことができます
tcpdump -i eth0 -l -vvv dst Host 192.168.1.100 and dst port 53 >> dump.log
このファイルは非常に速く拡大し、ルーターのメモリがすぐに不足します。 USBスティックを使用してログを保存すると、これを防ぐことができます。
/etc/config/dhcp
に追加:
config dnsmasq
[...]
option logqueries '1'
そして、dnsmasqを再起動します。
ログはシステムログに書き込まれ、ターミナルで、またはLuCiを介してlogread -f
で表示されます。
ルーターを使用している場合、内部フラッシュメモリにログを大量に書き込みたいとすると、フラッシュメモリの寿命が短くなり、フラッシュメモリが壊れる可能性があります。
ログをサードパーティのサービスに表示してもかまわない場合は、代わりにOpenDNSを使用して目的を達成することをお勧めしますか?
私が書いたチュートリアル からの引用
OpenDNS DNS-O-Maticのセットアップ
まず、ログを維持するためにDNS-O-MaticおよびOpenDNSのアカウントが必要です。
- DNS-O-Matic(
www.dnsomatic.com
)アカウントにサインアップします。特殊文字を含まないパスワードを使用してください。私が覚えている限りでは、これはOpenWRTの設定に問題を引き起こしました。長さを長くすることにより、パスワードの強度の損失を補うことができます。- 同じログイン資格情報を使用して、OpenDNSダッシュボード(
dashboard.opendns.com
)にサインインします- [設定]で、ネットワークに名前を付けます。私はそれを「家」と呼びます
- 設定:
<Your network label>
、これを選択- 統計とログをクリックします
- 統計とログを有効にする
- DNS-O-Maticに戻る
- サービスを追加する、OpenDNS
- ホームネットワークを選択してください
OpenWRTの構成
OpenWRTを設定して、パブリックIPアドレスが変更されたとき、つまりルーターの再起動、WANリンクのドロップと再接続など)が発生したときに、DNS-O-Maticサービスを介してOpenDNSを更新する必要があります。
注:これらの手順は、OpenWRT Chaos Calmer用です。
重要:ルーターの空き容量によっては、非SSLオプションを使用する必要がある場合があります。
System > Software
に移動します- リストを更新する
- SSLを使用する場合は、
ca-certificates
およびwget
をインストールします- SSLを使用したくない、または使用できない場合は、
wget-nossl
をインストールしてくださいddns-scripts
およびluci-app-ddns
をインストールします- サービス>ダイナミックDNSに移動します
- 新しいエントリを追加し、それを
dnsomatic
と呼びます- 選択-カスタム-DDNSサービスプロバイダー
- 何も置換せずに、カスタム更新URLを
http://[USERNAME]:[PASSWORD]@updates.dnsomatic.com/nic/update?hostname=all.dnsomatic.com&myip=[IP]&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG
に設定します- ホスト名を
dnsomatic.com
に設定します- ユーザー名とパスワードを入力してください
- SSLオプションを使用している場合は、[HTTPセキュアを使用]をオンにします
- URLの[IP]部分は、[詳細設定]の[IPアドレスソース]フィールドと[ネットワーク]フィールドで定義されているとおりに置き換えられます。
- 保存して適用