CentOSのIPアドレス設定:知っておくべき全て


CentOSのIPアドレス設定:知っておくべき全て

はじめに

Linuxサーバーを運用する上で、ネットワーク設定は最も基本的な、そして最も重要な要素の一つです。特にIPアドレスの設定は、サーバーがネットワーク上で他のデバイスと通信するための「住所」を決定する作業であり、これが正しく行われていなければ、サーバーは何もできません。

本記事では、Linuxディストリビューションの中でも広く使われているCentOS(特にCentOS 7以降、およびその後継であるCentOS Stream 8/9)におけるIPアドレス設定に焦点を当て、「知っておくべき全て」を網羅的に解説します。基本的な静的IPアドレスの設定から、DHCP、IPv6、さらには複数のIPアドレス設定、ボンディング、ブリッジといった応用的な設定、そしてトラブルシューティングの手順に至るまで、詳細に説明していきます。

サーバー管理者やネットワークエンジニア、あるいはこれからCentOSを使ったシステム構築を始める方にとって、本記事がCentOSのネットワーク設定をマスターするための一助となれば幸いです。

ネットワークの基本概念

CentOSでIPアドレスを設定する前に、ネットワークに関するいくつかの基本的な概念を理解しておく必要があります。

  1. IPアドレス (Internet Protocol Address):

    • ネットワーク上の各デバイスを一意に識別するための番号です。インターネットやローカルネットワーク上でデータを送受信する際に宛先を指定するために使用されます。
    • IPv4: 現在広く使われている形式で、「192.168.1.10」のような4つのオクテットをピリオドで区切った形式です。約43億個のアドレスがありますが、枯渇が進んでいます。
    • IPv6: IPv4アドレスの枯渇に対応するために開発された新しい形式で、「2001:0db8:85a3:0000:0000:8a2e:0370:7334」のような128ビットの形式です。IPv4よりもはるかに多くのアドレスを提供できます。
  2. サブネットマスク (Subnet Mask):

    • IPアドレスのうち、どの部分がネットワークアドレスで、どの部分がホストアドレスであるかを区別するために使用されます。これにより、一つの大きなネットワークを複数の小さなサブネットワーク(サブネット)に分割できます。
    • IPv4では「255.255.255.0」のような形式、またはCIDR表記(Classless Inter-Domain Routing)でIPアドレスの後にスラッシュとネットワーク部のビット数(例: 192.168.1.10/24/24)で表現されます。/24はサブネットマスク 255.255.255.0 に相当します。
    • IPv6でもCIDR表記(例: 2001:0db8:85a3::/64/64)が一般的です。
  3. デフォルトゲートウェイ (Default Gateway):

    • ローカルネットワーク外の宛先にデータを送信する際に経由するルーターのIPアドレスです。サーバーがインターネットや他のサブネットと通信するためには、デフォルトゲートウェイが正しく設定されている必要があります。
  4. DNSサーバー (Domain Name System Server):

    • 人間が覚えやすいドメイン名(例: www.google.com)を、コンピューターが認識できるIPアドレス(例: 172.217.161.36)に変換(名前解決)するサーバーです。サーバーがドメイン名を使用して外部リソースにアクセスしたり、他のサーバーからドメイン名でアクセスされたりするためには、DNSサーバーの設定が不可欠です。
  5. ネットワークインターフェース (Network Interface Card – NIC):

    • サーバーがネットワークに接続するためのハードウェアです。物理的なイーサネットカードや無線LANアダプター、仮想ネットワークインターフェースなどがこれにあたります。CentOS上では eth0, ens33, enp0s25, wlan0 のような名前で識別されます。最近のCentOSでは、予測可能なインターフェース名(Predictable Network Interface Names)が導入され、ハードウェア情報に基づいて一貫性のある名前が付けられる傾向があります(例: enp3s0 はPCIバス上の3番目のスロットにあるインターフェース、ens33 は仮想マシンのPCIスロット33番目のインターフェースなど)。
  6. MACアドレス (Media Access Control Address):

    • ネットワークインターフェースカードに製造段階で割り当てられる、世界中で一意の物理アドレスです。「00:1A:2B:3C:4D:5E」のような12桁の16進数で表現されます。ローカルネットワーク内でのフレームの送受信に使用されます。

これらの概念を理解した上で、CentOSでの具体的な設定方法を見ていきましょう。

CentOSにおけるネットワーク設定ツール

CentOSでは、IPアドレスを含むネットワーク設定を行うためのツールがいくつか提供されています。CentOSのバージョンによって推奨される方法や主要なツールが異なりますが、最新のCentOSおよびCentOS StreamではNetworkManagerというデーモンとその管理ツールが主流です。

