ldirectord を使って高い可用性と拡張性をもつシステムを作りました。
あれ、でもまだひとつ足りません。
そう、LVS自体がSPOF(Single Point Of Failure、故障すると取替えがきかない部分)になってしまったんですね。
なので、これを冗長化します。
これには heartbeat を使います。
まず、aptitude install heartbeat でインストール。
次に、/usr/share/doc/heartbeat/ にある authkeys、ha.cf.gz、haresources.gz を /etc/ha.d/ にコピーします。
authkeys はパーミッションを0600に変更、残りの2つのファイルは gunzip で解凍します。
ここの設定は、それぞれがローカルネットワーク用のeth0、外部向けのeth1を持っている場合です。ひとつしかなければもっと簡単です。
ha.cf
-------------------------------------------------------------------------------------
keepalive 2
deadtime 10
warntime 10
initdead 10
mcast eth0 225.0.0.1 694 1 0
node xvm249
node xvm250
-------------------------------------------------------------------------------------
↑に書いた行のコメントを外して、値を変更します。
最初の辺りの数字は時間です。デフォルトは長すぎるので。
mcastはマルチキャストの意味。
ブロードキャストでもいいのですが、他にもheartbeatを利用した共有を行うつもりなのでマルチキャストにしました。
node はuname -nで出力される名前。参加するホスト分書きます。
haresources
-------------------------------------------------------------------------------------
xvm249 59.106.42.202/28/eth1
-------------------------------------------------------------------------------------
共有するリソースを書きます。
それぞれ、マスターのホスト名とIP、イーサネットの名前を書きます。
authkeys
-------------------------------------------------------------------------------------
auth 2
2 sha1 KYif6FQMB5XmeQT1I7CuYEEQrbQNGCsF
-------------------------------------------------------------------------------------
上のふたつの行を有効にして、パスワードは適当に決めます。
makepasswd -c 32 なんかで作れます。
IPsecを使えばここはなんでもいいです。
認証や暗号化はIPsecに統一したほうが、全体のコストは安上がりでしょう。
これでheartbeatの設定は終わりです。
でも、共有するリソースをheartbeatに開放しないといけません。
/etc/network/interfaces から59.106.42.202を削除します。
でもそうすると、割り当てるIPがなくなるので、boot時にeth1が起動しません。
iface eth1 ...
の代わりに、
up ifconfig eth1 up
を書いて、起動だけするようにしておきます。
結局IPv6のリンクローカルアドレスが割り当てられます。
さらにLVSの設定が必要です。
というのも、テーブルの内容は静的なので同期を取って置けますが、厳密にはTCPのコネクションの情報なども共有しなければいけないからです。
これには、dpkg-reconfigure ipvsadm を実行して、一方のホストをmaster、もう一方をbackupに設定すればできます。
こうすれば同期を取ることができますが、名前からわかるように双方向ではありません。
双方向のパッチもあります。でも、かなり細かい部分なので、僕は本家にマージされるのをのんびり待ちます。
ここまでやると、夜中にシステムダウンで起こされることもなくなります。
火曜日, 12月 19, 2006
金曜日, 12月 15, 2006
Debian GNU/Linux で ldirectord を使う
ldirectord はバックエンドのサーバー群を監視して、自律的にテーブルを書き換えるLVSの拡張です。
もうちょっと具体的に言うと、バックエンドのサーバーに不具合が起きて停止すると、それを発見してリクエストをそちらに送らなくしたりします。
逆に、それまで停止していたサーバーが復帰するとまたリクエストを送るようにしたりするわけですね。
これって、高可用性の要件を満たすのに、めちゃくちゃ有効です。
しかも、ipvsadmと大して手間は変わりません。
まず、aptitude install ldirectord でインストール。
cp /usr/share/doc/ldirectord/ldirectord.cf.gz /etc/ha.d/
gunzip ldirectord.cf.gz
で設定ファイルをコピーします。
設定はこのファイルのサンプルを参考にすればマニュアル見なくても大体わかります。
とりあえずHTTPの設定はこんな感じです。
-------------------------------------------------------------------------------------
# Global Directives
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
#logfile="/var/log/ldirectord.log"
#logfile="local0"
quiescent=yes
# A sample virual with a fallback that will override the gobal setting
virtual=59.106.42.202:80
real=192.168.0.1:80 gate
real=192.168.0.2:80 gate
fallback=127.0.0.1:80 gate
service=http
#request="index.html"
#receive="Test Page"
#virtualhost=some.domain.com.au
scheduler=rr
#persistent=600
#netmask=255.255.255.255
protocol=tcp
-------------------------------------------------------------------------------------
設定が終わったら、/etc/init.d/ldirectord start で起動します。
これで192.168.0.1と192.168.0.2のサーバーを監視して、動いているサーバーにHTTPリクエストを割り振ることができます。
もちろん、重みをつけたり、分散アルゴリズムを指定することもできます。
最後に dpkg-reconfigure ipvsadm を実行してOSの起動時にipvsadmが実行されないようにします。これはもういりません。
もうちょっと具体的に言うと、バックエンドのサーバーに不具合が起きて停止すると、それを発見してリクエストをそちらに送らなくしたりします。
逆に、それまで停止していたサーバーが復帰するとまたリクエストを送るようにしたりするわけですね。
これって、高可用性の要件を満たすのに、めちゃくちゃ有効です。
しかも、ipvsadmと大して手間は変わりません。
まず、aptitude install ldirectord でインストール。
cp /usr/share/doc/ldirectord/ldirectord.cf.gz /etc/ha.d/
gunzip ldirectord.cf.gz
で設定ファイルをコピーします。
設定はこのファイルのサンプルを参考にすればマニュアル見なくても大体わかります。
とりあえずHTTPの設定はこんな感じです。
-------------------------------------------------------------------------------------
# Global Directives
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
#logfile="/var/log/ldirectord.log"
#logfile="local0"
quiescent=yes
# A sample virual with a fallback that will override the gobal setting
virtual=59.106.42.202:80
real=192.168.0.1:80 gate
real=192.168.0.2:80 gate
fallback=127.0.0.1:80 gate
service=http
#request="index.html"
#receive="Test Page"
#virtualhost=some.domain.com.au
scheduler=rr
#persistent=600
#netmask=255.255.255.255
protocol=tcp
-------------------------------------------------------------------------------------
設定が終わったら、/etc/init.d/ldirectord start で起動します。
これで192.168.0.1と192.168.0.2のサーバーを監視して、動いているサーバーにHTTPリクエストを割り振ることができます。
もちろん、重みをつけたり、分散アルゴリズムを指定することもできます。
最後に dpkg-reconfigure ipvsadm を実行してOSの起動時にipvsadmが実行されないようにします。これはもういりません。
水曜日, 12月 06, 2006
証明書で認証する IPsec
前回作成したIPsecの設定を、証明書(公開鍵)認証を使うものに変更します。
まず秘密鍵を公開鍵のペアを作成します。詳しく知りたい方はSSLをどうぞ。
秘密鍵は、/etc/ssl/private、公開鍵は、/etc/ssl/certs にあるものとします。
psk.txtを書き換えます。
192.168.172.1 EKVq0c5NzjAY3mfMSN3Y4pw0utefVj7i
を
xm001.kumicho.net
にします。
もう事前秘密鍵は必要ありません。
次に、racoon.confのremoteセクションに、
my_identifier asn1dn;
certificate_type x509 "xm002.crt.pem" "/etc/ssl/private/xm002.key.pem";
peers_identifier asn1dn;
verify_identifier on;
verify_cert on;
を追加します。
互いの認証を証明書で行うように指示します。
さらに、proposalセクションの
authentication_method pre_shared_key;
を
authentication_method rsasig;
に変更します。
これで証明書による認証が行われます。
まず秘密鍵を公開鍵のペアを作成します。詳しく知りたい方はSSLをどうぞ。
秘密鍵は、/etc/ssl/private、公開鍵は、/etc/ssl/certs にあるものとします。
psk.txtを書き換えます。
192.168.172.1 EKVq0c5NzjAY3mfMSN3Y4pw0utefVj7i
を
xm001.kumicho.net
にします。
もう事前秘密鍵は必要ありません。
次に、racoon.confのremoteセクションに、
my_identifier asn1dn;
certificate_type x509 "xm002.crt.pem" "/etc/ssl/private/xm002.key.pem";
peers_identifier asn1dn;
verify_identifier on;
verify_cert on;
を追加します。
互いの認証を証明書で行うように指示します。
さらに、proposalセクションの
authentication_method pre_shared_key;
を
authentication_method rsasig;
に変更します。
これで証明書による認証が行われます。
Debian GNU/Linux で IPsec を使う
IPパケットのレベルで暗号化します。
これって、結構劇的に便利な気がします。
IPsecの機能自体はカーネルに組み込まれているので、鍵交換サーバーのracoonをインストールします。
aptitude install racoon
次に、/etc/ipsec-tools.conf の編集
コメントを外して、以下のようにします。
-----------------------------------------------------
## Flush the SAD and SPD
flush;
spdflush;
## Some sample SPDs for use racoon
spdadd 192.168.172.2 192.168.172.1 any -P out ipsec
esp/transport//require;
spdadd 192.168.172.1 192.168.172.2 any -P in ipsec
esp/transport//require;
------------------------------------------------------
IPsecをどの通信に適用するかのルールを設定します。
今度は、/etc/racoon/racoon.conf を編集します。
---------------------------------------------------------------------
remote anonymous {
exchange_mode main,aggressive;
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group modp1024;
}
generate_policy off;
}
sainfo anonymous {
pfs_group modp768;
encryption_algorithm 3des;
authentication_algorithm hmac_md5;
compression_algorithm deflate;
}
-----------------------------------------------------------------------
ここではIPsec通信の内容を設定しています。
すべての通信に同じ強度の暗号化を使うなら、上のようにanonymousにすると楽です。
上の設定ファイルにしたがって、ルート証明書へのパスを設定します。
ln -s /etc/ssl/certs/ /etc/racoon/
最後に、/etc/racoon/psk.txt を編集します。
192.168.172.1 EKVq0c5NzjAY3mfMSN3Y4pw0utefVj7i
てな感じに共通秘密鍵を追加します。
この鍵は、
makepasswd --chars 32
なんて風につくれます。ただし、makepasswdのインストールが必要です。
setkey と racoon を再起動すれば、ホスト間での通信がすべて暗号化されます。
プロトコル毎に暗号化したい場合には、racoon.confをもう少し丁寧に書けばいいです。
IPsecを使うと、これまでサービスごとにSSLを使って暗号化していたやりとりがすさまじく簡単になります。
ここでは使ってないですが、サーバー証明書を使った認証もできます。さらに、個人証明書も使えます。
外部向けのHTTPSなんかは無理ですが、内部で使う分にはものすごくシンプルかつ強力です。
これって、結構劇的に便利な気がします。
IPsecの機能自体はカーネルに組み込まれているので、鍵交換サーバーのracoonをインストールします。
aptitude install racoon
次に、/etc/ipsec-tools.conf の編集
コメントを外して、以下のようにします。
-----------------------------------------------------
## Flush the SAD and SPD
flush;
spdflush;
## Some sample SPDs for use racoon
spdadd 192.168.172.2 192.168.172.1 any -P out ipsec
esp/transport//require;
spdadd 192.168.172.1 192.168.172.2 any -P in ipsec
esp/transport//require;
------------------------------------------------------
IPsecをどの通信に適用するかのルールを設定します。
今度は、/etc/racoon/racoon.conf を編集します。
---------------------------------------------------------------------
remote anonymous {
exchange_mode main,aggressive;
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group modp1024;
}
generate_policy off;
}
sainfo anonymous {
pfs_group modp768;
encryption_algorithm 3des;
authentication_algorithm hmac_md5;
compression_algorithm deflate;
}
-----------------------------------------------------------------------
ここではIPsec通信の内容を設定しています。
すべての通信に同じ強度の暗号化を使うなら、上のようにanonymousにすると楽です。
上の設定ファイルにしたがって、ルート証明書へのパスを設定します。
ln -s /etc/ssl/certs/ /etc/racoon/
最後に、/etc/racoon/psk.txt を編集します。
192.168.172.1 EKVq0c5NzjAY3mfMSN3Y4pw0utefVj7i
てな感じに共通秘密鍵を追加します。
この鍵は、
makepasswd --chars 32
なんて風につくれます。ただし、makepasswdのインストールが必要です。
setkey と racoon を再起動すれば、ホスト間での通信がすべて暗号化されます。
プロトコル毎に暗号化したい場合には、racoon.confをもう少し丁寧に書けばいいです。
IPsecを使うと、これまでサービスごとにSSLを使って暗号化していたやりとりがすさまじく簡単になります。
ここでは使ってないですが、サーバー証明書を使った認証もできます。さらに、個人証明書も使えます。
外部向けのHTTPSなんかは無理ですが、内部で使う分にはものすごくシンプルかつ強力です。
水曜日, 11月 29, 2006
LVS の DR ( Direct Routing )
LVSの2回目です。
以前はNATを使っていましたが、今回はDR(Direct Routing)を使います。
DRを使う利点は、こちらのほうがパフォーマンスが高いことです。
NATでは返答のパケットもLVSを通ることになりますが、DRは直接返事を返すので負荷が低いわけです。
それ以外にも、設定がシンプルになるという利点もあります。
欠点はこのホストをゲートウェイに使用できなくなることです。
まあ、複数のホストがなければLVSを使う利点もないので、これはさほど欠点にもなりませんが。
以前、DRを使うにはARPテーブルを操作しなければいけないと思ったんですが、LVSとゲートウェイを別のホストにすればそれも必要ないです。
NAT用に設定していた場合は、設定を戻します。
DRの場合にはフォワードの設定は必要ありません。
/etc/sysctl.conf の変更を戻します。
net.ipv4.conf.default.forwarding=1
の行をコメントアウトして、sysctl -p を実行します。
iptables のフォワードの設定やNATテーブルの設定も必要ありません。削除します。
------------------------------
#!/bin/sh
vip='50.106.42.193'
localnet='192.168.0.0/16'
bind1='192.168.0.5'
bind2='192.168.0.6'
ipvsadm -C
ipvsadm -A -t $vip:53
ipvsadm -a -t $vip:53 -r $bind1 -g
ipvsadm -a -t $vip:53 -r $bind2 -g
ipvsadm -A -u $vip:53
ipvsadm -a -u $vip:53 -r $bind1 -g
ipvsadm -a -u $vip:53 -r $bind2 -g
-------------------------------------
新しい設定ファイルはこうなります。
でも、もうiptablesと照らし合わせる必要がないので、別の場所に保存します。
dpkg-reconfigure ipvsadm
を実行します。
起動時に保存されたテーブルの復元、終了時に現在の設定を保存するか聞かれるので、yesにします。
上の新しい設定ファイルを一度実行したら、
/etc/init.d/ipvsadm stop
/etc/init.d/ipvsadm start
を実行して、テーブルの情報が保存され、ちゃんと復元されることを確認します。
そしたら設定ファイルは削除してしまいましょう。
最後にVIP(ここでは50.106.42.193)のネットマスクを255.255.255.255にします。
このあたりは少しトリッキーですが、同じIPをもつホストを複数用意するためにこの操作が必要になります。
これでLVS側の設定は終わりです。
バックエンドの実サーバーでも同じような操作が必要になります。
ifconfig lo:0 50.106.42.193 netmask 255.255.255.255 up
を実行してループバックアドレスにLVSのアドレスを割り当てます。
次に、
route add -host 50.106.42.193 dev lo:0
で、このアドレスがループバックアドレスに送られるように設定します。
もし、これらのホストのデフォルトゲートウェイがLVSサーバーだったら、これを別のホストに変更します。
これで設定は完了です。
もしバックエンドの実サーバーが別のネットワークにある場合には、トンネルを利用します。
が、そんなことあんまりしないですよね。。
以前はNATを使っていましたが、今回はDR(Direct Routing)を使います。
DRを使う利点は、こちらのほうがパフォーマンスが高いことです。
NATでは返答のパケットもLVSを通ることになりますが、DRは直接返事を返すので負荷が低いわけです。
それ以外にも、設定がシンプルになるという利点もあります。
欠点はこのホストをゲートウェイに使用できなくなることです。
まあ、複数のホストがなければLVSを使う利点もないので、これはさほど欠点にもなりませんが。
以前、DRを使うにはARPテーブルを操作しなければいけないと思ったんですが、LVSとゲートウェイを別のホストにすればそれも必要ないです。
NAT用に設定していた場合は、設定を戻します。
DRの場合にはフォワードの設定は必要ありません。
/etc/sysctl.conf の変更を戻します。
net.ipv4.conf.default.forwarding=1
の行をコメントアウトして、sysctl -p を実行します。
iptables のフォワードの設定やNATテーブルの設定も必要ありません。削除します。
------------------------------
#!/bin/sh
vip='50.106.42.193'
localnet='192.168.0.0/16'
bind1='192.168.0.5'
bind2='192.168.0.6'
ipvsadm -C
ipvsadm -A -t $vip:53
ipvsadm -a -t $vip:53 -r $bind1 -g
ipvsadm -a -t $vip:53 -r $bind2 -g
ipvsadm -A -u $vip:53
ipvsadm -a -u $vip:53 -r $bind1 -g
ipvsadm -a -u $vip:53 -r $bind2 -g
-------------------------------------
新しい設定ファイルはこうなります。
でも、もうiptablesと照らし合わせる必要がないので、別の場所に保存します。
dpkg-reconfigure ipvsadm
を実行します。
起動時に保存されたテーブルの復元、終了時に現在の設定を保存するか聞かれるので、yesにします。
上の新しい設定ファイルを一度実行したら、
/etc/init.d/ipvsadm stop
/etc/init.d/ipvsadm start
を実行して、テーブルの情報が保存され、ちゃんと復元されることを確認します。
そしたら設定ファイルは削除してしまいましょう。
最後にVIP(ここでは50.106.42.193)のネットマスクを255.255.255.255にします。
このあたりは少しトリッキーですが、同じIPをもつホストを複数用意するためにこの操作が必要になります。
これでLVS側の設定は終わりです。
バックエンドの実サーバーでも同じような操作が必要になります。
ifconfig lo:0 50.106.42.193 netmask 255.255.255.255 up
を実行してループバックアドレスにLVSのアドレスを割り当てます。
次に、
route add -host 50.106.42.193 dev lo:0
で、このアドレスがループバックアドレスに送られるように設定します。
もし、これらのホストのデフォルトゲートウェイがLVSサーバーだったら、これを別のホストに変更します。
これで設定は完了です。
もしバックエンドの実サーバーが別のネットワークにある場合には、トンネルを利用します。
が、そんなことあんまりしないですよね。。
金曜日, 11月 24, 2006
LVS (Linux Virtual Server)
LVS (Linux Virtual Server)を使ってみました。
LVSは受け取ったパケットを別のホストに転送して処理させることで、負荷分散や可用性の高い運用ができます。
具体的には、ホストごとに重み付けをして転送することによって負荷分散ができます。
ホストを追加したり、不具合の起きたホストを削除したりするのもできます。
しかもユーザーから見ると、なにも変化がないんですね。これは素敵。
僕のように、少ないIPアドレスで運用している場合には、ひとつのIPでLVSを動かして、実際の処理はサービスごとに別のホストで行うって運用もできます。
Xenと組み合わせて使うと、サービスをホスト間で簡単に移動、追加、削除ができるのでとても便利。使わない手はないですね。
で、利用するには、ipvsadmが必要です。
LVS自体はカーネルに組み込まれていますが、それを操作するツールをインストールしないといけないわけです。
aptitude install ipvsadm
でインストールします。
実はこのipvsadm、iptablesと使い方がよく似ています。
あとで書いてますが、設定する場所も同じです。
ipvsadm -L でリストを表示するのも一緒。
他に便利なのものは、
ipvsadm -L -n --stats で、転送したパケットなどが見れます。
で、とりあえず設定例
まず、/etc/sysctl.conf を変更します。
net.ipv4.conf.default.forwarding=1
のコメントを外し、sysctl -p を実行します。
これは今回の転送方法がNAT型だから必要です。
次に、
------------------------------
#!/bin/sh
vip='50.106.42.193'
localnet='192.168.0.0/16'
bind1='192.168.0.5'
bind2='192.168.0.6'
iptables -F
iptables -t nat -F
iptables -X
iptables -P FORWARD DROP
iptables -A FORWARD -i eth0 -o eth1 -s $localnet -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -d $bind1 --protocol tcp --dport 53 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -d $bind1 --protocol udp --dport 53 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -d $bind2 --protocol tcp --dport 53 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -d $bind2 --protocol udp --dport 53 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s $localnet -d ! $localnet -j SNAT --to-source $vip
ipvsadm -C
ipvsadm -A -t $vip:53
ipvsadm -a -t $vip:53 -r $bind1 -m
ipvsadm -a -t $vip:53 -r $bind2 -m
ipvsadm -A -u $vip:53
ipvsadm -a -u $vip:53 -r $bind1 -m
ipvsadm -a -u $vip:53 -r $bind2 -m
-------------------------------------
これを、/etc/network/if-pre-up.d/ の中に置きます。
もともとの設定があればマージしてください。
名前は適当で構いません。ただし実行可能にしておくこと。
そうすればインターフェイスがupされる時に、テーブルが有効になります。
設定中は直接実行することで、調整も可能です。
今回は3つある転送の方法のうち、NATを利用しました。
DRやTunnelの場合はARPテーブルを操作する必要があるので、また今度。
その代わりに、net.ipv4.conf.default.forwarding=1 の設定が必要でした。
iptablesで普通にNATの設定をした後、実際に処理を行うホストへの転送を許可します。
実は、このNATの設定はLVSには必要ありません。
でも、転送先のホストのデフォルトゲートウェイをこのホストにする必要があるので、普通の通信を行うのに必要です。
ipvsadmでは-Aで転送を行うサービスを指定した後に、-aで転送先を指定します。
これで、2台のホストにDNSの処理が分散されています。
これは相当、簡単で便利です。
LVSは受け取ったパケットを別のホストに転送して処理させることで、負荷分散や可用性の高い運用ができます。
具体的には、ホストごとに重み付けをして転送することによって負荷分散ができます。
ホストを追加したり、不具合の起きたホストを削除したりするのもできます。
しかもユーザーから見ると、なにも変化がないんですね。これは素敵。
僕のように、少ないIPアドレスで運用している場合には、ひとつのIPでLVSを動かして、実際の処理はサービスごとに別のホストで行うって運用もできます。
Xenと組み合わせて使うと、サービスをホスト間で簡単に移動、追加、削除ができるのでとても便利。使わない手はないですね。
で、利用するには、ipvsadmが必要です。
LVS自体はカーネルに組み込まれていますが、それを操作するツールをインストールしないといけないわけです。
aptitude install ipvsadm
でインストールします。
実はこのipvsadm、iptablesと使い方がよく似ています。
あとで書いてますが、設定する場所も同じです。
ipvsadm -L でリストを表示するのも一緒。
他に便利なのものは、
ipvsadm -L -n --stats で、転送したパケットなどが見れます。
で、とりあえず設定例
まず、/etc/sysctl.conf を変更します。
net.ipv4.conf.default.forwarding=1
のコメントを外し、sysctl -p を実行します。
これは今回の転送方法がNAT型だから必要です。
次に、
------------------------------
#!/bin/sh
vip='50.106.42.193'
localnet='192.168.0.0/16'
bind1='192.168.0.5'
bind2='192.168.0.6'
iptables -F
iptables -t nat -F
iptables -X
iptables -P FORWARD DROP
iptables -A FORWARD -i eth0 -o eth1 -s $localnet -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -d $bind1 --protocol tcp --dport 53 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -d $bind1 --protocol udp --dport 53 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -d $bind2 --protocol tcp --dport 53 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -d $bind2 --protocol udp --dport 53 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s $localnet -d ! $localnet -j SNAT --to-source $vip
ipvsadm -C
ipvsadm -A -t $vip:53
ipvsadm -a -t $vip:53 -r $bind1 -m
ipvsadm -a -t $vip:53 -r $bind2 -m
ipvsadm -A -u $vip:53
ipvsadm -a -u $vip:53 -r $bind1 -m
ipvsadm -a -u $vip:53 -r $bind2 -m
-------------------------------------
これを、/etc/network/if-pre-up.d/ の中に置きます。
もともとの設定があればマージしてください。
名前は適当で構いません。ただし実行可能にしておくこと。
そうすればインターフェイスがupされる時に、テーブルが有効になります。
設定中は直接実行することで、調整も可能です。
今回は3つある転送の方法のうち、NATを利用しました。
DRやTunnelの場合はARPテーブルを操作する必要があるので、また今度。
その代わりに、net.ipv4.conf.default.forwarding=1 の設定が必要でした。
iptablesで普通にNATの設定をした後、実際に処理を行うホストへの転送を許可します。
実は、このNATの設定はLVSには必要ありません。
でも、転送先のホストのデフォルトゲートウェイをこのホストにする必要があるので、普通の通信を行うのに必要です。
ipvsadmでは-Aで転送を行うサービスを指定した後に、-aで転送先を指定します。
これで、2台のホストにDNSの処理が分散されています。
これは相当、簡単で便利です。
木曜日, 11月 09, 2006
Debian GNU/Linux で radvd を使う
IPv6にはIPv4でのDHCPのような機能がIPのレイヤーで実装されています。
なので設定がとても楽チンです。
まず、ルーターになるホスト(ここでは6to4トンネルの設定をしたホスト)で、パケットを通過させるようにします。
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
同じホストでこれから設定する radvd による自動設定を無効にします。
echo 0 > /proc/sys/net/ipv6/conf/all/accept_ra
次に radvd のインストール。
aptitude install radvd
/etc/radvd.conf を以下のようにします。
interface eth0
{
AdvSendAdvert on;
prefix 2002:3b6a:2aca::/64 {};
};
意味は、eth0 につながるホストに 2002:3b6a:2aca:0(/64なので) のネットワークアドレスから始まるIPv6アドレスを自動的に割り当てるようにしています。
デフォルトゲートウェイも同時に設定されます。
これで、スイッチで接続されているホストはすべてIPv6による通信が可能になっています。
ping6 www.kame.net
などと打ってみると、外部のホストと通信できているのがわかります。
ついでにWindowsも使ってみます。
Windows XP でIPv6を有効にするには、コマンドプロンプトで、
ipv6 install
を実行します。
これでIPv6が有効になります。
さきほど設定した radvd からアドレスやルーティングの情報を自動的に受信するので、すぐに使えます。
ping 2001:200:0:8000::42
で、www.kame.netと通信できているのがわかります。
さらに、firefoxのアドレスに、
http://[2001:200:0:8000::42]/
と入れると、IPv6でWebページにアクセスできます。
他にも、poderosaでもIPv6が使えます。
Webとシェルが使えれば十分な感じです。
外向けのサービス以外でIPv4を使わなくてもいいですね。
なので設定がとても楽チンです。
まず、ルーターになるホスト(ここでは6to4トンネルの設定をしたホスト)で、パケットを通過させるようにします。
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
同じホストでこれから設定する radvd による自動設定を無効にします。
echo 0 > /proc/sys/net/ipv6/conf/all/accept_ra
次に radvd のインストール。
aptitude install radvd
/etc/radvd.conf を以下のようにします。
interface eth0
{
AdvSendAdvert on;
prefix 2002:3b6a:2aca::/64 {};
};
意味は、eth0 につながるホストに 2002:3b6a:2aca:0(/64なので) のネットワークアドレスから始まるIPv6アドレスを自動的に割り当てるようにしています。
デフォルトゲートウェイも同時に設定されます。
これで、スイッチで接続されているホストはすべてIPv6による通信が可能になっています。
ping6 www.kame.net
などと打ってみると、外部のホストと通信できているのがわかります。
ついでにWindowsも使ってみます。
Windows XP でIPv6を有効にするには、コマンドプロンプトで、
ipv6 install
を実行します。
これでIPv6が有効になります。
さきほど設定した radvd からアドレスやルーティングの情報を自動的に受信するので、すぐに使えます。
ping 2001:200:0:8000::42
で、www.kame.netと通信できているのがわかります。
さらに、firefoxのアドレスに、
http://[2001:200:0:8000::42]/
と入れると、IPv6でWebページにアクセスできます。
他にも、poderosaでもIPv6が使えます。
Webとシェルが使えれば十分な感じです。
外向けのサービス以外でIPv4を使わなくてもいいですね。
水曜日, 11月 08, 2006
Debian GNU/Linux で IPv6 を使う (6to4 トンネル)
お金も手間もかけないでIPv6を使ってみます。
kernel 2.6 以降であればネイティブでIPv6をサポートしているのでとっても簡単です。
/etc/network/interfaces に以下を追加します。
auto sit0
iface sit0 inet6 static
address 2002:3b6a:2aca::1
netmask 16
gateway ::192.88.99.1
2002:3b6a:2aca は、IPv4アドレスで決まります。
printf "2002:%02x%02x:%02x%02x\n" 59 106 42 202
とすれば計算できます。後ろの数字がv4のIPアドレス。
::192.88.99.1 は、6to4トンネルのために予約されているアドレスで、あなたから一番近い6to4トンネルに割り当てられます。
あとは、
ping6 www.kame.net
なんてpingを打ってみるとIPv6で通信できているのが確認できます。
まあ、公開されている6to4トンネルを使うので、IPv4よりは遅くなりますが。
kernel 2.6 以降であればネイティブでIPv6をサポートしているのでとっても簡単です。
/etc/network/interfaces に以下を追加します。
auto sit0
iface sit0 inet6 static
address 2002:3b6a:2aca::1
netmask 16
gateway ::192.88.99.1
2002:3b6a:2aca は、IPv4アドレスで決まります。
printf "2002:%02x%02x:%02x%02x\n" 59 106 42 202
とすれば計算できます。後ろの数字がv4のIPアドレス。
::192.88.99.1 は、6to4トンネルのために予約されているアドレスで、あなたから一番近い6to4トンネルに割り当てられます。
あとは、
ping6 www.kame.net
なんてpingを打ってみるとIPv6で通信できているのが確認できます。
まあ、公開されている6to4トンネルを使うので、IPv4よりは遅くなりますが。
木曜日, 10月 12, 2006
Debian GNU/Linux で Bridge(ブリッジ)を使う
Xenではブリッジを使います。
まあ、インターフェースがひとつだけなら、デフォルトを使うっていう手もなくはないですが。
自分で設定するなら、一体どこに書くのか?
結論からいうと、interfacesに追加すればいいです。
--------------------------------------
auto xenbr0
iface xenbr0 inet static
address 192.168.1.254
netmask 255.255.0.0
gateway 192.168.1.1
bridge_ports eth0
--------------------------------------
こんな風に記述すると、eth0が接続されたブリッジができます。
グローバルなIPをブリッジに割り当てる必要はないと思いますが、ローカルなIPは割り当てましょう。
どっちも割り当てないと、このブリッジの役割をしてるLinuxにアクセスできなくなります。
まあ、インターフェースがひとつだけなら、デフォルトを使うっていう手もなくはないですが。
自分で設定するなら、一体どこに書くのか?
結論からいうと、interfacesに追加すればいいです。
--------------------------------------
auto xenbr0
iface xenbr0 inet static
address 192.168.1.254
netmask 255.255.0.0
gateway 192.168.1.1
bridge_ports eth0
--------------------------------------
こんな風に記述すると、eth0が接続されたブリッジができます。
グローバルなIPをブリッジに割り当てる必要はないと思いますが、ローカルなIPは割り当てましょう。
どっちも割り当てないと、このブリッジの役割をしてるLinuxにアクセスできなくなります。
火曜日, 10月 10, 2006
aptitude と依存関係
とても便利なaptitude。
aptと最も違うところは、インストールのときだけじゃなく、アンインストールのときも依存関係を考慮してくれるところです。
aptでもインストール時に依存しているパッケージを自動でインストールしてくれます。
aptitudeはそのときに依存関係によってインストールされた、と印をつけてくれます。
それで、アンインストールのときにはその印がついたパッケージも一緒に削除されます。
なんか記憶にないけど、このライブラリ、消してもいいのかわからない。そんなことはもうなくなります。
あと、最近知ったのですが、removeではなくpurgeを使うと設定ファイルも消去できます。まあ、これはaptでもできますが。
長いこと使ってるうちに/etcがどんどん大きくなるのを防ぐことができます。
これも便利。
また、パッケージの検索で細かな検索条件を指定できます。
このあたりも使いこなせるようになると、もうaptには戻れません。
aptと最も違うところは、インストールのときだけじゃなく、アンインストールのときも依存関係を考慮してくれるところです。
aptでもインストール時に依存しているパッケージを自動でインストールしてくれます。
aptitudeはそのときに依存関係によってインストールされた、と印をつけてくれます。
それで、アンインストールのときにはその印がついたパッケージも一緒に削除されます。
なんか記憶にないけど、このライブラリ、消してもいいのかわからない。そんなことはもうなくなります。
あと、最近知ったのですが、removeではなくpurgeを使うと設定ファイルも消去できます。まあ、これはaptでもできますが。
長いこと使ってるうちに/etcがどんどん大きくなるのを防ぐことができます。
これも便利。
また、パッケージの検索で細かな検索条件を指定できます。
このあたりも使いこなせるようになると、もうaptには戻れません。
日曜日, 10月 01, 2006
Debian GNU/Linux で ユニークなIDの作り方
ユニークなIDが欲しいときがあります。
で、そういうときにはこれ。
uuidgen -t
これでユニークなIDが出力されます。
マニュアルによると、macアドレス(世界でユニーク)とハードウェアクロックを利用して作成しているらしいです。
CPUがひとつなら、同じ時刻というのは存在しないのがわからなくもないですが(精度にもよりますが)、最近のDual CoreなCPUでも保障されてるんでしょうか?
まあ、実用上問題ないのでとりあえず使っています。
で、そういうときにはこれ。
uuidgen -t
これでユニークなIDが出力されます。
マニュアルによると、macアドレス(世界でユニーク)とハードウェアクロックを利用して作成しているらしいです。
CPUがひとつなら、同じ時刻というのは存在しないのがわからなくもないですが(精度にもよりますが)、最近のDual CoreなCPUでも保障されてるんでしょうか?
まあ、実用上問題ないのでとりあえず使っています。
金曜日, 9月 29, 2006
Debian GNU/Linux で Xen を使う
やっぱり、世の中は仮想化ですよ。
というわけで、Xenを使ってみました。
使おうとは前から思っていたんですが、何度インストールしてもなかなかうまくいかなかったんですね。
ところが最近DebianのTestingに入ったパッケージで簡単にインストールできました。
aptitude install xen-linux-system-2.6.17-2-xen-686
これで再起動すればXenカーネルで起動できます。今までの苦労はなんだったんだ。
ついでに、xen-toolsやxen-ioemu-3.0-unstable、libc6-xenなんかも入れておきましょう。
次に仮想サーバーのイメージファイルを作ります。
手順は以下の通り。
dd if=/dev/zero of=/home/xen/debian_image bs=1024k count=2048
mkfs.ext3 /home/xen/debian_image
mount -o loop /home/xen/debian_image /mnt/disk
debootstrap --arch i386 etch /mnt/disk http://ftp.jp.debian.org/debian
最初に2GBのからのファイルを作り、次にそのファイルの中にext3ファイルシステムを作ります。
マウントして、必要なシステムをインストールします。
最後は適当な設定ファイル(debian_image.conf など)に設定を書きます。
cp /etc/xen/xmexample1 /home/xen/debian_image.conf
kernel = "/boot/vmlinuz-2.6.17-2-xen-686"
ramdisk = "/boot/initrd.img-2.6.17-2-xen-686"
name = "Domain-1"
vif = [ 'ip=192.168.2.2,bridge=xenbr0' ]
disk = [ 'file:/home/xen/debian_image,hda1,w' ]
netmask="255.255.0.0"
gateway="192.168.2.1"
vmid=1
hostname= "vm%d" % vmid
root = "/dev/hda1 ro"
これくらい書き換えるといいです。
あとは、
xm create /home/xen/debian_image.conf -c
などと起動すればいいです。
というわけで、Xenを使ってみました。
使おうとは前から思っていたんですが、何度インストールしてもなかなかうまくいかなかったんですね。
ところが最近DebianのTestingに入ったパッケージで簡単にインストールできました。
aptitude install xen-linux-system-2.6.17-2-xen-686
これで再起動すればXenカーネルで起動できます。今までの苦労はなんだったんだ。
ついでに、xen-toolsやxen-ioemu-3.0-unstable、libc6-xenなんかも入れておきましょう。
次に仮想サーバーのイメージファイルを作ります。
手順は以下の通り。
dd if=/dev/zero of=/home/xen/debian_image bs=1024k count=2048
mkfs.ext3 /home/xen/debian_image
mount -o loop /home/xen/debian_image /mnt/disk
debootstrap --arch i386 etch /mnt/disk http://ftp.jp.debian.org/debian
最初に2GBのからのファイルを作り、次にそのファイルの中にext3ファイルシステムを作ります。
マウントして、必要なシステムをインストールします。
最後は適当な設定ファイル(debian_image.conf など)に設定を書きます。
cp /etc/xen/xmexample1 /home/xen/debian_image.conf
kernel = "/boot/vmlinuz-2.6.17-2-xen-686"
ramdisk = "/boot/initrd.img-2.6.17-2-xen-686"
name = "Domain-1"
vif = [ 'ip=192.168.2.2,bridge=xenbr0' ]
disk = [ 'file:/home/xen/debian_image,hda1,w' ]
netmask="255.255.0.0"
gateway="192.168.2.1"
vmid=1
hostname= "vm%d" % vmid
root = "/dev/hda1 ro"
これくらい書き換えるといいです。
あとは、
xm create /home/xen/debian_image.conf -c
などと起動すればいいです。
木曜日, 9月 28, 2006
Debian GNU/Linux で改行コードの変換
いつもemacsで変換してたので、シェルで変換する方法を知りませんでした。
で、そういうときに使うのがこれ、trコマンド。
perlの中にほぼ同じ機能の関数がありますね。
tr -d '\r' < file.windows > file.linux
こうするとDOSの改行からLinuxの改行にできます。これはCRLFからCRを取り除いてるだけです。
CRLFをLFに変換するほうが正しいですね。
上のやり方が正しいかは文字コードに詳しくないと答えられないです。
他の場面でも使えそうな、便利なコマンドを知りました。
で、そういうときに使うのがこれ、trコマンド。
perlの中にほぼ同じ機能の関数がありますね。
tr -d '\r' < file.windows > file.linux
こうするとDOSの改行からLinuxの改行にできます。これはCRLFからCRを取り除いてるだけです。
CRLFをLFに変換するほうが正しいですね。
上のやり方が正しいかは文字コードに詳しくないと答えられないです。
他の場面でも使えそうな、便利なコマンドを知りました。
水曜日, 9月 20, 2006
Debian GNU/Linux で Bind (Bind9)
頭のてっぺんからつま先まで独自仕様なdjbdnsがなんとなく嫌でした。
車輪の再発明が嫌だからDNSSecには対応しないとか言ってるくせに、daemontoolsやtcpserverまで書いたりして意味不明です。
というか、実はtinydns、パフォーマンスも悪いらしい。
非公式のパッチをいろいろ当てたりするのも手間ですし。
面倒な上に性能が低いので、これを機会に止めてみました。
それでも、(非公式パッチを当てたとしても、)セキュリティー的にはtinydnsの方が上だとは思っていますが。
で、Bind。
設定ファイルの構成がいいです。
named.confがメインの設定ファイルですが、管理者によるオプションはnamed.conf.optionに記述します。
これでバージョンアップのときにも設定ファイルを使いまわせる(可能性が高い)。
ゾーンの設定もnamed.conf.localに記述します。
こういうところはさすがDebian。
Redhat系にはない、気の利いたやりかたです。
僕はキャッシュサーバーにはpdnsdを使っているので、named.conf.optionに
recursion no;
を追加します。
bindの使うIPを制限するときは、
listen-on {
59.106.42.193;
59.106.42.194;
};
も追加します。
ゾーンの設定はnamed.conf.localに記述します。
zone "infology.info" {
type master;
file "/etc/bind/db.infology.info";
};
もちろん、ゾーンファイルを先に作成しておく必要があります。
-------------------------------------------------------------------
;
; BIND data file for infology.info
;
$TTL 300
@ IN SOA infology.info. hostmaster.infology.info. (
2006082102 ; Serial
300 ; Refresh
300 ; Retry
900 ; Expire
300 ) ; Negative Cache TTL
;
IN NS a.ns.infology.info.
IN NS b.ns.infology.info.
IN MX 0 a.mx.infology.info.
IN MX 0 b.mx.infology.info.
IN A 59.106.42.202
a.ns IN A 59.106.42.193
b.ns IN A 59.106.42.194
a.mx IN A 59.106.42.195
b.mx IN A 59.106.42.196
----------------------------------------------------------------
あとは必要なだけゾーンを追加してやれば、あっさりと動きます。
動かす手間が大違いです。
あと、ゾーンごとにファイルが分かれてるのもいいですね。
車輪の再発明が嫌だからDNSSecには対応しないとか言ってるくせに、daemontoolsやtcpserverまで書いたりして意味不明です。
というか、実はtinydns、パフォーマンスも悪いらしい。
非公式のパッチをいろいろ当てたりするのも手間ですし。
面倒な上に性能が低いので、これを機会に止めてみました。
それでも、(非公式パッチを当てたとしても、)セキュリティー的にはtinydnsの方が上だとは思っていますが。
で、Bind。
設定ファイルの構成がいいです。
named.confがメインの設定ファイルですが、管理者によるオプションはnamed.conf.optionに記述します。
これでバージョンアップのときにも設定ファイルを使いまわせる(可能性が高い)。
ゾーンの設定もnamed.conf.localに記述します。
こういうところはさすがDebian。
Redhat系にはない、気の利いたやりかたです。
僕はキャッシュサーバーにはpdnsdを使っているので、named.conf.optionに
recursion no;
を追加します。
bindの使うIPを制限するときは、
listen-on {
59.106.42.193;
59.106.42.194;
};
も追加します。
ゾーンの設定はnamed.conf.localに記述します。
zone "infology.info" {
type master;
file "/etc/bind/db.infology.info";
};
もちろん、ゾーンファイルを先に作成しておく必要があります。
-------------------------------------------------------------------
;
; BIND data file for infology.info
;
$TTL 300
@ IN SOA infology.info. hostmaster.infology.info. (
2006082102 ; Serial
300 ; Refresh
300 ; Retry
900 ; Expire
300 ) ; Negative Cache TTL
;
IN NS a.ns.infology.info.
IN NS b.ns.infology.info.
IN MX 0 a.mx.infology.info.
IN MX 0 b.mx.infology.info.
IN A 59.106.42.202
a.ns IN A 59.106.42.193
b.ns IN A 59.106.42.194
a.mx IN A 59.106.42.195
b.mx IN A 59.106.42.196
----------------------------------------------------------------
あとは必要なだけゾーンを追加してやれば、あっさりと動きます。
動かす手間が大違いです。
あと、ゾーンごとにファイルが分かれてるのもいいですね。
木曜日, 9月 14, 2006
aptitude
これまでうちのDebianでは、ずっとaptを使ってパッケージの管理してました。
aptitude、もっといい。
aptを使ってて面倒なことのひとつは、searchやshowを使うときはapt-cache、installやupgradeを使うときはapt-getと使い分けないといけないことですね。
でもaptitudeはどっちもできる。便利だなあ。
あとはsearchの結果がaptitudeのほうが見やすいです。
パッケージの属性、インストール済みとかconfigファイルだけ残っているとかバーチャルなパッケージだとか、そういうのも表示されてわかりやすい。
これからはaptitudeの時代ですね。
aptitude、もっといい。
aptを使ってて面倒なことのひとつは、searchやshowを使うときはapt-cache、installやupgradeを使うときはapt-getと使い分けないといけないことですね。
でもaptitudeはどっちもできる。便利だなあ。
あとはsearchの結果がaptitudeのほうが見やすいです。
パッケージの属性、インストール済みとかconfigファイルだけ残っているとかバーチャルなパッケージだとか、そういうのも表示されてわかりやすい。
これからはaptitudeの時代ですね。
水曜日, 9月 13, 2006
プロセスが複数起動するのを防ぐ - start-stop-daemon
というわけで、前回のautosshを使ったポートフォワーディング。
autosshがsshを監視、再起動してくれるのでこのプロセスはひとつでいいわけです。
まあ、その気になればそんなスクリプトはすぐに書けるわけですが、こんな機能ないわけないよ。
ってわけで、start-stop-daemon。
このコマンドを使って管理することができます。
start-stop-daemon --stop --pidfile /var/run/autossh/pop3.pid --signal 0 --quiet || start-stop-daemon --start --pidfile /var/run/autossh/pop3.pid --chuid user1:user1 --background --make-pidfile --exec /usr/bin/autossh -- -M 0 -gN -b 192.168.0.1 -l user1 -i /home/user1/.ssh/id_dsa -L 10110:localhost:110 pop3.kumicho.net
こんな感じ。
これで複数のプロセスが起動することはありません。
ここでは、
1.pop3.pidに書かれたプロセスが存在する場合は起動しない
2.そうでなければ、所有者user1:user1のautosshプロセスを起動して、そのプロセスIDをpop3.pidに書き込む
ということをやっています。
このstart-stop-daemon、他にもchrootの機能なんかもあっておもしろいです。
つーか、これ使ったら、ユーザーの変更やpidファイルおよびプロセスの管理、chrootの機能をプログラムに持たせる必要ないのでは?
多くのプログラムがなんでそういう機能を自前で持っているのか理解に苦しみますね。
autosshがsshを監視、再起動してくれるのでこのプロセスはひとつでいいわけです。
まあ、その気になればそんなスクリプトはすぐに書けるわけですが、こんな機能ないわけないよ。
ってわけで、start-stop-daemon。
このコマンドを使って管理することができます。
start-stop-daemon --stop --pidfile /var/run/autossh/pop3.pid --signal 0 --quiet || start-stop-daemon --start --pidfile /var/run/autossh/pop3.pid --chuid user1:user1 --background --make-pidfile --exec /usr/bin/autossh -- -M 0 -gN -b 192.168.0.1 -l user1 -i /home/user1/.ssh/id_dsa -L 10110:localhost:110 pop3.kumicho.net
こんな感じ。
これで複数のプロセスが起動することはありません。
ここでは、
1.pop3.pidに書かれたプロセスが存在する場合は起動しない
2.そうでなければ、所有者user1:user1のautosshプロセスを起動して、そのプロセスIDをpop3.pidに書き込む
ということをやっています。
このstart-stop-daemon、他にもchrootの機能なんかもあっておもしろいです。
つーか、これ使ったら、ユーザーの変更やpidファイルおよびプロセスの管理、chrootの機能をプログラムに持たせる必要ないのでは?
多くのプログラムがなんでそういう機能を自前で持っているのか理解に苦しみますね。
木曜日, 5月 11, 2006
pdnsd
以前、djbdnsのdnsキャッシュを使っていました。
でも、思ってたより性能が出てないので止めました。
何度か書いてますが、このページはさくらインターネットでホスティングしています。
で、気がつくとなんの連絡もなしにDNSキャッシュが一台止まっていました。
しばらくして復帰してましたが、まあ、はっきり言って困るのでまた自分で用意することにしました。
djbdnsは更新されないのでやめました。
rootサーバーの一覧が古いままなんですね。
なので自分で更新しないといけません。
こんなことは滅多にないんですが、滅多にないだけに気がつきにくいので、よくない。
頻繁にあっても面倒なのでよくないですが。
てことで、pdnsdを導入することにしました。
理由はDebianのリファレンスで推奨されてたから。
とりあえず、設定ファイル(pdnsd.conf)のglobalセクションで
server_ip="127.0.0.1";
の行のコメントを外したら動きました。
このサーバーは外向けにコンテンツDNSサーバーを動かしてるので、デフォルトではポートが衝突して起動しないんですね。
このままだと、さくらのキャッシュサーバーのキャッシュサーバーに過ぎないので、ルートサーバーから再帰的に検索するように設定します。
これでさくらのキャッシュが汚染されようがストップしようが影響受けません。
で、ここまでやって気がついたんですが、結局pdnsdもルートサーバーの登録は手動でする必要がありました。なんてこったい。
server {
ip="192.33.4.12","128.8.10.90","192.203.230.10","192.5.5.241","192.112.36.4","128.63.2.53","192.36.148.17","192.58.128.30","193.0.14.129","198.32.64.12","202.12.27.33","19
8.41.0.4","192.228.79.201";
root_server=on;
}
最低限必要なのはこれだけ。
ipの取得は、
dig -t ns .
でできます。もちろん、その時点で名前解決できる必要があります。
pdnsdには動的にサービスを設定するpdnsd-ctlというコマンドが付属しています。
なので、digで得たデータを編集してこのコマンドに渡すスクリプトを書けば自動で更新できますね。
エラー時の処理が怖いのでそこまではやりませんが。
最後にresolv.confを127.0.0.1にして終わり。
djbdnsよりは簡単でした。
でも、思ってたより性能が出てないので止めました。
何度か書いてますが、このページはさくらインターネットでホスティングしています。
で、気がつくとなんの連絡もなしにDNSキャッシュが一台止まっていました。
しばらくして復帰してましたが、まあ、はっきり言って困るのでまた自分で用意することにしました。
djbdnsは更新されないのでやめました。
rootサーバーの一覧が古いままなんですね。
なので自分で更新しないといけません。
こんなことは滅多にないんですが、滅多にないだけに気がつきにくいので、よくない。
頻繁にあっても面倒なのでよくないですが。
てことで、pdnsdを導入することにしました。
理由はDebianのリファレンスで推奨されてたから。
とりあえず、設定ファイル(pdnsd.conf)のglobalセクションで
server_ip="127.0.0.1";
の行のコメントを外したら動きました。
このサーバーは外向けにコンテンツDNSサーバーを動かしてるので、デフォルトではポートが衝突して起動しないんですね。
このままだと、さくらのキャッシュサーバーのキャッシュサーバーに過ぎないので、ルートサーバーから再帰的に検索するように設定します。
これでさくらのキャッシュが汚染されようがストップしようが影響受けません。
で、ここまでやって気がついたんですが、結局pdnsdもルートサーバーの登録は手動でする必要がありました。なんてこったい。
server {
ip="192.33.4.12","128.8.10.90","192.203.230.10","192.5.5.241","192.112.36.4","128.63.2.53","192.36.148.17","192.58.128.30","193.0.14.129","198.32.64.12","202.12.27.33","19
8.41.0.4","192.228.79.201";
root_server=on;
}
最低限必要なのはこれだけ。
ipの取得は、
dig -t ns .
でできます。もちろん、その時点で名前解決できる必要があります。
pdnsdには動的にサービスを設定するpdnsd-ctlというコマンドが付属しています。
なので、digで得たデータを編集してこのコマンドに渡すスクリプトを書けば自動で更新できますね。
エラー時の処理が怖いのでそこまではやりませんが。
最後にresolv.confを127.0.0.1にして終わり。
djbdnsよりは簡単でした。
水曜日, 3月 15, 2006
openntpd
NTPのサーバーです。
たいてい最初にインストールするサーバーですね。
時刻を合わせるなんて、まず必要なのでスタンダードな構成でインストールされてもいいと思うんですが。
きっと、ネットワークにつながってないことを考慮してるんだと思います。(SMTPはネットワークにつながっていなくても有用)
でも、ネットワークにつながない構成のほうがレアですよね。。。
で、OpenBSDのプロジェクトで開発されているのが、このopenntpd。
なんとなく信頼感高いです。ブランド効果。
なんとなくファンですし。
なので、なんとなくインストール。
ちなみに、目標がいいです。
簡素、堅牢、時間の正確さは確保するけど、深追いはしない。
すごく共感できます。
すべてのソフトウェアはこうあってほしいですね。
というわけで、ntpdをopenntpdに変更しました。
なにか変わるってほどのことはないけど、まあ、気分いいです。
デフォルトで外向けにポートを開かないところもちょっとポイントです。
たいてい最初にインストールするサーバーですね。
時刻を合わせるなんて、まず必要なのでスタンダードな構成でインストールされてもいいと思うんですが。
きっと、ネットワークにつながってないことを考慮してるんだと思います。(SMTPはネットワークにつながっていなくても有用)
でも、ネットワークにつながない構成のほうがレアですよね。。。
で、OpenBSDのプロジェクトで開発されているのが、このopenntpd。
なんとなく信頼感高いです。ブランド効果。
なんとなくファンですし。
なので、なんとなくインストール。
ちなみに、目標がいいです。
簡素、堅牢、時間の正確さは確保するけど、深追いはしない。
すごく共感できます。
すべてのソフトウェアはこうあってほしいですね。
というわけで、ntpdをopenntpdに変更しました。
なにか変わるってほどのことはないけど、まあ、気分いいです。
デフォルトで外向けにポートを開かないところもちょっとポイントです。
木曜日, 3月 09, 2006
identd
echoやchargenといったサービスもデフォルトでオフになってるDebian。
でも、identだけは有効になってます。
というか、標準的なインストール後にデフォルトで有効なIPサービスってこれとSMTPだけか。
そんな不思議なサービスを提供するidentd。
なにかというと、コネクションを利用しているユーザー名をお知らせするサービスです。
あなたのサーバーから接続要求があったときに、「誰ですか?」と聞くと答えてくれる。
Debianのポリシーに書いてあるを見ると、このサービスは”僕ら”のためのサービスだそうです。
よそのサーバーにとっては、接続元のローカルなユーザー名を知ったところで意味がない。
問題が起きたときに、ユーザーを特定するのに役に立つわけです。
ある日、管理者であるあなたはメールを受け取ります。
「あなたのネットワークから不正なパケットが大量に届いて困っている」
そこで、identサービスが有効だと、「ユーザーを教えてください」「A君です」
A君に聞いてみると、ネットワークの実験で生のパケットを作成する実習をしていたことがわかります。
てな感じで、マルチユーザー向けのサービスですね。
Webサービスなんかではいらないようだ。
外向けのサービスで変な接続があれば、ハックされたか、作ったプログラムがバグってるかどっちかですし。
IPでホストを確認すれば、それ以上ユーザーを特定する必要もあまりない。
ハックされてたらユーザー情報なんて意味ないし、プログラムを個々のユーザー権限で動かしたりしないだろうし。
多数の(人間の)ユーザーを管理する時には便利そうです。
でも、identだけは有効になってます。
というか、標準的なインストール後にデフォルトで有効なIPサービスってこれとSMTPだけか。
そんな不思議なサービスを提供するidentd。
なにかというと、コネクションを利用しているユーザー名をお知らせするサービスです。
あなたのサーバーから接続要求があったときに、「誰ですか?」と聞くと答えてくれる。
Debianのポリシーに書いてあるを見ると、このサービスは”僕ら”のためのサービスだそうです。
よそのサーバーにとっては、接続元のローカルなユーザー名を知ったところで意味がない。
問題が起きたときに、ユーザーを特定するのに役に立つわけです。
ある日、管理者であるあなたはメールを受け取ります。
「あなたのネットワークから不正なパケットが大量に届いて困っている」
そこで、identサービスが有効だと、「ユーザーを教えてください」「A君です」
A君に聞いてみると、ネットワークの実験で生のパケットを作成する実習をしていたことがわかります。
てな感じで、マルチユーザー向けのサービスですね。
Webサービスなんかではいらないようだ。
外向けのサービスで変な接続があれば、ハックされたか、作ったプログラムがバグってるかどっちかですし。
IPでホストを確認すれば、それ以上ユーザーを特定する必要もあまりない。
ハックされてたらユーザー情報なんて意味ないし、プログラムを個々のユーザー権限で動かしたりしないだろうし。
多数の(人間の)ユーザーを管理する時には便利そうです。
登録:
投稿 (Atom)
