Ubuntuでネットワーク接続の優先度を設定するにはどうすればよいですか?


41

Ubuntu 11.04マシンがWiFiと3Gに同時に接続されている場合、アプリケーション(ブラウザーなど)が最初にWiFiを使用できるように優先順位を設定するにはどうすればよいですか?利用できない場合は、3Gを使用する必要があります。

基本的に、ネットワーク接続が使用される順序を設定したいと思います。

編集:私は、Ubuntu / Linuxの専門家ではなく、ただ快適な人に役立つ、より簡単なアプローチを探しています。

回答:


27

これを行うための最も簡単なコマンドについて誰も言及していないことに驚いていますifmetric。を使用してインストールできますsudo apt-get install ifmetric。このコマンドを使用して、任意のインターフェイスのメトリックを変更できます。低いメトリックインターフェイスは、インターネットに適しています。

これを使用するには、まずrouteコマンドを使用してメトリックを確認します。

$ route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.42.0.1       0.0.0.0         UG    100    0        0 eth0
0.0.0.0         10.42.0.2       0.0.0.0         UG    600    0        0 wlan0

ここでeth0は、メトリックが低いため、に優先されwlan0ます。を希望する場合はwlan0、メトリックを下げます。

sudo ifmetric wlan0 50

これで、ルーティングテーブルは次のようになります。

$ route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.42.0.2       0.0.0.0         UG    50     0        0 wlan0
0.0.0.0         10.42.0.1       0.0.0.0         UG    100    0        0 eth0

これで、Linuxがwlan0インターネットに使用されます。変更はすぐに反映されます。


1
素晴らしい答え。Thx(ルート-nにも)。私は、メトリックを変更するには、コマンドのためのifmetricをインストールした後、再起動しなければならなかった
トルステンNiehues

この変更を恒久的にする方法(誤ってiPhoneのホットスポットを使用したくない)
トーステンニーフ

2
@ThorstenNiehues:それを永続化するために私の頭に浮かぶ簡単な解決策は、crontabにifmetricコマンドをcrontab -e追加し、最後に行を追加すること@reboot sudo ifmetric wlan0 50です:。
シヴァム

できます。しかし、この後(ブラウザなどを介して)ローカルマシンにアクセスできません。何か案が?ありがとう。
tomasb

@tomasb:興味深い疑問。ただし、インターフェイス設定を変更すると、優先インターフェイスのローカルネットワークに移動するため、これは予想されます。ローカルマシンにアクセスする簡単な方法の1つは、仮想マシンを使用してローカルマシンにアクセスすることです。ただし、より良いソリューションが存在する必要があります。考えて返信させてください。
シヴァム

14

メトリックの設定は、優先順位を変更する方法です。メトリックが高いほど、使用するのに「高価」になるため、OSは、トラフィックをルーティングする必要がある場合、メトリックが最小のインターフェイスを使用します。低いメトリックインターフェイスがシャットダウンされた場合、特定のネットワーク/宛先にトラフィックをルーティングするために使用できる唯一のインターフェイスであるため、高いメトリックインターフェイスを使用します。

メトリックは、ファイル/ etc / network / interfacesで指定されており、ドキュメントへのリンクポイントです。

テキストエディタを使用して、ファイルを編集し、ネットワークを特定し、metricパラメータを変更して保存します。再起動は、ネットワークサービスを再起動するオタクの詳細に入らずにすべての値をリセットする最も簡単な方法です。


2
ハリー-応答してくれてありがとう-eth1に興味のあるネットワークは「ifconfig」に表示されますが、「/ etc / network / interfaces」には表示されません。「ifconfig」には何が表示され、「/ etc / network / interfaces」には何が表示されますか?
Praveen Sripati

1
eth0を「/ etc / network / interfaces」に追加することはより危険です。rootとしてifconfigを試して、インターフェースのメトリックを変更できます(ブート後もそこに残っていることを確認してください)。
harrymc

「sudo ifconfig eth1 metric 4」を実行すると、「SIOCSIFMETRIC:Operation not supported」というエラーが表示されました。goo.gl/UhXBJは、「さらに、すべてのシステムがメトリック引数を使用するわけではありません。..... Linuxシステムを設定しているときに、インターフェイスごとに明示的なrouteコマンドを追加し、「ルックス初心者ユーザーのためのUIから同様のUbuntuには簡単な方法がありませんように。。
PraveenさんSripati

2
Linuxは、すべてのアダプターで高速テストを行った後、最速のアダプターを決定するようです。メトリックは、多くのディストリビューションでサポートされなくなりました。あなたはまだ「/ etc / network / interfaces」を介して物事を試して口述することができますが、私はあなたがどれほど成功するかわかりません。この質問も参照してください。
ハリーマック

3
誰もが行う最も簡単な解決策は、使用したくないインターフェイスをオフにするか、「ネットワーク上のリソースにのみこの接続を使用する」ように制限することです(プリンターまたはその他のものがある場合)同じルーター)。
harrymc

7
  1. 一般的なトラフィックのインターフェイスの優先順位付けは、ルーティングメトリックを操作することによって行われます。各ルートには、ホップカウントや帯域幅などのパラメーターが関連付けられています。routeコマンドについては、マンページの「メトリック」オプションを参照してください。

    $ route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref     Use Iface
    0.0.0.0         192.168.1.254   255.255.255.255 U     0      0        0 eth0
    192.168.1.0     0.0.0.0         255.255.255.0   U     256    0        0 eth0
    
  2. ネットワークリソースへのアプリケーションアクセスの優先順位付けは、多くの場合「トラフィックシェーピング」によって対処されます。Ubuntuまたはルーターがそれを実行できるかどうかを確認するために、Web検索エンジンを使用します。


脚注。

