Ubuntu 12.04 LTS で zfs その1

自宅で使っているHP Proliant MicroServerが一台余ったので、(二台ある)
zfs使ってNASにすることにしました。

構成はこんな感じ。

  • Server : HP Proliant MicroServer (N36L)
  • OS : Ubuntu 12.04 LTS
  • System Disk (ext4) : CFD CSSD-SM64NJ2
  • Storage Disk (zfs)  : WesternDigital WD30EZRX *2

今回はrootからzfsにするnativeな構成ではなく、
OSを余り物のSSDに入れてハードディスクはストレージ用の
パーテーションとして別途分ける感じの構成にしてみた。

手順は至って簡単。ゆとり世代の私でも問題ない。

1. python-software-propertiesをインストール

[email protected]:~# apt-get install python-software-properties

2. リポジトリを追加

[email protected]:~# add-apt-repository ppa:zfs-native/stable

3. aptリストの更新

[email protected]:~# apt-get update

4. zfsのモジュールをインストール

apt-get install ubuntu-zfs

これで準備は完了。
以下のコマンドで応答があればインストールは終わっているはずだ。

[email protected]:~# zfs
[email protected]:~# zpool status

ほらね?僕達ゆとり世代にもやさしい。

続いて zpool にディスクを追加してみよう。

(その2へつづく)

resolvconfd と dnsmasq と libvirt と unbound と私

※忘れそうなのでメモです。

私が会社で使っている作業用サーバはUbuntuのKVM上で動いているFreeBSDです。(ホストのUbuntuも使ってるけど)
気が向いたときにホストのapt-get update/upgradeをするのですが、たまにKernelのアップデートがくると
再起動をしなくてはいけないので、仕方なく再起動をしています。

この時点で resolv.conf を手書きで書き換えていたりすると、楽しいことが起こったりします。

Ubuntu12.04では resolv.conf  の管理を resolvconfd で行っていて、デフォルトではローカルで起動している
リゾルバ(dnsmasq) を参照するように、起動のたびに 127.0.0.1 を参照するように resolv.conf を書き換えてくれるという仕様になっています。

とても親切ですね。

私が仕事で使っている環境は同ホストで unbound を起動してキャッシュリゾルバとしても使用しているので、
dnsmasq が起動されると bind しているアドレス・ポートがかぶって unbound が起動しなかったりで
一筋縄には行かないのです。(dnsmasqの存在を意識していなかった)

ということで、「dnsmasq が邪魔なら dnsmasq を起動しなければ良い!」 という安直な考えに至り、dnsmasq を stop

[email protected]:/# /etc/init.d/dnsmasq stop
* Stopping DNS forwarder and DHCP server dnsmasq
…done.
[email protected]:/#

これで、安心だろ。
と、おもって KVM の FreeBSD (ゲスト)にログインするとネットワークがつながらない・・・
libvirt で仮想マシンを管理しているので、dnsmasq を切ってしまうとどうやら外に出られなくなるみたいだ(詳しくは調べてません)

「そうしたら  dnsmasq と unbound を共存させればいいんだろ?」という安直な考えに至り、 conf を編集

[email protected]:/# vi /etc/unbound/unbound.conf

server:
interface: 192.168.10.70

(略)

 

[email protected]:/# vi /etc/dnsmasq.conf

listen-address=127.0.0.1
bind-interfaces

これでデーモンを再起動すれば dnsmasq/unbound が共存できます。

ちなみに、前置きが長くなりましたが、ここからが本編です。
resolvconfd の挙動が良く分からなかったので今回はじっくり観察してみました。

Googleなんかで “ubuntu 12.04 resolv.conf” などと検索すると、
大抵のBlog記事は /etc/resolvconf/resolv.conf.d/ 以下のファイルを編集しろと書かれています。

[email protected]:/etc/resolvconf/resolv.conf.d# ls
base  head  original

ここで引っかかりました。
いくら編集して、resolvconfd/networking/server再起動しても  resolv.conf が思ったように書き換わらないので、
Ubuntuのマニュアルをよく読んでみた。

http://manpages.ubuntu.com/manpages/precise/man8/resolvconf.8.html

/etc/network/interfaces を編集すればよいことが判明。(ちゃんと書いてあるじゃん)
オフィシャルなマニュアルをちゃんと読まないと遠回りしてしまうんですね。

ということで  /etc/network/interfaces を以下のようにしてみた

auto br0
iface br0 inet static
address 192.168.10.70
network 192.168.0.0
netmask 255.255.0.0
broadcast 192.168.255.255
gateway 192.168.0.1
dns-nameservers 192.168.10.70 192.168.0.20 8.8.8.8
dns-domain hoge.com
dns-search fuga.net foo.com
bridge_ports eth0
bridge_stp off

iface eth0 inet manual

どうやら “dns-*” な行を読み取って resolv.conf を読みよってくれるようなので、
これでネットワークをリスタートして resolv.conf を見てみましょう。

[email protected]:/# cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND — YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
search choge.com fuga.net foo.com
[email protected]:/#

nameserver が 127.0.0.1 になっていますが、心配ありません。
dnsmasq がロードしている conf を参照すると以下のようになっています。

[email protected]:/# cat /var/run/dnsmasq/resolv.conf
nameserver 192.168.10.70
nameserver 192.168.0.20
nameserver 8.8.8.8

コレに気づかず30分ぐらい時間を無駄にしました。

ちなみに、 dnsmasq や unbound などのデーモンが起動していない(起動しない)環境では /etc/resolv.conf の
nameserver  は 127.0.0.1 ではなく、 /etc/networl/interfaces に書かれている dns-nameservers の値が明示的に入るようです。

親切というか、なんと言うか、今までの掟的なものが頭から離れないとハマること間違いなしですね。

