質問: gateway if [ $# -ne 4 ] then echo "illegal number of arguments" exit 2 fi # assign variables iface=$1 ip=$2 mask=$3 gateway=$4 # extract inface number and calculate table number case $iface in eth*) tableid=$(( 10 + `echo $iface | grep -o -e '[0-9]+'`)) metric=0 ;; wlan*) tableid=$(( 30 + `echo $iface | grep -o -e '[0-9]+'`)) metric=$(( 50 + `echo $iface | grep -o -e '[0-9]+'`)) ;; ppp*) tableid=$(( 90 + `echo $iface | grep -o -e '[0-9]+'`)) metric=$(( 100 + `echo $iface | grep -o -e '[0-9]+'`)) ;; *) echo "bad interface exiting" exit 1 ;; esac # create new table for interface only if not existing there already grep -q -f "$tableid $iface" /etc/iproute2/rt_tables || echo "$tableid $iface" >> /etc/iproute2/rt_tables # remove previous rules while ip rule delete table $iface 2>/dev/null; do true; done # flush previous table ip route flush table $iface # calculate cidr from cidr=$(calculatecidr $mask) # calculate subnet address subnet=$(calculatesubnet $ip $mask) # create route for local network ip route add $subnet/$cidr dev $iface src $ip metric $metric table $iface # create route for internet ip route add default via $gateway dev $iface metric $metric table $iface # set rules for the interface ip rule add from $ip/32 table $iface ip rule add to $ip/32 table $iface # done exit 0 この同じスクリプトは、ネットワークセットアップで提供されるすべてのインターフェイスに使用されます。wlan0はインターネットへのルートを取得しません。つまり、ローカルネットワークの外部へのpingには使用できません。誰もがなぜ知っていますか?アイデアが足りません。
回答: まず、常に ip(8) コマンドを代わりに使用します。 routeは 非推奨にする方法 上のlinuxコマンドの1つです。基本的に、linuxルートは他のosから移植されたものであり、linuxルーティングテーブルスキームでは機能しません(メインテーブルのみが表示されます)。mainルートテーブルは常に暗黙的です。 mainを介してルーティングする必要があるものと一致する前に、テーブルlocalもカーネルによって検索されます(基本的にすべてのブロードキャスト、ローカルアドレス、ループバックがそこにあります)。これが、各インターフェースにデフォルトルートを設定できない理由です。テーブルmainでルーティングすると、デフォルトの1つだけが他よりも優先されます。 ip rule listを使用して、どのテーブルを持っているかを調べます。基本的な冗長性を構成するために必要なことは次のとおりです。 2つのルール(たとえば、link01および `link02)とそのルーティングテーブルを作成します。 mainテーブルのデフォルトルートを空のままにします。 テーブルlink01へのデフォルトルートとlink02へのデフォルトルートの1つを作成します。 それらのテーブルにルールを作成するか、各テーブルを照合するときにiptablesルールを作成します wifiおよびケーブル接続への個別のネットワークip範囲を作成します。 現在の設定で問題に直面しています:同じゲートウェイで同じテーブル(main)のデフォルトルートを別のインターフェースに繰り返しています(おそらく、「ルートはすでに存在しています」というエラーに直面しています。デフォルトルートは2回目)。これは決して起こらないでしょう。 arpは、2つのインターフェイスで同時に公開されている同じipをどのように処理することになっていますか?代替ソリューション:上記の項目を変更せずにアクティブバックアップソリューションのような冗長性が必要な場合、 モード1で構成された結合インターフェース を使用して、eth0およびwlan0をスレーブとして配置できます。これは/etc/network/interfacesの- debianの例 なので、ディストリビューションに合わせる必要があります。# slaves auto eth0 iface eth0 inet manual bond-master bond0 bond-primary eth0 bond-mode active-backup auto wlan0 iface wlan0 inet manual wpa-conf /etc/network/wpa.conf bond-master bond0 bond-primary eth0 bond-mode active-backup # master auto bond0 iface bond0 inet dhcp bond-slaves none bond-primary eth0 bond-mode active-backup bond-miimon 100 このようにして、ケーブルとwifiで接続し、両方に「統一された」ipアドレスを設定します。lacp(ieee 802.3ad)を実行できるミッドエンド/ハイエンドのネットワークスイッチがある場合、両方のケーブル/接続を同時に使用するリンク集約を実行できます(linuxのbondモードは4)である。