SaaSes VPS 構築記(2)

とりあえず手始めに、IPSec GRE tunnelを張ることに。しかぁし、IPv6関連のドキュメントを探すと、IPv6関係の記載された日本語ドキュメントが見つからん。しょうがないので、ネットワーク周りの起動スクリプトを見てみると、FreeBSDでやれそうなことが全然できないじゃーん。

ってことで、/etc/sysconfig/network-scripts/ifup-tunnelを大幅リライト。こんな感じでとりあえず運用。
-----------------------------------------------------------------
--- ifup-tunnel.original 2010-05-04 21:57:18.000000000 +0900
+++ ifup-tunnel 2010-05-01 00:13:43.000000000 +0900
@@ -19,9 +19,6 @@
cd /etc/sysconfig/network-scripts
. ./network-functions

-[ -f /etc/sysconfig/network-scripts/network-functions-ipv6 ] || exit 1
-. /etc/sysconfig/network-scripts/network-functions-ipv6
-
CONFIG=$1
need_config "$CONFIG"
source_config
@@ -69,8 +66,22 @@
# contained in the peer's private network or identical to it's public address,
# it need not be specified.
/sbin/ip link set dev "$DEVICE" up
-/sbin/ip addr add "$MY_INNER_IPADDR" dev "$DEVICE" \
- ${PEER_INNER_IPADDR:+peer "$PEER_INNER_IPADDR"}
+/sbin/ip addr add "$MY_INNER_IPADDR" dev "$DEVICE"
+
+# Apply local IPv6 address, if given (numbered tunnel)
+if [ -n "$IPV6ADDR_LINKLOCAL" ]; then
+ /sbin/ip addr add "$IPV6ADDR_LINKLOCAL" dev "$DEVICE"
+fi
+if [ -n "$IPV6ADDR" ]; then
+ /sbin/ip addr add "$IPV6ADDR" dev "$DEVICE"
+fi
+if [ -n "$IPV6ADDR_SECONDARIES" ]; then
+ /sbin/ip addr add "$IPV6ADDR_SECONDARIES" dev "$DEVICE"
+fi

+# IPv6 default gateway
+if [ -n "$IPV6_GATEWAY" ]; then
+ /sbin/ip route add ::/0 "$IPV6_GATEWAY"
+fi
-----------------------------------------------------------------
これに、/etc/sysconfig/network-scripts/ifcfg-tunnel0 ってのを作って、
-----------------------------------------------------------------
DEVICE=tunnel0
ONBOOT=yes
TYPE=GRE
MTU=1430
PEER_OUTER_IPADDR=172.16.1.1
MY_OUTER_IPADDR=192.168.1.1
IPV6_GATEWAY="dev tunnel0"
IPV6ADDR="2001:db8:cafe:ffff::e/126"
IPV6ADDR_LINKLOCAL=fe80::216:36ff:fe00:0101/64
-----------------------------------------------------------------
こんな感じで設定を。これが正しいのかはわからないけど、やりたかったのは、
・IPv6 over IPv4でGRE tunnelを張る。
・GRE tunnelを張った後に、tunnel I/Fに対して、グローバルIPv6アドレスとリンクローカルIPv6アドレスをつける
・デフォルトゲートウェイをtunnel I/Fに対して任意に振る
の3点。IHANetでは、このやり方は常套手段なんだけど、なんか見ていてできそうになかったので、自分で好きなように直しちゃったというのが本音。正解誰か教えてほしいなぁ。
んで、このスクリプトを書き直している最中にわかったんだけど、IHANetで話題になっていた、FreeBSDとLinuxでGRE tunnelを張った時にping6 -I greX ff02::1 を実行したときに、Linuxで応答しないってもの当然だ、という結論に。GRE tunnelにlinklocal addressが付いてなきゃ、そら応答ないわなぁ、と。って事で、このスクリプトにて、Linuxでもping6で応答を返すことができるようになる、と。

あ、今差分を見てみると、/sbin/ip addr add "$MY_INNER_IPADDR" dev "$DEVICE" の行は使われてない…。まぁいいや。次は、L2VPNにチャレンジかな。