Android 4.0.4 になった Xperia mini pro SK17a を rooted してみた

たまにリカバリしたときに root の取り方を忘れてしまうので自分のための忘備録。
もっと簡単なrootの取り方があるようでしたら教えてください。

ちなみにこの手順で文鎮化しても責任はとれませんので参考までに。

 

0. 前準備(前提条件)

1. fastboot で CWM を boot して su のバイナリをインストール

 

PC側の操作

コマンドプロンプトで以下のコマンドを実行

D:\SK17a>fastboot.exe -i 0x0fce boot recovery.img

SK17a側の操作

ClockWorkMod Recovery が起動したら以下の選択項目を選ぶ

– install zip from sdcard

– choose zip from sdcard

– su-bin-3.0.3.2-efghi-sined.zip

– Yes – Install su-bin-3.0.3.2-efghi-sined.zip

[戻るボタン]

– reboot system now

wktkしながら再起動を待つ

 

2. パッケージをインストール

起動後に以下のパッケージをインストール

Superuser

rooted環境では必須 Playストアからインストールして完了

 

Xperia CWM Auto-Installer

ClockWorkMod Recoveryが簡単にROMインストールできる

Playストアからインストール

Xperia CWM Auto-Installer を起動

CWMをインストール

CWM5をインストール

 

BusyBox

BusyBoxを簡単にインストールできる

Playストアからインストール

BusyBox Freeを起動

will be installed to を “/system/xbin” に変更してインストール

 

これで Android 4.0 のrooted環境が完成。とても簡単。
人柱になってくれた先人達に感謝。

IPv6 環境で ufw を使ってみた

我が家の回線は KDDI の au ひかりなんですが、
auひかりといえばネイティブな IPv6 環境を提供してくれるナウい回線なわけで、いろいろ遊べるんですね。
それで、今日は我が家で運用しているサーバに載っているWordpress に対してロシアからアタックを食らっていたので、
そろそろファイウォールの導入でもしようかと考え、思い立ったら吉日でさっそく ufw を使ってみました。

ufw についての詳細は割愛しますが、Ubuntu に採用されている簡易的なファイアウォールで、
ベースは iptables なのですが、簡単に使えるようにした wrapper 的なプログラムといったところです。

以下のオプションで簡単に設定ができてしまいます。
ゆとり世代の私には大変ありがたい。

wktk# ufw –help

Usage: ufw COMMAND

Commands:
enable                          enables the firewall
disable                         disables the firewall
default ARG                     set default policy
logging LEVEL                   set logging to LEVEL
allow ARGS                      add allow rule
deny ARGS                       add deny rule
reject ARGS                     add reject rule
limit ARGS                      add limit rule
delete RULE|NUM                 delete RULE
insert NUM RULE                 insert RULE at NUM
reset                           reset firewall
status                          show firewall status
status numbered                 show firewall status as numbered list of RULES
status verbose                  show verbose firewall status
show ARG                        show firewall report
version                         display version information

Application profile commands:
app list                        list application profiles
app info PROFILE                show information on PROFILE
app update PROFILE              update PROFILE
app default ARG                 set default application policy

たとえば、192.167.79.29というロシアのIPからの接続をすべて拒否したいときは

wktk# ufw deny from 192.167.79.29

といった感じでルールを追加できます。
ここについても詳しく述べられているサイトがほかにありますので割愛します。

wktk# ufw status
Status: active

To                         Action      From
—                         ——      —-
Anywhere                   ALLOW       Anywhere
Anywhere                   DENY        192.167.79.29

で、ここからが本題です。

この ufw ですが、ルールを入れた後に enable したら、自宅ネットワーク内からサーバへの疎通が一切取れなくなってしまいました。
なぜかグーグル先生に聞いてみたところ、どうやら答えは /etc/default/ufw というファイルにあるようでした。

wktk# vi /etc/default/ufw

# /etc/default/ufw
#

# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
# accepted). You will need to ‘disable’ and then ‘enable’ the firewall for
# the changes to take affect.
IPV6=no

ん?OS入れるとき v6 有効にしたままなのに、IPV6=no って・・・

IPV6=no を yes にしてあげたら無事に自宅内のLANからでも v6 でつなげるようになりましたとさ。

前置きが長かったですが、ご了承ください。

 

参考資料

Ubuntu Forums [ubuntu] ufw and ipv6  :http://ubuntuforums.org/showthread.php?t=1214543

 

Ubuntu でシリアルコンソール

初めての障害対応でシリアルコンソールを使う機会があったのですが、
実機につないで操作する環境が整っていなくてあたふたしてしまったのでメモ。

以下の環境を用意して練習してみました。

たぶんUpstart、GRUB2のUbuntu環境では共通だと思います。

0. 実験環境

Server
OS: Ubuntu Server 11.10
HW:HP ProLiant ML115 G5

Client
OS: Ubuntu Desktop 12.04 LTS Beta2
HW:Lenovo ThinkPad X220

1. サーバ側の準備

大体どのOSもデフォルトではシリアルコンソールの設定がされていないようです。
Ubuntu 11.10は結構簡単に設定ができます。

シリアルポートが /dev/ttyS0 であること、root で操作することを前提に書いていきます。

 

ttyS0.conf を編集(ファイルがないので新しく作る)

[email protected]:/# vi /etc/init/ttyS0.conf

ttyS0.conf にコピペする内容

# ttyS0 – getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.

start on stopped rc or RUNLEVEL=[2345]
stop on runlevel [!2345]

respawn
exec /sbin/getty -L 9600 ttyS0 vt102

ttyS0を立ち上げる

[email protected]:/etc/init# sudo start ttyS0
ttyS0 start/running, process 1784

