Ubuntu Serverで静的ルートを設定する方法は?


51

Ubuntu 8.10以降、Ubuntuを使用しています。今日は、Ubuntu 12.04サーバーで作業しています。

起動時に静的ルートを維持するのが困難です。私は通常、ルートコマンドを入れます

/sbin/route add -net <IP>/<MASK> <GW> dev <ethX>

/etc/rc.localまたは私は(という名前のファイル作成しroutesたディレクトリ内の)を/etc/network/if-up/、私はUbuntuの12.04でそれが機能していないことに気づきます。

シェルでコマンドを入力した場合、それらは機能しますが、指定したファイルにある場合は同じコマンドは機能しません。

routesUbuntu 12.04ではファイル名()が間違っている可能性があると考えて、ファイル名を他の名前に変更しようとしましたが、それも機能しませんでした。

コマンドが/sbin/ifconfig機能することにも気付きました/sbin/route

ネットワークのセットアップで何が変わったのですか?

Ubuntu 12.04で静的ルートを定義するにはどうすればよいですか?


確認するだけ:rc.localは実行可能ファイルで、shebang行で始まりますか?たぶん、あなたのコマンドに問題があります。stderrをファイルにリダイレクト(your_command > stderr.txt 2>&1)して、その出力を調べることができます
セーラム

/etc/rc.localではなく、/ etc / network / interfacesにルートを設定する必要があります。そして、あなたが使用する必要があり、新たなコマンドがあるip addip route。ネットを支配する1つのコマンド。:)
アンデルス

間違いなく読むman 5 interfaces
デビッドトンホーファー

回答:


64

次の場所に静的ルートを配置できます/etc/network/interfaces

auto eth0
iface eth0 inet static
      address 192.168.1.2
      netmask 255.255.255.0
      up route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1
      up route add -net 172.16.0.0 netmask 255.240.0.0 gw 192.168.1.1

13
/ sbin / ipの構文:up ip route add 192.168.0.0/24 via 192.168.1.1
w00t 14年

1
答えの最後の2行を親切に説明してください、または知識源へのリンクを提供しますか?ありがとう!
itsols

-net 192.68.0.0をワイルドカードとして表示して、192.168。*。*宛てのすべてのパケットをデフォルトゲートウェイ192.168.1.1経由でルーティングするように指定できます。その後、カーネルはそのデフォルトゲートウェイの解決を試みますが、ARPエントリが既にある場合、そのネクストホップの宛先MACでゲートウェイが存在することを学習したインターフェイスにパケットを送信します。それが少し役立つことを願っています。
ニールマクギル

/etc/network/interfaces.d/もあり、ルートを置くのに適した場所です。
イライジャ・リン

これは機能しますが、ネットワークインターフェイスのマニュアルページには記載されていません。これは標準ですか?
BЈовић

18

静的ルートを定義する正しい場所は/ etc / network / interfacesであることが非常に頻繁に見つかりました。たとえば、/ etc / init.d / networking restartでネットワークをグローバルに再起動する場合は問題ありません。ただし、ifdownおよびifupを使用してインターフェイスを個別にシャットダウンする場合、ifupはエラーで終了します。

ifup eth1

RTNETLINK answers: File exists
Failed to bring up eth1.

そのため、ルートを定義しようとしますが、すでに定義されています。インターフェースはとにかく起動しますが、ifupは/ run / network / ifstateを更新しないため、次回ifdownを実行する場合は、-forceフラグを使用しない限り実行できません。

ルートがすでに定義されている場合でもifupが構成を続行するには、/ etc / network / interfacesでルートを定義するときにこの形式を使用できます

up ip route add 172.16.0.0/24 via 192.168.10.1 || true
up ip route add 192.168.0.0/16 via 192.168.10.1 || true

これにより、出力に警告が表示されますが、インターフェイスの設定は完了します

ifup eth1

RTNETLINK answers: File exists
RTNETLINK answers: File exists
ssh stop/waiting
ssh start/running, process 18553

1
構成に単に「down ip route del 192.168.0.0/16 via 192.168.10.1」を追加しないのはなぜですか?
w00t 14年

人々はifconfig、実行する代わりに手動で使用するなどのことを行うためifdown、正しいツールを使用して回復できるようにしたいのです。したがって、これらのツールが状態を修正しようとするときに、予期しない状態に対して回復力がある場合に役立ちます。|| true提案は良いものです。ダウンライン追加すると便利です。
フィルP

5
ランダムユーザーから: ipコマンドで「add」の代わりに「replace」を使用します。例:up ip route replace 172.16.0.0/24 via 192.168.10.1「replace」は、ルートがまだ存在しない場合は追加しますが、同じセレクターを持つルートが存在する場合、同じ目的地であっても現在のルートに置き換えられます。
Xen2050

9

これを試すことができます(に追加/etc/network/interfaces)、これはルートを設定するためのほぼ完全な方法です:

auto eth0
iface eth0 inet static
    post-up /sbin/route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1
    post-up /bin/mount -t nfs 192.168.0.203:/motd/ /motd/

6

Ubuntuには、ifupdown-extra avaible パッケージがあります。
自動スクリプト(にインストール/etc/network/*/)を提供し、その1つは静的ルートを追加するために使用されます。

これの構成ファイルは /etc/network/routes

この構成ファイルの上部には、適切な説明があります。

この構成ファイルは、静的ルートif-updownスクリプトおよび/etc/init.d/networking-routesスクリプトによって読み取られ、特定のインターフェースまたはグローバルルートに関連付けられたルートのリストをセットアップします。

私が使用するルートの例は次のとおりです。

192.168.240.0 255.255.255.0 192.168.130.3 em3

1

私たちのために働いたのは

sudo route add -net 192.168.0.2/32 gw 192.168.1.1 netmask 255.255.0.0

私は以前Macで実行していました。

sudo route -n add -net 192.168.0.2/32 192.168.1.1

しかし、ubuntuでは、IPと最後の「ネットマスク」部分の間の「gw」が欠落していました(ubuntuでは-nも必要ありません)


10
これは一時的な(非永続的な)ルートに対して完全に機能します。問題は、ルートを永続的にすることです
-anneb

0

を使用することを好みますnmcli

nmcli device modify <device-name> ipv4.routes "<ip>/<mask> <gw>" ipv4.route-metric 25

例えば:

nmcli device modify wlp2s0 ipv4.routes "1.1.1.0/24 192.168.0.1" ipv4.route-metric 25

その後、NetworkManagerサービスを再起動して変更を適用します。

sudo systemctl restart NetworkManager.service

0

使用nmcliすると、永続的なソリューションを実行できました(私のデバイスでは@isapirソリューションが機能しませんでした)。

sudo nmcli connection modify <conection-name> +ipv4.routes "<ip>/<mask> <gw> <mt>"

例えば:

sudo nmcli connection modify ssid-name +ipv4.routes "1.1.1.0/24 192.168.0.1 100"

その後、接続を上下に設定することで変更を適用できます(NetworkManagerを完全に再起動する必要はありません):

sudo nmcli con down ssid-name ; sudo nmcli con up ssid-name

現在の接続を確認するには:

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