火曜日, 12月 19, 2006

Debian GNU/Linux で heartbeat を使う

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月 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が実行されないようにします。これはもういりません。

木曜日, 12月 14, 2006

LDAP の複製

LDAPの複製です。
slapd のバージョン2.2までは、slurpdを使ってデータをコピーします。
バージョン2.3からは syncrepl を使います。これが便利!

2つの方法の違いは、データの複製を行うサーバーです。
slurpdはマスターがスレーブに対してデータの送信を行います。
sycreplはスレーブからマスターのデータを取得します。
なので、slurpdの場合はマスターの設定変更が必要になるわけですね。
これは、すでに運用中の場合には結構大きな問題です。
それに対して、syncreplの場合はマスターの設定が必要ないので、すでに運用しているLDAPを拡張するのがとても簡単です。

スレーブ側の設定ファイルに、以下を追加します。

syncrepl rid=123
provider=ldap://ldap0.kumicho.net
type=refreshOnly
interval=00:00:10:00
searchbase="dc=kumicho,dc=net"
scope=sub
attrs="*"
schemachecking=off
bindmethod=simple
binddn="uid=kumicho,dc=kumicho,dc=net"
credentials=password

これだけで複製が行えます。
上の設定を見たら想像つきますが、これは普通の検索です。
なので、データの一部だけを複製することも可能です。
また、データを取得するためのユーザーでバインドする必要があります。

認証の方法は"simple"を利用しているので、IPsecを利用しましょう。
もうTLSなんて時代遅れ。

水曜日, 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;
に変更します。

これで証明書による認証が行われます。

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なんかは無理ですが、内部で使う分にはものすごくシンプルかつ強力です。

水曜日, 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サーバーだったら、これを別のホストに変更します。

これで設定は完了です。
もしバックエンドの実サーバーが別のネットワークにある場合には、トンネルを利用します。
が、そんなことあんまりしないですよね。。

金曜日, 11月 24, 2006

Xen で 4つ以上の DomainU を起動する

Xen(aptからではなく、公式サイトから取ってきた)は普通に動作させると、4つまでしか仮想マシンが起動しません。

で、この問題について、あちこちでいろいろ書かれてますが、あまりいい方法はありませんでした。

結局のところ、menu.lstの中で、
title Xen 3.0 / XenLinux 2.6
kernel /boot/xen-3.0.3-0.gz console=vga max_loop=64
module /boot/vmlinux-syms-2.6.16.29-xen root=/dev/sda1 ro console=tty0 max_loop=64
module /boot/initrd.img-2.6.16.29-xen
のように、max_loop=をつけて起動します。
これで、カーネルがmax_loop個のループバックデバイスを利用できるようになります。

さらに、/sbin/MAKEDEV を編集して、
loop)
for part in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
do
makedev loop$part b 31 $part $disk
done
;;
の part in 以下の数字をたくさん書いて、loop デバイスを必要な数だけ作ります。
max_loopを64にしたので、63まで書くつもりでしたが、途中で力尽きました。

これで好きなだけ起動できるようになります。

でもこのやり方、aptitudeとの親和性が低いし、エレガントじゃないですね。

Bind の同期

LVSを導入して、Bind が2つになったので同期を取る必要が出てきました。

Bindで同期を取るには、マスター側とスレーブ側に設定が必要です。

まず、マスター側。
/etc/bind/named.conf.options に
allow-transfer { 2002:3b6a:2aca:0:216:3eff:fe5b:e8d9; };
などと設定します。上のはIPv6アドレスなので、普通はスレーブのIPv4アドレスを書けばいいです。

スレーブ側では、まず /etc/bind/db というディレクトリを作成します。
このディレクトリの所有者はbind.bindにしておきます。
次に、/etc/bind/named.conf.local に、zoneの設定を書きます。
zone "infology.info" {
type slave;
masters { 2002:3b6a:2aca:0:216:3eff:fe2e:b289; };
file "/etc/bind/db/infology.info";
};

これで起動すれば、ファイルが /etc/bind/db/infology.info に作られます。

最後に dig を使って確認します。
dig @slave.host infology.info

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の処理が分散されています。
これは相当、簡単で便利です。

水曜日, 11月 22, 2006

Xen DomainU での時刻あわせ

Xenの仮想マシンをいくつもインストールしていると、ちょっと疑問に思います。
「ntpdを仮想マシンごとにインストールする必要あるの?」
でも、不安なのでインストールしてました。

で、結局のところ、ntpdをインストールしても時刻は調整されないようです。
Domain0 の時刻に同期される。
まあ、そのほうがよかったんですが。