主要なツールは以下の通りです。

  1. NetworkManager:

    • ネットワーク設定を管理するデーモン(バックグラウンドプロセス)です。有線・無線、VPN、モバイルブロードバンドなど、様々なネットワーク接続を管理できます。
    • サーバー用途においては、ネットワークインターフェースの状態変化(ケーブルの抜き差しなど)にも柔軟に対応できる点がメリットですが、シンプルさを好む場合は無効化されることもあります(ただし、CentOS 8以降はNetworkManagerの使用が強く推奨されます)。
    • 設定情報は、主に/etc/NetworkManager/system-connections/ ディレクトリ内のファイルや、接続プロファイルとして保存されます。
  2. nmcli (NetworkManager Command Line Interface):

    • NetworkManagerをコマンドラインから操作するためのツールです。CentOS 8以降の標準的なネットワーク設定方法として推奨されます。
    • 対話的でないスクリプト処理にも適しており、自動化にも利用できます。
    • 本記事でも、静的IPアドレス設定やDHCP設定、高度な設定の多くをnmcliを使った方法で解説します。
  3. nmtui (NetworkManager Text User Interface):

    • NetworkManagerをテキストベースのユーザーインターフェースで操作するためのツールです。CUI環境でもGUIのようにカーソルとEnterキーで操作できるため、初心者にも分かりやすいツールです。
    • 基本的なIPアドレス設定や接続の有効化/無効化などを簡単に行えます。
  4. 設定ファイル (/etc/sysconfig/network-scripts/):

    • CentOS 7以前で主流だった、ネットワークインターフェースごとの設定ファイルを直接編集する方法です。
    • /etc/sysconfig/network-scripts/ifcfg-<interface_name> というファイルに、IPアドレス、ネットマスク、ゲートウェイ、DNSなどの設定を記述します。
    • CentOS 8以降でも後方互換性のために読むことはできますが、NetworkManagerがこれらのファイルを読み込んで自身の管理下に置く形になります。NetworkManagerを使用する場合は、直接このファイルを編集するよりもnmclinmtuiを使用することが推奨されます。NetworkManagerを無効化している環境では、このファイルを直接編集する方法が依然として使われます。
  5. ip コマンド (iproute2):

    • ip addr, ip route, ip link などのサブコマンドを持ち、ネットワークインターフェース、IPアドレス、ルーティングテーブルなどを表示・設定するためのコマンドです。
    • 設定ファイルやNetworkManagerの設定を変更するのではなく、一時的にIPアドレスを追加したり、ルーティングを確認したり、インターフェースの状態を変更したりするのに非常に便利です。システム再起動で失われる設定が多いです。
    • 従来のifconfigrouteコマンドに代わるツールとして、モダンなLinuxディストリビューションではこちらが推奨されています。
  6. ifconfig コマンド (net-tools):

    • 古いネットワーク設定ツールセットであるnet-toolsに含まれるコマンドです。IPアドレスやインターフェースの状態を表示・設定できます。
    • 多くの環境でまだ利用可能ですが、機能的にはipコマンドの方が豊富であり、非推奨となっています。一時的な状態確認には手軽に使える場合があります。

本記事では、主にCentOS 8/9/Streamを対象とし、nmcliによる設定を中心に解説します。必要に応じてnmtuiifcfgファイルについても触れます。

IPアドレス設定の実際(静的設定)

サーバーに固定されたIPアドレスを割り当てる(静的設定)のは、最も一般的な設定シナリオの一つです。サーバーは特定のIPアドレスで常に到達可能である必要があるため、DHCPではなく静的設定がよく用いられます。

ここでは、nmcliを使った静的IPアドレス設定の手順を詳細に解説します。

1. インターフェース名の確認

まず、設定したいネットワークインターフェースの名前を確認します。

bash
nmcli dev status

出力例:

DEVICE TYPE STATE CONNECTION
ens33 ethernet connected System ens33
lo loopback unmanaged --

この例では、ens33 という名前のイーサネットインターフェースが利用可能です。STATEconnectedになっている場合は、現在アクティブな接続があります。この接続を編集するか、新しい接続を作成します。

2. 現在の接続の確認 (任意)

もし既にインターフェースに接続が関連付けられている場合、その設定を確認できます。

bash
nmcli connection show

出力例:

NAME UUID TYPE DEVICE
System ens33 a1b2c3d4-e5f6-7890-1234-567890abcdef ethernet ens33

この例では、System ens33 という名前の接続が ens33 インターフェースに関連付けられています。この既存の接続を編集するのが一般的です。

3. 既存の接続を編集して静的設定にする (nmcli connection modify)

確認した接続名(例: System ens33)を使用して、設定を編集します。

IPv4の静的設定:

“`bash

接続名を指定

CON_NAME=”System ens33″

メソッドを manual (静的) に設定

nmcli connection modify “$CON_NAME” ipv4.method manual

IPアドレスとサブネットマスクを設定 (CIDR形式)

nmcli connection modify “$CON_NAME” ipv4.addresses “192.168.1.100/24”

デフォルトゲートウェイを設定

nmcli connection modify “$CON_NAME” ipv4.gateway “192.168.1.1”

DNSサーバーを設定 (複数指定する場合はカンマ区切り)

nmcli connection modify “$CON_NAME” ipv4.dns “8.8.8.8,8.8.4.4”

ブート時に自動接続するように設定

nmcli connection modify “$CON_NAME” connection.autoconnect yes
“`

IPv6の静的設定 (任意):

IPv6も同時に設定する場合、同様にipv6.で始まるパラメータを使用します。

“`bash

メソッドを manual (静的) に設定

nmcli connection modify “$CON_NAME” ipv6.method manual

IPv6アドレスとプレフィックス長を設定

nmcli connection modify “$CON_NAME” ipv6.addresses “2001:db8::100/64”

IPv6デフォルトゲートウェイを設定

nmcli connection modify “$CON_NAME” ipv6.gateway “2001:db8::1”

IPv6 DNSサーバーを設定

nmcli connection modify “$CON_NAME” ipv6.dns “2001:4860:4860::8888,2001:4860:4860::8844”
“`

すべての設定が終わったら、設定を有効化するために接続を一度切断し、再度有効化します。

bash
nmcli connection down "$CON_NAME"
nmcli connection up "$CON_NAME"

または、システムのネットワークサービス全体を再起動(NetworkManagerのリロードまたは再起動)することでも反映されますが、アクティブな接続が全て切断されるため注意が必要です。

“`bash

設定の再読み込み (NetworkManagerのデーモンを再起動せずに行う)

systemctl reload NetworkManager

または、デーモンを再起動 (全てのネットワーク接続が一時的に切断される)

systemctl restart NetworkManager
“`

再起動は影響範囲が大きいため、特定の接続の設定変更にはnmcli connection down/upを使用するのが一般的です。

4. 新しい接続を作成して静的設定にする (nmcli connection add)

既存の接続を編集するのではなく、新しい接続プロファイルを作成することも可能です。これは、例えば同じインターフェースで複数の異なるネットワーク設定プロファイルを使い分けたい場合などに便利です。

