bind8/bind9 設定の基本

named.conf 全体設定、zone の項目でゾーン(ドメイン、逆引き時の IP アドレス)を定義し、実際の DNS レコードについては、ゾーンごとにゾーンファイルに記述していく。

named.conf:
    options {
        directory “/etc/named”;
        // 任意のディレクトリ名。ここで設定したものが、
        // ゾーンファイルなど設定ファイルのルートディレクトリになる。
    };
    // 正引き(ドメイン -> IP アドレス)用。
    zone “example.org” { // example.org ドメインについての定義
        type master; // 他の DNS サーバを参照するのではなく、自分で
                      // DNS レコードを定義する場合は master。
                      // 他のサーバを参照する場合は slave
        file “master/example.org”; // 利用するゾーンファイル。ファイル名は任意のものでよい。master 用。
        // masters { 192.168.1.1; 10.0.0.10; }; // DNS レコード参照先マスタサーバ。slave 用。
    };
    
    // 逆引き(IP アドレス -> ドメイン)用。
    zone “1.168.192.in-addr.arpa” { // 192.168.1.* 用。ドット区切りで逆転して、in-addr.arpa を付加する。
        type master;
        file “master/1.168.192.in-addr.arpa”;
    }

次にゾーン設定ファイルです。ドメイン指定の部分では、最後にドットをつける形式(FQDN)にすることに注意します。これは FQDN 形式でないと後にドメイン名が続く(example.org のゾーン設定の場合、ns.example.org は ns.example.org.example.org.)と解釈するためです。

master/example.org:
$TTL 3600 ; Default TTL. 全てのレコードについて有効期間を何秒にするか。
@ IN SOA ns.example.org. postmaster.examle.org. (
       ; 第一パラメータはどのホストについてのレコードか、で @ は *.example.org の意味です。
       ; 第二パラメータは IN は Internet の意味です。常に IN にするものだと思っていていいんじゃないでしょうか。
       ; 第三パラメータはレコードの内容です。SOA は Start of Authority の意味で、ゾーン設定で最初に設定します。
       ; SOA レコードには後ろに二つパラメータと ( 〜 ) が続きます。
       ; ns.example.org が DNS サーバ, postmaster.example.org が
       ; 管理者宛メールアドレス(@ を . に置き換えたもの)です。
       2006021714; Serial. 任意の数値でよいが、更新の必要の有無は
                 ; この数値以下かで判別されるため、
                 ; 更新の際はこの数値以上にする。
       3600 ; Refresh (sec). 更新確認の頻度を何秒ごとにするか。
       1000 ; Retry (times). 失敗時の試行回数。
       86400 ; Expire (sec). 失敗したときに何秒後に破棄するか。
       86400 ; Minimum TTL(sec).
    )
  IN NS ns.example.org. ; example.org, *.example.org の DNS サーバのドメインを ns.example.org にします。
  IN A 192.168.1.11 ; example.org, *.example.org の名前解決結果を 192.168.1.11 にします。
ns IN A 192.168.1.2 ; ns.exmaple.org の名前解決結果を 192.168.1.2 にします。
www IN A 192.168.1.11 ; www.example.org の名前解決結果を 192.168.1.11 にします。

master/1.168.192.in-addr.arpa:
$ORIGIN 1.168.192.in-addr.arpa. ; 192.168.1.* についての設定であることを宣言
$TTL 3600
@ IN SOA ns.example.org. postmaster.example.org. (
        2006021714 ; Serial
        3600 ; Refresh
        1000 ; Retry
        86400 ; Expire
        86400 ; Minimum TTL
    )
  IN NS ns.example.org. ; Primary DNS
  IN NS ns2.exmaple.org. ; Secondary DNS (Optional)
; 以下 IP アドレスごとに固有で逆引き設定をする場合のみ記述する。
1 IN PTR root.example.org. ; 192.168.1.1 の逆引き結果
11 IN PTR www.example.org. ; 192.168.1.11 の逆引き結果

参考:
– ネームサーバーの設定
– bind9 設定
– ゾーンファイルの書き方について教えてください(@IT)
– ISC BIND(English)

存在するのに Can’t find server name … がでる

たとえば DNS が 192.168.1.100 のとき、DNS が存在して動作もしているにもかかわらず

Can’t find server name for address 192.168.1.100: Non-existent domain

と出る場合があります。
このとき DNS サーバにログインし、

nslookup 192.168.1.100

というようにエラーとして出た(DNSの) IP アドレスを指定して解決できなかった場合、
その IP アドレスについて逆引きが正しく設定されていない事が原因である可能性があります。
 
他の原因としては、/etc/resolve.conf が不適切(一番最初の nameserver 指定先が存在しない等)なことが考えられます。
 
正しく設定しているつもりなのに何故か動作していない、という場合は /var/log/messages や /var/log/syslog などで named のログ出力を見ると役に立つかもしれません。

URL をデコードするスクリプト