どうしても DomainU で個々に時刻を合わせたい場合は、
/proc/sys/xen/independent_wallclock
の値を 1 にしなければいけません。

木曜日, 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を使わなくてもいいですね。

水曜日, 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よりは遅くなりますが。

金曜日, 10月 13, 2006

iptables の保存と復元

iptablesの保存と復元のやりかたです。

iptables-save > /etc/iptables.conf
で保存。

iptables-restore < /etc/iptables.conf
で復元できます。

なかなかスマート。

さらにすすめて、
/etc/network/if-pre-up.d/iptables

---------------------------------------
#!/bin/sh

iptables-restore < /etc/iptables.conf
---------------------------------------
を書いておく。
/etc/network/if-post-down.d/iptables
には
---------------------------------------
#!/bin/sh

iptables-save > /etc/iptables.conf
---------------------------------------
と書いておけば完全に自動化されます。

木曜日, 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にアクセスできなくなります。

火曜日, 10月 10, 2006

aptitude と依存関係

とても便利なaptitude。
aptと最も違うところは、インストールのときだけじゃなく、アンインストールのときも依存関係を考慮してくれるところです。

aptでもインストール時に依存しているパッケージを自動でインストールしてくれます。
aptitudeはそのときに依存関係によってインストールされた、と印をつけてくれます。
それで、アンインストールのときにはその印がついたパッケージも一緒に削除されます。
なんか記憶にないけど、このライブラリ、消してもいいのかわからない。そんなことはもうなくなります。

あと、最近知ったのですが、removeではなくpurgeを使うと設定ファイルも消去できます。まあ、これはaptでもできますが。
長いこと使ってるうちに/etcがどんどん大きくなるのを防ぐことができます。
これも便利。

また、パッケージの検索で細かな検索条件を指定できます。
このあたりも使いこなせるようになると、もうaptには戻れません。

chkrootkit でウィルスの検査

chkrootkitはオープンなウィルス検査のアプリケーション。
さすがに商売でやってるわけではないので、市販のものよりもチェックの項目なんかは少ない。
でも、ただですし、気休め程度にインストールしておいてもいいような気がして使ってます。

あちこちにある、不正侵入用のツールくらいには対応しているみたいなので、面白半分にそいうのを使う相手には効果がありそうです。
まあ、どちらにせよ、侵入された後じゃないと気がつかないんですけどね。

日曜日, 10月 01, 2006

Debian GNU/Linux で ユニークなIDの作り方

ユニークなIDが欲しいときがあります。
で、そういうときにはこれ。

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
などと起動すればいいです。

木曜日, 9月 28, 2006

Debian GNU/Linux で文字コードの変換

改行の変換に続いて文字コードの変換。
nkfとかありますが、国際化されたiconvを使いましょう。
まあ、どっちも名前しか知りませんでしたが。

iconv [-f 入力のエンコーディング] [-t 出力のエンコーディング] [inputfile ...]
で変換できます。

変換可能な文字コード(の名前)については、-l オプションで見ることができます。
処理も早いし、便利ですね。

Debian GNU/Linux で改行コードの変換

いつもemacsで変換してたので、シェルで変換する方法を知りませんでした。
で、そういうときに使うのがこれ、trコマンド。
perlの中にほぼ同じ機能の関数がありますね。

tr -d '\r' < file.windows > file.linux
こうするとDOSの改行からLinuxの改行にできます。これはCRLFからCRを取り除いてるだけです。
CRLFをLFに変換するほうが正しいですね。
上のやり方が正しいかは文字コードに詳しくないと答えられないです。

他の場面でも使えそうな、便利なコマンドを知りました。

木曜日, 9月 21, 2006

iptables で fiwewall

sshd[x]: Illegal user admin from aa.bb.cc.dd
なんてメッセージが /var/log/auth.log にあふれてます。

なので簡単なファイアーウォールで減らすことにしました。

iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set

iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

これを以前のportfoward用のファイルに追加して実行するだけです。
最初の行の意味は、22番ポートへのアクセスは履歴に記録しておく。
次は、60秒でその履歴を更新して、4つIPが見つかったら接続を拒否します。

要は、3回以上sshで接続してきたらそれ以上は受け付けないというだけです。
まあ、気休め程度ですが、こういうところから少しずつファイアーウォールを作っていくのもいいかもしれません。

水曜日, 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
----------------------------------------------------------------

あとは必要なだけゾーンを追加してやれば、あっさりと動きます。
動かす手間が大違いです。
あと、ゾーンごとにファイルが分かれてるのもいいですね。

