[DNS][自分用メモ] 自宅環境にdnsdist 1.1.0を導入してみた。

     
    • 最終更新日時:2017/08/11 10:47:03

    d12082b1-579c-4158-9208-b483c9ccc1d9.png

    dnsdist Overview — dnsdist 1.2.0-alpha1 documentation /
    http://dnsdist.org/

    前々から気になっていたDNS firewall?やらロードバランサー機能を内包しているdnsdistが気になっていたので自宅環境に導入してみました。

    トップにはこういうことが書いてあります。

    dnsdist is a highly DNS-, DoS- and abuse-aware loadbalancer. Its goal in life is to route traffic to the best server, delivering top performance to legitimate users while shunting or blocking abusive traffic. /
    http://dnsdist.org/

    悪意のあるトラフィックを制御したり、ロードバランスしたり、悪意のある問い合わせをブロックしたり、色々なことができるようです。

    とりあえず以下のバージョンのものを導入しました。
    $ dnsdist --help
    dnsdist 1.1.0

    コンパイルするには、結構、関連するライブラリがあるので、公式が用意しているrepositoryから導入するのが一番いいと思います。
    私は、手元で用意できた環境がaarch64な変則的な環境だったので、Ubuntuの公式のレポジトリからパッケージを持ってきてゴニョゴニョしていれました。
    とりあえず完成した構成は以下のような感じになります。効率とかは一切考えていません。

    dns_infra.png

    PrimaryとかSecondaryとか書いてますが、あくまでクライアント側で設定する際の問題なので、特に大きな意味はありません。
    各々3台の環境を用意して、それぞれにコンテンツDNSとキャッシュDNSを搭載している形になります。(コンテンツDNSにNSDを選択しているのは、自分にはどうしてもBINDを扱える気がしていないからです)
    PrimaryとSecondaryに該当する環境に対して、dnsdistを導入しています。

    -- Server related
    newServer{address="192.168.1.223:9953", pool="resolver"}
    newServer{address="192.168.1.224:9953", pool="resolver"}
    newServer{address="192.168.1.248:9953", pool="resolver"}

    newServer({address="192.168.1.223:10053", pool="auth"})
    newServer({address="192.168.1.224:10053", pool="auth"})
    newServer({address="192.168.1.248:10053", pool="auth"})

    -- forwarding rule
    authdomains = newSuffixMatchNode()
    authdomains:add(newDNSName("kometch.local."))

    allow_recursion=newNMG()
    allow_recursion:addMask("192.168.0.0/16")

    addAction(SuffixMatchNodeRule(authdomains), PoolAction("auth"))
    addAction(NetmaskGroupRule(allow_recursion), PoolAction("resolver"))
    addAction(AllRule(), RCodeAction(5))

    -- listening interface and port
    addLocal("0.0.0.0:53", false)
    addLocal("[::]:53", false)

    -- access control
    setACL({"192.168.0.0/16"})

    コンテンツDNSをauthというpool単位にまとめ、キャッシュDNSをresolverという単位にまとめています。
    内部ドメイン名として使用している"kometch.local"という問い合わせが、192.168.0.0/16の範囲のソースアドレスからの問い合わせが来た場合だけ、authというpoolに登録されているコンテンツDNSに問い合わせを行う形式です。

    設定そのものは東さんの資料のままパクって大変参考にさせていただきました。
    bind2other /
    https://dnsops.jp/bof/20161201/bind2other.pdf

    他にもサーバ単位に対して、重み付けをしてラウンドロビン的なこともしています。が、家庭内の問い合わせの数を考えると底までする必要はないです。そもそもロードバランスする必要もないですが。
    キャッシュとコンテンツが分離していて、且つ、振り分けが自由にできることで、色々なパッケージを試せるのがいいかなぐらいです。
    とりあえず、問い合わせのレイテンシやdropなどもdnsdist側で確認できますし、(もちろん、各DNSパッケージでも統計などは取れますが)各DNSパッケージに対して問い合わせが行く前にフィルタを噛ましたりできるのは、面白いことができると思います。

    そろそろdnsdist 1.2.0が出そうな感じですが(Open-Xchangeカンファレンスがあるらしいので、たぶんその辺でしょう)、こちらについても色々な機能が更に実装されそうな感じなので、バージョンアップが出来たなら、さらに試してみようかと思います。


    追伸:
    ネットワークスイッチを噛ましているとはいえ、各環境への問い合わせのレイテンシに偏りがあるのが気になるところです。これってそれぞれのDNSパッケージ自体の性能ってことになるんでしょうか?
    関連記事


    Pagination

    Trackback

    Trackback URL

    https://kometchtech.blog.fc2.com/tb.php/2049-e9c8f79e

    Comment

    Post Your Comment

    コメント登録フォーム
    公開設定

    Utility

    Profile

    kometch

    Author:kometch
    なんちゃってエンジニアです。
    2009年10月から業務都合により大阪勤務になりました。
    2010年1月、HYBRID W-ZERO3を購入しました。
    2010年11月、HTC Desire HDを購入しました。
    2012年2月、都内の会社に転職しました。
    2012年5月、HTC One Xを購入しました。
    2012年8月、事情により休職しました。
    2012年8月、SONY Xperia SXを購入しました。
    2013年1月、一身上の都合により退職しました。
    2014年3月、都内の会社に就職しました。
    2016年8月、HPC系の会社に転職しました。

    Amazonほしい物リスト
    何か問題などありましたら、こちらまで。 Twitter:@kometchtech follow us in feedly

    カレンダー

    09 | 2017/10 | 11
    1 2 3 4 5 6 7
    8 9 10 11 12 13 14
    15 16 17 18 19 20 21
    22 23 24 25 26 27 28
    29 30 31 - - - -

    全記事(数)表示

    全タイトルを表示

    バロメーター

    カテゴリー

    カテゴリークラウド

    アーカイブ

    検索フォーム

    FC2カウンター

    現在の閲覧者数

    現在の閲覧者数:

    Amazonアソシエイト

    スポンサードリンク

    月間ページランキング

    ブログパーツ

    サイトランキング

    スポンサードリンク

    スポンサードリンク