GRUBが起動時にシリアルコンソールに落ちるようにする。

[email protected]:/# vi /etc/default/grub

赤字が追記箇所

[email protected]:~# diff /etc/default/grub.20120427 /etc/default/grub
12c12
< GRUB_CMDLINE_LINUX=””

> GRUB_CMDLINE_LINUX=”console=tty1 console=ttyS0,9600n8″
20a21,22
> GRUB_TERMINAL=serial
> GRUB_SERIAL_COMMAND=”serial –speed=9600 –unit=0 –word=8 –parity=no –stop=1″

変更を適用する

[email protected]:/# update-grub
Generating grub.cfg …
Found linux image: /boot/vmlinuz-3.0.0-12-server
Found initrd image: /boot/initrd.img-3.0.0-12-server
Found memtest86+ image: /memtest86+.bin
done

再起動する

[email protected]:/# shutdown -r now

サーバ側はこれで完了。

2. クライアント側の準備

クライアント側は minicom というソフトウェアを使って接続してみましょう。

まずは minicom のインストール

[email protected]:~# apt-get install minicom

インストールが終わったら初回起動の設定を済ませておきましょう。

[email protected]:~# minicom -s

+—–[configuration]——+
| Filenames and paths      |
| File transfer protocols  |
| Serial port setup        |
| Modem and dialing        |
| Screen and keyboard      |
| Save setup as dfl        |
| Save setup as..          |
| Exit                     |
| Exit from Minicom        |
+————————–+

Serial port setup  を選択

+———————————————————————–+
| A –    Serial Device      : /dev/ttyUSB0                              |
| B – Lockfile Location     : /var/lock                                 |
| C –   Callin Program      :                                           |
| D –  Callout Program      :                                           |
| E –    Bps/Par/Bits       : 9600 8N1                                  |
| F – Hardware Flow Control : No                                        |
| G – Software Flow Control : No                                        |
|                                                                       |
|    Change which setting?                                              |
+———————————————————————–+

Serial Device や Bps/Par/Bits  あたりを自分の環境に合わせて設定しましょう。
編集が終わったらEnterで画面を抜けてトップメニューのでSave setup as dflを選択。

これでクライアント側の設定は終了です。
サーバとクライアントをシリアルケーブルで接続してテストしてみましょう。

[email protected]:~# minicom

Welcome to minicom 2.5

OPTIONS: I18n
Compiled on May  2 2011, 10:05:24.
Port /dev/ttyUSB0

Press CTRL-A Z for help on special keys

Ubuntu 11.10 ml115 ttyS0

ml115 login: AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0
Password:

CTRL-A Z for help |  9600 8N1 | NOR | Minicom 2.5    | VT102 | Online 00:00

とこんな感じでつながるはずです。

しかし、自分の場合は前提の知識がなかったために一筋縄にはいかず、ここまでくるのに結構苦労しました。
ここからがメモの本番。

4. シリアルコンソールにつながらない(補足1)

ググると大体上記の手順がかかれているのですが実はつながらないはずです。
sudo できる一般ユーザが操作する前提で補足をまとめておきます。

まず、デバイスがroot以外のユーザで使えるか確認。

[email protected]:~$ ls -al /dev/ttyUSB0
crw-rw—- 1 root dialout 188, 0  4月 22 18:37 /dev/ttyUSB0
[email protected]:~$

dialoutというグループに許可されているんですね。
操作するユーザをdialoutグループに加えます。

[email protected]:~$ sudo adduser yutaro dialout

これでminicomを起動すればつながるはずです。

しかし、私はこれだけでは終わらなかったのです。

5. シリアルコンソールにつながらない(補足2)

前提の知識がなかったのでここが一番時間がかかりました。

サーバとクライアントを接続(物理)するにに以下のような方法をとりました。

|サーバ|←[RS232C・RJ-45変換]→[UTPストレートケーブル]←[RS232C・RJ-45変換]→[RS232C・USBアダプタ]→|クライアント|

しかし、いくらいじってもつながらない・・・
何だろなとググっていたらナイスな記事を発見。

ヘタレな趣味人の呟き : Sun シリアル接続用 UTP クロスケーブル

そうなのか。UTPケーブルでシリアルコンソール繋ぐときはクロスケーブルを使うのか。
しまかもクロスケーブルといっても100BASE-TXとか1000BASE-TとかのEthernetの
クロスケーブルとは異なりほんとにピンアサインが逆転したケーブルを使うんですね・・・

シリアル接続用UTPクロスケーブルのピンアサイン

Pin 1 Pin 8
Pin 2 Pin 7
Pin 3 Pin 6
Pin 4 Pin 5
Pin 5 Pin 4
Pin 6 Pin 3
Pin 7 Pin 2
Pin 8 Pin 1

ようはEthernetのストレートケーブルの片方の頭を逆向きにつけたケーブルを作ればいいわけです。
そしてこんな時のために買っておいた秘密兵器。

これでケーブルを作ったらあっけなくシリアルコンソールに接続できました。

本番のクリティカルな障害じゃなくてよかったww
私はまだ一人じゃ何もできませんが、一つ大きな収穫を得ました!

参考文献・資料

Ubuntu UserDocumentation : SerialConsoleHowto

negi.ipv6labs.jp : Linuxシリアルコンソール

ヘタレな趣味人の呟き : Sun シリアル接続用 UTP クロスケーブル

BIND9とAAAAレコードと私(追記あり)

自分のBlogを自宅サーバに移転していてDNSのゾーンファイルを弄っていたのですが変な挙動をしたのでメモします。

バージョンはUbuntuのパッケージ最新版の

sakura# named -v
BIND 9.7.0-P1
sakura#

です。