メールボックスの名前

標準的なメールボックスの名前が、なんとRFCで定義されています。びっくりですね。
postmasterとかwebmasterあたりはわからないこともないですが、infoだとかmarketingだとかまで定義されているので驚きます。

まあ、無理にあわせる必要もないでしょうけど、迷うくらいならこれに従ったほうがいいですね。

月曜日, 9月 18, 2006

VLC

かなり多くのフォーマットに対応したマルチプレーヤー。とてもいいです。
実際、Realmediaのフォーマット以外はほぼなんでも再生できます。
おまけに軽量。
おまけにWindowsでもLinuxでも使える。
とてもいいです。

ただ、ジュークボックスのような機能はないので、普段音楽を聞くのに使うには向かない感じです。

いろんなフォーマットに対応するために、いろんなコーデックやらプレイヤーやらを入れるのが面倒な人には最適です。
僕は気に入りました。

金曜日, 9月 15, 2006

Picasa Web Album

Picasaは写真の管理や、簡単な編集ができるアプリケーションです。
今まで写真はflickrで管理してたので興味なかったんですね。

ところが、Picasa、使えます。
まず、軽いです。軽快さがよいです。
やっぱり、なんでもWebというのはよくないのかも知れません。
ローカルでの処理は、ローカルのアプリケーションを使うべきですね。

Web上に保存しておけるサイズは250MBを結構少ない。
まあ、その気になればアカウントをいくつもとればいいんだけど、そういうのは面倒ですし。
今までの経験から言うと、携帯のカメラで撮った写真をブログにアップするくらいならこれくらいでも十分です。
この容量が埋まる頃には、サービスも進化してたり、もっといいサービスが出てるかも知れないから気にしなくていいですね。

flickrと比べると、アルバムの数に制限がないところが便利です。
flickr無料版のあの制限は結構苦しい。
AOL Picturesは、アップロードが黙って失敗したりしてひどい目にあいました。
なんか、やっぱりGoogleはえらいです。

木曜日, 9月 14, 2006

aptitude

これまでうちのDebianでは、ずっとaptを使ってパッケージの管理してました。
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の機能をプログラムに持たせる必要ないのでは?
多くのプログラムがなんでそういう機能を自前で持っているのか理解に苦しみますね。

火曜日, 9月 12, 2006

pdnsd でローカルの名前解決

プライベートネットワーク内でもDNSを使いたいときがあります。
テストでDNSラウンドロビンをしてみたいときとか。。。

このやり方は大まかに言って2つあります。
・キャッシュサーバーが特定の名前について自分で解決して返答をする
・キャッシュサーバーが特定のドメインについて、特別なサーバーに尋ねる

1番目は解決したい名前が少ないときに便利です。
2番目は解決したい名前が多いときに便利。

djbdnsのdnscacheでは2番目の方法しか使えません。
pdnsdだと1番目の方法も使えます。

で、その方法は、pdnsd.confに
rr {
ttl=120;
name="rr.local.";
a="192.168.0.1";
a="192.168.0.2";
a="192.168.0.3";
}
とか加えてやればOK。
とっても簡単です。

wnpp-alert

このプログラムを使うと、インストールされている、みなしごパッケージを見つけることができます。
まあ、みなしごパッケージを見つけてもどうということはないんですが、「あ、これ今メンテナーがいないんだ。使うのやめよう。」とかできます。
たぶん、正しい発想は「あ、これ今メンテナーいないんだ。僕がメンテナンスしよう。」ですけどね。
devscriptsパッケージに含まれています。

気になる人は気になるかも知れません。

金曜日, 9月 08, 2006

autossh

まあ、要するに、sshの接続が切れたら自動で再接続してくれるっていうものです。
port fowarding している回線が不安定なときに便利。

/usr/bin/autossh -M 21021 -f -gN -b 192.168.0.1 -L 20001:pop3.kumicho.net:110 gateway.kumicho.net
のようにして使います。

-M以外は普通のsshを使ったときのオプションと同じです。
-Mはautosshが接続を確認するために使うだけなので、なくてもいいです。そのときでもsshが停止した場合には再起動されます。
そのときには-Mの引数を0にします。
-M自体を使わないと、デフォルトのポートで接続してしまうので複数のautosshを起動することはできません。

火曜日, 8月 29, 2006

Xname

フリーのDNSです。
Webから登録しておくと、名前解決してくれるんですね。すばらしい。

前々からtinydnsもなんか自分でパッチ当てたりしないといけないので、ちょっと嫌だなあと思ってました。
なので、まあ、誰かがやってくれるならやってもらおうかな、と。

