Linux
 Computer >> コンピューター >  >> システム >> Linux

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

本記事では、Linux CentOS/RHEL 7/8 におけるネットワークの設定方法について解説します。設定ファイルを使ったネットワークインターフェースの構成方法や、基本的なネットワーク設定ツールの使い方などを取り上げます。サーバー構築は必ずネットワーク設定から始まるため、管理者にとって非常に重要なトピックです。

前半ではRHEL/CentOS 7で標準的な network サービスを利用したネットワーク設定のポイントを説明し、後半ではCentOS/RHEL 8でデフォルトとなっている NetworkManager(NM) を使ったネットワーク構成方法を学びます。

RHEL/CentOSにおけるネットワークインターフェースの命名規則

従来のLinuxでは、ネットワークインターフェースに eth0 や eth1 のような名前が割り当てられていました。しかし、これらの名前はインターフェースと厳密に紐付いていないため、再起動後に複数のNICで名前が入れ替わる可能性があります。firewalldやiptablesでファイアウォールを設定する際などに問題となるケースがあります。

このため、Red Hat 7およびCentOS 7以降では、複数の命名スキームの階層に基づいてインターフェース名を割り当てる方式が採用されました。デフォルトではsystemdが命名スキームを順番に適用し、最初に利用可能なものを選択します。ネットワークデバイス名は自動的に割り当てられ、ハードウェアを追加・変更しても変わりません。一方で、enp5s0 や ens3 のような従来の eth0/eth1 に比べて可読性の低い名前になる点には注意が必要です。

従来型のLinux標準インターフェース名に戻したい場合は、以下の手順を実行します。

/etc/default/grub を編集します。

# nano /etc/default/grub

GRUB_CMDLINE_LINUX 行に以下を追加します。

net.ifnames=0 biosdevname=0

GRUB行の記述例は次のとおりです。

GRUB_CMDLINE_LINUX="consoleblank=0 fsck.repair=yes crashkernel=auto nompath selinux=0 rhgb quiet net.ifnames=0 biosdevname=0"

GRUB設定を更新します。

# grub2-mkconfig -o /boot/grub2/grub.cfg

ネットワークインターフェースの設定ファイルをリネームします。

# mv /etc/sysconfig/network-scripts/ifcfg-ens3 /etc/sysconfig/network-scripts/ifcfg-eth0

さらに DEVICE の値を変更します。

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

ファイルを保存し、ホストを再起動して変更が反映されているか確認しましょう。

# ip a

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

これでインターフェース名が eth0 になりました。

CentOS/RHELインストール時の初期ネットワーク設定

CentOS Linuxのインストール中に、メニューの「ネットワークとホスト名(Network & Hostname)」をクリックすることで、GUIモードでネットワークインターフェースを設定できます。ここでサーバーのホスト名、IPアドレス、ゲートウェイ、DNSなどを指定します。詳細な手順については、関連ガイドを参照してください。

CentOS/RHELでネットワークインターフェース設定ファイルを編集する方法

まず、Linuxホスト上で利用可能なネットワークインターフェースの一覧を表示します。

# ip a

ネットワーク設定ファイルは /etc/sysconfig/network-scripts ディレクトリに格納されています。NetworkManagerデーモンが各ネットワークインターフェース用のファイルを作成します。今回の例では設定ファイル名は ifcfg-eth0 です(命名スキームによって異なる名前の場合があります)。

主なパラメータは以下のとおりです。

  • DEVICE — システム上のネットワークアダプター名(例では eth0)
  • BOOTPROTO — IPアドレスの割り当て方式(static は手動入力、dhcp は自動取得)
  • IPADDR — IPアドレス
  • NETMASK — サブネットマスク
  • GATEWAY — デフォルトゲートウェイ
  • DNS1 — プライマリDNSサーバー
  • DNS2 — セカンダリDNSサーバー
  • ONBOOT — インターフェースの起動方法(yes は自動、no は手動)
  • UUID — ネットワークインターフェースの一意識別子。uuidgen コマンドで生成可能
  • IPV4_FAILURE_FATAL — IPv4設定に誤りがある場合にインターフェースを無効化するかどうか(yes で無効化、no で有効のまま)
  • IPV6_FAILURE_FATAL — IPv6設定に誤りがある場合にインターフェースを無効化するかどうか
  • IPV6_AUTOCONF — IPv6の自動設定を許可または拒否
  • IPV6_INIT — IPv6アドレッシングの使用有無(yes で使用、no で不使用)
  • PEERROUTES — DHCP使用時のデフォルトゲートウェイ設定の優先度
  • IPV6_PEERROUTES — IPv6のDHCP使用時のデフォルトゲートウェイ設定の優先度