SaaSes VPS 構築記(1)

ServersMan@VPSだと、やりたいことが当分できそうにない感じなので、SaaSesのVPSサーバーも使い倒すことに。契約プランは、Osukiniサーバー LT(初期費用 3,000円、450円/月で6か月前払い。つまり初期費5,700円)。銀行振り込みでないとダメなんで、クレカでお気軽に試せるDTIとは違うんで、ちと面倒だけど、50GBのディスクに512MBのメモリ、文句はない。

ServersMan@VPSで2010/05/01現在でできないこと(tun/greを使うとか)ができるのかどうか、SaaSesのサポートに聞いたら、「使えるかわかんないんで、2週間のお試し期間でお好きにどうぞ」ってことだったので、えいやぁで申し込み。
こっちはXen Serverの中に、CentOS 5.4を入れていて、自宅のCitrix Xen Server上のFreeBSDとかで、ネットワークインターフェースが普通に使えるので、たぶんできるだろうと山を張ってみた。できなかったらキャンセルの方向で考えってことで:-)

納品されてきた設定だと、既にyumで最新の状態まで持って行っていたため、yum updateをわざわざかける必要もない。メモリも512MBあるので、yum updateしたらこけることもない。ちなみにSaaSesの場合は、コントロール用インターフェースにWebminを使っているんだけど、別にWebminのコントロールパネルはいらないんで、さっさとdisableにしちゃう、と。

ServersMan@VPSと違うのは、
・ちゃんと初期ユーザーとrootユーザーが作ってあり、rootでsshログインしろ、というServersMan@VPSよりは安全な感じ。
・/sbin/ifconfig すると、ちゃんとeth0とかで見えてくれるんで、普通にネットワーク周りは使える。
・/sbin/modprobe ip_gre とかやれば当然動く。つうことで、この辺で勝利:-) /etc/modprobe.conf に、
alias gre0 ip_gre
とか追記しておけば、普通に起動時にkernel moduleをロードしてくれる。
マイナスな点は、
・IPv6アドレスがない
まぁ、これは自宅とGRE tunnel張れば解決する問題だし、いざとなったら、OCN IPv6とか、手段はありそうな感じなのでそんなに問題なし。

あとは、ServersMan@VPSでやった事をそのままSaaSesのサーバーに適用したりの作業。問題は、どこまでCentOSを使いこなせるかにかかっている…。

Looking Glass

