server-memo.net

固定IPネットワーク設定(NetworkManagerを使用しない場合)

      2016/01/22

検証環境

今回はCentOS6.6上で検証を行っています。

CentOS 6からのネットワーク設定について

CentOS 6から「NetWorkManager」という、ネットワーク設定用のサービスが動作しているため、「 /etc/sysconfig/network-scripts/ifcfg-eth0」設定ファイルを手動で編集しても、「NetworkManager」の影響で各種設定ファイルが上書きされるなど色々と問題がでてしまいます。 「NetworkManager」を使用することで、ネットワーク設定が簡単になるなどのメリットもあるのですが、従来の方法で設定を行いたいと言った場合は「NetworkManager」サービスを停止させる必要があります。

NetworkManagerの停止

現在「NetoworkManager」サービスが起動しているか確認を行い、動作している場合は停止させます。まずは、「service」コマンドを使用して、「NetworkManager」サービスが動作しているか確認します。

「NetworkManager」動作確認
NetworkManager動作中の表示例
# service NetworkManager status
NetworkManager (pid  1299) を実行中...
NetowrkManager停止中の表示例
# service NetworkManager status
NetworkManager は停止しています

NetworkManagerサービスの停止

「NetworkManager」サービスが動作している場合は「service」コマンドで停止させます。すでに停止している場合は特にこの作業は必要ありません。

# service NetworkManager stop
NetworkManager デーモンを停止中:                           [  OK  ]

NetworkManager自動起動停止

次に、サーバ再起動時に「NetworkManager」が自動起動してこないよう、「chkconfig」コマンドを使用して、自動起動の設定もoffにしてしまいます。

NetworkManager自動起動無効化
自動起動の無効化
# chkconfig NetworkManager off
自動起動無効化の確認
# chkconfig --list NetworkManager
NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off

これで、「NetworkManager」はサーバ再起動後も起動してきません。

ネットワーク(NIC)の設定

「NetworkManager」の停止作業が完了したので、いよいよネットワークの設定を行っていきます。
設定ファイルは、「/etc/sysconfig/network-scripts/ifcfg-eth0」となり、このファイルを編集することでIPアドレスの設定を行うことができます。
複数のNICがある場合は「ifcfg-eth1」「ifcfg-eth2」といったように末尾の番号が増えていきます。(CentOS7からはファイル名が変わってきます。)

設定ファイルの編集

既存の設定ファイルをバックアップしてから、作業を行っていきます。

注意点

ネットワークの設定を失敗してしまうとサーバと通信が出来なくなってしまいますので、十分に注意し作業を行ってください。
設定に失敗した場合でも、サーバにアクセス出来るように何らかの準備を行ってから作業を行いましょう。

# cd /etc/sysconfig/network-scripts/
# cp -p ifcfg-eth0 yyyymmdd_ifcfg-eth0
# vi ifcfg-eth0
ifcfg-eth0ファイル設定例

今回は下記の内容で設定しました。

  • IPアドレス 192.168.1.101/24
  • デフォルトゲートウェイ 192.168.1.1
ifcfg-eth0ファイル内容
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.101
PREFIX=24
GATEWAY=192.168.1.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
HWADDR=00:0C:29:07:CF:27

設定項目について

設定項目について簡単に説明していきます。

DEVICE

デバイス名です。
設定ファイル名の「ifcfg-xxx」xxx部分と同様の名前にします。
ifcfg-eth0ならばeth0
ifcfg-eth1ならばeth1
といったように記述します。

TYPE

インターフェイル(NIC)の規格を設定します。
イーサネット(一般的なNIC)ならばEthernetとします。

ONBOOT

サーバ起動時のNIC動作を指定します。

有効にする場合「yes」
無効にする場合「no」
「no」とした場合はNICを有効化するためには、OS起動後手動で有効化させる必要があります。

BOOTPROTO

IP情報の設定方法について設定します。
none 固定IPを設定する場合
dhcp DHCPでIPを受け取る場合