それでは、この情報をもとにネットワークインターフェースを設定してみましょう。

CentOS/RHELで静的IPアドレスを設定する方法

ネットワーク設定ファイルを編集用に開きます。

# mcedit /etc/sysconfig/network-scripts/ifcfg-eth0

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

この例では、静的IPアドレス、サブネットマスク、ゲートウェイ、複数のDNSサーバーを指定しています。インターフェースの自動起動を有効にします。

ONBOOT="yes"

変更後、network サービスを再起動します。正常に完了すると以下のような出力が表示されます。

# service network restart
Restarting network (via systemctl): [ OK ]

また、すべての接続プロファイルを再読み込みするだけでも構いません。

# nmcli connection reload

DHCPから動的IPアドレスを取得する方法

サーバーがネットワーク上のDHCPサーバーから動的IPアドレスを取得する必要がある場合は、インターフェース設定ファイルを開いて設定を変更します。

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

IPアドレスやマスクに関連するパラメータをすべて削除し、IPアドレスの割り当て方式を dhcp に変更します(BOOTPROTO="dhcp")。変更後はnetworkサービスの再読み込みを忘れないようにしてください。

RHEL/CentOSでIPv6を無効化する方法

本記事の執筆時点では、IPv6はまだ広く活用されておらず、多くの管理者は可能であれば IPv4 を使うことを好みます。IPv6プロトコルを使用しないのであれば、サーバー上で無効化しておきましょう。どのサービスもIPv6で動作するよう設定されていないことが確実であれば、そのままネットワークインターフェースの設定に進めます。そうでない場合は、まず確認作業から始めるのが安全です。どのサービスがIPv6を使用しているかをチェックし、サービスごとの設定でプロトコルを無効化します。次のコマンドを実行してください。

# netstat -tulnp

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

このテストサーバーでは、「:::」と表示されていることから、sshdとchronydのみがIPv6を使用していることがわかります。

ネットワーク設定でIPv6を無効化した後に問題が発生しないよう、該当サービスでもプロトコルを無効にします。たとえばsshdの設定ファイルを開きます。

# mcedit /etc/ssh/sshd_config

以下の行のコメントを解除します。

#AddressFamily any
#ListenAddress 0.0.0.0

そしてサービスを再起動します。

# service sshd restart

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

これでsshdからIPv6が利用できなくなりました。他のサービスに対しても同様の作業を行います。

続いて、ネットワーク設定でIPv6プロトコルを無効化します。/etc/sysctl.conf を開きます。

# nano /etc/sysctl.conf

以下の行を追加します。

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

ファイルを保存し、次のコマンドで変更を適用します。

# sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

次に /etc/sysconfig/network を開き、以下の設定を追加します。

NETWORKING_IPV6=no
IPV6INIT=no

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

ネットワークインターフェース設定ファイル /etc/sysconfig/network-scripts/ifcfg-eth0 からは、以下の行を削除します。

IPV6INIT="yes"

最後に、GRUBでもIPv6の使用を禁止します。

# nano /etc/default/grub

GRUB_CMDLINE_LINUX行の末尾に以下を追加します。

ipv6.disable=1

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

すべての変更を加えたら、ファイルを保存してGRUBを更新します。

# grub2-mkconfig -o /boot/grub2/grub.cfg

サーバーを再起動し、ネットワーク設定を確認します。

# ifconfig

これでサーバー上でIPv6プロトコルが無効化されました。

CentOS/RHELでのDNSネームサーバー設定

ホストのDNSネームサーバーは /etc/resolv.conf で設定するか、ネットワークインターフェースの設定で指定できます。Linuxネットワークインターフェースの静的構成を行う際、すでに以下のパラメータでDNSサーバーを指定しました。

DNS1=
DNS2=
DNS3=

必要なDNSサーバーを設定し、network サービスを再起動してください。

DNSネームサーバーは、ネットワーク設定ファイルから自動的に /etc/resolv.conf に登録されます。ネットワーク設定時にDNSサーバーを指定しなかった場合は、/etc/resolv.conf に手動で記述します。

