2013.01.22
ST

ネットワーク・メトリックについて

多くの方はWindowsのネットワークの設定で、
ローカルエリア接続等のプロパティにあるTCP/IP 詳細設定ダイアログ内の
メトリックは「自動メトリック」にチェックを入れて自動で使っているかと思います。

これが自動になっていてもインターネット接続などには問題がないのが普通です。
これを利用することで、デフォルトルートの優先順位を自分で決めることができる
というのは常識なのですが、通常は自動で問題なく接続できますので何も弄らなく
て良いということです。

Q1.ではなぜこれを手動にするの?
A1.複数の接続ができるパソコンで、優先的に接続させたいネットワークがある
   場合があるからです。

Q2.ほかにはなにかメリットないのですか?
A2.通常はこんなネットワークを自宅で展開している人は少ないと思うのですが
   PPPoE 接続の為のルータ、Linux自身でPPPoEを行う2セッションを結んでいます
   そして、Linux自身のPPPoEがもしも途切れた場合はルータ経由で外に出るという
   方法も取ってます。これにメトリックを使って優先順位を付けるわけです

  
ノートパソコンの場合、無線・有線の両方が内蔵されているケースが多いと思います

この場合自動になっていると、有線のほうがメトリックの数値は小さいものが設定さ
れ、有線LANの方からデフォルトルートを通ってインターネットにパケットが飛ぶ
ようになってます。
さてここでメトリックを手動にして、無線LANのメトリックを小さくして、有線LAN
のメトリックを大きく設定してみましょう。

 有線LAN 60
 無線LAN 50

そうしてパソコンを再起動してみましょう。
この後で コマンドプロンプトを実行し

ipconfig でIPアドレスの割り当てを確認します

ipconfig

イーサネット アダプター ローカル エリア接続:

接続固有の DNS サフィックス . . . :
IPv4 アドレス . . . . . . . . . . : 192.168.1.10
サブネット マスク . . . . . . . . : 255.255.255.0
デフォルト ゲートウェイ . . . . . : 192.168.1.1

Wireless LAN adapter ワイヤレス ネットワーク接続:

接続固有の DNS サフィックス . . . :
IPv4 アドレス . . . . . . . . . . : 192.168.1.12
サブネット マスク . . . . . . . . : 255.255.255.0
デフォルト ゲートウェイ . . . . . : 192.168.1.1

この後
route print -4
を打ってみてください(IPv4 だけのルーティング表示)
途中のIPv4 ルート テーブル の最初の2行を見ると

IPv4 ルート テーブル
===================================================================
アクティブ ルート:
ネットワーク宛先 ネットマスク ゲートウェイ インターフェイス メトリック
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.10 120
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.12 100

となっていて メトリックの数値が設定した値のちょうど2倍になっていることが
わかります。

上記の設定では 無線LANを優先して接続するようにしましたので、この状態で
同じLAN内にあるLinuxサーバなどにsshでログインし、last コマンドを実行する

ユーザ名 pts/2 192.168.1.12 日付 still logged in
のように無線LANから接続されていることがわかります。

 無線LANを優先しているので基本無線LANで接続
 無線LAN経由で接続できない場合有線LANで接続

となるわけですが、この無線LAN経由で接続できないというのでも、無線LANの
リンクがなくなった場合という条件が付きます。
(リンクアップされたままでは切り替わらない)

ここでもう一つのケースA2の方の環境

ONU——-スイッチングハブ

|————— ルータ(WAN口)
|————— Linux (ETH1)
という構成にしており
ルータのLAN口には PPPoEセッションは流れない設定にしてます
(もちろんPPPoEパススルーにしての接続方法もあります)

LAN側
    スイッチングハブ

|————— ルータ IP 192.168.1.1
|————— Linux IP 192.168.1.101

といった形で構成していて、ルータの PPPoE でもLinuxのPPPoEでもインターネットへ
接続できる環境にしています。

Linuxでルーティングを見るとデフォルトルートは ppp0 になっているだけです。

受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
121.102.24.194 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0

そこで、先ほどからのメトリックを使ってデフォルトルートを追加します。
route add default gw 192.168.1.1 metric 100

ルーティングを見ると

受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
121.102.24.194 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0

と追加されていることがわかります。

ここで PPPoE を切っても(私のシステムでは ifdown eth1 の実行で切断)
ping 8.8.8.8 でping が帰ってきます。

ルーティングを見ると

受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0

といった具合に PPPoE がなくなっても インターネットには出ていけます
ただ このまま PPPoE を復活(ifup eth1) をしても、すでに DefautGW が設定されて
いる為、PPPoE 経由でインターネットへ出ていきません。
今のところこういった事情があるため、ここは手動で濁しています。
route add default dev ppp0

上記の方法は内部環境からインターネットへという方法ですが、内部環境がサーバとして
動いていて、インターネット上から接続してきた場合は、LinuxでPPPoEを行っている方に
しか応答を返せません。ルータの方から来たパケットに対しても応答するようにしたい場
合は「マルチホーミング」を使う必要が出てきます。こちらはまた別な機会に書いてみます。

ST

一覧に戻る