#552 nmcliで学ぶネットワーク設定の基本と応用 ― Rocky Linux環境でFreeIPA構築を実践

nmcliの基本的な使い方と実践事例

はじめに

nmcli(NetworkManager Command Line Interface)は、Linuxでネットワークを設定・管理するための強力なコマンドです。GUIが利用できない環境でも、ネットワークインターフェースの管理・接続の作成・IP アドレスやゲートウェイの設定などを柔軟に行えます。本レポートでは初学者向けに、nmcliの基本的な使用方法と、実際に行った設定例を交えて解説します。

1. nmcliの基本コマンド

1.1 接続の一覧表示

·       現在認識されている接続名やデバイスを一覧表示するには次のコマンドを実行します。

nmcli connection show

例として、以下の出力では、2つのインターフェース(enp1s0とenp7s0)とloopback(lo)が確認できます。

NAME UUID TYPE DEVICE
enp1s0 223324e5-3fe1-30b1-ab12-b693adbbbfb2 ethernet enp1s0
net10-freeipa 19b5d4fb-5f3d-4b15-839f-fb5f92ee93db ethernet enp7s0
lo e1f83b84-17e5-488a-9f1d-e6edc0c740ad loopback lo

1.2 接続の追加

新しいネットワーク接続プロファイルを作成する際は、connection addサブコマンドを使います。主要なオプションを以下に示します。

·       type:インターフェースタイプ(ethernetやwifiなど)。

·       ifname:対象となる物理インターフェース名。

·       con-name:新しく作成する接続名。

·       ipv4.addresses:IPv4アドレス/プレフィックス。

·       ipv4.gateway:デフォルトゲートウェイ。

·       ipv4.dns:DNSサーバーのIPアドレス。

·       ipv4.method:IP設定方法。手動設定ならmanual、自動(DHCP)ならauto。

·       ipv4.never-default:yesにすると、この接続からデフォルトルートを追加しません。

例1:FreeIPAサーバーのネットワーク設定

sudo nmcli connection add type ethernet \ # 接続タイプ
ifname enp7s0 \ # インターフェース名
con-name net10-freeipa \ # 接続名
ipv4.addresses 10.10.0.2/24 \ # IPアドレス
ipv4.gateway 10.10.0.254 \ # ゲートウェイ
ipv4.dns 192.168.122.1 \ # DNSサーバ
ipv4.never-default yes \ # デフォルトルート追加をしない
ipv4.method manual # 静的設定

ここではLAN内のアドレスとして10.10.0.2/24を設定し、ゲートウェイを10.10.0.254に設定しました。またipv4.never-default yesによって、この接続がデフォルトルートになるのを防いでいます。

1.3 接続の編集(設定変更)

既存の接続プロファイルを変更するには、connection modifyサブコマンドを使用します。

·       例:既存接続enp1s0のipv4.never-defaultをyesに設定し、デフォルトルートを追加させないようにします。

sudo nmcli connection modify enp1s0 ipv4.never-default yes

·       例:net10-freeipa接続のゲートウェイを変更する場合は、次のようにします。

sudo nmcli connection modify net10-freeipa ipv4.gateway 10.10.0.254

設定変更を反映するためには、接続を一度停止してから再度有効にします。後述するconnection down/upで反映させます。

1.4 接続の有効化・無効化

設定変更後や、インターフェースを一時的に再起動したい場合は、以下のコマンドを使用します。

sudo nmcli connection down <接続名>

で接続を一時的に無効化し、その後

sudo nmcli connection up <接続名>

で再有効化します。

例:net10-freeipaを再起動

sudo nmcli connection down net10-freeipa
sudo nmcli connection up net10-freeipa

これにより設定変更が適用されます。

1.5 ルート追加

特定セグメントへのルート(静的ルーティング)を付け加える際には、ipv4.routesオプションを使用できます。ただし今回の例では、よりシンプルにKVMのルーティング設定を行うため、FreeIPAサーバーからLANセグメントへの経路設定にはip routeやVMホスト側で設定したMASQUERADE(NAT)を利用しました。

1.6 デフォルトルートの切替

マルチNIC構成の場合、どのインターフェース経由でインターネットに出るのかを調整する必要があります。デフォルトルートは通常、明示的にゲートウェイを指定した接続で設定されます。以下のポイントが重要です:

·       接続プロファイルにipv4.never-default yesを指定すると、その接続ではデフォルトルートが設定されません。