長らく愛用している、DTIのLooking Glassだけど、メンテナンスされてないようで、404なページが多くなったので、自分でリストをアップデートしてみた。単に自分が調べるのに都合がいいからだけど(^^;

2010/11/21現在のアクティブなLooking Glass(2010/10/30にDTIが復活してた)
---------------------------------------------------------------------------
国内
AS7684 Looking Glass - SAKURA INTERNET
AS9370 Looking Glass - SAKURA INTERNET
AS9371 Looking Glass - SAKURA INTERNET
Looking Glass at BroadBand Tower(AS9607)
DTI Looking Glass(AS4691)
---------------------------------------------------------------------------
海外
Looking Glass - NTT America - www.us.ntt.net
---------------------------------------------------------------------------
国外/IPv4
Abovenet Looking Glass
ACOnet: Looking Glass
ALOG Datacenters do Brasil - Looking Glass
connect.com.au looking glass
Elvis-Telecom Looking v Glazz
ElVisti Looking Glass
Golden Telecom Ukraine: looking glass
Host.net :: Looking Glass
Level 3
AS8262 Looking Glass
Motobit Software
Net Access Looking Glass
Relcom looking glass
Routing Information Service
AS6762 Looking Glass
The Slovak Internet eXchange
TDC AS3292 Looking Glass
---------------------------------------------------------------------------
国外/IPv6
AS3327 Looking Glass
Host.net :: Looking Glass
Hurricane Electric (AS6939) - Looking Glass
LavaNet IPv6 - Looking Glass
Looking Glass : yalg@OpenTransit
SixXS - IPv6 Deployment & Tunnel Broker :: Ghost Route Hunter : Distributed Looking Glass

ServersMan@VPS 設定記(4)

OpenVPNは面倒な匂いがプンプンしてきたので、気分を変えてDNSのセカンダリサーバを立てることに。といっても、bindをタダ動かすだけじゃ面白くないので、NSDを入れてみることに。FreeBSDだと、ports/dns/nsd で入れられるんで、そっちを参考にしながら。
ちなみに、NSDはNLnetLabsがRIPE/NCCと開発したDNSサーバー。nlnetlabs.nl辺りを読むとよいかも。

bindの設定は残しつつ、nsdにアレンジを試みる。まずは、ftp://ftp.rhnet.is/pub/nsd/ あたりから、nsd-3.2.5.tar.gz を取ってきて、おもむろに

# ./configure --with-configdir=/usr/local/etc

したら、どうもssl.h がないとconfigure に失敗するらしい。おもむろにググると、openssl-devel を入れないといけないのか。って事で、

# yum install openssl-devel

を実行して、configure & make & make installを実行。

makeが通ったら、/usr/local/etc/nsd.conf を作成。nsdだと、あんまり余計な設定を書かなくてもあっさり動いちゃうのがいいねぇ。とりあえずスレーブサーバーとして動けばいいので、
-------------------------------------------------------------
server:
database: "/var/db/nsd/nsd.db"
logfile: "/var/log/nsd.log"
pidfile: "/var/run/nsd.pid"
username: named
difffile: "/var/db/nsd/ixfr.db"
xfrdfile: "/var/db/nsd/xfrd.state"
zone:
name: "example.jp"
zonefile: "example.jp.zone"
allow-notify: 127.0.0.1 NOKEY
allow-notify: ::1 NOKEY
allow-notify: NOKEY
request-xfr: NOKEY
-------------------------------------------------------------
この程度でオッケー。DNSSEC使えよ、とかの突っ込みはありそうだけど、取りあえずやりたい人が考えて:-)

bindと違うのは、DNSの権威サーバーはnsd、DNSのリゾルバはunboundって、きっちり分かれてるので、権威サーバーでかつリゾルバも使いたい場合は頭をひねらないといけない(listenするIPアドレスで使い分けるとか?)んだけど、外で運用するサーバーなら、さしあたって困らないので、これで完結。

起動スクリプトは、とりあえずこんな感じでええのかな。
-------------------------------------------------------------
#! /bin/sh

# chkconfig: 2345 45 74
# description: nsd script
# processname: nsd
# config: /usr/local/etc/nsd/nsd.conf

# source function library
. /etc/rc.d/init.d/functions

# Get network config
. /etc/sysconfig/network

# nsd command line options
. /etc/sysconfig/nsd

RETVAL=0
prog="nsd"

case "$1" in
start)
# Check that networking is up.
[ "${NETWORKING}" = "no" ] && exit 1

# The process must be configured first.
[ -f /usr/local/etc/nsd/nsd.conf ] || exit 6

echo -n $"Starting $prog: "
daemon /usr/local/sbin/nsd
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/nsd
echo
;;
stop)
echo -n $"Shutting down $prog: "
killproc nsd
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/nsd
echo
;;
restart|reload)
$0 stop
$0 start
RETVAL=$?
;;
condrestart)
if [ -f /var/lock/subsys/nsd ]; then
$0 stop
$0 start
fi
RETVAL=$?
;;
status)
status nsd
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}"
exit 2
esac

exit $RETVAL
-------------------------------------------------------------
ちなみに、上のスクリプトの
chkconfig: 2345 45 74
こいつで、実行制御ができるらしい。2345が、runlevel 2,3,4,5で動作可能。ServersMan@VPSだと、標準だとrunlevel 3なんで、2345って書いてもあんまり意味ないけど、とりあえず定義。起動順は、S45とK74で動くらしいが、KとSって何が違うんじゃー?
んで、
# /sbin/chkconfig -add nsd
# /sbin/chkconfig nsd on
としてやれば、run levelに応じて自動的に起動するようになる。ちなみに削除するんだったら、
# /sbin/chkconfig --del nsd
確認は、
# /sbin/chkconfig --list nsd
でできる。

