CentOS 7の最小インストールがあります。
「古い学校」の方法でネットワークをセットアップしたいので、ネットワークマネージャーを無効にしました。
systemctl stop NetworkManager
systemctl disable NetworkManager
chkconfig network on
service network restart
私のネットワーク構成(/ etc/sysconfig/network-scripts/ifcfg-ens4)は次のようになります:
DEVICE="ens4"
TYPE="Ethernet"
NOZEROCONF="yes"
PERSISTENT_DHCLIENT="1"
BOOTPROTO="dhcp"
DEFROUTE="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
NAME="ens4"
ONBOOT="yes"
NM_CONTROLLED="no"
DHCPリースファイルは次のようになります。
lease {
interface "ens4";
fixed-address 144.76.190.238;
option subnet-mask 255.255.255.255;
option routers 144.76.190.224;
option dhcp-lease-time 86400;
option dhcp-message-type 5;
option domain-name-servers 8.8.8.8,8.8.4.4;
option dhcp-server-identifier 144.76.190.224;
option Host-name "hello.example.com";
option domain-name "example.com";
renew 2 2014/10/21 05:44:47;
rebind 2 2014/10/21 15:04:03;
expire 2 2014/10/21 18:04:03;
}
DHCPの「ルーター」フィールドがCentOS 7で無視されるように見えるのですが、IP、ネットマスク、ホスト名は正しく設定されていますが、デフォルトルートが設定されていません(空白)。
ご覧のとおり、私はネットマスク255.255.255.255を使用しているため、ゲートウェイIPはネットワークの「外側」にあります。そのため、追加のルートが必要です。これらを手動で実行した場合:
route add -Host 144.76.190.224 dev ens4
route add default gw 144.76.190.224
その後、すべてが正常に動作します。
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 144.76.190.224 0.0.0.0 UG 0 0 0 ens4
144.76.190.224 0.0.0.0 255.255.255.255 UH 0 0 0 ens4
Centos 6を含む、私がテストした他のすべてのLinuxディストリビューションは正常に動作し、これらの2つのルートをDHCPから自動的に設定します。
だから私の質問はこれです。 CentOS 7で自動的に設定されないのはなぜですか?何かが変わったので、DHCPクライアントを機能させるためにいくつかのフラグを追加する必要がありますか?
CentOS 6はdhclientバージョン4.1.1-P1を使用し、CentOS 7は4.2.5を使用しているようです。多分彼らはそれらのバージョンの間で何かを変えましたか?
更新1:
私はdhclientのリリースノートを見て、4.0.0でこれを見つけました:
「提供されたIPv4アドレスのサブネットマスクが/ 32の場合、dhclient-scriptはデフォルトゲートウェイのホストルートを作成するように更新されました。これにより、オペレーターがクライアントを望まない「キャプティブ」ネットワーク環境でクライアントを機能させることができます。直接クロストークします。」
したがって、これはずっと前から機能しているはずです。 CentOS 7が「dhclient-script」から削除したのでしょうか?
更新2:
CentOS 6のインストールからCentOS 7サーバーに「/ sbin/dhclient-script」ファイルをコピーしました。これですべてが正常に動作します。彼らが行った変更を調査しますが、CentOS 7でバグが発生したようです。
更新3:
私は問題を理解しました。新しいバージョンの/ sbin/dhclient-scriptに(愚かな)pingチェックを追加して、ゲートウェイを追加する前にpingを試みます。 DHCPサーバー上のファイアウォールでpingをブロックしているため、DHCPサーバーは応答せず、dhclient-scriptはデフォルトルートを追加しませんでした。
DHCPサーバーがpingに応答することを確認します。そうでない場合、/ sbin/dhclient-scriptはデフォルトルートを正しく設定しません。
この追加の「チェック」は、dhclientの新しいバージョンに追加されたか、CentOS 7に特別に追加されたようです。pingチェックは、7より前のバージョンのCentOSには存在しません。
たぶん、あなたはすでにデフォルトゲートウェイを/etc/sysconfig/network/routes
に設定しましたか?
そうでない場合は、少なくとも手動でルーティングするものがそのファイルで自動的に実行されるように構成できます。
144.76.190.224 - 255.255.255.255 ens4
default 144.76.190.224 - ens4
CentOS 7 VMWareゲストのクリーンインストールでこの問題が発生したのは、VMWare Workstationでそのゲスト用に事前にdhcp予約をセットアップしていたためです。
C:\ ProgramData\VMware\vmnetdhcp.conf
したがって、修正は、CentOSサーバーに関連するconfファイルの2行をコメント化または削除することです。
Host VMnet8 {
hardware ethernet 00:40:56:C0:00:08;
fixed-address 192.168.80.1;
#hardware ethernet 00:0C:29:19:C7:7A; <--Comment or remove this CentOS line
#fixed-address 192.168.80.111; <--Comment or remove this CentOS line
option domain-name-servers 0.0.0.0;
option domain-name "";
option routers 0.0.0.0;
}
ファイルを(管理者として)保存し、ホストでVMWare DHCPサービスを再起動してから、CentOSでnetwork service restart
を実行します。これで、インターネットにアクセスするためのゲートウェイができました。ただし、dhcp予約のゲートウェイに関する問題を修正するには、yum update
も必要です。それ以外の場合、その前に予約を追加すると、次回の再起動時にゲートウェイがなくなります。更新が完了したら、問題を解決する必要があります。したがって、上記の行をconfファイルに追加し、VMWare DHCPサービスを再起動して、予約が設定され、設定が完了します。
これは、CentOSの初期セットアップにのみ当てはまります。したがって、クリーンインストール後の1度だけが苦痛です。その欠点にもかかわらず、私はVMWareスナップショットを前に進めます。
記録のために、私のNetworkManagerは有効になっています。クリーンインストール後にこれを回避する永続的な方法を誰かが知っている場合は、共有してください。 yum update
で修正されるため、CentOSの今後のアップデートで修正される可能性があります。
これは特定の状況ですが、珍しい設定ではありません。私がこの答えを投稿したのは、おそらく私が将来ここに戻って、自分のしたことを思い出そうとするためです。しかし、私はこれで数時間殺したので、うまくいけば他の人にも役立つでしょう。
私はこの問題を抱えていました。 CentOS 7をデプロイしていたVM VMwareテンプレートから
「/ etc/sysconfig/network/routes」に関する答えは、大きな手掛かりを提供するのに役立ちました!
「オプションルーター」は/var/lib/dhclient/dhclient--eth0.leaseに設定されていますが、routeコマンドの出力を確認しても効果がなく、サブネット内のノードにしか到達できませんでした
/etc/sysconfig/network-scripts/ifcfg-eth0.cfgにゲートウェイを手動で設定することができ、それは正常に動作します
最終的に、デフォルトゲートウェイを含む/ etc/sysconfig/networkというファイルを見つけました
そのゲートウェイをコメントアウトしてネットワークサービスを再開したところ、すべて順調でした