“`bash

インターフェース名と新しい接続名を指定

IF_NAME=”ens33″
NEW_CON_NAME=”MyStaticConnection”

新しいethernetタイプの接続を作成

nmcli connection add type ethernet ifname “$IF_NAME” con-name “$NEW_CON_NAME”

作成した接続プロファイルを編集して静的設定にする

nmcli connection modify “$NEW_CON_NAME” ipv4.method manual
nmcli connection modify “$NEW_CON_NAME” ipv4.addresses “192.168.1.100/24”
nmcli connection modify “$NEW_CON_NAME” ipv4.gateway “192.168.1.1”
nmcli connection modify “$NEW_CON_NAME” ipv4.dns “8.8.8.8,8.8.4.4”
nmcli connection modify “$NEW_CON_NAME” connection.autoconnect yes

IPv6設定 (任意)

nmcli connection modify “$NEW_CON_NAME” ipv6.method manual
nmcli connection modify “$NEW_CON_NAME” ipv6.addresses “2001:db8::100/64”
nmcli connection modify “$NEW_CON_NAME” ipv6.gateway “2001:db8::1”
nmcli connection modify “$NEW_CON_NAME” ipv6.dns “2001:4860:4860::8888,2001:4860:4860::8844”

この新しい接続を有効化(これにより、もし既存の接続があれば無効化され、新しい接続がアクティブになる)

nmcli connection up “$NEW_CON_NAME”
“`

5. 設定の確認

設定が正しく反映されたかを確認します。

“`bash

インターフェースのIPアドレスを確認

ip addr show ens33
“`

出力例(IPv4/IPv6アドレスが表示される):

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:ab:cd:ef brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 2001:db8::100/64 scope global noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:feab:cdef/64 scope link
valid_lft forever preferred_lft forever

“`bash

ルーティングテーブルを確認 (デフォルトゲートウェイの確認)

ip route show
“`

出力例:

default via 192.168.1.1 dev ens33 proto static metric 100
192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.100 metric 100

“`bash

DNS設定を確認

cat /etc/resolv.conf
“`

出力例:

“`

Generated by NetworkManager

search yourdomain.local
nameserver 8.8.8.8
nameserver 8.8.4.4
“`

pingコマンドでゲートウェイや外部のIPアドレスに到達できるか確認することも重要です。

bash
ping 192.168.1.1 # ゲートウェイにPing
ping 8.8.8.8 # Google DNSにPing
ping google.com # ドメイン名でPing (DNS解決の確認)

6. nmtui を使用する方法

nmtuiコマンドを実行すると、テキストベースのGUIが表示されます。

bash
nmtui

  1. Edit a connection を選択し、Enterキーを押します。
  2. 設定したい接続(例: System ens33)を選択し、Enterキーを押します。
  3. 設定画面が表示されるので、キーボードの矢印キーで移動し、Enterキーで項目を選択、スペースキーでチェックボックスを操作します。
  4. IPv4 CONFIGURATION または IPv6 CONFIGURATION を選択し、Showを押します。
  5. MethodManual に変更します。
  6. Addresses の右にある Add ボタンを押して、IPアドレスとサブネットマスクをCIDR形式で入力します(例: 192.168.1.100/24)。
  7. Gateway にデフォルトゲートウェイのIPアドレスを入力します(例: 192.168.1.1)。
  8. DNS servers の右にある Add ボタンを押して、DNSサーバーのIPアドレスを入力します。
  9. 必要に応じてIPv6の設定も行います。
  10. 画面一番下にある <OK> を選択して設定を保存します。
  11. 前の画面に戻ったら、<Back> を選択します。
  12. Activate a connection を選択し、Enterキーを押します。
  13. 設定を変更した接続を選択し、<Deactivate> してすぐに <Activate> することで設定が反映されます。
  14. <Quit> を選択して終了します。

nmtuiは直感的で分かりやすいですが、大量の設定変更やスクリプト化には向いていません。単一サーバーの簡単な設定変更に適しています。

7. 設定ファイルを直接編集する方法 (/etc/sysconfig/network-scripts/ifcfg-*) (CentOS 7以前、またはNetworkManager無効時)

CentOS 7以前の標準的な方法、またはNetworkManagerを無効化している環境では、/etc/sysconfig/network-scripts/ifcfg-<interface_name> ファイルを直接編集します。

例: eth0 インターフェースに静的IPアドレスを設定する場合、/etc/sysconfig/network-scripts/ifcfg-eth0 ファイルを作成または編集します。

bash
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0

ファイルの内容例:

“`ini
TYPE=”Ethernet”
PROXY_METHOD=”none”
BROWSER_ONLY=”no”
BOOTPROTO=”static” # 静的設定にする
DEFROUTE=”yes” # デフォルトルートを使用する
IPV4_FAILURE_FATAL=”no”
IPV6INIT=”yes” # IPv6を有効にする
IPV6_AUTOCONF=”no” # IPv6自動設定を無効にする (静的設定の場合)
IPV6_DEFROUTE=”yes”
IPV6_FAILURE_FATAL=”no”
NAME=”eth0″ # インターフェース名
UUID=”a1b2c3d4-e5f6-7890-1234-567890abcdef” # 各接続に一意に割り当てられるID
DEVICE=”eth0″ # インターフェース名

IPv4 静的設定

IPADDR=”192.168.1.100″
NETMASK=”255.255.255.0″ # または PREFIX=”24″ でも可
GATEWAY=”192.168.1.1″
DNS1=”8.8.8.8″
DNS2=”8.8.4.4″

IPv6 静的設定 (任意)

IPV6ADDR=”2001:db8::100/64″
IPV6_GATEWAY=”2001:db8::1″

IPV6_DNS=”2001:4860:4860::8888,2001:4860:4860::8844″ # NetworkManagerが管理する場合こちらの方が確実

ONBOOT=”yes” # システム起動時にインターフェースを有効にするか
“`

編集後、ネットワークサービスを再起動して設定を反映させます。

“`bash

CentOS 7以前の場合 (networkサービスを使用)

sudo systemctl restart network

NetworkManagerを使用している場合 (CentOS 8以降のデフォルト)

NetworkManagerがifcfgファイルを読み込んでいる可能性があるが、

推奨は nmcli/nmtui での編集。

もしifcfgを直接編集した場合は、NetworkManagerに設定を再読み込みさせるか再起動

sudo systemctl reload NetworkManager

sudo systemctl restart NetworkManager # 全ての接続が切断される

“`

