FreeBSD10.3 pppoe: IPV6CP protocol reject closes IPV6CP

FreeBSD 9.3 サーバーをリモートから 10.3 へアップグレードする作業を行いました。

背景は、BIND9.10 を更新するため。FreeBSD 9.3 上で最新 bind910 を make install しようとすると、エラーで更新できませんでしたので、OS 自体を更新することにしました。FreeBSD10.3 では bind910 を更新できることは確認済み。

freebsd-update コマンドで手順通り進めて、最後に cron でバッチを実行したところ、いつまで待ってもネットワークが復活しない!が〜〜〜ん。
やむを得ないので翌日設置場所に出かけてみましたが、予想外の状況が発生していました。

  • OS は問題なく更新されていた。
  • 設置場所は集合住宅で、canvas.ne.jp の集合住宅向けLANが来ており、利用者はDHCPでダイナミックなプライベートアドレスと、2枚目のNICを入れオプションのPPPoE グローバルIPサービスので固定アドレスを得ることが出来ます。結果的に、このFreeBSDサーバーはプライベートアドレスと固定グローバルアドレスを持つことになり、デフォルトルーターは、PPPoEで固定IP側のゲートウェイが自動的に指定されるはずなのですが、なぜかプライベートアドレス側のルーターがデフォルトルーターとなっており、グローバルインターネットからアクセス不能になっていました。
  • 数ヶ月ぶりにサーバーを再起動したため、FreeBSD10.3 へ更新したために問題が発生しているのか、canvas の仕様が変更になったのかが不明。
  • プライベート側のLANを停止すると、自動的にグローバル側のルーターがデフォルトルーターになるが、PPPoEサーバーがネームサーバとしてプライベートアドレス側ネームサーバのアドレスを resolve.conf に書き込むため、プライベートアドレス側のLANを切断すると、逆引きが出来なくなってしまう。
  • 手動で default router を削除し、PPPoE側のルータをデフォルトルーターとして登録すれば、今まで通り正常に動作する。
  • しかし、自動起動させると、またプライベート側ゲートウェイがデフォルトルーターとなってしまうので通信不能になってしまう。

とりあえず、/etc/rc.local の中に、

#
sleep 10
route delete default
/etc/rc.d/ppp stop
sleep 10
/etc/rc.d/ppp start

と書いておくことで、リブート時に強制的にプライベート側のルーターを削除し、PPPoE側のゲートウェイを使うようにしておきました。

/var/log/ppp.log を見てみると、抜粋ですが次のようなラインがたくさん残っていました。

Jan 20 17:10:31 higashi ppp[568]: tun0: Warning: Add! route failed: 0.0.0.0: errno: Value too large to be stored in data type
Jan 20 17:10:31 higashi ppp[568]: tun0: Phase: deflink: IPV6CP protocol reject closes IPV6CP !
Jan 20 17:11:33 higashi ppp[568]: tun0: Phase: Signal 15, terminate.
Jan 20 17:10:31 higashi ppp[568]: tun0: Warning: Add! route failed: 0.0.0.0: errno: Value too large to be stored in data type
Jan 20 17:10:31 higashi ppp[568]: tun0: Phase: deflink: IPV6CP protocol reject closes IPV6CP !
Jan 20 17:11:33 higashi ppp[568]: tun0: Phase: bundle: Dead
Jan 20 17:11:33 higashi ppp[568]: tun0: Phase: PPP Terminated (normal).
Jan 20 17:11:47 higashi ppp[1216]: Phase: Using interface: tun0
Jan 20 17:11:47 higashi ppp[1216]: Phase: deflink: Created in closed state
Jan 20 17:11:47 higashi ppp[1216]: Warning: Add! route failed: ff02::: errno: Value too large to be stored in data type

どうも、IPv6 のアドレスを掴もうとして失敗しているように見えます。Canvas が仕様を替えた?それとも、FreeBSD10.x で ppp の仕様が変わった?

とりあえず、/etc/rc.local に上のコマンドを書き込むことで引き上げてきましたが、自宅に帰って引き続き調査を行っているところです。

そうしたところ、ppp の man の中に次の記述を見つけました。

ひょっとして原因はこれ?

         ipv6cp
             Default: Enabled.  This option allows ppp to attempt to negotiate
             IPv6 control protocol capabilities and if successful to exchange
             IPv6 datagrams with the peer.

すでに設置場所を離れていて、さすがにこのコマンドをリモートから試す気にはなりませんので、次回設置場所に出かけた時に、/etc/ppp/ppp.conf に

disable ipv6cp

(でいいのかな?)と書き込んで試してみようと思っているところです。

ipv6cp に関しては、FreeBSD 10.3, 9.3 のオンラインマニュアルとも同じ記述でした。

コメントを残す