·       明示的にipv4.gatewayを指定した接続がデフォルトルートになります。
本事例では、FreeIPAサーバーがローカルLANと外部ネットワークの二つのインターフェースを持つため、内部用 (enp7s0)をデフォルトルートに設定し、外部向け (enp1s0)にはデフォルトルートを追加しませんでした。

2. 実践事例:FreeIPAサーバー構築でのnmcli活用

今回の作業では、KVM環境に「freeipa」「monitor」「app」「keycloak」など複数のゲストを構築しました。特にfreeipaマシンにFreeIPAサーバーをインストールする過程で、ネットワーク設定に関する問題に遭遇し、nmcliによる設定が重要であることを学びました。

2.1 FreeIPAサーバーのNIC設定

FreeIPAサーバーには二つのNICが接続されており、一つは外部ネットワーク(NAT 192.168.122.0/24)向け、もう一つは内部ネットワーク(10.10.0.0/24)向けです。初期状態では外部NICがデフォルトルートになっていましたが、インストール中に名前解決が失敗する問題が発生しました。

原因
·       DNSフォワーダや外部ネットワークの応答がなく、インターネットへの名前解決ができなかったこと。

·       nmcliの設定でデフォルトルートが外部インターフェースに設定されており、内部向けのネットワーク経路が優先されなかったこと。

解決策
1.      インターフェースごとのデフォルトルート設定を見直す

2.      外部インターフェース (enp1s0) には ipv4.never-default yes を設定し、デフォルトルートにしない。

  1. 内部インターフェース (enp7s0) では ipv4.gateway 10.10.0.254 を指定し、LANゲートウェイをデフォルトルートとする。

    sudo nmcli connection modify enp1s0 ipv4.never-default yes
sudo nmcli connection modify net10-freeipa ipv4.never-default no
sudo nmcli connection modify net10-freeipa ipv4.gateway 10.10.0.254
sudo nmcli connection down enp1s0
sudo nmcli connection up enp1s0
sudo nmcli connection down net10-freeipa
sudo nmcli connection up net10-freeipa

  1. DNSフォワーダを変更

  2. 192.168.122.1をDNSとして参照していましたが名前解決が失敗したため、Azure環境で標準提供されているDNSサーバー168.63.129.16をフォワーダに設定しました。

  3. FreeIPAのインストール再試行

7.      ネットワーク設定を修正した後、ipa-server-installを実行したところ、KDC/DNS/LDAPの設定が正しく進み、インストールが成功しました。

2.2 他のゲストマシンの設定

monitorやapp、keycloakなどの各ゲストでも、以下の手順でNICを構成しました。

1.      コピークローンイメージの修正:複数ゲストを作成する際、元VM(rocky9_clone)のディスクイメージとXMLをコピーし、名前・ストレージ・UUID・MACアドレスを sed で変更。

2.      ネットワークインターフェースの追加:virsh attach-interface で仮想ネットワーク(net10 / net20)に接続。

3.      nmcliによる固定IP設定

4.      monitor: ipv4.addresses 10.10.0.10/24、ゲートウェイ10.10.0.254を設定。

5.      app: ipv4.addresses 10.20.0.10/24と10.20.0.254等を指定。

6.      keycloak: ipv4.addresses 10.20.0.11/24 と10.20.0.254 等を設定。

2.3 iptablesによるNAT設定

ゲストマシンが外部インターネットへアクセスするために、KVMホスト(rocky9)では iptables のNATポスティングルールを設定しました。

sudo iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o enp1s0 -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -o enp1s0 -j MASQUERADE

これにより、内部セグメントのゲストが外部インターネットへ抜ける際にアドレス変換を行い、インターネットアクセスが可能になりました。

3. まとめ

·       nmcliはGUI環境がない場合でも、ネットワーク接続やIP設定を柔軟に操作するための強力なツールです。

·       接続の作成、変更、アップ/ダウンの操作を覚えることで、多NIC環境でもデフォルトルートやDNS設定を適切に制御できます。

·       FreeIPAのインストール時に発生したDNS解決の問題は、ネットワーク経路とDNSフォワーダ設定が原因でした。nmcliを使ってゲートウェイやネバー・デフォルト属性を変更することで解決できました。

·       実運用では、複数のゲストを同時に運用する環境でもnmcliを通じて一貫したネットワーク構成を簡潔に管理できます。

このレポートが、nmcliやネットワーク設定の理解に役立ち、今後の仮想環境構築やサーバーインストール作業の参考になれば幸いです。


いいなと思ったら応援しよう!