注意点: CentOS 8以降でNetworkManagerが有効な場合、ifcfgファイルを直接編集すると、NetworkManagerの設定と競合したり、予期しない動作を引き起こす可能性があります。NetworkManagerを使用している場合は、極力nmcliまたはnmtuiを使用してください。NetworkManagerを無効化する場合は、systemctl disable --now NetworkManager を実行し、必要であればsystemctl enable --now networknetworkサービスを有効化します(ただし、CentOS 8以降ではnetworkサービスは非推奨です)。

IPアドレス設定の実際(DHCP設定)

DHCP(Dynamic Host Configuration Protocol)は、ネットワーク上のDHCPサーバーから自動的にIPアドレス、サブネットマスク、デフォルトゲートウェイ、DNSサーバーなどの情報を取得する仕組みです。クライアントPCなどで広く使われますが、サーバーでも一時的な利用や、DHCPサーバーが管理された環境で使用されることがあります。

ここでは、nmcliを使ったDHCP設定の手順を解説します。

1. 既存の接続を編集してDHCP設定にする (nmcli connection modify)

静的設定の場合と同様に、まず設定したい接続名を確認します (nmcli connection show)。

“`bash

接続名を指定

CON_NAME=”System ens33″

IPv4のメソッドを auto (DHCP) に設定

nmcli connection modify “$CON_NAME” ipv4.method auto

IPv6のメソッドを auto (DHCPまたはSLAAC) に設定 (任意)

DHCPv6を使わない場合は auto でSLAACを試みる

nmcli connection modify “$CON_NAME” ipv6.method auto

ブート時に自動接続するように設定

nmcli connection modify “$CON_NAME” connection.autoconnect yes

設定を有効化

nmcli connection down “$CON_NAME”
nmcli connection up “$CON_NAME”
“`

DHCPサーバーから取得したDNSサーバーを使用せず、特定のDNSサーバーを使用したい場合は、別途DNSを設定することも可能です。

“`bash

DHCPでIPを取得しつつ、固定のDNSサーバーを使用する

nmcli connection modify “$CON_NAME” ipv4.dns “8.8.8.8,8.8.4.4”

ipv4.dns-search オプションで検索ドメインも設定可能

nmcli connection modify “$CON_NAME” ipv4.dns-search “yourdomain.local”

“`

2. 新しい接続を作成してDHCP設定にする (nmcli connection add)

新しいDHCP接続プロファイルを作成する場合です。

“`bash

インターフェース名と新しい接続名を指定

IF_NAME=”ens33″
NEW_CON_NAME=”MyDhcpConnection”

新しいethernetタイプの接続を作成 (デフォルトで ipv4.method は auto)

nmcli connection add type ethernet ifname “$IF_NAME” con-name “$NEW_CON_NAME”

必要に応じて ipv6.method も auto に設定

nmcli connection modify “$NEW_CON_NAME” ipv6.method auto

ブート時に自動接続するように設定

nmcli connection modify “$NEW_CON_NAME” connection.autoconnect yes

この新しい接続を有効化

nmcli connection up “$NEW_CON_NAME”
“`

3. nmtui を使用する方法

nmtuiを起動し、Edit a connectionで接続を選択します。

  1. IPv4 CONFIGURATION または IPv6 CONFIGURATION を選択し、Showを押します。
  2. MethodAutomatic または Automatic (DHCP) に変更します。
  3. <OK> で保存し、Activate a connection で接続を再有効化します。

4. 設定ファイルを直接編集する方法 (/etc/sysconfig/network-scripts/ifcfg-*) (CentOS 7以前、またはNetworkManager無効時)

ifcfgファイルを編集する場合、BOOTPROTOパラメータをdhcpに設定します。

“`ini
TYPE=”Ethernet”
PROXY_METHOD=”none”
BROWSER_ONLY=”no”
BOOTPROTO=”dhcp” # DHCP設定にする
DEFROUTE=”yes”
IPV4_FAILURE_FATAL=”no”
IPV6INIT=”yes”
IPV6_AUTOCONF=”yes” # IPv6自動設定 (SLAAC/DHCPv6) を有効にする
IPV6_DEFROUTE=”yes”
IPV6_FAILURE_FATAL=”no”
NAME=”eth0″
UUID=”a1b2c3d4-e5f6-7890-1234-567890abcdef”
DEVICE=”eth0″
ONBOOT=”yes”

DHCPの場合、IPADDR, NETMASK, GATEWAY, DNS1/DNS2 は通常不要。

ただし、DHCPで取得したDNSを使わず固定DNSを使う場合は DNS1/DNS2 をここに記述する。

DNS1=”8.8.8.8″

DNS2=”8.8.4.4″

“`

編集後、ネットワークサービスを再起動します。

“`bash
sudo systemctl restart network # CentOS 7以前

または NetworkManager (ifcfgを読んでいる場合)

sudo systemctl reload NetworkManager

sudo systemctl restart NetworkManager

“`

IPv6の設定

IPv6は現代のネットワーク環境でますます重要になっています。CentOSでもIPv6は完全にサポートされており、静的設定、DHCPv6、SLAAC (Stateless Address AutoConfiguration) といった方法で設定できます。

  • 静的設定 (manual): IPv4と同様に、手動でアドレス、プレフィックス長、ゲートウェイ、DNSを設定します。サーバー用途では一般的です。
  • DHCPv6 (auto / dhcp): DHCPサーバーからIPv6アドレスや他の情報を取得します。
  • SLAAC (auto): ルーター広告(RA)に基づいて、IPv6アドレス(通常はLink-localアドレスとGlobal Unicastアドレス)とデフォルトゲートウェイを自動設定します。アドレスのホスト部はMACアドレスなどから自動生成されることが多いです(EUI-64など)。DNS情報はDHCPv6またはRAオプション(RDNSS)で取得します。nmcliではipv6.method autoを選択した場合、DHCPv6とSLAACの両方を試みるのが一般的です。

nmcliでのIPv6設定は、IPv4と同様にipv6.method, ipv6.addresses, ipv6.gateway, ipv6.dnsといったパラメータを使用します。

IPv6の無効化:

場合によっては、IPv6を完全に無効化したいことがあります。これは通常、カーネルパラメータで永続的に行われます。

/etc/sysctl.d/ ディレクトリに設定ファイルを作成します。

bash
sudo vi /etc/sysctl.d/99-disable-ipv6.conf

ファイル内容:

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

設定を反映させます。

bash
sudo sysctl -p /etc/sysctl.d/99-disable-ipv6.conf

または、システムを再起動します。
NetworkManagerの設定でipv6.method ignoreまたはdisabledを選択することでも、その接続におけるIPv6の使用を無効化できますが、これはNetworkManagerの範疇であり、カーネルレベルで無効化する上記の方法とは異なります。

高度なネットワーク設定

1. 複数のIPアドレス設定 (Secondary IP)

一つのネットワークインターフェースに複数のIPアドレス(エイリアスIP)を割り当てることはよくあります。これは、一つのサーバーで複数のサービス(それぞれ異なるIPアドレスが必要なウェブサイトなど)をホストする場合などに使用されます。

nmcliを使用する場合、ipv4.addressesipv6.addressesに複数のIPアドレスとプレフィックス長をカンマやスペースで区切って指定します。

“`bash

既存の接続名を指定

CON_NAME=”System ens33″

既存の設定に追加する形で複数のIPv4アドレスを設定

nmcli connection modify “$CON_NAME” ipv4.method manual # 必要であれば手動に設定

nmcli connection modify “$CON_NAME” ipv4.addresses “192.168.1.100/24, 192.168.1.101/24, 192.168.1.102/24”

IPv6の場合も同様

nmcli connection modify “$CON_NAME” ipv6.method manual # 必要であれば手動に設定

nmcli connection modify “$CON_NAME” ipv6.addresses “2001:db8::100/64, 2001:db8::101/64”

設定を有効化

nmcli connection down “$CON_NAME”
nmcli connection up “$CON_NAME”
“`

ifcfgファイルを直接編集する場合(CentOS 7以前など)、エイリアスインターフェースファイル(例: ifcfg-eth0:0, ifcfg-eth0:1)を作成する方法がありましたが、NetworkManagerでは推奨されません。上記のnmcliの方法がモダンなやり方です。

2. デフォルトゲートウェイの冗長化/複数のゲートウェイ

通常、デフォルトゲートウェイは一つだけですが、特定の宛先ネットワークへのルートを指定したり、メトリックを使用して複数のゲートウェイの優先度を制御したりすることが可能です。

  • 宛先ネットワークごとのルート: 特定のネットワークへの通信を、デフォルトゲートウェイ以外のゲートウェイ経由で行いたい場合に設定します。

    “`bash

    接続名を指定

    CON_NAME=”System ens33″

    192.168.2.0/24 ネットワークへの通信を 192.168.1.254 ゲートウェイ経由で行うルートを追加

    nmcli connection modify “$CON_NAME” +ipv4.routes “192.168.2.0/24 192.168.1.254”

    設定を有効化

    nmcli connection down “$CON_NAME”
    nmcli connection up “$CON_NAME”
    ``
    確認:
    ip route show`

  • メトリックによるゲートウェイの優先度制御: 同じ宛先(例: デフォルトルート 0.0.0.0/0)に対して複数のルートがある場合、メトリック値が小さいルートが優先されます。これは、複数のネットワークインターフェースがあり、それぞれにデフォルトゲートウェイが設定されている場合などに意図しないルーティングを防ぐのに役立ちます。

    “`bash

    接続名を指定

    CON_NAME=”System ens33″

    この接続で設定されるルートのメトリック値を設定

    nmcli connection modify “$CON_NAME” ipv4.route-metric 100 # デフォルトより高い値を設定することが多い

    設定を有効化

    nmcli connection down “$CON_NAME”
    nmcli connection up “$CON_NAME”
    ``
    確認:
    ip route show` (metric値が表示されます)

3. DNSサーバーの設定

DNSサーバーは、IPアドレス設定と同時に設定するのが一般的です。nmcliではipv4.dnsipv6.dnsを使用します。

NetworkManagerが有効な場合、/etc/resolv.confファイルは通常NetworkManagerによって管理されます。手動で/etc/resolv.confを編集しても、NetworkManagerによって上書きされる可能性があります。永続的な設定はnmcliまたはnmtuiで行うべきです。

DNS検索ドメインを設定する場合は、ipv4.dns-searchを使用します。

“`bash

接続名を指定

CON_NAME=”System ens33″

検索ドメインを設定 (例: yourdomain.local をドメイン名補完に使用)

nmcli connection modify “$CON_NAME” ipv4.dns-search “yourdomain.local”

設定を有効化

nmcli connection down “$CON_NAME”
nmcli connection up “$CON_NAME”
``
確認:
cat /etc/resolv.conf` (search行が追加されます)

4. ボンディング(Bonding)

ボンディングは、複数のネットワークインターフェースを論理的に束ねて一つのインターフェースとして扱う技術です。これにより、帯域幅の増加や冗長性の確保(耐障害性向上)が図れます。様々なモードがあります(例: active-backup, balance-rr, 802.3adなど)。