で、さっそく自分のドメインのいくつかを登録してみました。やっぱりちゃんと動いてます。
「世の中便利になったなー。なんでもタダだよ。」
とか思って、本格運用開始。
で、それを機会にNagiosに登録してみると、実はちょくちょく落ちてました。
といっても、数日に一回、2,3分のことなのでたいしたことはないのかもしれません。

でも、「せっかくタダのリソースだし。」と思ってTTLを5分に設定してたので、問題ありです。
調べてみると、Yahoo!なんかもTTLは5分なんですね。
気持ちはとてもよくわかります。
変更が伝播するのに時間がかかるDNSのシステムは、インターネットの欠陥じゃないでしょうか。絶対に変えたほうがいいと思うんですけどねえ。

他にもフリーのDNS代行サービスは結構ありますが、探すのが面倒になってきたのでやめました。

で、BINDの出番になるわけです。

木曜日, 6月 15, 2006

Google Browser Sync

Firefoxのエクステンションです。
ブックマーク、クッキー、パスワード、履歴をネットワーク(Googleのアカウント)を通して共有、保存できます。
4つの項目すべてが同期されるのではなくて、自分で選択できます。
ブックマーク以外はちょっと抵抗がある人でも大丈夫。

基本的にかなり便利です。
以前、Bookmarks Synchronizerを使っていました。
なので、これを作ろうと思った気持ちはよくわかります。
そして、使ってみるとやっぱり便利。
終了時のタブが復活するところもなにげにいいところ。

ただ、便利なんですが、ひとつひっかかるところが。
少しGoogleに依存しすぎだな、と。。
ファンとしては痛し痒しといった感じです。

水曜日, 6月 07, 2006

Google Spreadsheets (Limited Test)

Googleの表計算ソフトが使えるようになりました。
タイトルの通り、まだテスト段階のようです。
申し込みをすると割とすぐに使えるようになりました。

普通に新規に使うこともできますし、.xlsファイルや.csvファイルを読み込むこともできます。
.odsが読み込めないのは意外でした。

軽く使ってみた感じでは、やっぱり操作性はエクセルにはかなわない気がします。
Webを通したアプリケーションの限界でしょうか。

利点はやっぱり、表計算ソフトを持っていなくても使えることや、ネットワーク上にファイルを置いておけること。
いつでもどこでも使えるのは便利ですし、他の人と共有もできます。まあ、共同作業には向かない気もしますが。
ファイルのロックがちゃんとされているのか誰か試して欲しいです。

個人的なリストの管理に使うには結構いいものな気がします。

金曜日, 6月 02, 2006

Google Notebook

名前はノートブックですが、これは汎用的なソーシャルブックマークって感じです。
まあ、IEのブックマークも実際なんでも登録できるので、ノリは同じですね。

ページのURLやそれに対するコメントをノートしておけます。
で、ネットワークのサービスらしく、それを一般に公開するかどうかを選択できます。

ちょっと覚えておきたいページや、本の紹介なんかはブックマークする気にはならないので、これとうまく使い分けるといい感じな気がします。

月曜日, 5月 29, 2006

mixi のバナー表示

バナーの表示回数が Yahoo! についで2位みたいです。
流行っているのは知っていましたが、いつの間にかそんな巨大なメディアになっていたんですね。
Yahoo! よりもユニークなユーザーは少ないが、一人当たりの閲覧数が多いのが特徴でしょうか。

まだポータルに空きがあったってことなんですかね。

木曜日, 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よりは簡単でした。

金曜日, 4月 28, 2006

SketchUp

Googleがまたフリーのソフトを投入してきました。
SketchUp、3Dモデリングツールです。

とりあえずインストールしてみましたが、まあ、そんな分野にかかわったこともないので一瞬で飽きました。

普通のこの手のものと違うところは、Google Earthと連携できるところです。
Google Earthからデータを取り込んで、自分で編集、それをアップロードできるらしい(!)。

Google Earthでみんなの家が見られるようになる日も近い!?

水曜日, 4月 26, 2006

Google Calendar のインポート機能

以前 Google Calendar について書いたときに、インポート機能が日本語に対応していないと書いてました。
でも、もう日本語に対応していました。
無事にSunbirdから移行できました。

日・中、2カ国の祝日表示とか、仕事と遊びを別カレンダーにできるところとか、使いやすいです。
スケジュールごとに公開の設定ができます。これで友達と共有できたりもしますね。
恋人と共有するときには、公開の設定を間違えるとえらいことにもなります。
おっと、もちろん同僚ともできます。たぶんそれが一番普通の使い方。