IPv6ユーザとしてはAレコードよりAAAAレコードが好きなので以下のようにゾーンを定義しました。

 

ゾーンファイル(Before)

sakura# cat yutarommx.com.zone
$TTL   180
@               IN SOA  yutarommx.com.  yutaro.mykw.jp. (
2012041506     ; serial (d. adams)
3H             ; refresh
15M            ; retry
1W             ; expiry
15M)           ; minimum

IN NS           ns0.mykw.jp.
IN NS           ns1.mykw.jp.

IN AAAA         240f:1:33f2:1::beef
www             IN AAAA         240f:1:33f2:1::beef
IN A            124.214.243.203
www             IN A            124.214.243.203

tumblr          IN A            72.32.231.8

そうしたところ、家のPCからはBlogが見えるのですが、リモートで繋いでいた会社(IPv4)から閲覧ができないorz
何だろなとおもい、自宅サーバから dig してみたところ、以下のような結果が。

AAAAレコードの結果(Before)

micro# dig @ns0.mykw.jp yutarommx.com aaaa

; <<>> DiG 9.7.0-P1 <<>> @ns0.mykw.jp yutarommx.com aaaa
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51434
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 4
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;yutarommx.com.                 IN      AAAA

;; ANSWER SECTION:
yutarommx.com.          180     IN      AAAA    240f:1:33f2:1::beef

;; AUTHORITY SECTION:
yutarommx.com.          180     IN      NS      ns1.mykw.jp.
yutarommx.com.          180     IN      NS      ns0.mykw.jp.

;; ADDITIONAL SECTION:
ns0.mykw.jp.            180     IN      A       49.212.22.200
ns0.mykw.jp.            180     IN      AAAA    2001:e41:31d4:16c8::1
ns1.mykw.jp.            180     IN      A       183.181.172.61
ns1.mykw.jp.            180     IN      AAAA    2001:2e8:603:0:2:1:0:3d

;; Query time: 15 msec
;; SERVER: 2001:e41:31d4:16c8::1#53(2001:e41:31d4:16c8::1)
;; WHEN: Sun Apr 15 12:08:35 2012
;; MSG SIZE  rcvd: 190

Aレコードの結果(Before)

micro# dig @ns0.mykw.jp yutarommx.com a

; <<>> DiG 9.7.0-P1 <<>> @ns0.mykw.jp yutarommx.com a
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50777
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;yutarommx.com.                 IN      A

;; AUTHORITY SECTION:
yutarommx.com.          180     IN      SOA     yutarommx.com. yutaro.mykw.jp. 2012041509 10800 900 604800 900

;; Query time: 15 msec
;; SERVER: 2001:e41:31d4:16c8::1#53(2001:e41:31d4:16c8::1)
;; WHEN: Sun Apr 15 12:08:30 2012
;; MSG SIZE  rcvd: 81

むむ!!?

Aレコードが引けてない・・・・
ということで以下のように書き換えてみたところ・・・

 

ゾーンファイル(Before2)

sakura# cat yutarommx.com.zone
$TTL   180
@               IN SOA  yutarommx.com.  yutaro.mykw.jp. (
2012041510     ; serial (d. adams)
3H             ; refresh
15M            ; retry
1W             ; expiry
15M)           ; minimum

IN NS           ns0.mykw.jp.
IN NS           ns1.mykw.jp.

IN A            124.214.243.203
www             IN A            124.214.243.203
IN AAAA         240f:1:33f2:1::beef
www             IN AAAA         240f:1:33f2:1::beef

tumblr          IN A            72.32.231.8

AAAAレコードの結果(Before2)

 

micro# dig @ns0.mykw.jp yutarommx.com aaaa

; <<>> DiG 9.7.0-P1 <<>> @ns0.mykw.jp yutarommx.com aaaa
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;yutarommx.com.                 IN      AAAA

;; AUTHORITY SECTION:
yutarommx.com.          180     IN      SOA     yutarommx.com. yutaro.mykw.jp. 2012041510 10800 900 604800 900

;; Query time: 15 msec
;; SERVER: 2001:e41:31d4:16c8::1#53(2001:e41:31d4:16c8::1)
;; WHEN: Sun Apr 15 12:29:57 2012
;; MSG SIZE  rcvd: 81

Aレコードの結果(Before2)

micro# dig @ns0.mykw.jp yutarommx.com a

; <<>> DiG 9.7.0-P1 <<>> @ns0.mykw.jp yutarommx.com a
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37995
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 4
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;yutarommx.com.                 IN      A

;; ANSWER SECTION:
yutarommx.com.          180     IN      A       124.214.243.203

;; AUTHORITY SECTION:
yutarommx.com.          180     IN      NS      ns0.mykw.jp.
yutarommx.com.          180     IN      NS      ns1.mykw.jp.

;; ADDITIONAL SECTION:
ns0.mykw.jp.            180     IN      A       49.212.22.200
ns0.mykw.jp.            180     IN      AAAA    2001:e41:31d4:16c8::1
ns1.mykw.jp.            180     IN      A       183.181.172.61
ns1.mykw.jp.            180     IN      AAAA    2001:2e8:603:0:2:1:0:3d

;; Query time: 15 msec
;; SERVER: 2001:e41:31d4:16c8::1#53(2001:e41:31d4:16c8::1)
;; WHEN: Sun Apr 15 12:29:41 2012
;; MSG SIZE  rcvd: 178

 

今度はAAAAレコードが返ってこない・・・
次にサブドメイン(FQDN)を揃えつつAレコードを優先して定義してみた。

ゾーンファイル(After)

sakura# cat yutarommx.com.zone
$TTL   180
@               IN SOA  yutarommx.com.  yutaro.mykw.jp. (
2012041507     ; serial (d. adams)
3H             ; refresh
15M            ; retry
1W             ; expiry
15M)           ; minimum