nmcliを使用してボンディングを設定する手順は以下の通りです。

  1. ボンドマスター接続を作成:
    “`bash
    # ボンドインターフェース名と接続名を指定 (例: bond0, mybond)
    BOND_IF=”bond0″
    BOND_CON=”mybond”

    ボンド接続を作成

    nmcli connection add type bond con-name “$BOND_CON” ifname “$BOND_IF” mode active-backup # 例: active-backup モード

    その他のモード: balance-rr, balance-xor, broadcast, 802.3ad, balance-tlb, active-backup

    ボンドインターフェースにIPアドレスを設定 (静的またはDHCP)

    nmcli connection modify “$BOND_CON” ipv4.method manual ipv4.addresses “192.168.1.200/24” ipv4.gateway “192.168.1.1” ipv4.dns “8.8.8.8”

    DHCPの場合は ipv4.method auto

    “`

  2. スレーブ接続を作成: ボンドに含める物理インターフェースごとにスレーブ接続を作成します。
    “`bash
    # 物理インターフェース名とスレーブ接続名を指定 (例: ens33, ens34, mybond-slave1, mybond-slave2)
    SLAVE1_IF=”ens33″
    SLAVE1_CON=”mybond-slave1″
    SLAVE2_IF=”ens34″
    SLAVE2_CON=”mybond-slave2″

    スレーブ1接続を作成し、マスターにリンク

    nmcli connection add type ethernet con-name “$SLAVE1_CON” ifname “$SLAVE1_IF” master “$BOND_CON”

    スレーブ2接続を作成し、マスターにリンク

    nmcli connection add type ethernet con-name “$SLAVE2_CON” ifname “$SLAVE2_IF” master “$BOND_CON”
    “`

  3. 接続を有効化:
    まずマスターを有効化し、次にスレーブを有効化します。
    bash
    nmcli connection up "$BOND_CON"
    nmcli connection up "$SLAVE1_CON"
    nmcli connection up "$SLAVE2_CON"

    または、NetworkManagerを再起動します。

  4. 設定の確認:
    bash
    ip addr show bond0
    cat /proc/net/bonding/bond0 # ボンディングの状態を確認

5. チーミング(Teaming)

チーミングはボンディングと似ていますが、より新しい技術であり、機能が豊富で設定が柔軟です。チーミングデーモン(teamd)によって管理されます。モードはランナー(runner)として定義されます(例: activebackup, loadbalance, broadcastなど)。

nmcliを使用してチーミングを設定する手順は以下の通りです。

  1. チームマスター接続を作成:
    “`bash
    # チームインターフェース名と接続名を指定 (例: team0, myteam)
    TEAM_IF=”team0″
    TEAM_CON=”myteam”

    チーム接続を作成し、ランナーを指定

    ランナーの指定はJSON形式で行う

    例: active-backup ランナー

    RUNNER_CONFIG='{“runner”: {“name”: “activebackup”}}’
    nmcli connection add type team con-name “$TEAM_CON” ifname “$TEAM_IF” config “$RUNNER_CONFIG”

    チームインターフェースにIPアドレスを設定 (静的またはDHCP)

    nmcli connection modify “$TEAM_CON” ipv4.method manual ipv4.addresses “192.168.1.210/24” ipv4.gateway “192.168.1.1” ipv4.dns “8.8.8.8”

    DHCPの場合は ipv4.method auto

    ``
    他のランナー設定例:
    *
    broadcast:‘{“runner”: {“name”: “broadcast”}}’*roundrobin:‘{“runner”: {“name”: “roundrobin”}}’*loadbalance:‘{“runner”: {“name”: “loadbalance”}}’`

  2. スレーブ接続を作成: チームに含める物理インターフェースごとにスレーブ接続を作成します。
    “`bash
    # 物理インターフェース名とスレーブ接続名を指定 (例: ens33, ens34, myteam-slave1, myteam-slave2)
    SLAVE1_IF=”ens33″
    SLAVE1_CON=”myteam-slave1″
    SLAVE2_IF=”ens34″
    SLAVE2_CON=”myteam-slave2″

    スレーブ1接続を作成し、マスターにリンク

    nmcli connection add type ethernet con-name “$SLAVE1_CON” ifname “$SLAVE1_IF” master “$TEAM_CON”

    スレーブ2接続を作成し、マスターにリンク

    nmcli connection add type ethernet con-name “$SLAVE2_CON” ifname “$SLAVE2_IF” master “$TEAM_CON”
    “`

  3. 接続を有効化: ボンディングと同様、マスターを有効化してからスレーブを有効化します。
    bash
    nmcli connection up "$TEAM_CON"
    nmcli connection up "$SLAVE1_CON"
    nmcli connection up "$SLAVE2_CON"

  4. 設定の確認:
    bash
    ip addr show team0
    teamdctl team0 state # チーミングの状態を確認

6. ブリッジ(Bridge)

ブリッジは、複数のネットワークインターフェースを仮想的なスイッチとして結合する技術です。これにより、異なるネットワークセグメントにあるデバイスを同じネットワークセグメントにあるかのように通信させることができます。仮想化環境でホストの物理NICと仮想マシンの仮想NICを接続する際によく使用されます。

nmcliを使用してブリッジを設定する手順は以下の通りです。

  1. ブリッジマスター接続を作成:
    “`bash
    # ブリッジインターフェース名と接続名を指定 (例: br0, mybridge)
    BRIDGE_IF=”br0″
    BRIDGE_CON=”mybridge”

    ブリッジ接続を作成

    nmcli connection add type bridge con-name “$BRIDGE_CON” ifname “$BRIDGE_IF”

    ブリッジインターフェースにIPアドレスを設定 (静的またはDHCP)

    ブリッジ自体にIPアドレスを割り当てるのは、ホスト側でブリッジ経由で通信する場合。

    仮想マシンにIPを割り振る場合は、ブリッジ自体はIPなし (ipv4.method disabled) とすることが多い。

    nmcli connection modify “$BRIDGE_CON” ipv4.method manual ipv4.addresses “192.168.1.220/24” ipv4.gateway “192.168.1.1” ipv4.dns “8.8.8.8”

    または IPなし: nmcli connection modify “$BRIDGE_CON” ipv4.method disabled

    “`

  2. スレーブ接続を作成: ブリッジに含める物理または仮想インターフェースごとにスレーブ接続を作成します。物理NICをブリッジに含める場合、その物理NIC自体にはIPアドレスを設定しません(IPアドレスはブリッジに設定するか、仮想マシンに設定します)。

    “`bash

    物理インターフェース名とスレーブ接続名を指定 (例: ens33, mybridge-slave1)

    SLAVE1_IF=”ens33″
    SLAVE1_CON=”mybridge-slave1″

    スレーブ接続を作成し、マスターにリンク

    nmcli connection add type ethernet con-name “$SLAVE1_CON” ifname “$SLAVE1_IF” master “$BRIDGE_CON”

    物理NIC自体に設定されていたIPアドレスは削除されるか、ブリッジに移行する

    ``
    仮想マシンの仮想NIC(例:
    vnet0`)をブリッジに追加する場合も同様です。

  3. 接続を有効化: ボンディングと同様、マスターを有効化してからスレーブを有効化します。
    bash
    nmcli connection up "$BRIDGE_CON"
    nmcli connection up "$SLAVE1_CON"

  4. 設定の確認:
    bash
    ip addr show br0
    brctl show br0 # ブリッジの状態を確認 (bridge-utils パッケージが必要)