これは相当便利ですね。
こんなものがただで使えるなんて、いい世の中になったもんだ。

ひとつだけ難点があって、それはスケジュールをカレンダー上でコピーできないこと。
まあ、ブラウザの上で動いてる以上、しょうがない部分かも知れませんが。。。
「ここを掴むと移動」「ここだとコピー」みたいにはできそうですけどね。

月曜日, 4月 17, 2006

Google Calendar BETA

というわけで、楽しみにしてたGoogleのカレンダー(スケジュール管理)サービス。
とりあえず開いてみました。
今までMozilla Sunbirdを使っていたんですが、Ajaxのくせにこっちのほうが使いやすいです。しかも軽い。

ちょっと触った感じ、普通に使えそうだったのでSunbirdから乗り換えることにしました。
CalendarDataFile.icsをインポート、すると文字化け。
ファイルは元々UTF-8だし、Webでいろいろ試した人の話を見る限り、Google Calendarのバグみたいですね。
まあ、まだBETA版。待つしかない。

とりあえずインポートは置いておいて、今後はこれを使ってみます。

複数のカレンダーを登録しておいて、同時に表示したり比較できたりするので、仕事とプライベートの使い分けとかできそうです。
きっと、複数の人間でスケジュール調整しやすくするんでしょうが。
このあたり、結構おもしろいです。

火曜日, 4月 11, 2006

OpenOffice.org

OpenOffice.orgのバージョンが2.0.2になったと聞いたのでそろそろ使ってみました。
マイナーで2回アップデートすればそろそろまともかな、と。

で、これが結構いい。というかすごくいい。
僕が持ってるオフィスのドキュメントはレイアウトが崩れたりしないでちゃんと開けました。
あんまり難しいことはしませんが、したいことはできました。

わざわざお金を払ってMS Office買う意味が見つからないですね。
会社なんかでも、部署で一台くらいMS Office用意して、残りはOpenOffice.orgで十分なんじゃないでしょうか。

あ、でも、テンプレートやフリーな素材がないですね。
素材集のページへのリンクがありますが、今xrea.comがおかしいので試してません。
あまりに貧弱だったら、作成には向かないことになりますね。
とりあえず、しばらく使ってみます。

BlogBurst

BlogBurstを使ってみました。
おもしろいブログを集めて、その記事が欲しいサイトに紹介するサービス?
まだあんまりよくわかってないです。

とりあえず露出が増えたらいいなあ、と思って申し込んでみました。

結果は、、「却下」。
まあ、ニュースって感じでもないですし。

でも、少し残念でした。

金曜日, 3月 24, 2006

snmpd の更新

Debian(Testing)のsnmpdパッケージが更新されました。
インフォメーション画面にも書かれている通り、そのままだとlocalhostにバインドされるので、普通困ります。
ネットワーク越しの監視ができなくなるんですね。

で、解決するには、次の一行を加えます。
agentaddress IPアドレスまたはドメイン名

まあ、ただこれだけの話です。
他にもsmuxがデフォルトで起動しない、という変更もあります。
僕は使ってないんですけどね。

snmpは地味なサービスだけに停止すると痛いので気をつけましょう。

水曜日, 3月 22, 2006

クライアント側の DNS キャッシュを無効にする方法

Windows XP および Windows Server 2003 でクライアント側の DNS キャッシュを無効にする方法です。
普段の使用でこんなことをする必要はまずないですね。
かと言ってテストにも必要だとはあまり思えないんですけど。

DNSラウンドロビンを試したいから、クライアントの設定を教えてくれと言われました。
DNSラウンドロビンってひとつのクライアントが複数のIPを使いまわす機能ではないんだけどなあ。

Windowsのコマンドプロンプトで、
net stop dnscache
を実行すればキャッシュを無効にできます。

こんな機能が用意されてるなんてWindowsも意外とマニアックですね。

火曜日, 3月 21, 2006

Google Page Creator

アクセス過多で予約待ちだったGoogle Page Creator。
やっと使えるようになりました。

ところが。。。!?
作るページがない。
よくよく考えたら自分のページなんて作ったことないぞ。。。

というわけで、せっかく使えるようにはなったけど、使いようがない。
Bloggerで十分でした。

ついでにこれ、公開時にGoogleのアカウント名がURLに含まれてしまうので、非常に厳しい。
個人情報漏れまくりです。
スパムとかいっぱい来るんじゃないかという気がして夜も眠れません。

ただ、アクセスが集中したという割には軽いです。
みんな飽きちゃったのかね。

月曜日, 3月 20, 2006

