networkの最近のブログ記事
2010年9月 7日
さくらのVPSに移転してみるなど
http://vps.sakura.ad.jp/
さくらのVPS|VPS(仮想専用サーバ)はさくらインターネット
直前までさくらのレンタルサーバを検討つか実際申し込みしてお試し期間中だったんだけど、その間に9/1からこいつが始まっちゃったんで即決してみました。で既にお引っ越し完了。このブログももちろん動かしてますよ。
sshとMovableTypeの設定、あとpostfixにしてメール受信の設定を最小限済ませてあとは割と放置気味ですが、問題なく使えてます。あとtracも入れなきゃ。何かあれば詳報は以降随時ということで。
2010年8月25日
RTに久々の新型ですって。
http://internet.watch.impress.co.jp/docs/news/20100824_389017.html
ヤマハ、ネットボランチ「RT58i」の後継となる「NVR500」10月下旬発売 -INTERNET Watch
RT58i級とRTX1200級の間を埋めるクラスが欲しいんだよなあ...。SRT100も悪くないんだけど、うーん...。VPN機能がPPTPだけとか、ねえ。
2010年5月31日
BS-G2016MRの静音化手術に成功しましたよ
で。BS-G2016MRのファン音の騒音ぶりにさすがに耐えきれず、一時はヤフオクあたりで放出することも考えた。けどその前に試してみたっていいんじゃないかと思って一念発起、ふた開けてみた。注意深くネジを外す。
※なお本記事について、当方の個体以外においても内容を保証するものではありません。メーカー保証等も受けられなくなりますので、万一この記事を読んで試すなどされた方が居られましても、各自の環境にて生じた差異や損害などには責任を負いかねます。くれぐれもご了承の上ご覧くださいますようお願いします。(_ _)
ちょっと分かりにくいけど、奥側が機器前方。で、手前側中央に黒く四角いのが見えていて、これがBS-G2016MR唯一のファン。外形は一般的な40mmファンの厚み15mm。当たり前だけどこいつの給電を外してやれば無音になった。さて。外してみると型番が判明。Delta ElectronicsのAFB0412MBという代物らしい。データシートがこちらで読める。
http://www.delta.com.tw/product/cp/dcfans/download/pdf/AFB/AFB40x40x15mm.pdf
ここから性能を確認してみると、だ。
- 回転数(Speed) = 6000 R.P.M.
- 最大風量(Maximum Air Flow) = 8.12 CFM
- 最大静圧(Maximum Air Pressure) = 0.202 IN H2O
- 騒音(Noise) = 24.5 dB-A
回転数がとにかく高い。6000RPMは高い。おそらく筐体から出ている高周波音はここから来ている。このファン単体で取り出してから回してみてもそんなに大した音ではないんだが、いざ取付けて回すと筐体全体と共鳴を起こしてひどい騒音になっている。しかしその一方で風量の8.12CFMというのはなかなかのもの。4cmファンの同クラスの中で探してみたけど、なかなかこれだけの出力を出すファンは見当たらない。おそらく、高回転・高出力と引き換えにこれだけの音量になってしまっているのだろう。
というわけで、静音タイプのファンに換装するとなると必然的に今のファンより出力上劣らざるを得ない。排熱効率が十分か、見守る必要はありそうだ。そこを何度か自分に問い直しつつ、いざ覚悟を決めたら次に進めだ。
内部を改めて眺めると、結構大型のヒートシンクがメインボード上に取付けられていて、主要チップ自体の冷却は大分手当てされている模様。排熱用のファンを筐体の狭い横側ではなくて、上方向に付けてより大きな6cmとか8cmファンにしておけばそもそも良いんじゃね?とも思ったが、まあそこは仕方なし。
というわけで閉店間際のPCDEPOT盛岡店に飛び込んで見つけてきたのがこれ。
http://www.scythe.co.jp/cooler/mini-kaze-ultra.html
株式会社サイズ | 商品詳細 |MINI-Kaze ULTRA 20mm厚
決め手は3500RPMとかなりの低回転・静音タイプでありつつ風量4.86CFMはだいぶ稼げそうな点。ケース内の設置空間もかなりギリギリではあったものの20mm厚も入れそうだったのでやってみた。この判断は結果から言うと成功。20mm厚でもメインボードとの間に3mmほど隙間が残り、ファンが干渉するおそれもない。
ここで一度コネクタを繋いで電源を入れてみたが問題が残った。ファンが回らないのである。原因は2枚目の写真。それぞれケースファン電源用の3ピンコネクタである。上は取り外した元々のファン(AFB0412MB)、下は新しく取付けたファン(MINI-Kaze ULTRA 20mm厚/SY124020L)。ケーブルの色の順番に注意してほしい(ちょっと見えにくいが...)。AFB0412MBは上から「黒、青、赤」となっているのに対し、MINI-Kazeでは「(空き)、赤、黒」になっている。これもデータシートを参照すると下記のような記述を確認できる。
* Lead Wires : UL 1007 AWG #24 OR Equivalent Red Wire Positive(+) Black Wire Negative(-)
あれ、青(Blue)はどこ?
まあひとまず、赤と黒の線はそれぞれ同じくプラスとマイナスで共通していると仮定し、これが全くあべこべの配線になっているので直してみる。AF0412MBの順番に習い、「赤、(空き)、黒」の順にする(青は無視。2ピンなんだし割り切れ>俺)。写真のコネクタには3ピンそれぞれの接点部分に金具部分がヒッカケになっているので、これを細身のドライバや針金などで強く押し込み、ヒッカケがはずれるのをさぐりつつケーブルをゆっくりと引き抜く。一気に強く引こうとすると切れてしまうと思われるので注意。金具を押し込みながら、押し込んだ方向と同じ向きに角度を付けて引くようにすれば割とあっさり抜ける。3枚目の写真に模してみたのでこちらを参照のこと。
さてこれでコネクタ刺してフタして起動。おおっ。音がない。不安になるくらいファン音(とその共鳴音)がない(笑)。でも排気ダクトに手を当ててみるとちゃんと空気は出ているぞ。OKだ。すばらしい。
というわけでうちのBS-G2016MRヤフオク行きを何とか逃れました(何)。やったー。
2010年5月19日
さすが法人向けは伊達じゃない(何
で、早速届いたんですわBS-G2016MR。
http://buffalo.jp/products/catalog/network/bs-g2016mr/
レイヤー2 インテリジェントGigaスイッチ 16ポート | BS-G2016MR
さすが法人向けあって重厚っていうかすげえですな。ファン音が。(爆) うちの5台あるPC全部束にしてもまだこの一台のファン音のほうが大きいです。想定はしててもいざ火を入れて実感すると違うよねーってやつです。
まあ965BEのときと比べればまだまだだし、爆音ってほどじゃないにしても、でも結構ある。逆に言うと、Core i7/i5のマシンすらここまで音立ててないので、随分静音PCとしてうまく作れてたんだなと自分を褒めたくらい。^^;
まあどうせ仕事部屋は独立なんで気にしないでもいいし、設置して数時間して慣れてきつつはあるので、もう少し様子見ながらで行きますわ。
2010年4月14日
BINDでdynamic dnsやってると勝手にゾーンファイル本体を書き換えようとしてくれやがる件
自宅のNAT内ネットワークをBIND使って固定IPとDHCP分とを合わせて一つのドメインでやってるんですけど、/etc/bind配下に置いてあるゾーンファイルをBIND自身が自分で書き換えようとして困る。まあ自然ちゃあ自然なんだけど...書き換え可能なディレクトリは/var/lib/namedとか/var/cache/namedとかに用意してあるんだし、*.jnlはそっちに吐き出してるわけだし、使い分けて欲しいなあとも思う訳で...。
例えばこんな感じでずっと出とるんですわ。
Apr 14 08:26:37 gw named[7331]: dumping master file: /etc/bind/tmp-VyOSuyztFl: open: permission denied Apr 14 08:30:22 gw dhcpd: Wrote 5 leases to leases file. Apr 14 08:30:22 gw dhcpd: DHCPREQUEST for 192.168.0.205 from xx:xx:xx:xx:xx:xx via eth0 Apr 14 08:30:22 gw dhcpd: DHCPACK on 192.168.0.205 to xx:xx:xx:xx:xx:xx via eth0 Apr 14 08:31:55 gw named[7331]: dumping master file: /etc/bind/tmp-LZ5RZ76NXe: open: permission denied Apr 14 08:35:22 gw dhcpd: DHCPREQUEST for 192.168.0.205 from xx:xx:xx:xx:xx:xx via eth0 Apr 14 08:35:22 gw dhcpd: DHCPACK on 192.168.0.205 to xx:xx:xx:xx:xx:xx via eth0 Apr 14 08:40:22 gw named[7331]: dumping master file: /etc/bind/tmp-rKYx3u6RKw: open: permission denied Apr 14 08:40:22 gw dhcpd: DHCPREQUEST for 192.168.0.205 from xx:xx:xx:xx:xx:x via eth0 Apr 14 08:40:22 gw dhcpd: DHCPACK on 192.168.0.205 to xx:xx:xx:xx:xx:xx via eth0 Apr 14 08:41:20 gw dhcpd: DHCPREQUEST for 192.168.0.202 from yy:yy:yy:yy:yy:yy via eth0 Apr 14 08:41:20 gw dhcpd: DHCPACK on 192.168.0.202 to yy:yy:yy:yy:yy:yy via eth0 Apr 14 08:45:09 gw named[7331]: dumping master file: /etc/bind/tmp-OflOZAy7fk: open: permission denied
debianだとデフォルトで/etc/bindはrootにしかwrite permissionなくて、肝心のnamedはbindユーザになって動作する。
hironobu@nelly:~$ ls -ld /etc/bind drwxr-sr-x 2 root bind 4096 2010-04-13 01:06 /etc/bind hironobu@nelly:~$ ps -C named -Fl F S UID PID PPID C PRI NI ADDR SZ WCHAN RSS PSR STIME TTY TIME CMD 5 S bind 7331 1 0 80 0 - 59460 rt_sig 52868 3 Apr13 ? 00:03:15 /usr/sbin/named -u bind
いくつかぐぐって記事を見てみると「何だよこれならおまえ/etc/bindでchmod g+wすりゃ済むじゃん馬鹿じゃねえのHAHAHA」的な陽気なアメリカンスタイルがこだましている。うーん。それはそれで分かるんだけどさあ的な。でやってみると確かにゾーンファイルが変わってて、DHCP分の最初書いてなかったdyndns分の登録まで入ってる。うわー。
まあ、ゾーンファイルがオリジナルになるんだからdynamic dnsして登録されたホストもゾーンファイルに載らなきゃ困るって話はあるかもしれない。write permissionなしでどないしてゾーンファイル管理しろってんだとBINDからすれば思うかも知れない。しかし/etc/配下を勝手に書き換えられるのも気持ち悪いんだよねえ...。どないしたもんか。
2010年4月11日
LinuxルータでOCN IPv6設定をやったよ 〜その2 wide-dhcpv6-clientとradvdとその他の巻〜
で引き続きその2。分けたことに余り意味はない。っていうかあまりにいろいろ貼ってたら長くなって来たので途中で一息つきたかっただけですにょ。おほほ。
wide-dhcpv6c(wide-dhcpv6-client)とradvdについては、前出の"Memo - OCN IPv6"と変わる所はありません。そのまま持って来て通ります。
http://www.ln-lab.net/lunar-night.lab/page2-memo_ocnipv6/design-white/lang-ja
Memo - OCNIPv6
# /etc/wide-dhcpv6/dhcp6c.conf
interface ppp2 {
send ia-pd 0;
};
id-assoc pd 0{
prefix-interface eth0 {
sla-id 1;
sla-len 0;
};
};
# /etc/radvd.conf
interface eth0
{
AdvSendAdvert on;
MinRtrAdvInterval 30;
MaxRtrAdvInterval 100;
prefix 2001:380:aaaa:bbbb::/64
{
AdvOnLink on;
AdvAutonomous on;
};
};
wide-dhcpv6-clientを起動して、まず指定のインタフェイスにOCNから指定されたprefixでv6アドレスが付くことを確認しましょう。prefixが"2001:380:aaaa:bbbb"だとしたらこのようになっているはずです。
hironobu@nelly:~$ /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: 2001:380:aaaa:bbbb:xxxx:xxxx:xxxx:xxxx/64 Scope:Global
inet6 addr: fe80::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:20969 errors:0 dropped:0 overruns:0 frame:0
TX packets:22630 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3654118 (3.4 MiB) TX bytes:15726726 (14.9 MiB)
Interrupt:252 Base address:0xe000
さらにradvdを起動して、RA(Router Advertisement)が同セグメントの他のPCに配信され、inet6アドレスが付くのを確認します。
hironobu@shirley:~$ /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr zz:zz:zz:zz:zz:zz
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: 2001:380:aaaa:bbbb:zzzz:zzzz:zzzz:zzzz/64 Scope:Global
inet6 addr: fe80::zzzz:zzzz:zzzz:zzzz/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:98633 errors:0 dropped:0 overruns:0 frame:0
TX packets:60699 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:87034901 (83.0 MiB) TX bytes:6714585 (6.4 MiB)
Interrupt:16 Base address:0x2400
ちなみにnellyがルータで、shirleyは同セグメント上のサーバです。ここまで確認してOKであれば、ipv6用のルーティングを登録します。
# ip -f inet6 route add default dev ppp2 $ ip -f inet6 route 2001:380:aaaa:bbbb::/64 dev eth0 metric 256 mtu 1500 advmss 1440 hoplimit 4294967295 fe80::/64 dev eth1 metric 256 mtu 1500 advmss 1440 hoplimit 4294967295 fe80::/64 dev eth0 metric 256 mtu 1500 advmss 1440 hoplimit 4294967295 fe80::/64 dev ppp2 metric 256 mtu 1390 advmss 1330 hoplimit 4294967295 fe80::/10 dev ppp2 metric 1 mtu 1390 advmss 1330 hoplimit 4294967295 fe80::/10 dev ppp2 metric 256 mtu 1390 advmss 1330 hoplimit 4294967295 default dev ppp2 metric 1024 mtu 1390 advmss 1330 hoplimit 4294967295
こうすることでipv6パケットがppp2インタフェイスを通じて外に出て行くようになります。早速ping6してみましょう。
hironobu@shirley:~$ ping6 www.ocnipv6.jp PING www.ocnipv6.jp(www.ocnipv6.jp) 56 data bytes 64 bytes from www.ocnipv6.jp: icmp_seq=1 ttl=54 time=17.0 ms 64 bytes from www.ocnipv6.jp: icmp_seq=2 ttl=54 time=17.7 ms 64 bytes from www.ocnipv6.jp: icmp_seq=3 ttl=54 time=16.3 ms 64 bytes from www.ocnipv6.jp: icmp_seq=4 ttl=54 time=16.8 ms 64 bytes from www.ocnipv6.jp: icmp_seq=5 ttl=54 time=17.5 ms
hironobu@shirley:~$ traceroute6 www.ocnipv6.jp traceroute to www.ocnipv6.jp (2001:218:2001:3005::7f), 30 hops max, 40 byte packets 1 2001:380:aaaa:bbbb:xxxx:xxxx:xxxx:xxxx (2001:380:aaaa:bbbb:xxxx:xxxx:xxxx:xxxx) 0.168 ms 0.162 ms 0.184 ms 2 2001:380:8140::a (2001:380:8140::a) 16.904 ms 16.969 ms 17.010 ms 3 2001:380:8140:9::1 (2001:380:8140:9::1) 17.050 ms 17.186 ms 17.353 ms 4 2001:380:8130:3::1 (2001:380:8130:3::1) 17.067 ms 17.177 ms 17.385 ms 5 2001:380:8130:12::4 (2001:380:8130:12::4) 17.594 ms 17.430 ms 17.617 ms 6 2001:380:8230:f::2 (2001:380:8230:f::2) 17.348 ms 16.086 ms 16.258 ms 7 ae-0-1.a20.tokyjp01.jp.ra.gin.ntt.net (2001:218:2000:5000::49) 16.339 ms 14.535 ms 14.307 ms 8 ae-7.r20.tokyjp01.jp.bb.gin.ntt.net (2001:218:0:6000::185) 13.996 ms 14.411 ms 14.337 ms 9 2001:218:0:6000::52 (2001:218:0:6000::52) 17.269 ms 17.430 ms 17.303 ms 10 (2001:218:2001:17::2) 17.715 ms 17.330 ms 17.749 ms 11 www.ocnipv6.jp (2001:218:2001:3005::7f) 17.763 ms 18.246 ms 17.849 ms
接続できましたにょ。
さて残る問題は、前回のxl2tpdも含めて、「OS起動時にどうするか」です。上に述べたようにxl2tpdに名前付きパイプへのechoを使ってxl2tpdへの操作を行いますが、これを/etc/init.d/*でやりたいですよね。Linuxルータを再起動したら何もせずとも自動的にipv6リンクも立ち上がっているようになるのが理想的です。
hironobu@nelly:~$ ls -l /etc/rc*/*xl2tpd lrwxrwxrwx 1 root root 16 2010-04-10 01:02 /etc/rc0.d/K20xl2tpd -> ../init.d/xl2tpd lrwxrwxrwx 1 root root 16 2010-04-10 01:02 /etc/rc1.d/K20xl2tpd -> ../init.d/xl2tpd lrwxrwxrwx 1 root root 16 2010-04-10 01:02 /etc/rc2.d/S20xl2tpd -> ../init.d/xl2tpd lrwxrwxrwx 1 root root 16 2010-04-10 01:02 /etc/rc3.d/S20xl2tpd -> ../init.d/xl2tpd lrwxrwxrwx 1 root root 16 2010-04-10 01:02 /etc/rc4.d/S20xl2tpd -> ../init.d/xl2tpd lrwxrwxrwx 1 root root 16 2010-04-10 01:02 /etc/rc5.d/S20xl2tpd -> ../init.d/xl2tpd lrwxrwxrwx 1 root root 16 2010-04-10 01:02 /etc/rc6.d/K20xl2tpd -> ../init.d/xl2tpd
このxl2tpdが起動されたあとに、できるだけすぐにecho "c ocnipv6" > /var/run/xl2tpd/l2tp-controlを送りたい訳です。私が採った手は、このxl2tpdのすぐ後に起動するinitスクリプトを登録してやることです。下のようなスクリプトを作成し、まず/etc/init.d/ipv6として配置します。
#!/bin/sh
### BEGIN INIT INFO
# Provides: ipv6
# Required-Start: $remote_fs $network $syslog
# Required-Stop: $remote_fs $network $syslog
# Should-Start: $local_fs slapd
# Should-Stop: $local_fs slapd
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: IPv6 service
# Description: (empty)
### END INIT INFO
. /lib/lsb/init-functions
NAME="ocnipv6"
L2TPC="/var/run/xl2tpd/l2tp-control"
CMAX=10
do_start() {
C=0;
while [ ! -p $L2TPC ] && [ $C -lt $CMAX ]; do
sleep 1;
log_progress_msg '.';
let C=C+1;
done
if [ $C -lt $CMAX ]; then
echo "c $NAME" > $L2TPC
return 0
else
return 1
fi
}
do_end() {
echo "d $NAME" > $L2TPC
return 0
}
case "$1" in
start)
log_daemon_msg "Starting ipv6"
if do_start; then
log_end_msg 0
else
log_end_msg 1
exit 1
fi
;;
stop)
log_daemon_msg "Stopping ipv6"
do_end
log_end_msg 0
;;
restart)
log_daemon_msg "Restarting ipv6"
do_end
sleep 3
if do_start; then
log_end_msg 0
else
log_end_msg 1
exit 1
fi
;;
esac
exit 0
次に、update-rc.dを使って登録しますが、ランレベル2-5ではS21、同0-1,6ではK19になるようにします。つまり、起動時(2-5)ではxl2tpdの直後、終了時(0-1,6)ではxl2tpdの直前に、上のスクリプトを呼ぶ訳です。こうしないと、xl2tpdが起動しないうちに/var/run/xl2tpd/l2tp-controlをさわろうとするものの、当然起動前ならこのパイプは存在しないので、失敗することになるためです。
# update-rc.d ipv6 start 21 2 3 4 5 . stop 19 0 1 6 .
hironobu@nelly:~$ ls -l /etc/rc*/*ipv6 lrwxrwxrwx 1 root root 14 2010-04-10 01:26 /etc/rc0.d/K19ipv6 -> ../init.d/ipv6 lrwxrwxrwx 1 root root 14 2010-04-10 01:26 /etc/rc1.d/K19ipv6 -> ../init.d/ipv6 lrwxrwxrwx 1 root root 14 2010-04-10 01:26 /etc/rc2.d/S21ipv6 -> ../init.d/ipv6 lrwxrwxrwx 1 root root 14 2010-04-10 01:26 /etc/rc3.d/S21ipv6 -> ../init.d/ipv6 lrwxrwxrwx 1 root root 14 2010-04-10 01:26 /etc/rc4.d/S21ipv6 -> ../init.d/ipv6 lrwxrwxrwx 1 root root 14 2010-04-10 01:26 /etc/rc5.d/S21ipv6 -> ../init.d/ipv6 lrwxrwxrwx 1 root root 14 2010-04-10 01:26 /etc/rc6.d/K19ipv6 -> ../init.d/ipv6
さらに、スクリプト内でもパイプの生成を待つようにしています。上の例では10回=10秒間待ちますが、CMAXをいじれば調整可能です。
あとはルーティングですが、これはpppdを利用します。ipv6でのリンクが確立すると、pppdは/etc/ppp/ipv6-upおよび/etc/ppp/ipv6-up.d/*のスクリプトを起動しようとします。これを利用して、/etc/ppp/ipv6-up.d/routeスクリプトを下のように設置します。
#!/bin/sh if [ "x$PPP_IFACE" = "xppp2" ]; then ip -f inet6 route add default dev $PPP_IFACE /etc/init.d/wide-dhcpv6-client restart fi
また、/etc/ppp/ipv6-down.dディレクトリにも同じようにrouteスクリプトを置きます。
#!/bin/sh if [ "x$PPP_IFACE" = "xppp2" ]; then ip -f inet6 route del default dev $PPP_IFACE fi
wide-dhcpv6-clientにrestartを掛けている点に注意してください。ipv6スクリプトによってppp2がlink upを開始しますが、その完了を待たずにwide-dhcpv6-clientが起動されてしまうのです。ppp2のリンクが完了したタイミングでもう一度wide-dhcpv6-client
lrwxrwxrwx 1 root root 15 2010-04-07 05:17 S20rsync -> ../init.d/rsync lrwxrwxrwx 1 root root 16 2010-04-11 00:02 S20xl2tpd -> ../init.d/xl2tpd lrwxrwxrwx 1 root root 14 2010-04-10 01:26 S21ipv6 -> ../init.d/ipv6 lrwxrwxrwx 1 root root 28 2010-04-05 23:20 S40wide-dhcpv6-client -> ../init.d/wide-dhcpv6-client
これによって、起動後自動的にipv6リンクの確立とルーティングが行われるようになります。
2010年4月10日
LinuxルータでOCN IPv6設定をやったよ 〜その1 xl2tpdの巻〜
で、前回作ったLinuxルータにOCN IPv6の設定を入れてみた。大まかにはこちらの内容を参考にしてなんだけど、debian(lenny)なので微妙に違えています。
http://www.ln-lab.net/lunar-night.lab/page2-memo_ocnipv6/design-white/lang-ja
Memo - OCNIPv6
xl2tpdの設定
まずxl2tpdを動かします。lennyのパッケージそのままだと1.2.0なんだけど、これだとうまくL2TP接続を確立してくれませんでした。というわけでソースパッケージをそのまま持ってきます。
http://www.xelerance.com/software/xl2tpd/
Xelerance - Xelerance: Software: xL2TPD
こちらからどうぞ。一緒にdebビルド用のスクリプトがdebian/ディレクトリ配下に有るのでこれを使う。
$ wget http://www.xelerance.com/software/xl2tpd/xl2tpd-1.2.4.tar.gz $ tar zxvf xl2tpd-1.2.4.tar.gz $ cd xl2tpd-1.2.4 $ chmod +x ./debian/rules $ env PREFIX=/usr dpkg-buildpackage -rfakeroot
ここで環境変数としてPREFIX=/usrにしてdpkg-buildpackage渡す必要があります。そうしないと出来上がったdebパッケージをインストールしたときに/usr/local/sbin/xl2tpdのパスで入れられちゃうんですけども、一緒にインストールされるinitスクリプトが/usr/sbin/xl2tpdにあることを想定して動くので、かなしいことに(´・ω・`)なります。
で、出来上がりがこうなるので、
hironobu@nelly:~/xl2tpd-1.2.4$ ls -l .. 合計 1148 -rw-r--r-- 1 hironobu hironobu 700 2010-04-10 00:46 l2tpd_1.1.11.dfsg.1-2_all.deb drwxr-xr-x 9 hironobu hironobu 4096 2010-04-10 00:46 xl2tpd-1.2.4 -rw-r--r-- 1 hironobu hironobu 541039 2009-03-09 08:27 xl2tpd-1.2.4.tar.gz -rw-r--r-- 1 hironobu hironobu 500 2010-04-10 00:46 xl2tpd_1.1.11.dfsg.1-2.dsc -rw-r--r-- 1 hironobu hironobu 541003 2010-04-10 00:46 xl2tpd_1.1.11.dfsg.1-2.tar.gz -rw-r--r-- 1 hironobu hironobu 1603 2010-04-10 00:46 xl2tpd_1.1.11.dfsg.1-2_amd64.changes -rw-r--r-- 1 hironobu hironobu 68346 2010-04-10 00:46 xl2tpd_1.1.11.dfsg.1-2_amd64.deb
xl2tpd_1.1.11.dfsg.1-2_amd64.debをインストールすればよいでござる。バージョンが"1.1.11"になってるのは同debianディレクトリ配下のどこか設定ファイルか何かがあるはずのをいじればいいじゃないかな。(適当)
$ sudo dpkg -i xl2tpd_1.1.11.dfsg.1-2_amd64.deb
インストールは完了。で、設定。
; /etc/xl2tpd/xl2tpd.conf [lac ocnipv6] lns = foobar.ocn.ne.jp hostname = aaa@bbb ppp debug = yes pppoptfile = /etc/ppp/peers/ocnipv6 length bit = yes require chap = yes refuse pap = yes require authentication = yes redial = yes redial timeout = 10 max redials = 6
# /etc/ppp/peers/ocnipv6 nodefaultroute noip +ipv6 usepeerdns user aaa@bbb mtu 1390 noipdefault default-asyncmap nopcomp noaccomp noccp novj nobsdcomp nodeflate lcp-echo-interval 30 lcp-echo-failure 2 lock noauth
1つ目はxl2tpd.conf。lnsにはOCNから指定された接続サーバ名を、hostnameにはOCNにPPPoE接続を設定した際のユーザIDをそれぞれ設定する。あとは上に挙げたページからそのまま持って来ています。
2つ目はそのxl2tpd.conf中のpppoptfileオプションを通じて指定される、L2TP上でのppp接続で使われるpppd設定ファイルです。こいつも同じくOCNでのユーザIDを持って来ています。
さらに/etc/xl2tpd/l2tp-secretsにOCNのユーザIDとパスワードを書きます。書式は/etc/ppp/{chap-secrets,pap-secrets}と同じ。
"aaa@bbb" * "ccc"
ここで一度xl2tpdを再起動しておきます。
Apr 11 00:23:41 gw xl2tpd[2606]: setsockopt recvref[22]: Protocol not available Apr 11 00:23:41 gw xl2tpd[2606]: This binary does not support kernel L2TP. Apr 11 00:23:41 gw xl2tpd[2607]: xl2tpd version xl2tpd-1.2.4 started on nelly PID:2607 Apr 11 00:23:41 gw xl2tpd[2607]: Written by Mark Spencer, Copyright (C) 1998, Adtran, Inc. Apr 11 00:23:41 gw xl2tpd[2607]: Forked by Scott Balmos and David Stipp, (C) 2001 Apr 11 00:23:41 gw xl2tpd[2607]: Inherited by Jeff McAdams, (C) 2002 Apr 11 00:23:41 gw xl2tpd[2607]: Forked again by Xelerance (www.xelerance.com) (C) 2006 Apr 11 00:23:41 gw xl2tpd[2607]: Listening on IP address 0.0.0.0, port 1701
こんな感じに出ますのでね。続いてxl2tpdを操作してL2TP接続を開始させます。
# echo "c ocnipv6" > /var/run/xl2tpd/l2tp-control
でこんなログが出るはず。
Apr 11 00:23:41 gw xl2tpd[2607]: Connecting to host foobar.ocn.ne.jp, port 1701 Apr 11 00:23:41 gw xl2tpd[2607]: Connection established to x.x.x.x, 1701. Local: 36525, Remote: 60956 (ref=0/0). Apr 11 00:23:41 gw xl2tpd[2607]: Calling on tunnel 36525 Apr 11 00:23:41 gw xl2tpd[2607]: Call established with x.x.x.x, Local: 26379, Remote: 27351, Serial: 1 (ref=0/0) Apr 11 00:23:41 gw xl2tpd[2607]: start_pppd: I'm running: Apr 11 00:23:41 gw xl2tpd[2607]: "/usr/sbin/pppd" ... Apr 11 00:23:41 gw pppd[2617]: pppd 2.4.4 started by root, uid 0 ... Apr 11 00:23:41 gw pppd[2617]: CHAP authentication succeeded Apr 11 00:23:41 gw pppd[2617]: CHAP authentication succeeded Apr 11 00:23:41 gw pppd[2617]: sent [IPV6CP ConfReq id=0x1] Apr 11 00:23:41 gw pppd[2617]: rcvd [IPV6CP ConfReq id=0x1 ] Apr 11 00:23:41 gw pppd[2617]: sent [IPV6CP ConfAck id=0x1 ] Apr 11 00:23:41 gw pppd[2617]: rcvd [IPV6CP ConfAck id=0x1 ] Apr 11 00:23:41 gw pppd[2617]: local LL address fe80::xxxx:xxxx:xxxx:xxxx Apr 11 00:23:41 gw pppd[2617]: remote LL address fe80::yyyy:yyyy:yyyy:yyyy Apr 11 00:23:41 gw pppd[2617]: Script /etc/ppp/ipv6-up started (pid 2648)
で最終的に接続が完了すれば、ifconfigで下のようなpppxインタフェイスが出現します。
ppp2 Link encap:Point-to-Point Protocol
inet6 addr: fe80::xxxx:xxxx:xxxx:xxxx/10 Scope:Link
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1390 Metric:1
RX packets:481 errors:0 dropped:0 overruns:0 frame:0
TX packets:297 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:163773 (159.9 KiB) TX bytes:32095 (31.3 KiB)
ここまでで結構長くなったので一旦終わり。次はwide-dhcpv6cの設定に行きます。
2010年4月 7日
routerをSRT100からLinux PCサーバに入れ替えたよ その2
さて。どんな設定したかって話なんですが、びっくりするくらいあっさりしてた。いい世の中になったものですな。
sysctl: ip_forward
/etc/sysctl.confに以下の設定を有効化。IPv6まわりの設定はまだこれからですけど、一応含めました。
net.ipv4.ip_forward = 1 net.ipv6.conf.all.forwarding = 1 net.ipv6.conf.all.accept_redirects = 0 net.ipv6.conf.all.accept_ra = 0
iptables(firewall+NAT)
一番戸惑ったのはiptablesをどこで設定するのかというところ。前に見た時は/etc/init.d/iptablesとか何とかあったと思ったんですが、lenny以降は無くなったみたいですね。というわけでこちらに倣って/etc/network/if-pre-up.d/iptablesにスクリプトを置いてみました。えいやで作ったので甘いかもしんないですがとりあえずINPUTとFORWARDはDROPにしとかなきゃだぜぜぜ。
#!/bin/sh IPTABLES='/sbin/iptables' LOCAL_IF=eth0 LOCALNET='x.x.x.x/yy' ########## # initialize $IPTABLES -F $IPTABLES -X $IPTABLES -Z $IPTABLES -t nat -F POSTROUTING $IPTABLES -P INPUT DROP $IPTABLES -P FORWARD DROP $IPTABLES -P OUTPUT ACCEPT ########## $IPTABLES -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED $IPTABLES -A INPUT -j ACCEPT -i lo $IPTABLES -A INPUT -j ACCEPT -s $LOCALNET $IPTABLES -A INPUT -j ACCEPT -p tcp --dport 1723 $IPTABLES -A INPUT -j ACCEPT -p 47 $IPTABLES -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED ########## $IPTABLES -N outer_local ########## $IPTABLES -N local_outer $IPTABLES -A local_outer -j ACCEPT -s $LOCALNET ########## # nat $IPTABLES -t nat -A POSTROUTING -j MASQUERADE -s $LOCALNET -o ! $LOCAL_IF ########## # main table $IPTABLES -A FORWARD -j outer_local -i ! $LOCAL_IF -o $LOCAL_IF $IPTABLES -A FORWARD -j local_outer -i $LOCAL_IF $IPTABLES -A INPUT -j outer_local -i ! $LOCAL_IF
PPPoE周り
pppoeconfっていうパッケージがあるみたいで、これを使ったら本当にあっけなく設定できたんですけど、Bフレッツのマルチセッションを使ってたので結局自分でファイルをいじるしかなかったみたいです。
というわけで、BフレッツONUをeth1側に繋げたことを確認しつつ、まずはデフォルトセッション側に"defaultroute"を付けて。(/etc/ppp/peers/session1)
noipdefault defaultroute hide-password lcp-echo-interval 20 lcp-echo-failure 3 connect /bin/true noauth persist mtu 1492 noaccomp default-asyncmap plugin rp-pppoe.so eth1 user "aaa@bbb" usepeerdns
デフォルトじゃない側では"nodefaultroute"として"usepeerdns"を付けずに、また"noproxyarp"も指定。(/etc/ppp/peers/session2)
noipdefault nodefaultroute noproxyarp hide-password lcp-echo-interval 20 lcp-echo-failure 3 connect /bin/true noauth persist mtu 1492 noaccomp default-asyncmap plugin rp-pppoe.so eth1 user "xxx@yyy"
さらに/etc/ppp/chap-secretsおよび/etc/ppp/pap-secretsに次のようにパスワードを設定。どっちも同じ書式でいいのね。
"aaa@bbb" * "ccc" "xxx@yyy" * "zzz"
あとはこれを自動接続にするように、/etc/network/interfacesに追記。
allow-hotplug eth1 iface eth1 inet static auto ppp0 iface ppp0 inet ppp pre-up /sbin/ifconfig eth1 up provider session1 auto ppp1 iface ppp1 inet ppp pre-up /sbin/ifconfig eth1 up provider session2
で、マルチセッションというからには、destinationによって振り分けてroutingをちゃんと指定しておきたいよね、と。最初/etc/network/interfacesのppp1にup/down行を追加してみたんですが、うまくいかなかったです。代わりに/etc/ppp/ip-up.d/routeというスクリプトを置いてchmod +xしました。
#!/bin/sh if [ "x$PPP_IFACE" = "xppp1" ]; then ip route add a.a.a.a dev $PPP_IFACE ip route add b.b.b.b dev $PPP_IFACE fi
他には...
BINDとかIPv6の設定分とかは次回に続く。
2010年4月 6日
routerをSRT100からLinux PCサーバに入れ替えたよ
一通り設定が終わったのでリプレース、多少てこずったというかひさびさのケーブリングで戸惑ったりしたけど何とか無事に完了。distroはdebian(lenny)で、スペックはAtom 330(Intel D945GCLF2)にメモリ2GBのSSD 40GB(これもIntel)。NICも2枚差し(正確には内1個オンボード)なんて何年振りだろ。多少まごついたけどおさだまりのip_forwardとiptablesでNAT(今回の場合はMASQUERADE)とフレッツ用のpppoeと、そのくらいでだいたい行けた。もちろん(?)kernelソースも持って来てはありますが、まだ使いどころが無かった。
一緒にOCN IPv6サービスも申し込んだので、こちらの設定も追々する予定。ああ、不要なdebパッケージをお掃除したいね。
2009年9月10日
MT4のStyleCatcherの処理に時間がかかるのだ
で、さっそく問題発声。ギャース。いや発生。
MT4プラグインであるStyleCatcherは、ネットワーク上のレポジトリに公開されているMT用のブログスタイルを取ってきて自分のブログに適用してくれるわけですが、標準のレポジトリ(http://www.sixapart.com/movabletype/styles/mt4/library)にとりにいくと、数が多いせいかかなり待たされます。で、SuiteXのHTTPサーバ(Apacheだよね?)のタイムアウト設定が短めで1分?かそこらに設定されていて、全ての処理が終わりきる前にタイムアウトが起こり、処理が継続できなくなるという事態に陥ってしまったのでした。うはあ。
"Timeout waiting for output from CGI script"てやつですな。
じゃ、一気に全部のスタイルを持ってこようとするのがよくないので、タイムアウトを起こさない程度の少量ずつを取ってくるようにすれば問題ないはずだよねと素朴に変更を加えてみたのが以下の通り。
diff -x mt-config.cgi -ur MT-4.261-ja/plugins/StyleCatcher/lib/StyleCatcher/CMS.pm MT-4.261-ja.new/plugins/StyleCatcher/lib/StyleCatcher/CMS.pm
--- MT-4.261-ja/plugins/StyleCatcher/lib/StyleCatcher/CMS.pm 2009-06-16 14:45:32.000000000 +0900
+++ MT-4.261-ja.new/plugins/StyleCatcher/lib/StyleCatcher/CMS.pm 2009-09-10 01:42:06.000000000 +0900
@@ -138,7 +138,7 @@
my $app = shift;
return $app->json_error( $app->errstr ) unless $app->validate_magic;
- my $data = fetch_themes($app->param('url'))
+ my $data = fetch_themes($app->param('url'), $app->param('offs'), $app->param('count'))
or return $app->json_error( $app->errstr );
return $app->json_result( $data );
}
@@ -449,7 +449,7 @@
# pulls a list of themes available from a particular url
sub fetch_themes {
my $app = MT->app;
- my ($url) = @_;
+ my ($url, $offs, $count) = @_;
return undef unless $url;
my $blog_id = $app->param('blog_id');
@@ -503,6 +503,10 @@
}
push @repo_themes, $css;
}
+ $data->{paginate}{total} = $#repo_themes + 1;
+ $data->{paginate}{offset} = $offs;
+ $data->{paginate}{count} = $count;
+ @repo_themes = splice(@repo_themes, $offs, $count);
my $themes = [];
for my $repo_theme (@repo_themes) {
diff -x mt-config.cgi -ur MT-4.261-ja/plugins/StyleCatcher/tmpl/view.tmpl MT-4.261-ja.new/plugins/StyleCatcher/tmpl/view.tmpl
--- MT-4.261-ja/plugins/StyleCatcher/tmpl/view.tmpl 2009-06-16 14:26:14.000000000 +0900
+++ MT-4.261-ja.new/plugins/StyleCatcher/tmpl/view.tmpl 2009-09-10 02:04:15.000000000 +0900
@@ -393,6 +393,9 @@
}
if (data.result.themes)
loadThemes(data.result.themes, cat);
+ var paginate = data.result.paginate;
+ if (paginate.offset + paginate.count < paginate.total)
+ getStyles(repo_id, data.result.repo['url'], paginate.offset + paginate.count, paginate.count);
}
function createCategory(cat_name, cat_title, url) {
@@ -484,7 +487,7 @@
}
}
- function getStyles(repo_id, url) {
+ function getStyles(repo_id, url, offs, count) {
var btn = getByID("find-button");
TC.addClassName(btn, "hidden");
TC.removeClassName(TC.elementOrId("loading-styles"), "hidden");
@@ -496,6 +499,8 @@
'arguments': {
'__mode': 'stylecatcher_js',
'magic_token': '',
+ 'offs': offs ? offs : 0,
+ 'count': count ? count : 9,
'url': url
}
});
取得中状態の見せ方をもう少しかっこ良くすることもできると思うけど、とりあえずこんなかんじ。流れは以下のようになっちょります。まじで素朴にpaginate。
- ブラウザからサーバへの取得リクエスト時に、「今回のオフセット」と「個数」を追加して送信
- サーバ(CGI)は指定されたオフセットと個数分のみを切り出してブラウザに対して応答
- このとき、応答に「今回のオフセット」と「個数」、さらに「全体の個数」を付加
- サーバの応答を受け取り、ブラウザは表示処理を行う
- 「今回のオフセット」+「個数」=「次回のオフセット」として計算
- 「次回のオフセット」が「全体の個数」を下回れば、「次回のオフセット」と「個数」を用いて次の取得リクエストを送信し、同じ内容を繰り返す。
- 「次回のオフセット」が「全体の個数」を上回るか等しければ、繰り返しを終了。