nameserver 1.1.1.1
nameserver 8.8.8.8
nameserver 8.8.4.4

RHEL/CentOSで1つのネットワークインターフェースに複数のIPアドレスを割り当てる

1つのネットワークインターフェースで複数のIPアドレスを使用したい場合は、インターフェースエイリアスを作成するか、メインの設定ファイルに追加のIPアドレスを記述します。

# nano /etc/sysconfig/network-scripts/ifcfg-eth0

以下のように編集します。

# Generated by parse-kickstart
UUID="b8bccd4c-fb1b-4d36-9d45-044c7c0194eb"
IPADDR1="*.*.*.*"
IPADDR2="*.*.*.*"
GATEWAY="*.*.*.*"
NETMASK="255.255.255.0"
BOOTPROTO="static"
DEVICE="eth0"
ONBOOT="yes"
DNS1=1.1.1.1
DNS2=8.8.8.8
DNS3=8.8.4.4

各パラメータの意味は次のとおりです。
IPADDR1 — 1つ目のIPアドレス
IPADDR2 — 2つ目のIPアドレス
GATEWAY — メインゲートウェイ

あるいは、メイン設定ファイルの エイリアス ファイルを作成します。

# nano /etc/sysconfig/network-scripts/ifcfg-eth0:1

そこに数行を追加します。ただし、ゲートウェイは指定しないでください。

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

すべての設定が完了したら、ネットワークサービスを再起動します。

# service network restart

なお、Windowsでも同様に1つのネットワークインターフェースへ複数のIPアドレス(エイリアス)を設定できます。

RHEL/CentOSでのVLAN(802.1Q)タグ付けの設定

CentOS/RHEL/Fedoraでネットワークインターフェースに複数のVLANを設定する方法の詳細については、「How To Configure 802.1Q VLAN Tagging on RHEL/CentOS Linux」の記事を参照してください。

RHEL/CentOSで複数のネットワークインターフェースを設定する

サーバーに複数のネットワークインターフェースがある場合は、それぞれに異なるIPアドレスを割り当てることができます。まず「ip a」コマンドでインターフェース情報を表示してみましょう。

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:52:42:54:2c:36 brd ff:ff:ff:ff:ff:ff
inet 15.*.*.*/16 brd 15.*.*.255 scope global eth0
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 52:52:42:54:2c:b8 brd ff:ff:ff:ff:ff:f

2つ目のインターフェースを設定するには、専用の設定ファイルを作成します。

# nano /etc/sysconfig/network-scripts/ifcfg-eth1

以下の設定を追加します。

IPADDR="*.*.*.*"
GATEWAY="*.*.*.*"
NETMASK="255.255.255.0"
BOOTPROTO="static"
DEVICE="eth1"
ONBOOT="yes"

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

次に、サーバーのデフォルトゲートウェイを設定する必要があります。現在どのゲートウェイが設定されているかを確認し、必要に応じて変更します。

# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 15.*.*.1 0.0.0.0 UG 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
15.*.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
15.*.*.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1

現在はeth1がメインゲートウェイになっています。これをeth0に変更しましょう。

# route add default gw *.*.*.*

※ eth0に指定したゲートウェイに置き換えてください。

# route delete default gw *.*.*.*

※ eth1のゲートウェイを削除します。

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

サーバー再起動後もこの設定を維持したい場合は、これらのコマンドを rc.local に追記してください(「RHEL/CentOSでサービスを起動時に自動実行する方法」の記事を参照)。

RHEL/CentOSで役立つネットワークコマンド一覧

  • ifdown eth1 — 指定したネットワークインターフェースを無効化
  • ifup eth1 — 指定したネットワークインターフェースを有効化
  • ifconfig — すべてのネットワークインターフェース情報を表示
  • ifconfig -a | grep ether | gawk '{print $2}' — インターフェースのMACアドレスを表示
  • ip a | grep ether | gawk '{print $2}' — 上記と同じ内容を ip a で実行
  • service network restart または systemctl restart network — networkサービスを再起動
  • systemctl restart NetworkManager.service — NetworkManagerを再起動
  • ip route または ip route show — Linuxのルーティングテーブルを表示
  • ping host — 指定したホストへの疎通確認
  • whois domain — ドメインのwhois情報を表示
  • dig domain — ドメインのDNS情報を表示

RHEL/CentOSのネットワーク管理ツール

長期間稼働しているサーバーや自分で構成していないサーバーを引き継いだ場合、最初に行うべきは、どのインターフェースが存在するのかを把握することです。基本リポジトリから必要なツールをインストールしておくと便利です。

# yum install net-tools -y

インストール後、ifconfig が使えるようになります。

# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 15.*.*.* netmask 255.255.255.0 broadcast 185.*.*.255

このように、ネットワークインターフェース名が eth0 であることが確認できます。

net-tools をインストールしていない場合は、次のコマンドでインターフェースを確認できます。

# ip a

出力結果はほぼ同じです。

CentOS/RHEL 8でのNetworkManagerによるネットワーク管理

RHEL/CentOS 8では、ネットワーク設定には NetworkManager のみを使用することが推奨されています。このサービスはネットワーク接続を管理し、設定を制御して、ネットワークアダプターに変更を適用します。

NMのステータスを確認するには、次のコマンドを使用します。

# systemctl status NetworkManager.service

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

CentOSでは、ネットワーク設定用にCUIの nmcli またはGUIツールの nmtui が提供されています。

ネットワーク設定モードに入るには、次のコマンドを実行します。

# nmtui

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

最初の項目を選択すると、編集対象のネットワークインターフェースを選ぶ画面が表示されます。

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

インターフェースを選択して編集します。

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

デバイス名、IPアドレス、ゲートウェイ、DNSサーバーを編集できます。また、NMの対話メニューからIPアドレスの割り当て方式をDHCPに変更することも可能です。

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

「manual」を「automatic」に変更します。

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

その後、変更を保存します。nmtuiを使えば、設定ファイルで行うのと同じ作業をGUIモードで実行できます。コマンドラインでインターフェースを設定したい場合はnmcliを使用します。たとえば、以下のコマンドでeth1のIPアドレス、ゲートウェイ、DNSサーバーを変更できます。

# nmcli con mod eth1 ipv4.addresses 192.168.11.24/24
# nmcli con mod eth1 ipv4.gateway 192.168.11.1
# nmcli con mod eth1 ipv4.dns "8.8.4.4"

変更を適用するには、インターフェースを再起動します。

# nmcli con up eth1

設定ファイルでの作業の方がやりやすい場合は、yumで特別なパッケージ network-scripts(CentOS 8にはデフォルトで含まれていません)をインストールしてください。

# yum install network-scripts -y
Upgraded:
initscripts-10.00.1-1.el8_0.1.x86_64
Installed:
network-scripts-10.00.1-1.el8_0.1.x86_64 network-scripts-team-1.27-10.el8.x86_64
Complete!

インストール後は、前述のとおり設定ファイルでネットワーク設定を編集できるようになります。

RHEL/CentOS 7/8のネットワーク設定完全ガイド|ifcfgファイルとNetworkManagerの使い方

  1. Windows 10でネットワーク設定をリセットする方法を徹底解説

    Windowsでは、ネットワーク接続のトラブルは非常によく発生する問題です。Microsoftはパフォーマンス向上やセキュリティ修正を目的としたアップデートを頻繁にリリースしていますが、これらのアップデートが原因で新たな不具合が生じることもあります。その代表例が、Windows Update後に起こるネットワーク接続の問題です。すべてのユーザーに発生するわけではありませんが、頻繁にこのトラブルに悩まされる方も少なくありません。ネットワークに問題が発生しインターネットに接続できなくなると、ほとんどの機能がオンラインと同期されている現代において、PCはほぼ役に立たない状態になってしまいます。DNS

  2. Windows 10でネットワーク設定をリセットする方法【設定アプリ・コマンドプロンプト対応】

    パソコンで複数のネットワーク接続を使い分けて作業をしていると、接続にエラーが発生し、思うように動かなくなることがあります。こうした問題が繰り返し起こる場合は、Windows PCのネットワーク設定をリセットしてみるのが有効な選択肢です。この記事では、Windows 10および7でネットワーク設定をリセットする方法と、さまざまなネットワーク接続の問題を解決する方法をご紹介します。Windows 10でネットワーク設定をリセットする方法ネットワーク設定をリセットすると、システム上のネットワークアダプターが一度アンインストールされ、その後再インストールされます。同時に、ほとんどのネットワークコンポー