LinuxではなくMS Windowsで、netstat -nrコマンドはと同じ情報を出力しroute printます。ルーティングメトリックを含みます。


ルートの「Metric Theターゲットまでの距離(通常はホップでカウントされます)。最近のカーネルでは使用されませんが、ルーティングデーモンで必要になる場合があります。」通常のUbuntuデスクトップでMetricパラメーターが効果を発揮するかどうかはわかりません。
Praveen Sripati

1
これを行うための特定のルートコマンドを教えていただけますか?
プラヴィーン・スリパティ

11
@PraveenSripati-そのような答えに対してあなたが苦労して得た100の回答を与えたとは思わない-技術的には正しいが、あなたや私を助けてはくれない。:-(私は同様に、特定のコマンドを探しています。
主楼を。

1
本当に何の答え?また、netstat -nrはメトリックを表示しません。@shivamsから回答を見る
Thorsten Niehues

3

私は実際に試してはいませんが、NCD(Network Configuration Daemon-1)をこの目的に使用できます。このサイトは、ネットワーク構成を簡単にすると主張しています。構文は単純なようです。

#ネットワーク接続を待ちます。eth0の前にeth1を配置して、eth1を優先します。
list( "NET-eth1"、 "NET-eth0")pnames;

(1)-http://code.google.com/p/badvpn/wiki/NCD


そうです、私のNCDソフトウェアはこれをうまくやってくれます。そこにある例はそのまま動作します。ただし、pnamesリストは実際multidepend()には次の行のステートメントに対する単なる引数であることに注意する必要があります。これは優先順位を実装するものです。これの背後にあるメカニズムは、すでに起動eth1しているときに起動するeth0と、実行されmultiprovide("NET-eth1");、のNET-eth1前にあるためNET-eth0multidepend()ダウンしてすぐに起動しますが、のeth1代わりにプロセスから変数を公開しますeth0
アンブロズビズジャク

私はそれを見ましたが、理解できませんでした。これは難しいことではありません。
–SDsolar

3

これはすべて、ルートメトリックが原因です。最も低いメトリックのデフォルトルートを削除してから、より高いメトリックの古いルートを復元します。以下のコマンドに従ってください。

ルーティングテーブルが次のようになっているとしましょう。

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.16.87.254    0.0.0.0         UG    100    0        0 ens38
0.0.0.0         192.168.151.2   0.0.0.0         UG    101    0        0 ens33
10.16.86.64     0.0.0.0         255.255.255.248 U     100    0        0 ens38
10.16.87.254    0.0.0.0         255.255.255.255 UH    100    0        0 ens38
10.16.88.6      10.16.87.254    255.255.255.255 UGH   100    0        0 ens38
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens38
192.168.151.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

次に、デフォルトゲートウェイを削除します

# route delete default gateway

次に、古いデフォルトゲートウェイを復元します(この場合のメトリックは、現在のデフォルトルート101より高い102であることに注意してください)

# route add default gw 10.16.87.254 metric 102 dev ens38                                                              
# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.151.2   0.0.0.0         UG    101    0        0 ens33
0.0.0.0         10.16.87.254    0.0.0.0         UG    102    0        0 ens38
10.16.86.64     0.0.0.0         255.255.255.248 U     100    0        0 ens38
10.16.87.254    0.0.0.0         255.255.255.255 UH    100    0        0 ens38
10.16.88.6      10.16.87.254    255.255.255.255 UGH   100    0        0 ens38
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens38
192.168.151.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

これは動作します。他の初心者のために注意してください(私はこれを数回読んで何が起こっているのかを追わなければなりませんでした):上記のステップ1はGateway= のエントリを削除します10.16.87.254。これはUG最低Metricであり、ステップ2 Metricはが利用192.168.151.2できない場合に備えて、バックアップとして引き続き利用できます。
WillC

0

[更新] Ubuntu 18.04 LTS(サーバー)現在、netplanネットワーク管理のデフォルトラッパーです。Netplanの設定は、デフォルトでYAMLファイルを介して行われます/etc/netplan/01-netcfg.yaml(詳細はこちら)。

ルーティングメトリックはmetric、正整数(100通常はデフォルト値)を想定する「」オプションによって定義されます。ここだリファレンスページからは:

network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      addresses:
      - 10.0.0.10/24
      - 11.0.0.11/24
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
      routes:
      - to: 0.0.0.0/0
        via: 10.0.0.1
        metric: 100
      - to: 0.0.0.0/0
        via: 11.0.0.1
        metric: 100

最小のmetric(パス長)のルートが「優先」ゲートウェイになります。(使用:sudo netplan try変更を有効にするため)

ローミング環境(複数の接続、オンおよびオフ)では、optional(boolean)パラメーターをtrue(デフォルトはfalse)に設定する必要がある場合があることに注意してください。

network:
  version: 2
  ethernets:
    enred:
      dhcp4: yes
      dhcp4-overrides:
        route-metric: 100
    engreen:
      dhcp4: yes
      dhcp4-overrides:
        route-metric: 200
      # this is plugged into a test network that is often
      # down - don't wait for it to come up during boot.
      optional: true

DHCP接続の場合、ルートメトリックのわずかに異なる構文に注意してください。

またNetworkManager、レンダラーとして使用することもできます(まだ自分でテストしていません)が、GUIツールを介して構成のその部分を表示/編集できると思います。

renderer (スカラー)

この定義に指定されたネットワークバックエンドを使用します。現在サポートされているのはnetworkdNetworkManagerです。このプロパティはnetworks:、デバイスタイプ(などethernets:)または特定のデバイス定義に対して、でグローバルに指定できます。デフォルトはnetworkdです。

(リファレンスページの最後の「大きな」例は、両方のレンダラーのハイブリッド使用を示しています)。

この質問(askubuntu)も参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.