その後、
# /usr/local/sbin/nsdc rebuild
して、初期データベースの設定をやっておく。どっかのサイトを見てやったのだけど、記載するのを忘れて2度目に構築したらどはまりしたので、追記。

masterサーバーからの更新は、手動で
# /usr/local/sbin/nsdc update
を実行。また、masterサーバーからの自動更新は、/etc/crontabに、
0-59/15 * * * * root /usr/local/sbin/nsdc update
こんな感じの行を追加して自動でやらせる、ってのは、bindとは全く違う発想。なおかつ、高速化を図るために、スレーブサーバーはDB形式で保存しているので、master側のzone情報をクラッシュさせたら、事実上復旧は難しいんじゃないかな。

ついでに、unboundは、DNSのリゾルバに特化したアプリケーション。こっちも別の機械に入れてみたので情報提供しておくか。
こっちはFreeBSDのサーバーに入れてみたので、ports/dns/unbound を突っ込んで、/usr/local/etc/unbound.conf を次のような感じで書いて、/etc/rc.conf に、unbound_enable="YES" 書いて起動すれば終わり。
server:
access-control: 192.168.0.0/24 allow
うちは、ちょっと特殊な使い方をしてるんで、

server:
interface-automatic: yes
access-control: 192.168.0.0/24 allow
log-time-ascii: no
forward-zone:
name: "flets"
forward-addr: 220.210.xxx.yyy
forward-addr: 220.210.xxx.zzz
みたいな感じにやって、複数インターフェースからのセッションを許可したり、fletsのサイトへは無条件にforward queryを投げたりしているけど、単純なDNS resolverとしては結構便利かな。

ServersMan@VPS 設定記(3)

とりあえず、quagga辺りをインストールしよう、ともくろんでみる。本来ならばVPN周りを先に整備すべきなのだが、なかなか苦戦しそうな匂いがプンプンしてきたので、後回し。

# yum install quagga

で、quaggaはインストールできるものの、CentOS 5.4の標準のquaggaは、0.98.6-5.el5 …。ふ、古すぎる。設定して4byte ASNのサーバーに試しにpeerを張ろうとしたら、capability 65は対応してないって、え、4byte ASダメじゃん。ということで、RPMforgeから、

# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
# rpm -Uhv rpmforge-release-0.5.1-1.el5.rf.i386.rpm

で、RPMforgeのdistributionを追加してみるも、yum list してもquaggaの新しいバージョンはない。
しょうがないので、quagga 0.99.16を野良ビルドすることに。
そしたら、gccもいるじゃん。って事で、

# yum install gcc

で、gcc 4.1.2-46.el5_4.2関連を入れる。あと、起動スクリプト周りを作るのが面倒なので、quaggaの古いバージョンはインストールしたまま、quaggaのソースのサイトから、quagga-0.99.16.tar.gz をダウンロードして、バイナリだけビルド。

# tar zxvf quagga-0.99.16.tar.gz
# cd quagga-0.99.16
# ./configure --sysconfdir=/usr/local/etc/quagga --localstatedir=/var/run/quagga
# make
# make install

して、/etc/init.d/bgpd のファイルの
[ -f /etc/quagga/bgpd.conf ] || exit 6

echo -n $"Starting $prog: "
daemon /usr/sbin/bgpd -d $BGPD_OPTS
あたりを、
[ -f /usr/local/etc/quagga/bgpd.conf ] || exit 6

echo -n $"Starting $prog: "
daemon /usr/local/sbin/bgpd -d $BGPD_OPTS
と書き換え、新しいquaggaを起動することに。
bgpd.conf は、IHANetで嫌というほど修業したので、インチキ(ebgp-multihop)して、とりあえずIHANet側に無理やり経路を流したり。

次はOpenVPN辺りにハマるかな:-)

ServersMan@VPS 設定記(2)

さて。yum updateするとメモリが足りない件、早速解決案が出てた。

liffeyさんのブログ(ServersMan@VPSサービス導入)より。

# rpm -ev --nodeps yum-fastestmirror-1.1.16-14.el5.centos.1

