固定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 で疎通確認、再起動テストまで行うのが現場の鉄則
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜ「設定ファイル経由」で固定IPを設定するのか
Linuxでip addr add や ifconfig 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 が認識しているコネクション名(接続プロファイル名)を確認します。デバイス名(ens33 や eth0)とは別物なので注意してください。nmcli connection show
NAME UUID TYPE DEVICE ens33 3a4c1f12-xxxx-xxxx-xxxx-xxxxxxxxxxxx ethernet ens33 lo 00000000-0000-0000-0000-000000000000 loopback lo
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.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
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"
・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以降で 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.yaml や 50-cloud-init.yaml などが既にあるはずです。3-2. YAMLファイルを編集する
sudo vi /etc/netplan/00-installer-config.yaml
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
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.autoconnect が no になっていないかを確認します。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 |
Linuxのネットワーク設定を確実に押さえたい方へ
固定IPの設定は、サーバー管理で最初につまずきやすいテーマのひとつです。設定ファイルやNetworkManagerの仕組みを理解しておくと、現場でのトラブル対応速度が大きく変わります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:Linuxでパケットをキャプチャ(ダンプ)する
- 前のページへ:コマンドでIPアドレスを設定するには
- この記事の属するカテゴリ:ネットワークへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます