web-dev-qa-db-ja.com

Linuxが間違ったデフォルトルートを追加する

何らかの理由で、私のCentos 5.9 Linux 2.6.18 x86_64では、2つのデフォルトルートが必要です。

サーバーを再起動すると、ルーティングテーブルは次のようになります。

[root@server1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
255.255.255.255 0.0.0.0         255.255.255.255 UH    0      0        0 bond0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 bond1
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 bond0
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 bond1
0.0.0.0         192.168.10.1    0.0.0.0         UG    0      0        0 bond0
0.0.0.0         192.168.0.254   0.0.0.0         UG    0      0        0 bond1

bond1はローカルネットワークであるため、このネットワークを指す最後のデフォルトルートがあると、すべてのインターネット要求が失敗します。

route del default gw 192.168.0.254を実行することで簡単に修正できます。起動コマンドにそのコマンドを追加することもできます。しかし、私は何が起こっているのかを理解し、問題の根本に到達したいと思います。

私は誰もが私に言うことができることを願っています、なぜこれが起こるのですか?私の調査では、デフォルトゲートウェイは常に1つだけであることが確認されていますが、なぜ自動的に2つあるのかについては答えがわかりません。

ここにいくつかの設定ファイルがあります:

[root@server1 ~]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=myhostname.com

[root@server1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
IPADDR=192.168.10.11
NETMASK=255.255.255.0
NETWORK=192.168.10.0
BROADCAST=192.168.10.255
GATEWAY=192.168.10.1
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

[root@server1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond1
DEVICE=bond1
IPADDR=192.168.0.15
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
GATEWAY=192.168.0.254
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

Bond0とbond1を入れ替えると、2つのデフォルトルートも入れ替わり、起動時にインターネットにアクセスできることを理解しています。しかし、それでも良い解決策ではないと思います。

インターネットの周りで人々が/etc/sysconfig/network-scripts/route-Xでファイルについて話しているのですが、私はそれらのどれも持っていません。

御時間ありがとうございます。

6
Zoon

「デフォルト」ルートは、ifcfg-<interface>ファイルのGATEWAY行に基づいて設定されます。 Domがコメントで述べたように、誤ったGATEWAY行を削除すると、ルーティングテーブルは期待どおりになります。

6
John

GWとデフォルトGWには違いがあります。設定に基づいて、両方のインターフェースが外部ネットワークにアクセスできるようにしたいようです。推奨されているようにGATEWAY行を削除することもできますが、そうすることで、bond1が外部と通信できなくなります。

マルチホームになるとすぐに、ポリシーベースのルーティングを使用することをお勧めします。スプリットアクセスルーティングとも呼ばれます。これは良い習慣であり、同じサブネット上に複数のインターフェースを置きたい場合に必要です。

あなたの場合は具体的に私は:

  • 編集/etc/iproute2/rt_tables
  • ファイルの下部に次を追加します:
    • 100 bond0tbl
    • 101 bond1tbl

これで、それぞれbond0tblおよびbond1tblという内部テーブルを定義しました。次に、これらのテーブルのルールを作成する必要があります

  • 開く/作成/etc/sysconfig/network-scripts/rule-bond0
  • 以下を追加します:from 192.168.10.11 table bond0tbl
  • 開く/作成/etc/sysconfig/network-scripts/rule-bond1
  • 以下を追加します:from 192.168.0.15 table bond1tbl

ルールを定義したので、今度はルートを定義します。

  • 開く/作成/etc/sysconfig/network-scripts/route-bond0
  • 以下を追加します:
    • 192.168.10.1によるデフォルトデフォルトdev bond0テーブルbond0tbl
    • 192.168.10.11を介した192.168.10.0/24 dev bond0テーブルbond0tbl
    • 192.168.10.11を介した192.168.10.0/24 dev bond0テーブルメイン
  • 開く/作成/etc/sysconfig/network-scripts/rule-bond1
  • 以下を追加します:
    • デフォルトは192.168.0.254を介してdev bond1テーブルbond1tbl
    • 192.168.0.15を介した192.168.0.0/24 dev bond1テーブルbond1tbl
    • 192.168.0.15を介した192.168.0.0/24 dev bond1テーブルメイン

最後に、両方のifcfg-devXファイルからGATEWAY行を削除し、/etc/syconfig/networkに追加します。

特定のインターフェイスがルーティングに使用するGWと、誰もが使用するデフォルトGWについて、必要なルートが存在しない場合に、混乱するのは簡単です。 /etc/sysconfig/networkに設定すると、常に「グローバル」に感じられます。

アヒルが一列に並んだら、service network restartまたはifup/ifdownまたはrebootを使用して、すべてを作成します。それが機能したかどうかを確認するには、次のようにします。

  • ip route show table bond0tbl
  • ip route show table bond1tbl
  • ip route show table main
  • ip rule show

要点をまとめると、

  1. 意味のある命名規則でテーブルを定義する
  2. 特定のIPのトラフィックを特定のインターフェイスに強制するルールを定義する
  3. そのインターフェース/ IPのデフォルトルートを定義します
  4. 新しく作成したテーブルに追加するルートを定義します
  5. 「メイン」テーブルに追加するルートを定義します。
  6. Ifup /サービスネットワークの再起動/再起動で作業を行います
4
Ryan Davies