組み込み Linux 3G pppd ダイヤルアップ インターネットの問題

私は、イーサネット ポート、USB WiFi モジュール、および 3G モジュールを備えた組み込み ARM9 開発ボードを引き継ぎました。つまり、3 つの方法すべてでインターネットにアクセスできます。一般的に使用される方法は、イーサネットと 3G の 2 つで、イーサネット インターネット アクセス方法はさらに多くの方法があります。安定していますが、3G ダイヤルアップ方式は 1 日中も成功しないことがあります。いくつかのブログを読み、その経験に基づいて次の方法を提案しました。

1. eth0を閉じる

ifconfig eth0 down

2. ダイヤルする前にデフォルトルートを削除します。

route del default

3. デフォルト ルートを削除し、ppp0 をデフォルト ルートとして設定します。

route del default
route add default dev ppp0

上記の方法はテストおよび検証されています。最も信頼できる方法は最初の方法ですが、最良の公式は、無限ループの定期チェックをスクリプトに記述することです。インターネットにアクセスできないことが検出されたら、まず pppd をシャットダウンします。プロセスを実行してから 3G モジュールを再起動し、最後に pppd プロセスを再度開始します。

以下は参考スキームです

while true
do
    # whatever eth or wlan or ppp 
    ping -s 1 -c 1 $server > /dev/null
	if [ "$?" != "0" ]
	then
	  #echo "OFF TIME is `date +%Y-%m-%d,%H:%M:%S`" >> /path/offinfo
	  killall pppd
      # function for restart 3g module
	  restart_3gmodule
      sleep 15s
      # function for start pppd,shut eth0 down here
	  pppd_call
	fi
	sleep 300s
done  

現在のトラッキング現象によると、原因は依然としてルーティング (カーネル バージョン linux-3.10.x、ppp2.4.7) にある可能性があります。明確な兄弟がいる場合は、コメント エリアでお知らせください。非常に感謝します。 !

次のように、デフォルト ルートを削除するいくつかの操作を含む、動的ネットワーク自動切り替え用のスクリプト ソリューションを提供します。

#!/bin/sh

#check the wired and wireless network reachable
wired=eth0
#wired=wlan0
wireless=ppp0
needRetryTimes=10
needRestartUdhcpc=0
flag=0

while true; do
Gateway=`route|grep 'default'|grep $wired|awk '{print $2}'`
if [ "$Gateway" != "*" ] && [ -n "$Gateway" ]; then
	ping -s1 -w1 $Gateway > /dev/null
else
	sleep 2s
	continue
fi

if [ "$?" != "0" ]; then
	let flag++
	
	if [ $flag -lt $needRetryTimes ]; then
		echo "we will retry once.." > /dev/null
		continue
	fi
	flag=0

	#if wired if default,delete it
	if [ -n "`route|grep 'default'|grep $wired`" ];then
		echo "route del default $wired" > /dev/null
		route del default $wired
	fi
	
	if [ $needRestartUdhcpc -eq 1 ]; then
		echo "$wired not reachable,so only restart udhcpc once" > /dev/null
		kill -9 `ps|grep 'udhcpc'|grep -v grep|awk '{print $1}'`
		sleep 1s
		/sbin/udhcpc -i $wired -F ZigbeeLinuxGateway -b > /dev/null &
		sleep 2s
		needRestartUdhcpc=0
	fi
	
	#if wireless is not default,add it
	if [ -z "`route|grep 'default'|grep $wireless`" ];then
		echo "route add default $wireless" > /dev/null
		route add default $wireless
	fi
	
	echo "wait 2s and retry" > /dev/null
	sleep 2s
else
	sleep 2s
	needRestartUdhcpc=1
fi
done

いくつかの参考記事を添付します。

pppのLinux移植とppp0_tietaoのルーティング設定 - CSDN blog_linux ppp0

Linux pppd-GPRS とイーサネットが同時にオンラインになり、ダイヤルアップのデフォルト ゲートウェイを解決する_chenliang0224 のコラム - CSDN ブログ

おすすめ

転載: blog.csdn.net/DIANZI520SUA/article/details/121426207