7. VLAN (Virtual LAN)

VLANは、物理的なネットワークを論理的に分割する技術です。一つの物理NICで、複数のVLANタグ付きフレームを送受信することで、複数のネットワークセグメントに同時に接続できます。

nmcliを使用してVLANを設定する手順は以下の通りです。

  1. VLAN接続を作成: VLAN IDとベースとなる物理インターフェースを指定して、VLANインターフェースを作成します。

    “`bash

    ベース物理インターフェース名、VLAN ID、VLANインターフェース名、VLAN接続名を指定

    BASE_IF=”ens33″
    VLAN_ID=”10″
    VLAN_IF=”${BASE_IF}.${VLAN_ID}” # 例: ens33.10
    VLAN_CON=”myvlan-${VLAN_ID}” # 例: myvlan-10

    VLAN接続を作成

    nmcli connection add type vlan con-name “$VLAN_CON” dev “$BASE_IF” id “$VLAN_ID” ingress-priority-map “0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7” egress-priority-map “0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7” # 優先度マップは任意
    “`

  2. VLANインターフェースにIPアドレスを設定: 作成したVLAN接続に、静的またはDHCPでIPアドレスを設定します。

    “`bash

    作成したVLAN接続名を指定

    VLAN_CON=”myvlan-10″

    IPアドレスを設定 (例: 静的)

    nmcli connection modify “$VLAN_CON” ipv4.method manual ipv4.addresses “192.168.10.100/24” ipv4.gateway “192.168.10.1” ipv4.dns “8.8.8.8”

    DHCPの場合は ipv4.method auto

    “`

  3. 接続を有効化: VLAN接続を有効化します。ベースとなる物理インターフェースの接続も有効である必要があります。
    bash
    nmcli connection up "$VLAN_CON"

  4. 設定の確認:
    bash
    ip addr show "$VLAN_IF" # 例: ip addr show ens33.10

ネットワーク設定の確認とトラブルシューティング

ネットワーク設定を行った後は、正しく機能しているかを確認し、問題が発生した場合は原因を特定して解決する必要があります。

確認コマンド

  • インターフェースの状態とIPアドレス:
    bash
    ip addr show # 全インターフェース
    ip addr show ens33 # 特定インターフェース
    # または (非推奨だが広く使われる)
    # ifconfig -a

    UP, LOWER_UP フラグ、割り当てられた inet (IPv4) および inet6 (IPv6) アドレスを確認します。

  • ルーティングテーブル:
    bash
    ip route show # IPv4 ルート
    ip -6 route show # IPv6 ルート
    # または (非推奨)
    # netstat -rn

    デフォルトルート (default または 0.0.0.0/0) や特定のネットワークへのルート、使用されるインターフェース (dev) やゲートウェイ (via) を確認します。

  • DNS設定:
    bash
    cat /etc/resolv.conf

    nameserver エントリに正しいDNSサーバーのIPアドレスが記述されているか確認します。search エントリも確認します。

  • NetworkManagerの状態:
    bash
    nmcli dev status # デバイスと接続の状態
    nmcli connection show # 接続プロファイル一覧
    nmcli connection show "System ens33" # 特定の接続プロファイル詳細
    systemctl status NetworkManager # NetworkManagerサービスの稼働状況

    インターフェースが期待する接続 (CONNECTION) に関連付けられ、STATEconnected になっているか確認します。接続プロファイルの詳細で、設定したIPアドレス、ゲートウェイ、DNSなどが正しいか確認します。

  • ネットワーク接続性:
    bash
    ping <IPアドレスまたはホスト名>

    デフォルトゲートウェイ、ローカルネットワーク内の他のデバイス、インターネット上の公共DNSサーバー(例: 8.8.8.8)、外部のウェブサイト(例: google.com)などにPingを打ち、応答があるか確認します。Pingが通らない場合は、IPアドレス、サブネットマスク、ゲートウェイ、ファイアウォールなどが問題である可能性があります。

  • 経路確認:
    bash
    traceroute <IPアドレスまたはホスト名> # IPv4
    traceroute -6 <IPアドレスまたはホスト名> # IPv6
    # または (新しいコマンド)
    # mtr <IPアドレスまたはホスト名> # より詳細な継続的な確認

    パケットが宛先に到達するまでの経路上のルーターを表示します。どの段階で通信が途絶えているかを特定するのに役立ちます。

  • ポート接続性:
    “`bash
    ss -tulnp # 待機中のTCP/UDPポートと関連プロセス
    ss -antp # 全てのTCPコネクションと関連プロセス
    # または (非推奨)
    # netstat -tulnp
    # netstat -antp

    特定のポートへの接続を試みる

    nc -zv <宛先IP> <ポート番号> # Ncat/Netcat コマンド

    telnet <宛先IP> <ポート番号> # Telnet クライアント

    “`
    サーバー自身が特定のポートでリスニングしているか、あるいは他のサーバーの特定のポートに接続できるかを確認します。

一般的なトラブルシューティング手順