で、yum-fastestmirrorのプラグインを消して、うちもOKっぽい。

現在、postfix / imapd辺りを設定中。postfixはうちの設定を適当にコピーして動かしてるけど、imapdがcyrus-imapdなんで、設定例探さないと。FreeBSDのportsではcourier-imapd突っ込んでたからなぁ。

quaggaもインストールしてあるけど、L2TP or GRE tunnel張らんと使い物にならないし。まだまだ道のりは遠い。Linuxだと、OpenSwanとかがキーワードなのか? Linuxは事実上使ったことがないに等しいから、よーわからん。

ServersMan@VPS 設定記(1)

待つこと10日、やっとServersMan@VPSの設定が完了したので導入記をば。

1. まずはDTIから届いたメールに、VPSサーバーの情報が書いてあるので、ServersMan コントロールパネルのURLから、「ServersMan@VPS コントロールパネル」にログイン。URLは、http://[IPv4アドレス]/serversman となっているはずなので、これをクリックして、「コントロールパネル ユーザーID」と「コントロールパネル パスワード」を入力してログイン。

2. ServersMan Menuが表示されるので、ここから「設定・変更」をクリックし、その後「ServersMan サービス制御」のところに[ServersMan情報]に書かれた「メールアドレス」と「パスワード」を入力し、「ServersMan」を「有効」にして「設定」をクリック。これでVPSが立ち上がる。

3. 再度、ServersMan Menu に戻るので「情報」をクリック。「ServersMan サービス状態」が「利用可能」になっていればVPSが立ち上がっているので、ログインできるようになっている。

4. sshでログイン開始。メールの[VPSサーバ情報]に書いてあるIPアドレスに、「rootユーザID」と「rootユーザパスワード」でログイン。つまり、root@[IPv4]アドレスにsshでログインする。うちはこんな感じ。

[root@dti-vps-srv04 ~]# /sbin/ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:852 (852.0 b) TX bytes:852 (852.0 b)

venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:127.0.0.1 P-t-P:127.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.255
inet6 addr: 2001:2e8:602:0:3:1:0:5d/128 Scope:Global
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
RX packets:28541 errors:0 dropped:0 overruns:0 frame:0
TX packets:31731 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3180915 (3.0 MiB) TX bytes:4637772 (4.4 MiB)

venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:183.181.170.93 P-t-P:183.181.170.93 Bcast:183.181.170.93 Mask:255.255.255.255
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1

[root@dti-vps-srv04 ~]# cat /proc/user_beancounters
Version: 2.5
uid resource held maxheld barrier limit failcnt
10822: kmemsize 1421985 3212451 14372700 14790164 0
lockedpages 0 0 256 256 0
privvmpages 19353 63775 65536 65536 1
shmpages 641 703 21504 21504 0
dummy 0 0 0 0 0
numproc 22 46 120 120 0
physpages 2179 9229 0 9223372036854775807 0
vmguarpages 0 0 65536 9223372036854775807 0
oomguarpages 2179 9229 26112 9223372036854775807 0
numtcpsock 5 24 360 360 0
numflock 3 8 188 206 0
numpty 1 1 8 8 0
numsiginfo 0 6 128 128 0
tcpsndbuf 95624 240128 1720320 2703360 0
tcprcvbuf 81920 214296 1720320 2703360 0
othersockbuf 6984 24312 1126080 2097152 0
dgramrcvbuf 0 12848 262144 262144 0
numothersock 9 22 360 360 0
dcachesize 53523 164325 3409920 3624960 0
numfile 471 1206 9312 9312 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
numiptent 20 20 128 128 0

5. まずはsecurity update開始。Entryプランでyum update とかやると、pythonがこけるので(メモリ不足)、
# /etc/init.d/httpd stop
# /etc/init.d/sendmail stop
# /etc/init.d/xinitd stop
してメモリ容量を稼ぐ。その後、yum updateを実行。updateした状態でこんな感じ。

[root@dti-vps-srv04 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/simfs 10485760 579992 9905768 6% /
none 131072 4 131068 1% /dev

さて。いろいろ仕込むかな。