Poderosa

Windows用の端末エミュレータ。
昔、いくつか試してどれも気に入らなかったので、ずっとXサーバー使ってました。
でも、いちいちLinuxにログインするのも面倒ではあるんですよね。
ちなみにそのとき使っていたのは、AstecX

ゲートウェイに使っていたLinuxが使えない時期があったので、友達が使っていたPoderosaを使ってみました。
これがいい!

接続ごとにタブで切り替えできます。快適。
配布先のページにも.NET FrameWorkを使うと不安定になると書いてますが、突然終了したりしたことないです。
日本語もちゃんと表示されるし、「なんで今までXなんて使ってたんだ」って気になります。

でも、emacsで日本語の編集ができないんですよね。
なんでだろー?

水曜日, 3月 15, 2006

openntpd

NTPのサーバーです。
たいてい最初にインストールするサーバーですね。

時刻を合わせるなんて、まず必要なのでスタンダードな構成でインストールされてもいいと思うんですが。
きっと、ネットワークにつながってないことを考慮してるんだと思います。(SMTPはネットワークにつながっていなくても有用)
でも、ネットワークにつながない構成のほうがレアですよね。。。

で、OpenBSDのプロジェクトで開発されているのが、このopenntpd。
なんとなく信頼感高いです。ブランド効果。
なんとなくファンですし。
なので、なんとなくインストール。

ちなみに、目標がいいです。
簡素、堅牢、時間の正確さは確保するけど、深追いはしない。
すごく共感できます。
すべてのソフトウェアはこうあってほしいですね。

というわけで、ntpdをopenntpdに変更しました。
なにか変わるってほどのことはないけど、まあ、気分いいです。
デフォルトで外向けにポートを開かないところもちょっとポイントです。

携帯電話とSkype

携帯電話にSkypeが対応したらしいです。
なんとなくうれしいニュース。

携帯電話は大抵キャリアが主導権を握っているので、自分の首を絞めるSkypeを搭載するとは考えにくいですが。
今の携帯電話は料金が高すぎるので、こういうところからどんどん攻めていってもらいたいですね。

木曜日, 3月 09, 2006

identd

echoやchargenといったサービスもデフォルトでオフになってるDebian。
でも、identだけは有効になってます。
というか、標準的なインストール後にデフォルトで有効なIPサービスってこれとSMTPだけか。

そんな不思議なサービスを提供するidentd。
なにかというと、コネクションを利用しているユーザー名をお知らせするサービスです。
あなたのサーバーから接続要求があったときに、「誰ですか?」と聞くと答えてくれる。

Debianのポリシーに書いてあるを見ると、このサービスは”僕ら”のためのサービスだそうです。
よそのサーバーにとっては、接続元のローカルなユーザー名を知ったところで意味がない。
問題が起きたときに、ユーザーを特定するのに役に立つわけです。

ある日、管理者であるあなたはメールを受け取ります。
「あなたのネットワークから不正なパケットが大量に届いて困っている」
そこで、identサービスが有効だと、「ユーザーを教えてください」「A君です」
A君に聞いてみると、ネットワークの実験で生のパケットを作成する実習をしていたことがわかります。

てな感じで、マルチユーザー向けのサービスですね。
Webサービスなんかではいらないようだ。
外向けのサービスで変な接続があれば、ハックされたか、作ったプログラムがバグってるかどっちかですし。
IPでホストを確認すれば、それ以上ユーザーを特定する必要もあまりない。
ハックされてたらユーザー情報なんて意味ないし、プログラムを個々のユーザー権限で動かしたりしないだろうし。

多数の(人間の)ユーザーを管理する時には便利そうです。

水曜日, 3月 08, 2006

blogger で sftp を使う

このブログを始めた当初からの疑問だった、bloggerのsftp
もうほとんどあきらめていたんですが、今更解決できました。

結論から言うと、sshd_configで
PasswordAuthentication yes
にするだけ。

「パスワード入力してるんだから当たり前だろ!」
とか言われそうですが、認証でPAMを使うようにしてるとパスワード使ってログインできるんですよ。
なので、今まで気がつかなかった。

まあ、昔のことはさておき、これでftpdから開放されました。
さっそくアンインストール。
正直、ftpの運用はかなり嫌だったのですっきりしました。

でも、sftpにしてから公開処理が遅くなったような?
気のせいだといいんですが。

火曜日, 3月 07, 2006

djbdns でローカルドメインの作成

djbdnsを使ってローカルなドメインを利用します。
自分で管理するネットワーク内向けの名前解決というわけですね。

