【LAN】ローカルで好きな名前を使う【Unbound、DNS】

追記@2015-01-04

こういった用途には、DNSMasqというフリーのソフトウェアがあることを知りました。
主にLocalのDNSとDHCPサーバの役割のようです。LinuxやBSDで動くそうです。
オープンソースのwifiルーターのファームウェア、dd-wrtには標準で付属していますのでこれを使うのが最も容易かもしれません。

dnsmasq でDNSのキャッシュサービスを気軽に動かす
http://www.usupi.org/sysad/225.html
↑とても分かりやすい記事ですので挙げておきます


管理出来るローカルエリアネットワークで、好きな名前を使いたくなる時があります。たとえば、「wiki.lo」でwikiが動いているサーバーに飛んだり(lo=localです)、「gitlab.lo」でgitlabが動いているサーバーに飛んだりできれば楽ですね。

こういったことを実現するのに適した、Unboundというソフトがあります。

ローカル内のサーバを名前解決してアクセスするためにunboundを使う


↑この方のを参考にして自分でやってみました。ほとんど↑と同様です。差分は、

– IPV6を無効にした
– unboundへアクセスしてよいものを追加した
– wiki.loとgitlab.loの2つを登録した
– macでこのunboundへ聞きに行く方法を書いた
– NECルーターの設定方法を書いた

程度の僅かなものです。以下作業ログです。

想定しているサーバーはubuntuです。

# unboundをインストール
$ sudo aptitude install unbound -y

# unbound.confを編集 (このページの下に設定例があります)
$ sudo vi /etc/unbound/unbound.conf

# unbound.confが正しい設定が確認 (以下のような出力があればOK)
$ unbound-checkconf 
unbound-checkconf: no errors in /etc/unbound/unbound.conf

# unboundを起動
$ /etc/init.d/unbound start
 * Starting recursive DNS server unbound

# digで確かめてみる
$ dig wiki.lo @localhost

; <<>> DiG 9.8.1-P1 <<>> wiki.lo @localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;wiki.lo.			IN	A

;; ANSWER SECTION:
wiki.lo.		3600	IN	A	192.168.1.118

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Dec 29 21:07:44 2014
;; MSG SIZE  rcvd: 41

$ dig gitlab.lo @localhost

; <<>> DiG 9.8.1-P1 <<>> gitlab.lo @localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4415
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;gitlab.lo.			IN	A

;; ANSWER SECTION:
gitlab.lo.		3600	IN	A	192.168.1.118

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Dec 29 21:07:51 2014
;; MSG SIZE  rcvd: 43

そして、他のマシンから↑のunboundに名前解決しに行くには、/etc/resolv.confを↑のサーバーに指定してやる必要があります。DHCPで自動設定される場合もありますので、その場合はDHCPサーバーの設定に↑のマシンのIPアドレスを書きましょう。

– Linuxでの設定例 (↑のunboundのサーバーのIPアドレスを192.168.1.2とします。↓のように編集してやればよいという意味です)

$ cat /etc/resolv.conf 
nameserver 192.168.1.2

– Macでの設定例

Macの場合、resolv.confを書き換えても有効ならないようです。digは可能でしたがcurlやブラウザなどでは名前を引いてくるのに失敗します。どうやらシステム環境設定から行うようです。

システム環境設定→ネットワーク→詳細→DNS→DNSサーバーで-ボタンを押して既存のものを消して+ボタンを押して「192.168.1.2」を追加→OK→適用をクリック

です。

– NECのルーター(DHCPサーバー)の設定

Aterm WR8700Nの設定方法です。
「基本設定」→「接続先設定」→「高度な設定を表示」→ネームサーバ→「サーバから割り当てられたアドレス」のチェックをはずす→プライマリDNSに「192.168.1.2」と追加→「設定」をクリック→「保存」をクリック

unbound.conf
server:
# The following line will configure unbound to perform cryptographic
# DNSSEC validation using the root trust anchor.
#    auto-trust-anchor-file: "/var/lib/unbound/root.key"
 
#ログのエラーレベルの設定 0~5まで指定可能。数字が大きいほど詳細なエラーを出力
verbosity: 2                                    

# ipv6を使用しない
do-ip6: no   
 
# unboundが動作するディレクトリ
directory: "/etc/unbound"
 
