背景
食いしん坊バインド9
数年前に家を出て別の都市に引っ越さなければなりませんでした。 その結果、私は自分で組み立てたメディアセンターを離れ、新しい場所でAuraHD Plusセットトップボックスを購入する必要がありました。 特に映画などのサービスにアクセスするためのアプリケーションが組み込まれていると考えると、それはお金のために悪いデバイスではありません。
すべては大丈夫ですが、広告はくしゃみごとにあります。 私はそれを切る方法を発明しなければなりませんでした。 最初に考えたのは、DNSサーバーを上げて、/ dev / nullのすべての好ましくないドメインを127.0.0.1に送信することでした。 この時点で、私のホームサーバーが戻ってきて、NASサーバーとしてキャビネットでその名誉を獲得しました。
すぐに言ってやった。 Bind9が発生し、いくつかのドメインの構成が登録され、すべてが問題ありません。 飛んでいます。
数週間後、アイデアが思い浮かびました。この方法を使用して、自宅のすべてのデバイスの広告をフィルタリングしてみませんか。 ポイントはトリッキーではありません。
広告ドメインを含むリストを検索すると、いくつかのURLに移動し、それらの解析を開始しました。 Habrのオープンスペースのどこかで、Bind9の構成を生成するためのスクリプトの解析と作成に役立つ記事がありました(著者に感謝しますが、リンクが見つかりませんでした。許してください)。
すべてが完了したので、Bind9を起動します。 開始して、すべてが順調です。 1つを除きます。 この食いしん坊のモンスターはRAM全体を食べて、スワップを要求しました。 40万ドメインの5ギガバイトのメモリ!
Intel Atomで貧弱なサーバーをこのように拷問し、私はこれが事実ではないと判断しました。
PowerDNSの移行
他のオプションをグーグルで調べてみると、Bind9は必要なものではないという結論に達しました。 非常に多くのドメインをシャベルで処理できる、より軽量のリソースDNSサーバーが必要です。
PowerDNSがポイントに近づいたのは、 彼はBind9の設定を自分で読み、自分の仕事で使用できます。 バックエンドBind9をインストールし、構成しました(実際、問題はありません)。
結果はすべての予想を上回りました-5ギガバイト後に700 MBのメモリが消費されました! これは夢ではありませんか? 特にサーバーごとに4 GBのみ。 :)
これは、Bind9の構成が確かに良いと思うまで、数か月間は機能しましたが、PowerDNSの開始はかなり遅いです。 すべてのドメインを下品に「吸う」時間は長く、このプロセスを何らかの形で最適化する価値があります。
最適化から、これらすべてのドメインのみにMySQLの広告を注ぐ必要がありました。 これにより、ドメインのリストをより柔軟に管理し、内部ドメインを追加、削除、維持できます。
袖はまくり上げて始めました。 それは非常に簡単であることが判明しました-zone2sqlはすべての問題を解決します:)これをすべてドッカーに包んで上げます。 すぐに問題なく実行されました。
それで、それはすでに家で半年間飛んで、喜ぶ。 しかし今日、 Samsungスマートフォン用の広告ブロッカーに関する記事がHabréで公開され、私はコメントでパブリックドメインで自分の記事を公開するよう求められました。
まあ、共有。
依存関係
ドッカー
これらはすべてドッカーコンテナー内で回転するため、このことは100%必要です。 すべてのアクションは、Ubuntu Linuxに適用されます。 自宅や職場で使用しています。
それは非常に簡単にドキュメントに従ってインストールされます:
curl -sSL https://get.docker.com/ | sh
スクリプトが完了すると、Dockerの準備が整い、使用できるようになります。
別のインストール方法が必要な場合は、いつでもドキュメントを参照して好きなものを選択できます。
docker-compose
Docker Composeは、Dockerコンテナーでのプロセスの計画と編成(開始、シャットダウン、コンテナー間の接続とボリュームの作成など)を目的としています。
インストールはdocker自体ほど複雑ではありません。
curl -L "https://github.com/docker/compose/releases/download/1.8.1/docker-compose-$(uname -s)-$(uname -m)" > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
独自の広告フィルターを起動する
リポジトリを複製する
論理的なアクションであり、おそらくこれを行う必要がある理由の説明は必要ありません。 :)
sudo mkdir /opt/docker sudo chown <user> /opt/docker git clone https://github.com/DmitriyLyalyuev/powerdns-no-ads /opt/docker/pdns cd /opt/docker/pdns
データベースを作成する
docker-compose up -d mysql
データベースユーザー
MySQLサーバーのコンソールにアクセスするには、以下を行う必要があります。
docker exec -ti pdns_mysql_1 mysql -u root -p
rootユーザーのデフォルトのパスワードは12345です。
ユーザーとデータベースを作成します。
CREATE USER 'powerdns_user'@'%' IDENTIFIED BY 'powerdns'; GRANT ALL PRIVILEGES ON powerdns.* TO 'powerdns_user'@'%'; CREATE DATABASE powerdns; exit
DNSサーバーを起動します
docker-compose up -d
広告ドメインリストの更新
リストを更新するには、次を実行します:
docker exec -ti pdns_pdns_1 bash cd /etc/powerdns/bind ./getnewlist.sh && ./import.sh && ./clean.sh exit
ホワイトリスト
ドメイン除外のリストは、/ opt / docker / pdns / powerdns-server / bind / getnewlist.shファイルの先頭にあります。
使用し、実験し、インターネットをよりきれいにしましょう。 少なくとも家では。 ;)