/etc/sysconfig/static-routes

 先日から運用しているVPNで片方向の通信ができなくて悩んでいたのです。しかも、pingは飛ぶのにsshとかftpとかhttpが飛ばない...。しばらくRTX1100で構築しているVPNのNATの設定を疑っていたのですが、どう考えてもおかしくない状況。大体、ネットワーク系の数字が違うだけで両方向のRTX1100共に同じconfigだもんね。

 で、いろいろログを見てたわけですよ、sshしたときに/var/log/messagesに

Did not receive identification string from xxx.xxx.xxx.xxx
とか出ているのに気付いて、さらにftpしたときには
Oct 4 13:19:05 xxx proftpd[xxxxx]: xxx (xxx.xxx.xxx.xxx[xxx.xxx.xxx.xxx]) - FTP session opened.
Oct 4 13:19:05 xxx proftpd[xxxxx]: xxx (xxx.xxx.xxx.xxx[xxx.xxx.xxx.xxx]) - FTP session closed.
こんな感じでソッコーコネクションが切れてる。と、考えるとやはり行きのパケットは届いてるけど、戻りのパケットが届いていないと判断。元と先のマシンのiptablesをチェックするものの、問題点は無い様子。ためしにiptablesをstopしてチェックしてみるものの、状況は変わらず。

 やれることはやって途方にくれていたわけですが、ふとパケットの飛び先のstatic routeが設定していないことに気付く。飛び先のdefault gatewayにはstatic reouteが記述してあったんだけど、飛び先のマシン自体にはstatic routeが設定されていなくて、どうやらその結果戻りパケットが迷子になっていると推測。ためしにVPN元のネットワークをroute add netしてみたら、無事接続ができるように。やー、実はこれは一ヶ月近く悩んでいたことだったのですげー、爽快。

 で、このままじゃマシンをリブートしたときにまたrouteがわからなくなるのでstatic routeを設定しておこうと/etc/sysconfig/network-scripts/static-routesにstatic routeの記述を書き込むが無反応。ネットで調べるも全然原因がわからないのでしょうがなく、static routeのブートスクリプトであろう/etc/sysconfig/network-scripts/ifup-routesを見てみると

#!/bin/sh

# adds static routes which go through device $1

if [ "$1" = "" ]; then
echo "usage: $0 "
exit 1
fi

if [ ! -f /etc/sysconfig/static-routes ]; then
exit 0
fi

#note the trailing space in the grep gets rid of aliases
grep "^$1 " /etc/sysconfig/static-routes | while read device args; do
/sbin/route add -$args $device
done
grep "^any " /etc/sysconfig/static-routes | while read ignore type net netmask m
ask bogus dev ; do
if [ "$dev" = "$device" ]; then
/sbin/route add -$type $net $netmask $mask $dev
fi
done

おいおい、パスが違ってるじゃんかー。というわけで、正規の場所/etc/sysconfig/static-routesに記述して完了、のはずだったんだけどなんかフォーマットが違うみたい。昔のstatic-routesファイルのフォーマットじゃダメ見たいで、いろいろいじって最終的にこんなフォーマットで無事起動しましたぜ、ダンナ。
any net xxx.xxx.xxx.xxx/xx gw xxx.xxx.xxx.xxx dev eth0
 ふー、長い戦いだった...。