LoginSignup
1

More than 5 years have passed since last update.

tcp-upstreamを設定したunboundでUDPしか受け付けないDNSを組み合わせて使う

Last updated at Posted at 2014-08-02

はじめに

これは、unboundで上流への問い合わせをTCPのみにするオプションであるtcp-upstreamを有効にした状態で、一部のドメインに対してUDPしか受け付けないDNSコンテンツサーバへ問い合わせたいときに行った内容のメモです。
ここでは、UDPしか受け付けないDNSコンテンツサーバとして、NTT東日本のサービス情報サイト(NGN IPv4)のDNSコンテンツサーバを取り上げます(Bフレッツ時代はTCPも通ったのですが、NGNに移管されてからはダメになった)。

やり方

TCPによるDNS問い合わせをUDPに変換する

トンネリングソフトウェアであるstoneを使って、TCPによるDNS問い合わせをUDPに変換することでtcp-upstreamが有効でも間接的にUDPのDNSコンテンツサーバを使用できるようにします。
やっていることは、stone に UDP ⇔ TCP 相互変換機能を実装 と同じです。
具体的なコマンドとしては、

$ stone -n <DNSコンテンツサーバへのアドレス>:53/udp 127.0.0.1:10253

といった感じにします。

Gentoo Linux上で設定したので、このようなinitスクリプトを書いておきます(アドレスはサービス情報サイトのもの)。

#!/sbin/runscript

PID=/var/run/stone.pid
PROG=/usr/bin/stone
ARG="-n 123.107.190.5:53/udp 127.0.0.1:10253"
USER=nobody
GROUP=nobody

depend()
{
        need net
        before unbound
}

start()
{
        start-stop-daemon --start --user $USER --group $GROUP --pidfile $PID --make-pidfile --background --exec $PROG -- $ARG
        return $?
}

stop()
{
        start-stop-daemon --stop --pidfile $PID
        return $?
}

これで、123.107.190.5:53/udpを127.0.0.1:10253/tcpで使用することができます。

unboundへの設定

stub-zoneを使って、サービス情報サイトで使われているドメインを127.0.0.1:10253/tcpに問い合わせるようにするだけです。
tcp-upstreamが有効なので、自動的にTCPのみでの通信になります。

    stub-zone:
        name: "flets."
        stub-addr: 127.0.0.1@10253

    stub-zone:
        name: "v4flets-east.jp."
        stub-addr: 127.0.0.1@10253

問題点

EDNS0が絡むとまずそうですが、この例ではそこまで大きな応答は返ってこないだろうし大丈夫かも。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1