IN NS           ns0.mykw.jp.
IN NS           ns1.mykw.jp.

IN A            124.214.243.203
IN AAAA         240f:1:33f2:1::beef
www             IN A            124.214.243.203
www             IN AAAA         240f:1:33f2:1::beef

tumblr          IN A            72.32.231.8

AAAAレコードの結果(After)

micro# dig @ns0.mykw.jp yutarommx.com a

; <<>> DiG 9.7.0-P1 <<>> @ns0.mykw.jp yutarommx.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62064
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 4
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;yutarommx.com.                 IN      A

;; ANSWER SECTION:
yutarommx.com.          180     IN      A       124.214.243.203

;; AUTHORITY SECTION:
yutarommx.com.          180     IN      NS      ns1.mykw.jp.
yutarommx.com.          180     IN      NS      ns0.mykw.jp.

;; ADDITIONAL SECTION:
ns0.mykw.jp.            180     IN      A       49.212.22.200
ns0.mykw.jp.            180     IN      AAAA    2001:e41:31d4:16c8::1
ns1.mykw.jp.            180     IN      A       183.181.172.61
ns1.mykw.jp.            180     IN      AAAA    2001:2e8:603:0:2:1:0:3d

;; Query time: 16 msec
;; SERVER: 2001:e41:31d4:16c8::1#53(2001:e41:31d4:16c8::1)
;; WHEN: Sun Apr 15 12:39:01 2012
;; MSG SIZE  rcvd: 178

Aレコードの結果(After)

micro# dig @ns0.mykw.jp yutarommx.com aaaa

; <<>> DiG 9.7.0-P1 <<>> @ns0.mykw.jp yutarommx.com aaaa
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64265
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 4
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;yutarommx.com.                 IN      AAAA

;; ANSWER SECTION:
yutarommx.com.          180     IN      AAAA    240f:1:33f2:1::beef

;; AUTHORITY SECTION:
yutarommx.com.          180     IN      NS      ns1.mykw.jp.
yutarommx.com.          180     IN      NS      ns0.mykw.jp.

;; ADDITIONAL SECTION:
ns0.mykw.jp.            180     IN      A       49.212.22.200
ns0.mykw.jp.            180     IN      AAAA    2001:e41:31d4:16c8::1
ns1.mykw.jp.            180     IN      A       183.181.172.61
ns1.mykw.jp.            180     IN      AAAA    2001:2e8:603:0:2:1:0:3d

;; Query time: 16 msec
;; SERVER: 2001:e41:31d4:16c8::1#53(2001:e41:31d4:16c8::1)
;; WHEN: Sun Apr 15 12:39:21 2012
;; MSG SIZE  rcvd: 190

micro#

今度はちゃんと返ってきた。

教訓:FQDNはソートしてAAAAレコードはAレコードより後に書こう!(Aレコードを併記する場合)

これって昔の公務員より融通が利かないなw

この辺の挙動はバンディー君に期待しましょう。

 

追記

ブログを投稿した後に某JP〇〇の @OrangeMorishita 氏からご指摘がございました。
以下、引用文

これ、正しい動作なんじゃないかな。INの前の名前を省略した場合、*直前の行の*継続行になります。
なので、beforeの例ではIN A 124.214.243.203はwwwの継続行だし、before2の例ではIN AAAA 240f:1:33f2:1::beefはwwwの継続行になります。

なるほど、INの前を省略すると勝手にOriginのドメインが補完されると思っていたのですが、
そうではなく空白の場合は前の行の内容を引き継ぐとのことだそうです。

ということは、こんな書き方もできるということですね!

sakura# cat yutarommx.com.zone
$TTL   180
@               IN SOA  yutarommx.com.  yutaro.mykw.jp. (
2012041513     ; serial (d. adams)
3H             ; refresh
15M            ; retry
1W             ; expiry
15M)           ; minimum

IN NS           ns0.mykw.jp.
IN NS           ns1.mykw.jp.

IN AAAA         240f:1:33f2:1::beef
IN A            124.214.243.203

www                     IN A            124.214.243.203
IN AAAA         240f:1:33f2:1::beef

tumblr                  IN A            72.32.231.8
sakura#

 

ほんとにこんなんで大丈夫なのかなと思いながら dig してみると。

wktk# dig @ns0.mykw.jp yutarommx.com a +short
124.214.243.203

wktk# dig @ns0.mykw.jp yutarommx.com aaaa +short
240f:1:33f2:1::beef

wktk# dig @ns0.mykw.jp www.yutarommx.com a +short
124.214.243.203

wktk# dig @ns0.mykw.jp www.yutarommx.com aaaa +short
240f:1:33f2:1::beef

お!ちゃんと引けているではないですか!

ゾーンファイルの内容がわかりづらいのでわかってないと気持ち悪いけど、
ルールがわかってすっきりしました。

森下氏 ありがとうございました!

お家でUnboundつかってISPのDNSポイズニングから逃れてみる

数年前の話題だが、児童ポルノ法の施工に伴って、ISPのDNSキャッシュ汚染が常習的に行われるようになったのですが、
そんな自由を侵すようなリゾルバは使ってられないということ(嘘)で自宅にもUnboundを導入してみました。

※本当は自宅サービスサーバのユーザが増えてきたので、何となくLAN内でリゾルバを持ちたくなっただけ。

0. 運用環境

OS : Ubuntu 10.04 LTS
HW : HP Proliant MicroServer

1. apt-get で インストール

ゆとり世代なのでapt-getでインストール。
apt 簡単でいいね。

micro# apt-get install unbound

2. ルートヒントファイルをダウンロードしておく

