CentOS6でLinuxルーター Kernel mode(カーネルモード) のPPPoE接続で切断してくれない不具合の対処

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

これで大丈夫だと思うんですが
環境の違いもあるかと思うので、上手くいくとは限りません。

コメントを残す