# 使用するインターフェース。以下ではデフォルトルートを指定
interface: 0.0.0.0
 
# unboundへのアクセスを許可するIPアドレス範囲
access-control: 127.0.0.1/32 allow              
access-control: 192.168.1.0/24 allow
access-control: 192.168.0.0/24 allow
 
username: "root"
 
# unboundのログファイルの出力先
logfile: "/var/log/unbound.log"
use-syslog: no
 
# ローカルのサーバの名前とIPアドレスの対応を登録
local-data: "wiki.lo. IN A 192.168.1.118"
local-data-ptr: "192.168.1.118 wiki.lo."

local-data: "gitlab.lo. IN A 192.168.1.118"
local-data-ptr: "192.168.1.118 gitlab.lo."

# 再帰的に問い合わせるためのローカル内の他のDNSサーバの指定。ない場合は省略。
forward-zone:
name: "."
forward-addr: 192.168.0.1

UbuntuにてIntel NICのドライバを新しくする

NECの安鯖を購入したらIntel NICでした。なんとなくUbuntu 12.04LTS Server AMD64を入れました。ふと気になって、NICのドライバーを新しくしてみました。

注意!:
aptitude update
aptitude upgrade
して、rebootしてから↓の作業をしたほうが良さそうです。一度、Linux Kernelが古いまま、ドライバをコンパルしてしまいました。ともかくも、aptitude update upgradeしてからrebootしてから↓の作業を始めましょう。

まずそもそものドライバの確認。dmesgして、ethXXXをgrepすればいいでしょう。(ethXXXが分からなければ、ifconfigしてみると分かるかと。。。)

root@localhost $ dmesg | grep eth0
[    1.401981] e1000e 0000:00:19.0: eth0: (PCI Express:2.5GT/s:Width x1) d4:3d:7e:0b:26:a6
[    1.401988] e1000e 0000:00:19.0: eth0: Intel(R) PRO/1000 Network Connection
[    1.402037] e1000e 0000:00:19.0: eth0: MAC: 10, PHY: 11, PBA No: FFFFFF-0FF
[    3.663744] ADDRCONF(NETDEV_UP): eth0: link is not ready
[    6.542909] ADDRCONF(NETDEV_UP): eth0: link is not ready
[   10.578272] e1000e: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
[   10.579289] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
↑より、どうやらe1000eというのが搭載NICのLinuxでの名前のようです。

また、lspciしてみると、いろいろと分かります。
root@localhost:$ lspci
00:00.0 Host bridge: Intel Corporation 2nd Generation Core Processor Family DRAM Controller (rev 09)
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
00:14.0 USB controller: Intel Corporation Panther Point USB xHCI Host Controller (rev 04)
00:16.0 Communication controller: Intel Corporation Panther Point MEI Controller #1 (rev 04)
00:16.3 Serial controller: Intel Corporation Panther Point KT Controller (rev 04)
00:19.0 Ethernet controller: Intel Corporation 82579LM Gigabit Network Connection (rev 04)

中略
↑Ethernet controller: Intel Corporation 82579LM Gigabit Network Connection と書いてありますので、このNICの型番は82579LMと分かりました。

この82579LMは、インテル公式によると、”Intel® 82579 Gigabit Ethernet Controller” の一つのようです。

さて次に、バージョンを調べます。「modinfo e1000e」で出てきます↓。
root@localhost:$ modinfo e1000e
filename:       /lib/modules/3.2.0-29-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
version:        1.5.1-k
license:        GPL
description:    Intel(R) PRO/1000 Network Driver

中略
↑どうやら、今入っているバージョンは1.5.1-kのようですね。

さて、ドライバを探しましょう。ここからはブラウザでの作業です。MacでもWindowsでもLinuxでも構いませんがとにかくブラウザでの作業が必要です。terminalではかなり厳しいかと。。。intelのダウンロードセンターから、落とすことができます。

(直接的なページはここです)

スクリーンショット(2013-01-17 13.59.02)
こんな感じ↑で3つ選択して、「検索」をクリック。

スクリーンショット(2013-01-17 14.01.49)
↑オペレーティングシステムの選択にて、Linuxを選択。

スクリーンショット(2013-01-17 14.04.35)
↑すると、下の方にリンクが出るのでそれをクリック。