なんで、tinydnsとかdnscacheと書かずにdjbdnsなのかというと、ちょっと気が変わった、からじゃなくて両方使うからです。

とりあえず、ドメイン名を決めないといけません。
そのまんま”.local”なんてドメインにします。
ちなみに現在予約(利用?)されているドメイン名(TLD - Top Level Domain)はICANNのページから確認できます。
で、.localは使われていないから、僕らが使っても問題ないわけですね。

まず、tinydnsがこの.localについての問い合わせに答えるようにします。
つまり、
cd /service/tinydns/root
./add-ns local 59.106.42.193
として、.localのネームサーバであることを登録します。

次に、dnscacheが.localへの問い合わせは上のサーバーに問い合わせるようにします。
cd /service/dnscache
echo 59.106.42.193 > root/servers/local
chmod 644 root/servers/local
svc -t .

後はこのドメインを利用したいPCなりサーバーなりで、今設定したdnscacheを使うようにします。

これで.localを利用できるようになります。
.localのコンピュータ名やサービス名をがしがし登録しましょう。

木曜日, 3月 02, 2006

su

もう半年くらいたってるかも知れません。
suで大きなアップデートがありました。

内容は。。。
ユーザーの変更が失敗したときのメッセージ。
「ごめんなさい」

「申し訳ございません」

すげー、アップグレードしてます。
「ごめんなさい」もかなり好きだったのでうけました。

そのうち「腹切ってお詫び申す」とかになるんかなあ。

MySQL 5.0

DebianのTestingバージョン使ってる方はもうお気づきだと思いますが。
MySQLのバージョンが5.0になりました。

まあ、dist-upgradeしなければ問題は起きない(upgradeだと4系が維持される)ので、安心です。
自分で書いたプログラムやいくつかのMySQLを使うアプリケーションは致命的でなかったので更新してみました。

。。。予想通り何も起きなかったです。
いや、いいことなんですが。

個人的には、5.1の高速なオンラインバックアップの機能に期待してます。
5.0にはさほど興味がなかったり。

木曜日, 2月 23, 2006

iptables で router(ルーター)

ずっと前にiptablesの話を書こうと言っていました。
やっと実現。

といっても、フィルターの部分は次回に。
今回はルーターとしての動作について書きます。
iptables自体はデフォルトで組み込まれているので、インストールとかは問題ないですね。

後は設定ファイルを作ります。といっても、コマンド羅列したスクリプトです。
--------------------------------
#!/bin/sh

trusthost='192.168.2.1'
internal_ip='192.168.0.0/16'

my_internet_ip='xxx.xxx.xxx.129'
my_internal_ip='192.168.1.1'

echo 1 > /proc/sys/net/ipv4/ip_forward

##############
#Flush & Reset
##############
iptables -F
iptables -t nat -F
iptables -X

##############
#Deafult Rule
##############
iptables -P FORWARD DROP
iptables -A FORWARD -i eth0 -o eth1 -s $internal_ip -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 --protocol tcp --dport 80 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

#################
#SNAT(masquerade)
#################
iptables -t nat -A POSTROUTING -o eth1 -s $internal_ip -j SNAT --to-source $my_internet_ip

#################
#DNAT(masquerade)
#################
iptables -t nat -A PREROUTING -i eth1 --protocol tcp --dport 80 -j DNAT --to-destination $trusthost
--------------------------------
これを実行すれば、ルーターとして動作します。

最初の部分は変数の定義。自分の2つのIP(内側と外側)や、プライベートネットワークのアドレス、後で出てくるポートフォワード(port foward)先のホストなんかを定義してます。
echoの行はルーターとして動作させるために必要です。これをしないとFORWARDが使えません。

次の部分は、まさに初期化。デフォルトのテーブル以外にNAT用のテーブルも使います。

その次がやっとルール。
ここでは、「すべて拒否」の後、「内から外は許可」、「外から80番ポートへのアクセスはtrusthostに転送」、「コネクションが確立した後のパケットは両方向許可」のルールを作成しています。
まあ、最後のは少し嘘ですが、イメージはそんな感じです。このルールを書かない状態が存在するのか謎です。

最後の二つがSNAT(sourceに基づくアドレス変換)とDNAT(destinationによるアドレス変換)です。
この二つがルーターとしては肝ですかね。まあ、シンプルですけど。
MASQUERADEを使った書き方もありますが、PPP接続のように動的にIPが変わる場合に使うものです。
そうでない場合はSNATやDNATを使います。(と、manに書いてある)

これで、プライベートネットワークからインターネットへの接続が許可されます。
さらに、80番ポートへのアクセスはプライベートネットワーク内のホストの80番に転送されるわけですね。
同じように書いていけば、転送するポートやホストを増やせます。
まあ、そんなルール、書かずに済んだほうが幸せな気もしますが。

daemontools

qmailやdjbdns(tinydnsやdnscache)を動かすにはdaemontoolsが必要です。
これが結構使えます。

以前、tinydnsも使いたくないなんて書いてたくせに、人って結構いい加減。

早い話、D. J. Bernsteinさんのものだけでなく自分の作ったスクリプトにも使おう、という話。
そうすれば、異常終了してしまっても勝手に再起動されるのでいい感じです。
起動や停止に関するツールも流用できるし、ログの処理なんかもおまかせ。
こういうのって自分で作るのは面倒ですからね。

使い方は、
1. 適当なディレクトリを作る
2. そこにrunスクリプトを作成
と、他のソフトをまねます。

runスクリプトの中身も簡単です。
たとえば、特定のportをforwardしたいときには、
--------------------------------
#!/bin/sh
exec 2>&1

ssh -gN -b 192.168.1.1 -l username -i /home/username/.ssh/id_dsa -L 10001:localhost:110 remote.host
--------------------------------
みたいにできます。
ホスト間の接続が不安定で、たまにsshが終了しても、自動で再起動。こりゃ便利だ。

火曜日, 2月 21, 2006

apt-get で GPG のエラー

ちょっといまさら感がありますが、年を越してからapt-getでエラー(ほんとは警告)が出るようになりました。

W: GPG error: http://debian.cn99.com testing Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 010908312D230C5F
W: GPG error: http://security.debian.org testing/updates Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 010908312D230C5F
W: You may want to run apt-get update to correct these problems

こんなエラーです。

これ、Debianのtestingバージョンを使ってる人はでてしまうんですね。
というのも、Debianのtestingバージョンでは毎年GPG鍵の期限が来てしまうので、更新しないといけないんです。
くどくど2回もtestingと書いているのは、これ、stableでは起きないんですね。

で、リンクにもありますが、
wget http://ftp-master.debian.org/ziyi_key_2006.asc
を実行して、新しい2006年用の鍵を取ってきます。

これを、
apt-key add ziyi_key_2006.asc
でインストールすればOK。

これで後は安心してaptが使えるようになります。

木曜日, 2月 16, 2006

Compiz

Novellが開発したウィンドウ・マネージャ。
同じくNovellが開発したXglフレームワークの上で動作します。
もう、デモを見てくれ!という感じ。
ウィンドウがふにゃふにゃ動いてすごい。ちょっと酔いそう。
そうかと思うと、デスクトップ自体がぐるぐる回ったり、どこでもズームできたり。
ビデオを壁紙みたいに使ったりできます。(そのくらい軽い!)
昔、スクリーンセーバーで熱帯魚を飼うソフトがあったけど、デスクトップで飼えます。

VISTAがどれほどのものかは知りませんが、このインパクトにはなかなか勝てないのでは。
LinuxがエンターテイメントOSになりそう。

infology

infomation technologyを略してinfology。
これくらいはひねらないとドメインとれないかな?と思って考えました。
ためしにGoogleで検索したら結構ヒットした。。。
でも、ドメインは取れたから、まあ、いいか。
IT関連はこちらに書きます。

水曜日, 2月 08, 2006

GmailのChat機能

気がついたらGmailが更新されてました。
Google Talkでの会話をGmailのアカウントに保存できます。

試してみると、ちゃんと保存されてました。当たり前か。
どこのパソコンでChatしても会話の記録がばらばらに別れたりしなくていいですね。
MSNなんかだと、パソコンごとに保存されるのでまとめる気にもならないですし。

これで後は、友達を作るだけ。

木曜日, 1月 26, 2006

IPアドレスの計算

時々、「192.168.1.xx~yyって、ようするに、netmaskは、なんなのよ!!」って気分になります。
何を言ってるかわからない人は幸せです。なんとかな人は幸いである、とか書いてあるのは聖書でしたっけ? お酒飲んでる、だったかも。

そんな時にはこれ、ipsc(IP Subnet Calculator)!
ドラえもんのように唱えないといけないのには理由があります。
というのも、ほんとにたまにしか使わないので名前を忘れてしまうんですね。
あちこち探したり、名前を呼んだりしてるうちに安産、おっと、暗算したほうが早かったりします。

まあ、そんなときでも多少不安が残ったりしちゃうので、ちゃんと覚えて使いましょう。
01111011110000000110101010100000と01111011110000000110101011110010の論理積。うへ~。