urldecode.php:
#!/usr/local/bin/php -q
<?php
$in=fopen(‘php://stdin’, ‘r’);
$stat = fstat($in);
while(!feof($in)){
     $buf = fgets($in, 10240);
     echo mb_convert_encoding(urldecode($buf),’EUC_JP’, ‘UTF-8’);
}
?>

簡単なコードですが、

cat access_log | urldecode.php

とかしてやると、検索単語が見えるようになって便利。ただし、この用途のためだけに書いたので、UTF-8 以外の形式でマルチバイト文字列を含んでると結果が化けます。

ファイルへのアクセス状況を調べる

fstat, lsof, fuser などのコマンドを使うと、現在開かれている全てのファイルと開いているユーザ、プログラム、プロセス、読み書きのモードが調べられます。
fstat は FreeBSD の場合で、fuser は Linux の場合、lsof は Linux, BSD を含む UNIX 互換 OS で利用可能です。BSD でlsof を使う場合は、 ports/sysutils/lsof を入れます。lsof は機能が豊富なので、lsof の利用をお勧めします。

fstat:
fstat [-fmnv] [-p pid] [-u user] [-N system] [-M core] [file …]
 
fuser:
fuser [-a|-s|-c] [-4|-6] [-n space] [-k [-i] [-signal] ] [-muvf] name
…
fuser -l
fuser -V
 
lsof:
lsof [ -?abChlnNOPRstUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [
+|-D D ] [ +|-f [cfgGn] ] [ -F [f] ] [ -g [s] ] [ -i [i] ] [ -k k ] [
+|-L [l] ] [ +|-m m ] [ +|-M ] [ -o [o] ] [ -p s ] [ +|-r [t] ] [ -S
[t] ] [ -T [t] ] [ -u s ] [ +|-w ] [ -x [fl] ] [ -z [z] ] [ — ]
[names]

たとえば、ログファイルを開いているプロセス, ファイルを調べるには

lsof +D /var/log

等とします。
デバッグや問題究明に便利です。
 
参考:
– LSOF設置及び使用ガイド

J2EE でどのフレームワークを使うか。またデザインとの分離について

– F’s Garage:日記
なかなか難しいなと常々思っているので、こういうの読むと安心。個人的には,突っ込みしてる方と同じで JSP + EL + Beans が多めです。loop についてはカスタムタグか、そのまま埋め込みかどちらか。これを読んで、カスタムタグも Java コードも使わない Plain Old HTML Pages で書けるのが一番デザインの分離ができそうな気がしてます。
 
参考:
– Nirvana Wiki

エンターキーで入力欄を移動する

事務入力とかでよくある機能です。TabIndex 属性に指定した順番で移動します。
IE のみ対応してます。
onKeyDown でキーコード(Event.keyCode)を書き換えているのがミソです。

<html><head>
<script type=”text/javascript”>
<!–
    function onKeyDown(){
         if(event.keyCode == 13){ event.keyCode = 9; }
    }
// –></script>
</head>
<body>
    <form>
        <input type=”text” value=”abc” onKeyDown=”onKeyDown();” tabIndex=”1″>
        <input type=”text” value=”def” onKeyDown=”onKeyDown();” tabIndex=”2″>
        <input type=”text” value=”ghi” onKeyDown=”onKeyDown();” tabIndex=”3″>
        <input type=”text” value=”jkl” onKeyDown=”onKeyDown();” tabIndex=”4″>
    </form>
</body>
</html>

C# で Java と同等のアクセス制限をかける

Java プログラマが C# を学ぶ際のメモその2。
 
– Java
public: どこからでもアクセス可
protected: 自クラス内と子孫クラス、または同一パッケージ内であればアクセス可(default 権限も兼用)。
default: 同一パッケージ内からのみアクセス可。アクセス修飾子を省略した場合のデフォルト。
private: 自クラス内からのみアクセス可。
 
– C#
public: どこからでもアクセス可(入れ子 enum,interface のデフォルト)。
protected internal: 同一アセンブリ(DLL ファイル, EXE ファイル等)内と子孫からアクセス可。
internal: 同一アセンブリ内からのみアクセス可(名前空間直下で宣言したコンテナのデフォルト)。
protected: 自コンテナ(クラス等)内と子孫からのみアクセス可。(Java と違い同一名前空間は不可)
private: 自コンテナのみからアクセス可(入れ子 class, struct のデフォルト)。
 
注意すべきは、protected の動作の違いと、default(Java) と internal(C#) の制限範囲の違いです。
Java では、パッケージレベルでの制限が可能ですが、言語で制限をかけただけだと外部ファイルからのパッケージへの侵入が可能です。
これを防ぐには JAR を作る時にシーリング機構を利用すれば、そのパッケージの利用者の侵入を制限することができます。
マニフェストの不正な書き換えを防ぐにはJARへの署名機能等を使えばよさそうです。
 
C# では、アセンブリ(プログラム, ライブラリ)単位でのアクセス制限が可能で、名前空間単位では制限できません。アクセス制限がソースファイル単位ではないことに注意してください。
参考:
– C# プログラマーズリファレンス – アクセシビリティレベル
– JARマニフェストのメイン属性
– JavaHouse Brewers 19189 – Package Joining Attack(JDK1.2 での話)

パケットキャプチャツール

昔(2年ほど前)使っていて、機能的にも優秀で使いやすかったものなのですが、
名前を度忘れしていて今日やっと思い出しました orz.
 
Wireshark
(Etherealから改称)
ネットワークに実際に流れている中身をキャプチャして、GUI で見ることができるオープンソースなパケットキャプチャツールです。
Ethereal, Wireshark の Windows での動作には WinPcap が必要です。
 
Windows の他に、Linux 等さまざまな環境で動作します。
 
追記:
(2006-07-27) Ethereal は Wireshark として更新されるようになりました
参考:
– Ethereal(イーサリアル)の日本語解説サイト
– Wireshark