Linuxで固定IPを設定する方法|nmcli・ifcfg・netplanの設定ファイル別ガイド

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtipsネットワーク > Linuxで固定IPを設定する方法|nmcli・ifcfg・netplanの設定ファイル別ガイド
「コマンドで設定したIPアドレスが、再起動すると元に戻ってしまう……」
固定IPは ip addr add のような一時設定では永続化されません。サーバーで使う固定IPは、設定ファイルか NetworkManager に書き込んで初めて再起動後も保持されます。

この記事では、CentOS / RHEL / Rocky / AlmaLinux / Ubuntu それぞれで「設定ファイル経由でIPアドレスを固定する方法」を、現場で使う手順に沿って解説します。
/etc/sysconfig/network-scripts/ifcfg-* の編集(CentOS 6 / RHEL 6時代)、nmcli による NetworkManager 経由の設定(RHEL 7以降の推奨)、Ubuntu の netplan まで、ディストリ別の正解を一気にまとめます。

コマンドで一時的にIPアドレスを設定・確認する方法は LinuxでIPアドレスを確認する方法|ip aの出力の読み方・NIC状態・hostname -Iの使い分け を参照してください。本記事は「永続化」に特化しています。
この記事のポイント
・固定IPの永続化は ifcfg ファイル / nmcli / netplan のいずれかで行う
・RHEL 7以降は nmcli connection modify で設定するのが標準・推奨
・CentOS 6 / RHEL 6 は /etc/sysconfig/network-scripts/ifcfg-eth0 を直接編集
・Ubuntu 18.04以降は /etc/netplan/*.yaml を編集して netplan apply で反映
・設定後は ip a と ping で疎通確認、再起動テストまで行うのが現場の鉄則

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

なぜ「設定ファイル経由」で固定IPを設定するのか

Linuxで ip addr addifconfig eth0 のようなコマンドでIPアドレスを設定しても、それはカーネルの実行時設定にすぎません。再起動するとネットワーク初期化スクリプトが設定ファイルを読み直すため、コマンドで入れた設定はきれいに消えます。

サーバー運用で固定IPが必要な理由はだいたいこのあたりです。

SSHの接続先を固定したい:DHCPでIPが変わると ~/.ssh/config やファイアウォールの許可設定が崩れる
サービスのバインド先を安定させたい:Apache、Nginx、データベースが特定IPでLISTENしている場合、IPが変わると起動失敗する
監視・バックアップの宛先を変えたくない:Zabbix、Prometheus、rsyncのジョブが固定IP前提で組まれている

こうした要件を満たすには、設定ファイルか NetworkManager の永続設定に書き込む必要があります。どのファイルに書くかはディストリと年代で変わるので、順に見ていきます。

1.【RHEL 7以降・推奨】nmcli で固定IPを設定する

RHEL 7、CentOS 7、Rocky Linux、AlmaLinux では nmcli(NetworkManagerのCLI)が標準的な設定方法です。RHEL 9以降は ifcfg ファイル方式が非推奨になり、nmcli もしくはキーファイル(/etc/NetworkManager/system-connections/)方式が正解になりました。

1-1. 既存のコネクション名を確認する

まず NetworkManager が認識しているコネクション名(接続プロファイル名)を確認します。デバイス名(ens33eth0)とは別物なので注意してください。

nmcli connection show

出力例:

NAME UUID TYPE DEVICE ens33 3a4c1f12-xxxx-xxxx-xxxx-xxxxxxxxxxxx ethernet ens33 lo 00000000-0000-0000-0000-000000000000 loopback lo

ここでは NAME 列の ens33 が以降のコマンドで指定するコネクション名です。

1-2. 静的IPを設定する

nmcli connection modify でIPアドレス、ゲートウェイ、DNSをまとめて指定します。

nmcli connection modify ens33 ipv4.method manual \ ipv4.addresses 192.168.0.36/24 \ ipv4.gateway 192.168.0.1 \ ipv4.dns "192.168.0.1 8.8.8.8" \ ipv4.dns-search example.local \ connection.autoconnect yes

ipv4.method manual:DHCPをやめて手動設定にする宣言
ipv4.addresses:IPアドレスとプレフィックス長(/24 はNETMASK 255.255.255.0と同じ)
ipv4.gateway:デフォルトゲートウェイ
ipv4.dns:DNSサーバー(複数指定はダブルクォートで囲む)
connection.autoconnect yes:起動時に自動接続させる

1-3. 設定を反映する

modifyしただけでは反映されません。コネクションを再アップさせて初めて反映されます。

nmcli connection down ens33 && nmcli connection up ens33

SSH越しに作業しているときは、down→upの間にセッションが切れます。コンソール接続またはtmux内で作業するのが安全です。

1-4. 設定が反映されたかを確認する

# IPアドレスの確認 ip a show ens33 # デフォルトルートの確認 ip route # DNS設定の確認 nmcli device show ens33 | grep IP4.DNS

2.【CentOS 6 / RHEL 6】ifcfg ファイルを直接編集する

古い環境(CentOS 6 / RHEL 6 / 一部の RHEL 7初期)では、/etc/sysconfig/network-scripts/ifcfg-eth0 を直接編集します。RHEL 9以降では非推奨ですが、現場ではまだ稼働中の旧サーバーを引き継ぐことがあるので押さえておきましょう。

2-1. ifcfg ファイルを編集する

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

DEVICE="eth0" BOOTPROTO="static" IPADDR="192.168.0.36" NETMASK="255.255.255.0" GATEWAY="192.168.0.1" DNS1="192.168.0.1" DNS2="8.8.8.8" ONBOOT="yes" NM_CONTROLLED="no"

BOOTPROTO=static:DHCPを使わず固定IPにする宣言(dhcp / none / static)
IPADDR:割り当てるIPアドレス
NETMASK:サブネットマスク(または PREFIX=24 の形でも可)
GATEWAY:デフォルトゲートウェイ
DNS1 / DNS2:プライマリ/セカンダリDNS
ONBOOT=yes:起動時に自動でインターフェースを上げる
NM_CONTROLLED=no:NetworkManagerに触らせない(旧来のnetworkサービスで管理する場合)

2-2. ネットワークサービスを再起動して反映する

# CentOS 6 / RHEL 6 service network restart # または /etc/init.d/network restart

RHEL 7以降で旧 ifcfg を残したまま運用している場合は、以下のように systemd 経由でネットワークサービスを再起動します。

# RHEL 7以降で network-scripts が入っている場合 systemctl restart network

3.【Ubuntu 18.04以降】netplan で固定IPを設定する

Ubuntu 18.04 LTS 以降は netplan が標準です。設定ファイルは YAML で /etc/netplan/ 配下に置き、バックエンドは NetworkManager または systemd-networkd を選びます。

3-1. 既存の設定ファイルを確認する

ls /etc/netplan/

00-installer-config.yaml50-cloud-init.yaml などが既にあるはずです。

3-2. YAMLファイルを編集する

sudo vi /etc/netplan/00-installer-config.yaml

内容例(インデントはスペース2文字、タブ禁止):

network: version: 2 renderer: networkd ethernets: ens33: dhcp4: false addresses: - 192.168.0.36/24 routes: - to: default via: 192.168.0.1 nameservers: addresses: - 192.168.0.1 - 8.8.8.8 search: - example.local

3-3. 設定を適用する

# 設定の文法チェック sudo netplan generate # 設定の試験適用(120秒で自動ロールバック・SSH切断対策) sudo netplan try # 確定適用 sudo netplan apply

netplan try はSSH越しの設定変更で必須レベルの安全装置です。問題があれば自動で前の設定に戻るため、リモート作業で固定IP変更してSSHが切れる事故を防げます。

4.【RHEL 9以降】キーファイル方式で固定IPを設定する

RHEL 9 / Rocky 9 / AlmaLinux 9 では ifcfg ファイル方式は非推奨で、/etc/NetworkManager/system-connections/ 配下のキーファイル(INI形式)が標準になりました。

基本的には nmcli 経由で設定すれば自動的にこの形式で保存されるため、手で編集する機会は少ないですが、構成管理ツール(Ansible等)で配布する場合は中身を知っておく必要があります。

sudo vi /etc/NetworkManager/system-connections/ens33.nmconnection

[connection] id=ens33 type=ethernet interface-name=ens33 autoconnect=true [ipv4] method=manual addresses=192.168.0.36/24 gateway=192.168.0.1 dns=192.168.0.1;8.8.8.8; [ipv6] method=disabled

このファイルは権限 600 でないと NetworkManager が読み込みを拒否します。手で配置した直後は必ず権限を確認してください。

sudo chmod 600 /etc/NetworkManager/system-connections/ens33.nmconnection sudo nmcli connection reload sudo nmcli connection up ens33

5.【実務Tips】設定変更時に必ずやる安全確認

固定IP設定はオペレーション事故が多い領域です。SSH越しに設定して接続が切れて復旧不能、というのは新人がほぼ通る道です。

5-1. 旧設定をバックアップしてから編集する

# 編集前にバックアップを取る sudo cp -p /etc/sysconfig/network-scripts/ifcfg-eth0 \ /etc/sysconfig/network-scripts/ifcfg-eth0.bak.$(date +%Y%m%d)

5-2. SSH越しの作業は tmux か screen で行う

ネットワーク再起動でSSHセッションが切れると、編集中のviセッションごと飛びます。tmux内で作業すれば、SSH切断後に再接続して tmux attach で復帰できます。

5-3. 反映後はping・SSH再接続テストまでやる

# IPが当たっているか ip a show ens33 # デフォルトゲートウェイへの疎通 ping -c 3 192.168.0.1 # 名前解決 ping -c 3 www.google.com # 再起動後も維持されるか(最重要) sudo reboot

再起動して同じIPで上がってくることを確認するまで、その作業は完了とは言えません。

6.【トラブルシュート】固定IPが反映されない時の対処

「設定したのに反映されない」

ありがちなのが、nmcli connection modify したあとに nmcli connection up を打ち忘れているパターンです。modifyは設定ファイルへの書き込みだけで、ランタイムには反映されません。

ifcfg編集後は systemctl restart NetworkManager または nmcli connection reload でファイル変更を NetworkManager に再読込させる必要があります。

「再起動するとIPが消える」

ifcfgファイルで ONBOOT="no" になっていると、起動時にインターフェースが上がらず固定IPも当たりません。ONBOOT="yes" を確認してください。

nmcliの場合は connection.autoconnectno になっていないかを確認します。

nmcli -f connection.autoconnect connection show ens33

「DNSが効かない」

RHEL系で /etc/resolv.conf を直接編集しても、NetworkManager が再起動時に上書きします。DNSサーバーは ifcfg の DNS1= か、nmcli の ipv4.dns で指定するのが正解です。

DHCP環境で「自分で書いたDNSが消える」場合は、以下のオプションが効きます。

nmcli connection modify ens33 ipv4.ignore-auto-dns yes nmcli connection up ens33

「BOOTPROTO=static にしたのにDHCPで上がる」

RHEL 7以降で ifcfg と NetworkManager が両方有効だと、設定が衝突して意図しない側が勝つことがあります。NetworkManager 配下で動かすなら NM_CONTROLLED=yes(または記述削除)にして、nmcli で設定し直すのが確実です。

本記事のまとめ

環境 設定方法
RHEL 7以降 / Rocky / AlmaLinux(推奨) nmcli connection modify ens33 ipv4.method manual ipv4.addresses 192.168.0.36/24
CentOS 6 / RHEL 6 vi /etc/sysconfig/network-scripts/ifcfg-eth0
Ubuntu 18.04以降 sudo vi /etc/netplan/00-installer-config.yaml
RHEL 9以降キーファイル方式 sudo vi /etc/NetworkManager/system-connections/ens33.nmconnection
nmcli設定の反映 nmcli connection up ens33
netplan設定の反映 sudo netplan apply
コマンドで一時的にIPアドレスを設定・確認する方法は LinuxでIPアドレスを確認する方法|ip aの出力の読み方・NIC状態・hostname -Iの使い分け をあわせてご覧ください。

Linuxのネットワーク設定を確実に押さえたい方へ

固定IPの設定は、サーバー管理で最初につまずきやすいテーマのひとつです。設定ファイルやNetworkManagerの仕組みを理解しておくと、現場でのトラブル対応速度が大きく変わります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。