これがないと、どこに聞きに行くのかわからない。はず。(なくても名前解決できたけどね。)

micro# cd /etc/unbound && wget ftp://FTP.INTERNIC.NET/domain/named.cache

3. confを目的・環境に合わせて書き換える

自分の場合は自宅内のローカルからのみ名前解決できるようするのが目的だったので、
以下の箇所を書き換えた。ちなみにIPv6を使わない場合はv6系の項目は無視しておk

micro# diff -u unbound.conf.def unbound.conf
— unbound.conf.def    2012-04-14 16:33:20.268064334 +0900
+++ unbound.conf        2012-04-14 16:47:19.748193075 +0900
@@ -34,7 +34,10 @@
# specify 0.0.0.0 and ::0 to bind to all available interfaces.
# specify every interface[@port] on a new ‘interface:’ labelled line.
# The listen interfaces are not changed on reload, only on restart.
–       # interface: 192.0.2.153
+       interface: 127.0.0.1
+       interface: 192.168.0.128
+       interface: ::1
+       interface: 240f:1:33f2:1::cafe
# interface: 192.0.2.154
# interface: [email protected]
# interface: 2001:DB8::5
@@ -44,7 +47,7 @@
# interface-automatic: no

# port to answer queries from
–       # port: 53
+       port: 53

# specify the interfaces to send outgoing queries to authoritative
# server from by ip-address. If none, the default (all) interface
@@ -116,7 +119,7 @@

# the time to live (TTL) value cap for RRsets and messages in the
# cache. Items are not cached for longer. In seconds.
–       # cache-max-ttl: 86400
+       cache-max-ttl: 86400

# the time to live (TTL) value for cached roundtrip times and
# EDNS version information for hosts. In seconds.
@@ -137,16 +140,16 @@
# infra-cache-lame-size: 10k

# Enable IPv4, “yes” or “no”.
–       # do-ip4: yes
+       do-ip4: yes

# Enable IPv6, “yes” or “no”.
–       # do-ip6: yes
+       do-ip6: yes

# Enable UDP, “yes” or “no”.
–       # do-udp: yes
+       do-udp: yes

# Enable TCP, “yes” or “no”.
–       # do-tcp: yes
+       do-tcp: yes

# Detach from the terminal, run in background, “yes” or “no”.
# do-daemonize: yes
@@ -157,9 +160,11 @@
# Choose deny (drop message), refuse (polite error reply),
# allow (recursive ok), allow_snoop (recursive and nonrecursive ok)
# access-control: 0.0.0.0/0 refuse
–       # access-control: 127.0.0.0/8 allow
+       access-control: 127.0.0.0/8 allow
+       access-control: 192.168.0.0/24 allow
# access-control: ::0/0 refuse
–       # access-control: ::1 allow
+       access-control: ::1 allow
+       access-control: 240f:1:33f2:1::0/64 allow
# access-control: ::ffff:127.0.0.1 allow

# if given, a chroot(2) is done to the given directory.
@@ -214,7 +219,7 @@

# file to read root hints from.
# get one from ftp://FTP.INTERNIC.NET/domain/named.cache
–       # root-hints: “”
+       root-hints: “/etc/unbound/named.cache”

# enable to not answer id.server and hostname.bind queries.
# hide-identity: no
@@ -437,27 +442,27 @@
remote-control:
# Enable remote control with unbound-control(8) here.
# set up the keys and certificates with unbound-control-setup.
–       # control-enable: no
+       control-enable: yes

# what interfaces are listened to for remote control.
# give 0.0.0.0 and ::0 to listen to all interfaces.
–       # control-interface: 127.0.0.1
–       # control-interface: ::1
+       control-interface: 127.0.0.1
+       control-interface: ::1

# port number for remote control operations.
–       # control-port: 953
+       control-port: 953

# unbound server key file.
–       # server-key-file: “/etc/unbound/unbound_server.key”
+       server-key-file: “/etc/unbound/unbound_server.key”

# unbound server certificate file.
–       # server-cert-file: “/etc/unbound/unbound_server.pem”
+       server-cert-file: “/etc/unbound/unbound_server.pem”

# unbound-control key file.
–       # control-key-file: “/etc/unbound/unbound_control.key”
+       control-key-file: “/etc/unbound/unbound_control.key”

# unbound-control certificate file.
–       # control-cert-file: “/etc/unbound/unbound_control.pem”
+       control-cert-file: “/etc/unbound/unbound_control.pem”

# Stub zones.
# Create entries like below, to make all queries for ‘example.com’ and
micro#

4. リモートコントロールできるようにする

unbound-control を使えるようにするために秘密鍵、公開鍵を生成。
unbound-control は BIND でいうところの rndc ですね。

# unbound-control-setup
setup in directory /etc/unbound
generating unbound_server.key
Generating RSA private key, 1024 bit long modulus
………………..++++++
………………………….++++++
e is 65537 (0x10001)
generating unbound_control.key
Generating RSA private key, 1024 bit long modulus
……….++++++
..++++++
e is 65537 (0x10001)
create unbound_server.pem (self signed certificate)
create unbound_control.pem (signed client certificate)
Signature ok
subject=/CN=unbound-control
Getting CA Private Key
Setup success. Certificates created. Enable in unbound.conf file to use
micro#

5. Unboundを再起動する

micro# /etc/init.d/unbound restart
* Restarting recursive DNS server unbound                                                                       [ OK ]
micro#

6. 名前解決ができるか確認

とりあえずローカルホストから確認。
LAN内のほかのホストからも確認した方が良い。

micro# dig @localhost mykw.jp

; <<>> DiG 9.7.0-P1 <<>> @localhost mykw.jp
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13101
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 4

;; QUESTION SECTION:
;mykw.jp.                       IN      A