スクリーンショット(2013-01-17 14.05.59)
↑○を付けた、「ダウンロード」をクリック。次に画面で、「使用許諾契約の条項に同意します」を押すとダウンロードされる。

さて、やっとドライバを落とすことが出来ました。scpでコピーしてもいいのですが、落としてきたリンク先を調べることは容易(このドライバは、http://downloadmirror.intel.com/15817/eng/e1000e-2.1.4.tar.gz)ですので、今度はubuntuに戻って、作業します。

ちなみに、以下はインテル公式の、http://downloadmirror.intel.com/15817/eng/README.txtに書いてあること+α程度ですので、よく分からなければ公式の方も参照してみてください。

まずは必須ソフトのインストールをします。make, gccです。
aptitude install make gcc

次に、適当なディレクトリを作って、↑で探したドライバを落としてきます。
root: $ mkdir my_repos
root: $ cd my_repos/
root: $ wget http://downloadmirror.intel.com/15817/eng/e1000e-2.1.4.tar.gz
--2013-01-17 13:40:18--  http://downloadmirror.intel.com/15817/eng/e1000e-2.1.4.tar.gz
Resolving downloadmirror.intel.com (downloadmirror.intel.com)... 72.246.190.74, 72.246.190.66
Connecting to downloadmirror.intel.com (downloadmirror.intel.com)|72.246.190.74|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 259786 (254K) [application/x-gzip]
Saving to: `e1000e-2.1.4.tar.gz'

100%[==========================================================================================>] 259,786     --.-K/s   in 0.1s    

2013-01-17 13:40:19 (1.84 MB/s) - `e1000e-2.1.4.tar.gz' saved [259786/259786]

root:~/my_repos$ ls
e1000e-2.1.4.tar.gz
root:~/my_repos$ tar zxf e1000e-2.1.4.tar.gz 
root:~/my_repos$ cd e1000e-2.1.4
root:~/my_repos/e1000e-2.1.4$ cd src/

これで一段落、あとは make install するだけとおもいきや↓
root:~/my_repos/e1000e-2.1.4/src$ make install
Makefile:71: *** Kernel header files not in any of the expected locations.
Makefile:72: *** Install the appropriate kernel development package, e.g.
Makefile:73: *** kernel-devel, for building kernel modules and try again.  Stop.
↑このように怒られてしまいました。Kernel headerが必要な様子。

まずは、uname -aしてLinuxのカーネルのバージョンを調べましょう。
root:~/my_repos/e1000e-2.1.4/src$ uname -a
Linux pikachu 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
↑となりますので、どうやら “3.2.0-29-generic”のようです。

↓該当のheaderをインストールしましょう。
root:~/my_repos/e1000e-2.1.4/src$ aptitude install linux-headers-3.2.0-29-generic
The following NEW packages will be installed:
  linux-headers-3.2.0-29{a} linux-headers-3.2.0-29-generic 
0 packages upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 12.7 MB of archives. After unpacking 67.5 MB will be used.
Do you want to continue? [Y/n/?] y
Get: 1 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main linux-headers-3.2.0-29 all 3.2.0-29.46 [11.7 MB]
Get: 2 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main linux-headers-3.2.0-29-generic amd64 3.2.0-29.46 [991 kB]          
Fetched 12.7 MB in 7s (1,704 kB/s)                                                                                                  
Selecting previously unselected package linux-headers-3.2.0-29.
(Reading database ... 53023 files and directories currently installed.)
Unpacking linux-headers-3.2.0-29 (from .../linux-headers-3.2.0-29_3.2.0-29.46_all.deb) ...
Selecting previously unselected package linux-headers-3.2.0-29-generic.
Unpacking linux-headers-3.2.0-29-generic (from .../linux-headers-3.2.0-29-generic_3.2.0-29.46_amd64.deb) ...
Setting up linux-headers-3.2.0-29 (3.2.0-29.46) ...
Setting up linux-headers-3.2.0-29-generic (3.2.0-29.46) ...
↑インストール出来ました。これでやっとmake install出来ます。

make installします↓
root:~/my_repos/e1000e-2.1.4/src$ make install
make -C /lib/modules/3.2.0-29-generic/build SUBDIRS=/root/my_repos/e1000e-2.1.4/src modules
make[1]: Entering directory `/usr/src/linux-headers-3.2.0-29-generic'
  CC [M]  /root/my_repos/e1000e-2.1.4/src/netdev.o
  CC [M]  /root/my_repos/e1000e-2.1.4/src/ethtool.o
  CC [M]  /root/my_repos/e1000e-2.1.4/src/param.o
  CC [M]  /root/my_repos/e1000e-2.1.4/src/82571.o
  CC [M]  /root/my_repos/e1000e-2.1.4/src/ich8lan.o
  CC [M]  /root/my_repos/e1000e-2.1.4/src/80003es2lan.o
  CC [M]  /root/my_repos/e1000e-2.1.4/src/mac.o
  CC [M]  /root/my_repos/e1000e-2.1.4/src/nvm.o
  CC [M]  /root/my_repos/e1000e-2.1.4/src/phy.o
  CC [M]  /root/my_repos/e1000e-2.1.4/src/manage.o
  CC [M]  /root/my_repos/e1000e-2.1.4/src/kcompat.o
  LD [M]  /root/my_repos/e1000e-2.1.4/src/e1000e.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /root/my_repos/e1000e-2.1.4/src/e1000e.mod.o
  LD [M]  /root/my_repos/e1000e-2.1.4/src/e1000e.ko
make[1]: Leaving directory `/usr/src/linux-headers-3.2.0-29-generic'
gzip -c ../e1000e.7 > e1000e.7.gz
# remove all old versions of the driver
find /lib/modules/3.2.0-29-generic -name e1000e.ko -exec rm -f {} \; || true
find /lib/modules/3.2.0-29-generic -name e1000e.ko.gz -exec rm -f {} \; || true
install -D -m 644 e1000e.ko /lib/modules/3.2.0-29-generic/kernel/drivers/net/e1000e/e1000e.ko
/sbin/depmod -a || true
install -D -m 644 e1000e.7.gz /usr/share/man/man7/e1000e.7.gz
man -c -P'cat > /dev/null' e1000e || true
e1000e.
↑どうやら出来たようです。

次に、このドライバを反映させます。modprobeというコマンドを使うようです。
root:~/my_repos/e1000e-2.1.4/src$ modprobe e1000e

きちんと反映されているか確認のために、再度”modinfo e1000e”をしてみます。
root:$ modinfo e1000e
filename:       /lib/modules/3.2.0-29-generic/kernel/drivers/net/e1000e/e1000e.ko
version:        2.1.4-NAPI
license:        GPL
description:    Intel(R) PRO/1000 Network Driver
↑新しくなっていますね!

いちおうネットワークを再起動したほうが良いと思います↓。
root:$ /etc/init.d/networking restart
 * Running /etc/init.d/networking restart is deprecated because it may not enable again some interfaces
 * Reconfiguring network interfaces...                                                                                              ssh stop/waiting
ssh start/running, process 4384

以上です!

(おまけ)
なんとなく性能比較を↓。pingで比較にはならないですね。。。おんなじようなものです。iperfとかやってみてもいいのですがどうせ同じでしょうし。
# バージョン更新前↓
root:$ ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.025 ms
64 bytes from 127.0.0.1: icmp_req=2 ttl=64 time=0.014 ms
64 bytes from 127.0.0.1: icmp_req=3 ttl=64 time=0.013 ms
64 bytes from 127.0.0.1: icmp_req=4 ttl=64 time=0.015 ms
64 bytes from 127.0.0.1: icmp_req=5 ttl=64 time=0.015 ms
^C
--- 127.0.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3997ms
rtt min/avg/max/mdev = 0.013/0.016/0.025/0.005 ms

# バージョン更新後↓
root:$ ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.024 ms
64 bytes from localhost (127.0.0.1): icmp_req=2 ttl=64 time=0.015 ms
64 bytes from localhost (127.0.0.1): icmp_req=3 ttl=64 time=0.013 ms
64 bytes from localhost (127.0.0.1): icmp_req=4 ttl=64 time=0.018 ms
64 bytes from localhost (127.0.0.1): icmp_req=5 ttl=64 time=0.016 ms
^C
--- localhost ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3997ms
rtt min/avg/max/mdev = 0.013/0.017/0.024/0.004 ms