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.x.x.xの範囲内)に設定されます。最初にeth0を起動し、次にeth1を起動しても、デフォルトゲートウェイは10.x.x.xの範囲内に維持されます。
したがって、私が何をしても、eth0はeth1をオーバーライドし、ルーティングでゲートウェイを「要求」します。
Eth0がゲートウェイを要求しないようにする方法、またはeth1(2番目に起動した場合)がゲートウェイを使用するようにする方法はありますか?それとも、どのインターフェイスのゲートウェイを他のゲートウェイよりも優先して使用する必要があるか、なんとかして優先順位を付けることはできますか?
基本的に、eth1のデフォルトのアドレススペースゲートウェイがアクティブな場合はそれが使用されていることを確認します。アクティブでない場合は、ppp0のデフォルトゲートウェイが使用されます。 eth0にデフォルトゲートウェイが設定されないようにしたいのですが。
DHCPサーバーの構成が間違っています。他の地域へのルーティングを提供できない場合は、デフォルトゲートウェイオプションを送信しないでください。そのオプションを送信する場合、どのクライアントも、指定されたデフォルトゲートウェイに任意のオフリンク宛先のパケットを送信できると想定する場合があります。
そのため、DHCPから通知された場合、ボックスはeth0のデフォルトゲートウェイを使用するのに適しています。解決策は、DHCPサーバーから不適切なオプションを削除することです。
Raspbianでも同様の問題に直面しました(以下の解決策はDebianにも適用できると思います)。 Raspberry Pi 3には、Wi-Fiとイーサネットの2つのNICが統合されています。どちらもwlan0とeth0です。 wlan0は私の自宅のWi-Fiネットワークに接続されており、インターネットアクセスはこのインターフェイスを介して行われます。 DHCP経由でホームルーターから設定を取得します。 eth0は私のWindows PCに直接接続されており、static 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インターフェースの/etc/dhcpcd.conf
でnogateway
オプションを使用しました。したがって、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
インターネットアクセスが登場し、問題は解決しました。
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
それでは、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
Dhcpclient.confファイルを編集して、リモートDHCPサーバーからのデフォルトルートを要求しないようにすることができます。
私がやったことの小さなサンプルとそれは私のケースのために働いています
送信ホスト名= "ランダムホスト名";
リクエストサブネットマスク、ブロードキャストアドレス、タイムオフセット、interface-mtu、rfc3442-classless-static-routes、ntp-servers。