L1-05 RHELサブスクリプション、nmcliでのネットワーク設定、SSH遠隔接続

RHEL10のサブスクリプション登録

RHEL 10.1のインストールが完了したら、すぐにコマンドを入力したりソフトウェアをインストールしたりしないでください。RHELはサブスクリプション制を採用しているため、ソフトウェアのインストールとシステム更新は公式リポジトリに依存しています。サブスクリプション登録前は通常dnfを使用してパッケージを取得できないため、初回ログイン後に最初に行うべきことはサブスクリプションを有効化し、基本アップデートを完了させることです。

システムにログインし、デスクトップでキーボードのwinキーを押すか、左上のRed Hatロゴをクリックしてターミナルを起動します。

注意:サブスクリプションの登録とシステムの更新にはどちらも root 権限が必要です。一般ユーザーでログインしている場合は、まず root に切り替えるか、コマンドの前に sudo を付けてください。
:exclamation_question_mark:RHEL10では、subscription-manager から attach モジュールと関連パラメータが完全に削除され、追加(attach)操作は一切不要になりました。

su -       # rootユーザーに切り替え;rootパスワードを入力すると、プロンプトが # に変わり、管理者環境に入ったことがわかります

コンソールで次のコマンドを実行し、Red Hat Developerアカウントを使用してシステムを登録します:

subscription-manager register --username <レッドハットアカウント> --password <パスワード>

登録が完了したら、習慣としてサブスクリプション状態が実際に有効になっているか確認してください:

subscription-manager status

状態が 登録済み と表示されていれば、最初のシステムアップデートを実行し、基本コンポーネントが最新状態になるようにします:

dnf update -y

RHEL 10のネットワーク設定

ネットワークを設定する主な方法は3つあり、最も簡単なものはデスクトップ設定で行う方法ですが、サーバー環境ではコマンドラインで管理します。ここでは比較的複雑なコマンドラインによる nmcli コマンドと 設定ファイル による2つの方法を説明します。
RHEL 8以降、システムでは NetworkManager がネットワークを一元管理しています。RHEL 10では、従来の ifcfg-* 方式は廃止されました。

現在のRHEL 10では、デフォルトのネットワーク設定ファイルは /etc/NetworkManager/system-connections/ ディレクトリに保存され、ファイル形式はINIスタイルの .nmconnection になりました。この基本メカニズムの変化を理解した上で、以下の2つの方法でネットワークを設定できます:nmcli コマンドで対話的に設定するか、基本設定ファイルを直接編集するか。

nmcliコマンドによるネットワーク設定

始める前に、2つの基本概念を区別してください。さもないとパラメータを間違う原因になります:

  • デバイス(device):ネットワークカードのハードウェア自体を指します。例えば ens160 など。
  • 接続(connection):そのネットワークカードに適用される設定方案を指し、IP、ゲートウェイなどの情報を含みます。
    多くの場合、接続名デバイス名は同じ名前になります。例えば ens160 のように。ただし、ネットワークを修正する際は、本質的に connection を修正しています。

ネットワーク状態の確認

まず、現在のシステムでネットワークカードのIP状態を確認します:

