CentOS6で
カーネルモードでプロバイダーへPPPoE接続します。
「ifdown ppp0」「/etc/init.d/network restart」「マシンの再起動」をやると、OS上ではppp0が落ちますが
プロバイダーとのセッションは切れずに持ちきってしまう症状があり、困っておりました。
(CentOS5では問題無く切断されます。)
多分ですがpppdが切断するためのパケット[TermReq]を送信してないのが原因では無いかと
そのうち修正されるかと、ずっと待っていたのですが
6.5になっても直っておらず
何とかならないかと調査して、その対応策が見つかりました。
/bin/kill -TERM `cat /var/run/ppp0.pid`
/bin/kill -TERM `ps -ef | grep 'ifcfg-ppp0' | grep -v 'grep' | awk '{print $2}'`
1行名のコマンドでppp0のpppdを終了させ
2行目のコマンドでifcfg-ppp0を読み込んで立ち上がっているpppoe-connectを終了させます。
これで切断されるでしょう。
pppdにkillコマンドでシグナル送ると[TermReq]パケット送るみたいです。
pppを切断するコマンドは何通りかあると思います。
「ifdown ppp0」「/etc/init.d/network stop」「pppoe-stop」
どのやり方も、最終的にはpppoe-stopが切断しているようなので
pppoe-stopを書き換えちゃいます。
pppoe-stopはシェルスクリプトなので
バックアップを取っておき下記のように書き換えちゃいます。
#!/bin/bash
export PATH=/sbin:/bin:/usr/sbin:/usr/bin
LANG=C
export LANG/bin/kill -TERM `cat /var/run/ppp0.pid`
/bin/kill -TERM `ps -ef | grep 'ifcfg-ppp0' | grep -v 'grep' | awk '{print $2}'`exit 0
これで大丈夫だと思うんですが
環境の違いもあるかと思うので、上手くいくとは限りません。