;; ANSWER SECTION:
mykw.jp.                180     IN      A       180.222.80.63

;; AUTHORITY SECTION:
mykw.jp.                180     IN      NS      ns0.mykw.jp.
mykw.jp.                180     IN      NS      ns1.mykw.jp.

;; ADDITIONAL SECTION:
ns0.mykw.jp.            180     IN      A       49.212.22.200
ns0.mykw.jp.            180     IN      AAAA    2001:e41:31d4:16c8::1
ns1.mykw.jp.            180     IN      A       183.181.172.61
ns1.mykw.jp.            180     IN      AAAA    2001:2e8:603:0:2:1:0:3d

;; Query time: 15 msec
;; SERVER: ::1#53(::1)
;; WHEN: Sat Apr 14 17:00:02 2012
;; MSG SIZE  rcvd: 165

micro#

7. リモートコントロールの動作確認

ステータスが取れれば成功

micro# unbound-control status
version: 1.4.1
verbosity: 1
threads: 1
modules: 2 [ validator iterator ]
uptime: 4 seconds
unbound (pid 5050) is running…
micro#

 

これでISPのDNSポイズニングから抜け出せますね。

めでたしめでたし

 

参考資料・サイト

日本Unboundユーザ会 http://unbound.jp/

 

dnsperf で DNS DoS(違) ベンチマーク

大先生に教わりながら仕事で使ったので忘備録

 

0. 検証環境

筐体:IBM System X3550M2
OS:Ubuntu Server 11.10

 

1. 必要そうなパッケージを入れる

mykw# apt-get install bind9utils libbind-dev libkrb5-dev libssl-dev libcap-dev libxml2-dev gnuplot

GNU Plotは resperf-report するときに使うのかな。

2. ソースを拾って展開して make


mykw# wget ftp://ftp.nominum.com/pub/nominum/dnsperf/1.0.1.0/dnsperf-src-1.0.1.0-1.tar.gz

mykw# tar xzf dnsperf-src-1.0.1.0-1.tar.gz && cd dnsperf-src-1.0.1.0-1

mykw# ./configure prefix=/usr/local

mykw# make && make install

 

3. 実行してみる

初めに以下のようなリストを作る

mykw# cat domainlist

www.wktk.so A
yutarommx.com A

 

クエリー飛ばす先と、リストファイル名、実行時間を引数に入れて実行。


mykw# dnsperf -s ${DIST}  -d ${domainlist} -l ${exectime}

mykw# dnsperf -s 192.168.10.139  -d domainlist -l 60

 

ほかにもいろいろオプションがある模様。


mykw# dnsperf –help

DNS Performance Testing Tool

Nominum Version 1.0.1.0

dnsperf: invalid option — ‘-‘

Usage: dnsperf [-d datafile] [-s server_addr] [-p port]
               [-b bufsize] [-f family] [-e] [-D]
               [-y name:secret] [-v] [-A] [-h]
               [-q num_queries] [-t timeout] [-Q max_qps] [-1] [-l limit]
               [-c] [-H histogram_buckets] [-T histogram_seconds] [-u]
  -d specifies the input data file (default: stdin)
  -s sets the server to query (default: 127.0.0.1)
  -p sets the port on which to query the server (default: 53)
  -b set socket send/receive buffer size in kilobytes (default: 32 k)
  -f specify address family of DNS transport, inet or inet6 (default: any)
  -e enable EDNS 0
  -D set the DNSSEC OK bit (implies EDNS)
  -y specifies the TSIG name and secret (no default)
  -A report command-line arguments
  -h print this usage
  -q specifies the maximum number of queries outstanding (default: 20)
  -t specifies the timeout for query completion in seconds (default: 5)
  -Q limit the number of queries per second (no default)
  -1 run through input only once (default: multiple iff limit given)
  -l specifies how a limit for how long to run tests in seconds (no default)
  -c print the number of packets with each rcode
  -H print a response latency histogram with this many buckets
  -T include latencies up to this many seconds in histogram (use with -H)
  -u send dynamic updates instead of queries
  -v verbose: report the RCODE of each response on stdout

 

 5. 実行結果

mykw# dnsperf -s dti.mykw.jp -d domainlist -l 30

DNS Performance Testing Tool

Nominum Version 1.0.1.0

[Status] Processing input data
[Status] Sending queries (to 2001:2e8:603:0:2:1:0:3d)
[Status] Testing complete

Statistics:

Parse input file:     multiple times
Run time limit:       30 seconds
Ran through file:     12836 times

Queries sent:         25672 queries
Queries completed:    25672 queries
Queries lost:         0 queries

Avg request size:     28 bytes
Avg response size:    175 bytes

Percentage completed: 100.00%
Percentage lost:        0.00%

Started at:           Thu Mar 15 02:04:21 2012
Finished at:          Thu Mar 15 02:04:51 2012
Ran for:              30.113407 seconds

Queries per second:   852.510644 qps

mykw#

 

ちなみに、マルチコアな筐体で動かく場合はコア分並行して実行しないと全力投球できない模様。
そのような場合は screen を使うか、シェルスクリプト等で対応する形になるもよう。

Ubuntu 10.04 で quota メモ

インストール

[email protected]:/# apt-get install quota quotatool

fstab編集

[email protected]:/# vi /etc/fstab

“/etc/fstab” 12 lines, 681 characters
# /etc/fstab: static file system information.
#
# Use ‘blkid -o value -s UUID’ to print the universally unique identifier
# for a device; this may be used with UUID= as a more robust way to name
# devices that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/vda1 during installation
UUID=c65156da-fd9f-4694-a3a3-cba8dd1db6bf /               ext4    errors=remount-ro,usrquota,grpquota 0       1
# swap was on /dev/vda5 during installation
UUID=2c8d9c41-c46a-4906-a633-cfd7be97d018 none            swap    sw              0       0

