インターフェイスを起動するときにデフォルトルートが追加されないようにできますか?


12

2つのNICを搭載したシステムがあります。このマシンとそれに付随するいくつかのデバイスは、移動されて別のLANに接続されます。または、ダイヤルアップを使用することもあります。

    eth0:
    - 10.x.x.x address space
    - no internet gateway
    - only a few devices

eth1 (when used):
- 172.16.x.x or 192.168.x.x or other address spaces
- access to the gateway from LAN to internet

ppp0 (when used):
- internet access through dialup using KPPP

ifconfigを使用してインターフェイスをアップまたはダウンします(KPPPによって処理されるppp0を除く)。

最初にeth1を起動すると、DHCPからアドレスが取得され、ゲートウェイが取得されます。これがルーティングに追加されるので、LANやインターネットに問題なく到達できます。

最初または2番目にeth0を起動すると、そのアドレスが取得され、デフォルトゲートウェイがそのアドレス空間(10.xxxの範囲内)に設定されます。最初にeth0を起動し、次にeth1を起動しても、デフォルトゲートウェイは10.xxxの範囲内に維持されます。

したがって、私が何をしても、eth0はeth1をオーバーライドし、ルーティングでゲートウェイを「要求」します。

eth0がゲートウェイを要求しないようにする方法、またはeth1(2番目に起動した場合)がゲートウェイを使用するようにする方法はありますか?または、どのインターフェースのゲートウェイを他のインターフェースよりも優先して使用する必要があるか、なんとかして優先順位を付けることはできますか?

基本的に、eth1のデフォルトのアドレススペースゲートウェイがアクティブな場合はそれが使用されていることを確認します。アクティブでない場合は、ppp0のデフォルトゲートウェイが使用されます。eth0にデフォルトゲートウェイが設定されないようにしたいのですが。


を使用ifconfigすると、DHCPの相互作用が発生するのは奇妙です。通常ifup、これを開始するには、を起動しdhclientます。eth *インターフェースは、システムの起動プロセス、たとえば/etc/init.d/network、またはNetworkManagerによって起動されている可能性がありますか?
マークプロトニック2015

@MarkPlotnick:これは、起動して「ifconfig eth1 up」(またはdownまたはeth0 ...)を使用した後です。私がやりたいことの最も簡単な形式は、10.xxxアドレススペース以外にルートを追加せずにeth0を起動することだと思います。
タンゴ

回答:


5

DHCPサーバーの構成が間違っています。他の地域へのルーティングを提供できない場合は、デフォルトゲートウェイオプションを送信しないでください。そのオプションを送信する場合、どのクライアントも、指定されたデフォルトゲートウェイに任意のオフリンク宛先のパケットを送信できると想定する場合があります。

そのため、DHCPから通知された場合、ボックスはeth0のデフォルトゲートウェイを使用するのに適しています。解決策は、DHCPサーバーから不適切なオプションを削除することです。


さて、それは非常に理にかなっています。残念ながら、DHCPサーバーはDLink DNS-321であり、多くの制御オプションを許可していません。ゲートウェイを含める必要があるようです。どうにかハックして構成ファイルを編集できるかどうか確認する必要があります。しかし、もう1つの問題:なぜそれは常に10.xxx DHCPサーバーからゲートウェイを取得し、常に他のサーバーからゲートウェイを取得しないのですか?
タンゴ

1
Linuxが同じルート間でどのように選択するかはわかりません。それはおそらくメトリックに基づいています。複数のデフォルトルートがある場合にルーティングテーブルを表示できますか?
サンダーステファン、2015

複数のデフォルトルートは許可されません。フラストレーションは、何らかの理由でeth0が常にDHCPをリッスンし、ゲートウェイを更新することです。eth1を使用する場合、最初に起動した唯一のインターフェースである場合にのみ、ゲートウェイが待機して使用します。eth0のゲートウェイが常にeth1のゲートウェイをオーバーライドしない場合は、スクリプトを作成して、eth0が起動されたときにeth1が削除されてから起動されるようにします。
タンゴ

DHCPクライアントのハードコーディングされた奇妙さのように思えます。どちらを使用していますか?別の方法として:eth0とeth1を交換する方が簡単かもしれません;)
Sander Steffann 2015

D-Link DNS-321にあります。しかし、/ var / logs / syslogを確認したところ、eth1のDHCPも毎回ゲートウェイで送信されていることがわかります。eth1が常にゲートウェイを取得してルートに追加し、eth1がそうしない理由を理解できません。DHCP eth0が10.0.0.3から開始するために使用する範囲を制限してから、10.0.0.2を使用してeth0を静的にし、それが無礼なDHCPサーバーを無視するようになるかどうかを確認します。
タンゴ

16

Raspbianでも同様の問題に直面しました(以下の解決策はDebianにも適用できると思います)。Raspberry Pi 3には、Wi-Fiとイーサネットの2つのNICが統合されています。どちらもwlan0とeth0です。wlan0は私の家のWi-Fiネットワークに接続されており、インターネットアクセスはこのインターフェイスを介して行われます。DHCP経由でホームルーターから設定を取得します。eth0は私のWindows PCに直接接続され、静的 IPが割り当てられています。Windows PCで設定していないため、eth0経由のインターネットアクセスは利用できませんでした。

Raspbianでは、dhcpcdデーモンがネットワークインターフェイスの構成を担当します。静的IPをeth0インターフェイスに設定するために、次の行がの最後に追加されました/etc/dhcpcd.conf

interface eth0

static ip_address=192.168.2.2/24
static routers=192.168.2.1
static domain_name_servers=192.168.2.1

この設定では、dhcpcdは2つのデフォルトルートを作成し、eth0経由のルートはwlan0経由のルートよりも優先されました。

pi@raspberrypi:~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.2.1     0.0.0.0         UG    202    0        0 eth0
default         192.168.1.254   0.0.0.0         UG    303    0        0 wlan0
192.168.1.0     *               255.255.255.0   U     303    0        0 wlan0
192.168.2.0     *               255.255.255.0   U     202    0        0 eth0

上で述べたように、システムがeth0経由でルーティングしようとし、インターネットにアクセスできなかったため、インターネットにアクセスできませんでした。

この問題を解決するために、eth0インターフェイスのnogatewayオプションを使用しました/etc/dhcpcd.conf。したがって、eth0固有の構成は次のようになりました。

interface eth0

static ip_address=192.168.2.2/24
static routers=192.168.2.1
static domain_name_servers=192.168.2.1
nogateway

この構成を保存して再起動した後、eth0を介したデフォルトルートはありませんでした。

pi@raspberrypi:~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.254   0.0.0.0         UG    303    0        0 wlan0
192.168.1.0     *               255.255.255.0   U     303    0        0 wlan0
192.168.2.0     *               255.255.255.0   U     202    0        0 eth0

インターネットアクセスが登場し、問題は解決しました。


1
これはまさに私の状況であり、これがまさに解決策でした。
PNDA 2018

ありがとう、nogateway最新のdebianディストリビューションに進む方法です
Alessandro Dionisi 2018

Raspbian Piでこの問題に直面するのが面倒なことは想像できませんが、最もエレガントで正しいソリューションを提供しただけです。男ありがとう
TechNyquist

7

RHEL6 / Fedora 22では、以下がテストされています。

/ etc / sysconfig / network-scripts / ifcfg-eth1に次の行を追加します:

DEFROUTE=no

eth1を、デフォルトのルーティングが不要なインターフェースの名前に置き換えます。

これは、IPv4タブの下部にある[この接続をネットワーク上のリソースにのみ使用する]チェックボックスをオンにすることで、Network Manager GUIを介して行うこともできます。

DEFROUTE = noは、インターフェースが有効な場合、デフォルトのルート(宛先0.0.0.0)がルーティングテーブルに追加されないようにします。すなわち。次のエントリは追加されません。

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         172.16.x.x      0.0.0.0         UG        0 0          0 eth1

1
問題が解決する理由を説明してください。そしてそれが機能するとき。Debianベースのディストリビューション(私は信じています)では機能しますが、インターフェイスの命名が異なるディストリビューション(またはサービスネットワーキングにsystemdを使用するディストリビューション)では機能しません
2016

1
DebianベースのシステムよりもRed Hatに似ています。
ilkkachu

4

それでは、eth0を立ち上げてDHCP経由でアドレスを取得するときに、マシンがデフォルトゲートウェイを立ち上げないようにします。

これが解決策です:

ファイルを編集:

/etc/dhcp/dhclient-up-hooks

以下を入力します:

#!/bin/sh
## Prevent DHCP server on eth0 from forcing a default route on us

case ${interface} in
  eth0)
     printf "executing ip route delete default via $new_routers\n" 
     ip route delete default via $new_routers
  ;;
     *)
  ;;
esac

前:

[root@centos7lab dhcp]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.4.1     0.0.0.0         UG    20     0        0 eth0
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

ifdown eth0の後、ifup eth0:

[root@centos7lab dhcp]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

これにより、ゲートウェイが確立された後のルートが削除されます。つまり、デフォルトゲートウェイを持つ他のすべてのルートはすでに消去されています。それとも誤解していますか?
タンゴ

DHCPクライアントがeth0を起動したときに作成したゲートウェイのみを削除します。システムにすでに存在する他のゲートウェイには影響しません。あなたの説明から私はあなたの問題があなたがいつか2つの同時デフォルトゲートウェイ(eth0に1つとeth1に1つ)を取得していて、ルーティングテーブルに置かれる前にeth0の1つを取り除く必要があると仮定します。問題が発生したときにroute -nの出力を投稿すると、想定が変わる可能性があります。
Ricardo

1

dhcpclient.confファイルを編集して、リモートDHCPサーバーからのデフォルトルートを要求しないようにすることができます。

私がやったことの小さなサンプルとそれは私のケースのために働いています

send host-name = "random-hostname";

リクエストサブネットマスク、ブロードキャストアドレス、タイムオフセット、interface-mtu、rfc3442-classless-static-routes、ntp-servers。

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