Linuxルーター PPPoE/複数グローバルIPアドレス/unnumbered接続

表題の環境で、Linuxルーターを作成する場合、pppXはIPアドレスを持たず、もう片方のNICグローバルIPアドレスを付与する形になりますが、これだけだと、ルーターとなっているホスト自身からWANへパケットを飛ばすことが出来ません。
(多分、pppXインターフェースがunnumberedであるため、ソースIPアドレスが適切に設定されていない状態になっているんじゃないかなぁ。)

これを回避したければ、pppXへifconfigで、もう片方のNICに付与されているIPアドレスと同じIPアドレスを付与してやればよいです。
ただし、それをすると、今度は、rp-pppoeが設定したデフォルトゲートウェーを再設定してやるが必要になります。

CentOSでは、"/etc/ppp/ip-up.local"として、それら設定を行うスクリプトを作成すればよいです。

#!/bin/sh

PPPDEV=$1
PPPREMOTE=$5

/sbin/ifconfig $PPPDEV XXX.XXX.XXX.XXX pointopoint $PPPREMOTE
/sbin/route add default gw $PPPREMOTE dev $PPPDEV

なお、PPP_EXTRAに設定するとの記述を見かけるかもしれないですが、これは、古いrp-pppoe(もしくはpppd)での話で、少なくともCentOS4に入っているrp-pppoe(もしくはpppd)以降は、PPP_EXTRAを設定すると、正常に接続できないので注意を。

また、CentOSの4系などに含まれるrp-pppoeはバージョンが古いため、表題のような環境の場合、Timeoutとなり、正常に接続が出来ない場合があります。

これは、"/usr/sbin/adsl-status"スクリプトの以下の部分をnetstatではなく、ifconfigを使うように書き換えることで回避できます。

            IF=`basename $i .pid`
            #netstat -rn | grep " ${IF}\$" > /dev/null
             /sbin/ifconfig $IF | grep "UP.*POINTOPOINT" > /dev/null
            if [ "$?" != "0" ] ; then
                echo "adsl-status: Link is attached to $IF, but $IF is down"

書き換える前のスクリプトは、netstatの行ではなく、ifconfigの行がコメントアウトされているのが、それを逆にしてやるだけでよいでしょう。

これは、少なくとも最近のrp-pppoeでは遭遇しない現象なので、多分バグです。
ですが、赤帽はrpmを治す気が無いので、4系を使っている限りは、自分でどうにかする必要がありますね。