root@RHEL:~# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.0.10  netmask 255.255.255.0  broadcast 172.16.0.255
        inet6 fe80::20c:29ff:fe66:7d6d  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:66:7d:6d  txqueuelen 1000  (Ethernet)
        RX packets 963804  bytes 1447901368 (1.3 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 91978  bytes 5447691 (5.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        ...

現在のシステムには2つのネットワークカードがあることがわかります。1つは仮想マシンに追加した「物理ネットワークカード」のens160、もう1つはローカルループバック仮想ネットワークカードlo(本体内部通信に使用され、通常気にする必要はありません)。

  • ens160:ネットワークカードインターフェース名。一般的に、ビジネス traffic を処理する物理ネットワークカードは ensenp で始まります。
  • UP, RUNNING:このネットワークカードが現在有効化されており、稼働中であることを示します。
  • inet 172.16.0.10:これはネットワークカードが現在使用しているIPv4アドレスで、netmask はサブネットマスク 255.255.255.0、プレフィックスは /24 です。
  • inet6 … scopeid 0x20:IPv6のローカルリンクアドレスで、通常 fe80:: で始まります。
  • ether 00:0c:29:66:7d:6d:これはネットワークカードの物理MACアドレスです。
  • RX/TX packets:それぞれネットワークカードが受信(RX)および送信(TX)したデータパケット数と通信量を表し、これによりネットワークカードが実際にデータを送受信しているかどうかを素早く判断できます。

現在のIPを確認した後、NetworkManager内での物理ネットワークカードのハードウェア状態を確認します
(# は実行したコマンド)
DEVICE(ネットワークカード名)とCONNECTION(現在使用されている接続名)の2列主に注目します。ネットワークカード STATEconnected のとき、接続方案がバインドされていることを意味します。

root@RHEL:~# nmcli device status
DEVICE  TYPE      STATE         CONNECTION 
ens160  ethernet  connected     ens160     
lo      loopback  connected (external)  lo    

次に、現在存在する接続設定を確認します。現在のネットワークカードと接続名はどちらも ens160 です。
ここにはシステム内に保存された設定方案がリストされています。ここでのNAME列を確認し、後の修正コマンドはすべてこのNAMEを対象に行います。

root@RHEL:~# nmcli connection show
NAME    UUID                                  TYPE      DEVICE 
ens160  a20596a9-215f-3835-8189-200e617603f9  ethernet  ens160 
lo      1cb84265-5457-443b-9d2f-692a2442c7ab  loopback  lo

より詳細な出力を確認するには、後に具体的な接続名を付けて実行し、コマンド実行後は終了するためにショートカットキー CTRL+C を使用します。このショートカットキーの役割は現在実行中のコマンドを中断することです。出力から現在のアドレス設定方法manual(静的モード)であることがわかります。

root@RHEL:~# nmcli connection show ens160
connection.id:                          ens160
connection.uuid:                        a20596a9-215f-3835-8189-200e617603f9
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              ens160
...
ipv4.method:                            manual   # 静的モード
ipv4.dns:                               172.16.0.2,223.5.5.5      # メインとバックアップの2つのDNSアドレス
ipv4.dns-search:                        --
ipv4.dns-options:                       --
ipv4.dns-priority:                      0
ipv4.addresses:                         172.16.0.10/24          # IPv4アドレス
ipv4.gateway:                           172.16.0.2                   # ゲートウェイアドレス
...
GENERAL.MASTER-PATH:                    --
IP4.ADDRESS[1]:                         172.16.0.10/24
IP4.GATEWAY:                            172.16.0.2
IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 172.16.0.2, mt = 100
IP4.ROUTE[2]:                           dst = 172.16.0.0/24, nh = 0.0.0.0, mt = 100
IP4.DNS[1]:                             172.16.0.2
IP4.DNS[2]:                             223.5.5.5
IP6.ADDRESS[1]:                         fe80::20c:29ff:fe66:7d6d/64  
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 1024

DHCP設定

現在のネットワークカードは静的IPなので、まずDHCPに変更します。コマンドを使用してIPv4の取得方法を auto に変更し、手動設定されたIPv4情報を削除します。

nmcli connection modify ens160 ipv4.method auto
  • modify ens160ens160 という名前の接続設定の修正を指定します。
  • ipv4.method auto:取得方法を自動に設定します。自動取得の場合、システムはDHCPサーバーにIP、ゲートウェイ、DNSを要求します。

しかし、あなたが私と同じように静的IPを設定していた場合、以下のコマンドだけで旧設定を空にして論理エラーを防ぎ、DHCPが有効にならないのを回避します。

nmcli connection modify ens160 ipv4.method auto ipv4.addresses "" ipv4.gateway "" ipv4.dns ""

修正後、設定はすぐにネットワークカードに適用されません。以下のコマンドを実行して接続を再起動し、即時有効化する必要があります:

nmcli connection up ens160

有効化後、以下のコマンドでネットワークカードが動的IPを正常に取得したか確認します:

ip addr show ens160

出力情報から inet が記載された行を探し、その後にDHCPサーバーによって自動割り当てされたIPアドレスとマスクが続きます。以下の出力からここでは 172.16.0.128/24 で、以前は 172.16.0.10/24 でした。この行があり、アドレスが正常であれば、DHCP設定は成功です。

root@RHEL:~# nmcli connection modify ens160 ipv4.method auto ipv4.addresses "" ipv4.gateway "" ipv4.dns ""
root@RHEL:~# nmcli connection up ens160
接続は正常に有効化されました(D-Bus アクティビティパス:/org/freedesktop/NetworkManager/ActiveConnection/9)
root@RHEL:~# ip addr show ens160
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:66:7d:6d brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname enx000c29667d6d
    inet 172.16.0.128/24 brd 172.16.0.255 scope global dynamic noprefixroute ens160
       valid_lft 1793sec preferred_lft 1793sec
    inet6 fe80::20c:29ff:fe66:7d6d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

静的IPv4アドレスの設定

多くのプロダクション環境ではサーバーが固定IPを使用します。
私のVMware NATネットワークを例にすると、ネットワークセグメントは 172.16.0.0/24、ゲートウェイは 172.16.0.2 です。
設定を始める前に、自分のVMware仮想ネットワークカードのネットワークセグメント情報を確認する必要があります。コマンドをコピー&ペーストするのではなく、これによりNAT経由でネットワークに正常にアクセスできます。

前面で既にネットワークカードをDHCPによる自動IP取得に変更しました。今度はそれを静的設定に切り替えます。
ここではネットワークカードアドレスを 172.16.0.10/24、デフォルトゲートウェイを 172.16.0.2、DNSを 172.16.0.2,223.5.5.5 に設定します。

コマンド1つで属性の修正が完了します:

nmcli connection modify ens160 ipv4.method manual ipv4.addresses 172.16.0.10/24 ipv4.gateway 172.16.0.2 ipv4.dns 172.16.0.2,223.5.5.5
  • ipv4.method manual:モードを manual(手動)に変更します。methodを指定しないと、後の静的アドレスは無効になります。
  • ipv4.addresses .../24:IPとサブネットマスク長を設定します。
  • ipv4.gateway:デフォルトゲートウェイ。
  • ipv4.dns:DNSを設定します。設定しない場合はIPにはpingできますが、ドメイン名は解決できません。

完了後、設定を有効化するために接続を再起動する必要があります。有効化後、コマンドでIPとルーティングを確認します:

nmcli connection up ens160
ip addr show ens160                           
ip route                                    # 現在のルーティング情報を確認

root@RHEL:~# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 172.16.0.10/24 ipv4.gateway 172.16.0.2 ipv4.dns 172.16.0.2,223.5.5.5
root@RHEL:~# nmcli connection 
add      delete   edit     help     load     modify   reload   up       
clone    down     export   import   migrate  monitor  show     
root@RHEL:~# nmcli connection up ens160 
接続は正常に有効化されました(D-Bus アクティビティパス:/org/freedesktop/NetworkManager/ActiveConnection/10)
root@RHEL:~# ip addr show ens160 
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:66:7d:6d brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname enx000c29667d6d
    inet 172.16.0.10/24 brd 172.16.0.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe66:7d6d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
root@RHEL:~# ip route
default via 172.16.0.2 dev ens160 proto static metric 100 
172.16.0.0/24 dev ens160 proto kernel scope link src 172.16.0.10 metric 100 
  • inet フィールドが先ほど設定した静的IPかどうか確認します。
  • ルーティングを確認する際、出力に default via 172.16.0.2 で始まる行があります。default はデフォルトルートを表し、これにより現在のネットワークのトラフィックがこのゲートウェイ経由で外部ネットワークに转发されることを示します。

IPv6の設定

IPv6環境では、操作ロジックはIPv4と実際には同じで、コマンドが少し異なるだけです。例えば静的v6アドレスとゲートウェイを設定する場合(ここではアドレスは例):

nmcli connection modify ens160 ipv6.method manual ipv6.addresses 2001:8888:1::10/64 ipv6.gateway 2001:8888:1::1  ipv6.dns 2402:4e00:: 

同様に、コマンドを実行して設定を有効化します。有効化後、v6のアドレスとルーティングを確認します:

nmcli connection up ens160
ip -6 addr show ens160
ip -6 route
root@RHEL:~# nmcli connection modify ens160 ipv6.method manual ipv6.addresses 2001:8888:1::10/64 ipv6.gateway 2001:8888:1::1  ipv6.dns 2402:4e00:: 
root@RHEL:~# nmcli connection up ens160 
接続は正常に有効化されました(D-Bus アクティビティパス:/org/freedesktop/NetworkManager/ActiveConnection/11)
root@RHEL:~# ip -6 addr show ens160 
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    altname enp3s0
    altname enx000c29667d6d
    inet6 2001:8888:1::10/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe66:7d6d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
root@RHEL:~# ip -6 route
2001:8888:1::/64 dev ens160 proto kernel metric 100 pref medium
fe80::/64 dev ens160 proto kernel metric 1024 pref medium
default via 2001:8888:1::1 dev ens160 proto static metric 100 pref medium

設定ファイルの編集によるネットワーク設定

nmcli コマンドを使用するほか、自動化デプロイを行う際には、設定ファイルを直接編集する方法もあります。
前面で触れたように、RHEL 10のネットワーク設定ファイルは /etc/NetworkManager/system-connections/ ディレクトリに保存されています。vim を直接使用して対応するネットワークカード設定ファイルを編集します:

vim /etc/NetworkManager/system-connections/ens160.nmconnection

vimエディタの基本操作:

  1. ファイルを開いた後、キーボードの i キーを押すと、下部に -- INSERT -- が表示され、挿入モードに入ります。これでテキストを修正できます。
  2. 修正が完了したら、Esc キーを押して挿入モードから退出します。
  3. :wq と入力してエンターキーを押すと、ファイルを保存して終了できます。誤って修正してしまった場合、保存したくなければ :q! を入力して強制終了できます。

DHCP設定

開いたファイルで [ipv4] モジュールを見つけます。DHCPを設定する場合は method=auto を残し、残りの静的アドレス関連の行はすべて削除/コメントアウトします:

[ipv4]
method=auto

静的IP設定

[ipv4] モジュールの書き方は以下の通りで、複数のIPアドレスを設定する場合は数字順に address の接尾辞を増やしていくだけでよく、ゲートウェイは1つだけ記載します:

[ipv4]
method=manual
address1=172.16.0.10/24,172.16.0.254
address2=172.16.0.20/24
dns=223.5.5.5;

INI 構文:

  • 旧版の ifcfg とは異なり、Keyfile形式はIP、マスク、ゲートウェイを統合しています。address1= の後ろの形式は IPアドレス/マスクプレフィックス,ゲートウェイアドレス で、間に英語のカンマを入れます;ゲートウェイは別行に記載することもできます。
  • dns= の後ろにDNSサーバーアドレスを記載し、複数ある場合はセミコロンで区切り、行末は必ずセミコロン ; で終わらせます
  • IPv6を設定する場合は、ファイル内の [ipv6] モジュールの下に対応する address1method=manual を追加し、構文規則は同じです。

再読み込みと有効化

テキストを修正して保存・終了した後、NetworkManagerデーモンはデフォルトでファイルが変更されたことを知りません。
順番にまず reload コマンドを実行してサービスにディスク上のファイルを再読み込みさせ、その後接続を起動します。さもないと変更した設定は無効になりません:

nmcli connection reload
nmcli connection up ens160
root@RHEL:~# vi /etc/NetworkManager/system-connections/ens160.nmconnection 
root@RHEL:~# nmcli connection reload 
root@RHEL:~# nmcli connection up ens160 
接続は正常に有効化されました(D-Bus アクティビティパス:/org/freedesktop/NetworkManager/ActiveConnection/16)
root@RHEL:~# ip addr show ens160 
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:66:7d:6d brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname enx000c29667d6d
    inet 172.16.0.128/24 brd 172.16.0.255 scope global dynamic noprefixroute ens160
       valid_lft 1792sec preferred_lft 1792sec
    inet6 fe80::20c:29ff:fe66:7d6d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

ネットワーク接続性のテスト

ネットワーク設定が完了したら、ping コマンドでネットワーク接続状態を検証できます。
Windowsとは異なり、Linuxで直接 ping コマンドを実行すると、Ctrl + C を押して中断するまで探査データパケットを継続的に送信します。ずっと画面を埋め尽くさないよう、実際のトラブルシューティングでは通常 -c パラメータを付けて、送信するデータパケットの回数を正確に指定します。スペースを忘れないでください。

まず、ゲートウェイをpingして、物理リンクと内部ネットワーク設定が正しいかどうかを確認します。
出力からタイムアウトはなく、応答統計が生成されており、4つのパケットを送信しすべて受信できたことがわかり、ネットワークが到達可能であることがわかります。

root@RHEL:~# ping -c 4 172.16.0.2
172.16.0.2 の ping: 56(84) バイトのデータ。
172.16.0.2 から 64 バイト: icmp_seq=1 ttl=128 時間=0.194 ミリ秒
172.16.0.2 から 64 バイト: icmp_seq=2 ttl=128 時間=0.119 ミリ秒
172.16.0.2 から 64 バイト: icmp_seq=3 ttl=128 時間=0.226 ミリ秒
172.16.0.2 から 64 バイト: icmp_seq=4 ttl=128 時間=0.273 ミリ秒

--- 172.16.0.2 ping 統計 ---
4 パケット送信、4 パケット受信、0% パケット損失、時間 3062ms
rtt min/avg/max/mdev = 0.119/0.203/0.273/0.056 ms

ドメイン名の接続性をテストします。ドメイン名をpingして、ルーティングが外部ネットワークに正常に转发されているか、設定したDNSが有効になっているかを確認できます。
このドメイン名がIPアドレスに解決され、相手サーバーからの応答を受信したことがわかります。

root@RHEL:~# ping -c 4 www.sitetalk.net
www.sitetalk.net.a1.initxb.com (101.200.115.63) を ping: 56(84) バイトのデータ。
101.200.115.63 から 64 バイト: icmp_seq=1 ttl=128 時間=47.9 ミリ秒
101.200.115.63 から 64 バイト: icmp_seq=2 ttl=128 時間=62.0 ミリ秒
101.200.115.63 から 64 バイト: icmp_seq=3 ttl=128 時間=59.8 ミリ秒
101.200.115.63 から 64 バイト: icmp_seq=4 ttl=128 時間=51.9 ミリ秒

--- www.sitetalk.net.a1.initxb.com ping 統計 ---
4 パケット送信、4 パケット受信、0% パケット損失、時間 3006ms
rtt min/avg/max/mdev = 47.881/55.393/61.984/5.723 ms

SSH 遠隔接続

実際のシステム運用では、ほとんどの操作はSSHによる遠隔管理で行います。ホストマシンに戻り、MobaXterm、Windtermなどのターミナルツールを開くか、CMD を開いて先ほど設定した静的IPを使ってこのRHELサーバーに遠隔接続します:

ssh root@172.16.0.10

初めて接続する場合、システムが鍵指纹の確認プロンプトを表示します。これは正常なセキュリティ確認メカニズムです。そのまま yes と入力してエンターキーを押し、続けてrootパスワードを入力するとシステムにログインできます。