bootp BOOTP(Boot strap Protocol)でIPを受け取る場合

IPADDR

IPアドレスを指定します。

PREFIX

ネットマスクのビット数を指定します。
「255.255.255.0」ならば「24」といったように、10進数で記入します。

GATEWAY

NIC毎の個別ゲートウェイを指定します。

この項目自体を設定しない場合は、「/etc/sysconfig/network」の「GATEWAY」部分の設定がデフォルトゲートウェイとして反映されます。

DEFROUTE

デフォルトルートとして使用するNICを指定します。

IPV4_FAILURE_FATAL

IPv4の設定に失敗した場合にIPv6の設定を行うかどうかの設定です。
「yes」ならばIPv6を使用しない
「no」ならばIPv6を使用する

IPV6INIT

IPv6を使用するかどうかの設定です。
「yes」 IPv6を使用する
「no」IPv6を使用しない

HWADDR

MACアドレスを設定します。
NICのMACアドレスが分からない場合は「ifconfig」コマンドで調べてください。

設定反映

設定ファイルの編集が完了したら、「service」コマンドを使用して設定を反映させます。

設定の反映

設定反映前には、設定間違い等がないか十分に設定ファイルを確認してからこの作業を行ってください。

# service network restart
インターフェース eth0 を終了中: [ OK ]
ループバックインターフェースを終了中 [ OK ]
ループバックインターフェイスを呼び込み中 [ OK ]
インターフェース eth0 を活性化中: Determining if ip address 192.168.1.101 is already in use for device eth0...
[ OK ]

Determining if ip addressについて

「Determining if ip address 192.168.1.101 is already in use for device eth0...」と表示されていますが、これはCentOS6.5から仕様変更されたIPアドレスの重複確認によるメッセージで、「このIPはeth0ですでに使われているんで確認してね」というメッセージなのですが、特に問題はありません。

設定確認

「ifconfig」コマンドを使用して、設定したIP情報が反映されているか確認できます。
問題なく設定ができているようでしたら、あわせて「ping」などでの疎通試験も行いましょう。

可能であれば、サーバの再起動も行って試験をしたほうがより安心です。

# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:07:CF:27
inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe07:cf27/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:62442 errors:0 dropped:0 overruns:0 frame:0
TX packets:48530 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:8459124 (8.0 MiB) TX bytes:8112795 (7.7 MiB)

以上で、固定(静的)IP情報の設定は完了となります。

おまけ

設定ファイルバックアップについての注意点

設定ファイルをバックアップする際には、yyyymmdd_ifcfg-eth0といった用に頭に日時等の文字をいれるファイル名にしてください。
ifcfg-eth0_yyyymmddとかやってしまうと、この設定ファイルも読み込んでインターフェイスを有効化させようとしてしまいます。

実行例
 # cp -p ifcfg-eth0 ifcfg-eth0_20150121 
# service network restart 
インターフェース eth0 を終了中: [ OK ] 
ループバックインターフェースを終了中 [ OK ] 
ループバックインターフェイスを呼び込み中 [ OK ] 
インターフェース eth0 を活性化中: Determining if ip address 192.168.1.101 is already in use for device eth0... [ OK ] 
インターフェース eth0_20150121 を活性化中: RTNETLINK answers: File exists [ OK ] 

これは、何故かというと「/etc/init.d/network」スクリプトで「ifcfg*」といった具合でファイル名を拾っているからです。

/etc/init.d/network 抜粋

下記のように「ifcfg*」で引っ掛けているようです。

# find all the interfaces besides loopback.
# ignore aliases, alternative configurations, and editor backup files
interfaces=$(ls ifcfg* | \
            LANG=C sed -e "$__sed_discard_ignored_files" \
                       -e '/\(ifcfg-lo$\|:\|ifcfg-.*-range\)/d' \
                       -e '/ifcfg-[A-Za-z0-9#\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \
            LANG=C sort -k 1,1 -k 2n | \
            LANG=C sed 's/ //')
rc=0

 - ネットワーク設定