再マウント

[email protected]:/# mount -o remount /dev/vda1

wktk# mount
/dev/vda1 on / type ext4 (rw,errors=remount-ro,usrquota,grpquota)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
none on /var/lib/ureadahead/debugfs type debugfs (rw,relatime)

クオータの有効化

[email protected]:/# quotaon -p /dev/vda1
group quota on / (/dev/vda1) is on
user quota on / (/dev/vda1) is on
[email protected]:/# quota

[email protected]:/# quotaon -avug
/dev/vda1 [/]: group quotas turned on
/dev/vda1 [/]: user quotas turned on
[email protected]:/#

ファイルの所有権チェック

[email protected]:/# quotacheck -avugm
quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quot
a to avoid running quotacheck after an unclean shutdown.
quotacheck: WARNING – Quotafile //quota.user was probably truncated. Cannot save quota settings…
quotacheck: WARNING – Quotafile //quota.group was probably truncated. Cannot save quota settings…
quotacheck: Scanning /dev/vda1 [/] done
quotacheck: Checked 11909 directories and 76257 files
[email protected]:/#

 

クオータの状況確認

wktk# repquota -a
*** Report for user quotas on device /dev/vda1
Block grace time: 7days; Inode grace time: 7days
Block limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
———————————————————————-
root      — 1502740       0       0          78726     0     0

・・・(略)
wktk0002  —     120       0       0             14     0     0
wktk0003  —   51552       0       0           2517     0     0
wktk0004  —   47432       0       0           1168     0     0
wktk0005  —     860       0       0             82     0     0
・・・(略)
wktk#

 

クオータのDB更新

wktk# quotacheck -m -a

クオータテンプレートの適用

wktk# edquota -p tempuser wktk0003

 

 

[email protected]をdebian 5.0から6.0へアップグレード

何かと某掲示板で話題の絶えない [email protected] ですが、ベータ版のころからお付き合いして早2年。
Disk I/Oはもうご愛嬌といった感じでしょう。価格とクオリティの両立って難しいですね。

でもって、久々に暇だったので弄ってみました。

今回は Ubuntu 10.10 server のサポート切れということもあり、OSを変更してみました。
※ do-release-upgrade すればいい話なのですが、うまく動かなかったもので・・・

で、さっそくDTIのコンパネから初期化・OS変更をかけてみました。

ちなみに、[email protected]のコンパネのOS選択画面はこんな感じです。
バージョンがわからないじゃないですか・・・

とりあえず、debian (64bit)を選択。
数十分経ってSSHで繋いでみると・・・

dti# cat /etc/debian_version
5.0.9
dti#

ウホッw lenny ってあと2ヶ月ぐらいでサポート切れるじゃないですがw
このまま使うの心もとないということで、6.o squeeze にバージョンアップしてみました。
自分の忘備録もかねて手順を記します。

1. aptの参照ソース変更

エディタで sources.list を編集。
s/lenny/squeeze/g  といった感じですかね。
それと、エラーが出るので2行目をコメントアウト。

dti# vi /etc/apt/sources.list

deb http://ftp.jp.debian.org/debian/ squeeze main contrib non-free
#deb http://ftp.jp.debian.org/debian-volatile/ squeeze/volatile main contrib non-free
deb http://security.debian.org/ squeeze/updates main contrib non-free
~

2. 気合で apt-get update / upgrade する

apt-get update / upgrade 中にconfを最新版に置き換えていいかとか聞いてくるので、
支障がなさそうなconfは全部最新版に上げる。

dti# apt-get update
Get:1 http://security.debian.org squeeze/updates Release.gpg [836B]
Get:2 http://ftp.jp.debian.org squeeze Release.gpg [1672B]

(略)confを最新版に置き換えていいかとか聞かれる

dti# apt-get upgrade
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following packages have been kept back:
apache2 apache2-mpm-prefork apache2.2-common apt apt-utils bash bind9 bind9utils binutils cpio cron debianutils
dhcp3-client dhcp3-common diff dpkg e2fsprogs ed expect findutils ftp gcc-4.3-base gnupg gpgv grep groff groff-base

(略)confを最新版に置き換えていいかとか聞かれる

dti#

 

3. バージョン上がったか恐る恐る確認する

6.0.xになってれば成功?かな。

dti# cat /etc/debian_version
6.0.3
dti#

ちなみにカーネルはOpenVZなので、ホストOSのバージョンに依存します・・・
つまり、上がりません。

dti# uname -a
Linux dti.mykw.jp 2.6.18-164.15.1.el5.028stab068.9 #1 SMP Tue Mar 30 18:07:38 MSD 2010 x86_64 GNU/Linux
dti#

残念!

 

4. いらない子のお掃除 & 再起動

いらない子をお掃除してディスクを節約。

dti# apt-get autoremove
Reading package lists… Done
Building dependency tree
Reading state information… Done
The following packages will be REMOVED:
libbind9-50
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 81.9 kB disk space will be freed.
Do you want to continue [Y/n]? y
(Reading database … 28104 files and directories currently installed.)
Removing libbind9-50 …
dti# shutdown -r now

Broadcast message from [email protected] (pts/4) (Sun Jan 22 21:54:51 2012):
The system is going down for reboot NOW!

再起動を待つこと十分程度・・・・
なんでこんなに遅いんだろ。オーバーヘッドの少ないOpenVZなのに・・・

とりあえず、以上で作業は終了。
簡単でしたが、VMが遅すぎて1日仕事でした。
せっかくIPv6もネイティブでサポートしてるので早く改善されることを願うばかりです。