野良ビルドしているとこ(このサイトとか)はさっさと更新。portsなところはports待ちで。
これでhttpd中に記録されているopensslのバージョンもy更新される。
まずportsで作れなかった。なんだかautomakeでコケる。これが不幸の始まりだった。
以下の指定でビルド
#!/bin/sh ./configure --prefix=/local --localstatedir=/var/run/quagga \ --enable-user=quagga --enable-group=quagga \ --enable-pam make
実行時のユーザ権限がquaggaになるせいで、設定ファイルとpidファイルの所有者をquaggaに変更するのはすぐに分かったが、 プロセス間通信に使うUNIXドメインソケットの生成に失敗しててかなり悩んだ。 UNIXドメインソケットは configure の --localstatedir で指定したディレクトリの下に zserv.api という名前で出来る。 が、pidファイルと違ってあらかじめ作っておくというわけにはいかないので、 結局ディレクトリそのものをquagga権限から読み書きできるようにした。
最終的な zebra 起動用 run スクリプトは以下の通り。
#!/bin/sh
localstatedir=/var/run/quagga
mkdir $localstatedir
chown quagga $localstatedir
chmod 700 $localstatedir
exec 2>&1
exec softlimit -c 0 \
envdir ./env \
/local/sbin/zebra -k -f zebra.conf
前提:FreeBSDとRTX1000間でFlets.Netを使ってトンネルを掘っている環境。
FreeBSD側では、gifインターフェースのdestination側アドレスが、 OSPFのどのネットワークに属しているか教えてやるとOSPFが有効になる。 RTX1000はipipトンネルの端点に直接IPを振れないようで、lan1アドレスがそのまま利用されていた。
FreeBSD:/etc/rc.conf
ifconfig_gif1="inet 192.168.255.255 netmask 0xffffffff [RTX1000のlan1アドレス]"
FreeBSD:ospfd.conf
interface gif1 ip ospf network point-to-point router ospf network [RTX1000のlan1アドレス]/32
RTX1000側はほぼYAMAHAのドキュメント通りで、 追加した設定はこんだけ。
ip lan1 ospf area backbone tunnel select 1 ip tunnel ospf area backbone ospf use on ospf area backbone ospf configure refresh
設定完了後OSPFのパケットが流れてるかどうかは tcpdump -i gif1 host 224.0.0.5 で確認した。
Flets.Netなトンネル上を利用しているので、 Flets.Net自体のIPv6ルーティングを上書きされると大変なことになる 。
ripng.conf
router ripng network gif1 distribute-list prefix local-only in gif1 ipv6 prefix-list local-only deny 2001:c90::/32 le 64 ipv6 prefix-list local-only permit 2001:218:45e::/48 le 64 ipv6 prefix-list local-only deny any
ipv6 prefix-listの後ろにあるle 64は、「/64以下のプレフィックス長にマッチしろ」という意味。
IPv6ネットワークだったら大概 le 64 をつけることになるだろう。
そうじゃないと正確に /32 や /48 に一致するルーティングがやってきた場合にしかマッチしない。
「ipv6 prefix-listにおける any は ::0/0 le 128 と同じ」いう説明を見付けるまで何のことやら分からんかった。