ネットワークの問題が発生した場合、以下の手順で原因を切り分けます。

  1. 物理的な接続の確認: ネットワークケーブルがNICとスイッチ/ルーターに正しく接続されているか、リンクランプが点灯しているかを確認します。
  2. インターフェースの状態確認: ip link show または ip addr show でインターフェースが UP になっているか確認します。もし DOWN なら ip link set ens33 up のように手動でUPさせられるか試します。
  3. NetworkManager/Networkサービスの確認: systemctl status NetworkManager または systemctl status network でサービスが起動しているか確認します。エラーが出ていないかログ (journalctl -u NetworkManager など) も確認します。必要であればサービスを再起動します (systemctl restart NetworkManager)。
  4. IPアドレス、サブネットマスク、ゲートウェイ設定の確認: ip addr showip route show、そして設定ファイル (nmcli connection show <con_name>) を見比べて、設定値が正しいか、ネットワーク構成と一致しているか確認します。特にサブネットマスクやゲートウェイのアドレスミスはよくある原因です。
  5. ローカルネットワーク内の疎通確認: ゲートウェイのIPアドレスや同じサブネット内の他のデバイスのIPアドレスに対して ping を実行します。これが成功すれば、サーバー自体のNIC設定とローカルネットワーク内の接続は問題ない可能性が高いです。
  6. デフォルトゲートウェイ経由の疎通確認: ゲートウェイの先にあるIPアドレス(例: 公共DNSサーバー 8.8.8.8)に対して ping を実行します。これが成功すれば、サーバーからゲートウェイ経由で外部に出る経路は問題ない可能性が高いです。Pingが失敗する場合は、ゲートウェイのアドレスが間違っているか、ゲートウェイやその先のネットワークに問題がある可能性があります。traceroute で経路を確認します。
  7. DNS解決の確認: 外部のホスト名(例: google.com)に対して ping を実行します。PingがIPアドレスでは通るのにホスト名では通らない場合、DNS設定に問題がある可能性が高いです。/etc/resolv.conf の設定を確認し、dig <ホスト名>nslookup <ホスト名> で名前解決が正しく行われるか確認します。DNSサーバーのIPアドレスが間違っている、DNSサーバー自体がダウンしている、ファイアウォールでDNS (UDP 53ポート) がブロックされているなどが考えられます。
  8. ファイアウォールの確認: ファイアウォール(firewalldiptables)が通信をブロックしていないか確認します。特に外部からのアクセスを許可しているサービス(SSH, HTTPなど)のポートが正しく開放されているか確認します。sudo firewall-cmd --list-all (firewalld) や sudo iptables -nvL (iptables) でルールを確認します。必要であれば、一時的にファイアウォールを停止して疎通確認することも有効ですが、セキュリティリスクを理解して自己責任で行ってください。
  9. SELinuxの確認: SELinuxがネットワーク通信を制限している可能性もあります。getenforce で状態を確認し、Permissiveモードに一時的に変更して問題が解消するか確認するなどが診断に有効です(sudo setenforce 0、元に戻すには sudo setenforce 1)。問題がSELinuxにある場合は、適切なSELinuxポリシーを設定する必要があります。
  10. ログファイルの確認: /var/log/messagesjournalctl -u NetworkManager など、システムログやNetworkManagerのログに関連するエラーメッセージが出力されていないか確認します。

これらの手順を順に進めることで、問題の原因を体系的に絞り込むことができます。

CentOSバージョン間のネットワーク設定の違い

CentOS 7とCentOS 8/9/Streamでは、ネットワーク管理の仕組みに大きな変更がありました。

  • CentOS 7まで: ネットワーク管理の標準はnetworkサービスであり、設定は主に/etc/sysconfig/network-scripts/ifcfg-*ファイルを直接編集して行いました。NetworkManagerも利用可能でしたが、サーバー用途では無効化されることも多かったです。
  • CentOS 8/9/Stream: NetworkManagerが標準となり、強く推奨されています。設定は主にNetworkManagerのツール(nmcli, nmtui)を通じて行います。/etc/sysconfig/network-scripts/ifcfg-*ファイルは依然として読み込まれますが、NetworkManagerが管理下に置くため、直接編集するのではなくnmcli等を使うのが望ましいとされます。networkサービスは非推奨となり、デフォルトではインストールされないか、NetworkManagerに置き換えられます。

したがって、CentOS 7からCentOS 8以降に移行する場合、ネットワーク設定の考え方や使用するツールをNetworkManager中心に切り替える必要があります。古いifcfgファイルの設定を新しいNetworkManagerの設定に変換したり、nmclinmtuiでの操作に慣れる必要があります。

セキュリティに関する考慮事項

ネットワーク設定はセキュリティと密接に関わっています。

  • ファイアウォール: サーバーが必要とするポート以外は全て閉じるのが基本です。CentOSではfirewalldが標準のファイアウォール管理ツールです。SSH (22/tcp), HTTP (80/tcp), HTTPS (443/tcp) など、公開するサービスに対応するポートのみを開放します。
  • 不要なサービスの停止: サーバー上で稼働している不要なネットワーク関連サービス(例: unnecessary daemons, unused protocols)は停止します。
  • SELinux: SELinuxをEnforcingモードで有効に保つことで、ネットワークサービスに関する予期しない挙動や攻撃による被害を軽減できます。

まとめ

本記事では、CentOSにおけるIPアドレス設定について、基本的な概念から静的・DHCP設定、IPv6、ボンディングやブリッジといった高度な設定、そして確認やトラブルシューティングの方法まで、幅広く詳細に解説しました。

現代のCentOSおよびCentOS Stream環境では、NetworkManagerと、そのコマンドラインツールであるnmcliがネットワーク設定の標準的な手法です。nmcliは柔軟性が高く、スクリプト化も容易であるため、積極的に活用することをお勧めします。nmtuiはCUI環境での簡単な設定変更に便利です。古い/etc/sysconfig/network-scripts/ifcfg-*ファイルを直接編集する方法は、NetworkManagerを使用しない特殊な環境を除き、推奨されません。

ネットワーク設定はサーバー運用の根幹であり、正しい設定を行うことは安定したシステム稼働のために不可欠です。本記事で解説した内容を参考に、ご自身のCentOS環境で適切かつセキュアなネットワーク設定を行っていただければ幸いです。問題発生時には、確認コマンドや体系的なトラブルシューティング手順を活用し、原因を特定・解決してください。

サーバーやネットワーク技術は常に進化しています。CentOSのネットワーク設定も、将来的にNetworkManager以外の新しい技術が登場する可能性もゼロではありません(他のLinuxディストリビューションではNetplanのようなツールも登場しています)。しかし、現状ではNetworkManagerがCentOS系OSのネットワーク管理の中心であることは間違いありません。

本記事が、CentOSにおけるネットワーク設定の「知っておくべき全て」を理解するための一助となれば幸いです。


コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール