ネットワークの設定および管理
ネットワークインターフェイスおよび高度なネットワーク機能の管理
概要
Red Hat ドキュメントへのフィードバック (英語のみ)
Red Hat ドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。
Jira からのフィードバック送信 (アカウントが必要)
- Jira の Web サイトにログインします。
- 上部のナビゲーションバーで Create をクリックします。
- Summary フィールドにわかりやすいタイトルを入力します。
- Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
- ダイアログの下部にある Create をクリックします。
第1章 一貫したネットワークインターフェイス命名の実装
udev
デバイスマネージャーは、Red Hat Enterprise Linux で一貫したデバイス命名を実装します。デバイスマネージャーは、さまざまな命名スキームをサポートしています。デフォルトでは、ファームウェア、トポロジー、および場所の情報に基づいて固定名を割り当てます。
一貫したデバイス命名を使用しない場合、Linux カーネルは固定の接頭辞とインデックスを組み合わせて名前をネットワークインターフェイスに割り当てます。カーネルがネットワークデバイスを初期化すると、インデックスが増加します。たとえば、eth0
は、起動時にプローブされる最初のイーサネットデバイスを表します。別のネットワークインターフェイスコントローラーをシステムに追加すると、再起動後にデバイスが異なる順序で初期化される可能性があるため、カーネルデバイス名の割り当てが一定でなくなります。その場合、カーネルはデバイスに別の名前を付けることがあります。
この問題を解決するために、udev
は一貫したデバイス名を割り当てます。これには、次の利点があります。
- 再起動してもデバイス名が変わりません。
- ハードウェアを追加または削除しても、デバイス名が固定されたままになります。
- 不具合のあるハードウェアをシームレスに交換できます。
- ネットワークの命名はステートレスであり、明示的な設定ファイルは必要ありません。
通常、Red Hat は、一貫したデバイス命名が無効になっているシステムはサポートしていません。例外は、Red Hat ナレッジベースのソリューション記事 Is it safe to set net.ifnames=0 を参照してください。
1.1. udev デバイスマネージャーによるネットワークインターフェイスの名前変更の仕組み
ネットワークインターフェイスの一貫した命名スキームを実装するために、udev
デバイスマネージャーは次のルールファイルを記載されている順番どおりに処理します。
Dell システムのみ:
/usr/lib/udev/rules.d/71-biosdevname.rules
このファイルは、
biosdevname
パッケージがインストールされている場合にのみ存在します。このルールファイルは、前の手順でインターフェイスの名前が変更されていない場合に、biosdevname
ユーティリティーが命名ポリシーに従ってインターフェイスの名前を変更することを定義します。注記biosdevname
は Dell システムにのみインストールして使用してください。/usr/lib/udev/rules.d/75-net-description.rules
このファイルは、
udev
がネットワークインターフェイスを検査し、udev
の内部変数にプロパティーを設定する方法を定義します。これらの変数は、次のステップで/usr/lib/udev/rules.d/80-net-setup-link.rules
ファイルによって処理されます。一部のプロパティーは未定義である場合があります。/usr/lib/udev/rules.d/80-net-setup-link.rules
このファイルは
udev
サービスのnet_setup_link
ビルトインを呼び出します。udev
は/usr/lib/systemd/network/99-default.link
ファイルのNamePolicy
パラメーターのポリシーの順序に基づいてインターフェイスの名前を変更します。詳細は、ネットワークインターフェイスの命名ポリシー を参照してください。どのポリシーも適用されない場合、
udev
はインターフェイスの名前を変更しません。
1.2. ネットワークインターフェイスの命名ポリシー
デフォルトでは、udev
デバイスマネージャーは /usr/lib/systemd/network/99-default.link
ファイルを使用して、インターフェイスの名前を変更するときに適用するデバイス命名ポリシーを決定します。このファイルの NamePolicy
パラメーターは、udev
がどのポリシーをどの順序で使用するかを定義します。
NamePolicy=keep kernel database onboard slot path
NamePolicy=keep kernel database onboard slot path
次の表では、NamePolicy
パラメーターで指定された最初に一致するポリシーに基づく、udev
のさまざまなアクションを説明します。
ポリシー | 説明 | 名前の例 |
---|---|---|
keep |
デバイスにユーザー空間で割り当てられた名前がすでにある場合、 | |
kernel |
デバイス名が予測可能であるとカーネルが通知した場合、 |
|
database |
このポリシーは、 |
|
onboard | デバイス名には、ファームウェアまたは BIOS が提供するオンボードデバイスのインデックス番号が含まれます。 |
|
slot | デバイス名には、ファームウェアまたは BIOS が提供する PCI Express (PCIe) ホットプラグのスロットインデックス番号が含まれます。 |
|
path | デバイス名には、ハードウェアのコネクターの物理的な場所が含まれます。 |
|
mac | デバイス名には MAC アドレスが含まれます。デフォルトでは、Red Hat Enterprise Linux はこのポリシーを使用しませんが、管理者はこのポリシーを有効にすることができます。 |
|
1.3. ネットワークインターフェイスの命名スキーム
udev
デバイスマネージャーは、デバイスドライバーが提供する一定のインターフェイス属性を使用して、一貫したデバイス名を生成します。
新しいバージョンの udev
によってサービスが特定のインターフェイス名を作成する方法が変更された場合、Red Hat は、新しいスキームバージョンを追加し、システム上の systemd.net-naming-scheme(7)
man ページに詳細を記載します。デフォルトでは、Red Hat Enterprise Linux (RHEL) 10 は、ユーザーが RHEL のそれ以降のマイナーバージョンをインストールまたは更新した場合でも、rhel-10.0
命名スキームを使用します。
RHEL 10 では、すべての rhel-8.*
および rhel-9.*
命名スキームも使用できます。
デフォルト以外のスキームを使用する場合は、ネットワークインターフェイスの命名スキームを切り替える ことができます。
さまざまなデバイスタイプおよびプラットフォームの命名スキームの詳細は、システム上の systemd.net-naming-scheme(7)
man ページを参照してください。
1.4. 別のネットワークインターフェイス命名スキームへの切り替え
デフォルトでは、Red Hat Enterprise Linux (RHEL) 10 は、ユーザーが RHEL のそれ以降のマイナーバージョンをインストールまたは更新した場合でも、rhel-10.0
命名スキームを使用します。デフォルトの命名スキームはほとんどの状況に適していますが、次のような理由で別のスキームバージョンに切り替える必要がある場合もあります。
- 新しいスキームによりインターフェイス名にスロット番号などの追加属性を追加すると、デバイスをより適切に識別できるようになります。
-
新しいスキームにより、カーネルによって割り当てられたデバイス名 (
eth*
) にudev
がフォールバックするのを防ぐことができます。これは、ドライバーが 2 つ以上のインターフェイスに対して一意の名前を生成するのに十分な一意の属性を提供していない場合に発生します。
前提条件
- サーバーのコンソールにアクセスできる。
手順
ネットワークインターフェイスをリスト表示します。
ip link show
# ip link show 2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ...
Copy to Clipboard Copied! インターフェイスの MAC アドレスを記録します。
オプション: ネットワークインターフェイスの
ID_NET_NAMING_SCHEME
プロパティーを表示して、RHEL が現在使用している命名スキームを特定します。udevadm info --query=property --property=ID_NET_NAMING_SCHEME /sys/class/net/eno1
# udevadm info --query=property --property=ID_NET_NAMING_SCHEME /sys/class/net/eno1 ID_NET_NAMING_SCHEME=rhel-10.0
Copy to Clipboard Copied! このプロパティーは
lo
ループバックデバイスでは使用できないことに注意してください。インストールされているすべてのカーネルのコマンドラインに
net.naming-scheme=<scheme>
オプションを追加します。次に例を示します。grubby --update-kernel=ALL --args=net.naming-scheme=rhel-10.1
# grubby --update-kernel=ALL --args=net.naming-scheme=rhel-10.1
Copy to Clipboard Copied! システムを再起動します。
reboot
# reboot
Copy to Clipboard Copied! 記録した MAC アドレスに基づいて、命名スキームの変更により変更されたネットワークインターフェイスの新しい名前を特定します。
ip link show
# ip link show 2: eno1np0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ...
Copy to Clipboard Copied! スキームを切り替えた後、
udev
によって、指定された MAC アドレスを持つデバイスにeno1np0
という名前が付けられます。これは以前はeno1
という名前でした。以前の名前を持つインターフェイスを使用する NetworkManager 接続プロファイルを特定します。
nmcli -f device,name connection show
# nmcli -f device,name connection show DEVICE NAME eno1 example_profile ...
Copy to Clipboard Copied! 接続プロファイルの
connection.interface-name
プロパティーを新しいインターフェイス名に設定します。nmcli connection modify example_profile connection.interface-name "eno1np0"
# nmcli connection modify example_profile connection.interface-name "eno1np0"
Copy to Clipboard Copied! 接続プロファイルを再アクティブ化します。
nmcli connection up example_profile
# nmcli connection up example_profile
Copy to Clipboard Copied!
検証
ネットワークインターフェイスの
ID_NET_NAMING_SCHEME
プロパティーを表示して、RHEL が現在使用している命名スキームを特定します。udevadm info --query=property --property=ID_NET_NAMING_SCHEME /sys/class/net/eno1np0
# udevadm info --query=property --property=ID_NET_NAMING_SCHEME /sys/class/net/eno1np0 ID_NET_NAMING_SCHEME=_rhel-10.1
Copy to Clipboard Copied!
1.5. インストール時のイーサネットインターフェイスの接頭辞のカスタマイズ
イーサネットインターフェイスにデフォルトのデバイス命名ポリシーを使用しない場合は、Red Hat Enterprise Linux (RHEL) のインストール時にカスタムデバイス接頭辞を設定できます。
Red Hat は、RHEL のインストール時に接頭辞を設定した場合にのみ、カスタマイズされたイーサネット接頭辞を持つシステムをサポートします。すでにデプロイされているシステムでの prefixdevname
ユーティリティーの使用はサポートされていません。
インストール時にデバイス接頭辞を設定した場合、udev
サービスはインストール後にイーサネットインターフェイスに <prefix><index>
という形式を使用します。たとえば、接頭辞 net
を設定すると、サービスはイーサネットインターフェイスに net0
、net1
などの名前を割り当てます。
udev
サービスはカスタム接頭辞にインデックスを追加し、既知のイーサネットインターフェイスのインデックス値を保存します。インターフェイスを追加すると、udev
は、以前に割り当てたインデックス値より 1 大きいインデックス値を新しいインターフェイスに割り当てます。
前提条件
- 接頭辞が ASCII 文字で構成されている。
- 接頭辞が英数字の文字列である。
- 接頭辞が 16 文字未満である。
-
接頭辞が、
eth
、eno
、ens
、em
などの他の既知のネットワークインターフェイス接頭辞と競合しない。
手順
- Red Hat Enterprise Linux インストールメディアを起動します。
ブートマネージャーで、次の手順を実行します。
- Install Red Hat Enterprise Linux <version> エントリーを選択します。
- Tab を押してエントリーを編集します。
-
net.ifnames.prefix=<prefix>
をカーネルオプションに追加します。 - Enter を押してインストールプログラムを起動します。
- Red Hat Enterprise Linux をインストールします。
検証
インターフェイス名を確認するには、ネットワークインターフェイスを表示します。
ip link show
# ip link show ... 2: net0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ...
Copy to Clipboard Copied!
1.6. udev ルールを使用したユーザー定義のネットワークインターフェイス名の設定
udev
ルールを使用して、組織の要件を反映したカスタムネットワークインターフェイス名を実装できます。
手順
名前を変更するネットワークインターフェイスを特定します。
ip link show
# ip link show ... enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ...
Copy to Clipboard Copied! インターフェイスの MAC アドレスを記録します。
インターフェイスのデバイスタイプ ID を表示します。
cat /sys/class/net/enp1s0/type 1
# cat /sys/class/net/enp1s0/type 1
Copy to Clipboard Copied! /etc/udev/rules.d/70-persistent-net.rules
ファイルを作成し、名前を変更する各インターフェイスのルールを追加します。SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="<MAC_address>",ATTR{type}=="<device_type_id>",NAME="<new_interface_name>"
SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="<MAC_address>",ATTR{type}=="<device_type_id>",NAME="<new_interface_name>"
Copy to Clipboard Copied! 重要ブートプロセス中に一貫したデバイス名が必要な場合は、ファイル名として
70-persistent-net.rules
のみを使用してください。RAM ディスクイメージを再生成すると、dracut
ユーティリティーはこの名前のファイルをinitrd
イメージに追加します。たとえば、次のルールを使用して、MAC アドレス
00:00:5e:00:53:1a
のインターフェイスの名前をprovider0
に変更します。SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="00:00:5e:00:53:1a",ATTR{type}=="1",NAME="provider0"
SUBSYSTEM=="net",ACTION=="add",ATTR{address}=="00:00:5e:00:53:1a",ATTR{type}=="1",NAME="provider0"
Copy to Clipboard Copied! オプション:
initrd
RAM ディスクイメージを再生成します。dracut -f
# dracut -f
Copy to Clipboard Copied! この手順は、RAM ディスクにネットワーク機能が必要な場合にのみ必要です。たとえば、ルートファイルシステムが iSCSI などのネットワークデバイスに保存されている場合がこれに当てはまります。
名前を変更するインターフェイスを使用する NetworkManager 接続プロファイルを特定します。
nmcli -f device,name connection show
# nmcli -f device,name connection show DEVICE NAME enp1s0 example_profile ...
Copy to Clipboard Copied! 接続プロファイルの
connection.interface-name
プロパティーの設定を解除します。nmcli connection modify example_profile connection.interface-name ""
# nmcli connection modify example_profile connection.interface-name ""
Copy to Clipboard Copied! 一時的に、新しいインターフェイス名と以前のインターフェイス名の両方に一致するように接続プロファイルを設定します。
nmcli connection modify example_profile match.interface-name "provider0 enp1s0"
# nmcli connection modify example_profile match.interface-name "provider0 enp1s0"
Copy to Clipboard Copied! システムを再起動します。
reboot
# reboot
Copy to Clipboard Copied! リンクファイルで指定した MAC アドレスを持つデバイスの名前が
Provider0
に変更されていることを確認します。ip link show
# ip link show provider0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ...
Copy to Clipboard Copied! 新しいインターフェイス名のみと一致するように接続プロファイルを設定します。
nmcli connection modify example_profile match.interface-name "provider0"
# nmcli connection modify example_profile match.interface-name "provider0"
Copy to Clipboard Copied! これで、接続プロファイルから古いインターフェイス名が削除されました。
接続プロファイルを再アクティブ化します。
nmcli connection up example_profile
# nmcli connection up example_profile
Copy to Clipboard Copied!
1.7. systemd リンクファイルを使用したユーザー定義のネットワークインターフェイス名の設定
systemd
リンクファイルを使用して、組織の要件を反映したカスタムネットワークインターフェイス名を実装できます。
前提条件
- NetworkManager はこのインターフェイスを管理しません。
手順
名前を変更するネットワークインターフェイスを特定します。
ip link show
# ip link show ... enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ...
Copy to Clipboard Copied! インターフェイスの MAC アドレスを記録します。
/etc/systemd/network/
ディレクトリーがない場合は作成します。mkdir -p /etc/systemd/network/
# mkdir -p /etc/systemd/network/
Copy to Clipboard Copied! 名前を変更するインターフェイスごとに、次の内容を含む
70-*.link
ファイルを/etc/systemd/network/
ディレクトリーに作成します。[Match] MACAddress=<MAC_address> [Link] Name=<new_interface_name>
[Match] MACAddress=<MAC_address> [Link] Name=<new_interface_name>
Copy to Clipboard Copied! 重要udev
のルールベースのソリューションとファイル名の一貫性を保つために、接頭辞70-
を付けたファイル名を使用してください。たとえば、MAC アドレス
00:00:5e:00:53:1a
のインターフェイスの名前をprovider0
に変更するには、次の内容を含む/etc/systemd/network/70-provider0.link
ファイルを作成します。[Match] MACAddress=00:00:5e:00:53:1a [Link] Name=provider0
[Match] MACAddress=00:00:5e:00:53:1a [Link] Name=provider0
Copy to Clipboard Copied! オプション:
initrd
RAM ディスクイメージを再生成します。dracut -f
# dracut -f
Copy to Clipboard Copied! この手順は、RAM ディスクにネットワーク機能が必要な場合にのみ必要です。たとえば、ルートファイルシステムが iSCSI などのネットワークデバイスに保存されている場合がこれに当てはまります。
名前を変更するインターフェイスを使用する NetworkManager 接続プロファイルを特定します。
nmcli -f device,name connection show
# nmcli -f device,name connection show DEVICE NAME enp1s0 example_profile ...
Copy to Clipboard Copied! 接続プロファイルの
connection.interface-name
プロパティーの設定を解除します。nmcli connection modify example_profile connection.interface-name ""
# nmcli connection modify example_profile connection.interface-name ""
Copy to Clipboard Copied! 一時的に、新しいインターフェイス名と以前のインターフェイス名の両方に一致するように接続プロファイルを設定します。
nmcli connection modify example_profile match.interface-name "provider0 enp1s0"
# nmcli connection modify example_profile match.interface-name "provider0 enp1s0"
Copy to Clipboard Copied! システムを再起動します。
reboot
# reboot
Copy to Clipboard Copied! リンクファイルで指定した MAC アドレスを持つデバイスの名前が
Provider0
に変更されていることを確認します。ip link show
# ip link show provider0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ...
Copy to Clipboard Copied! 新しいインターフェイス名のみと一致するように接続プロファイルを設定します。
nmcli connection modify example_profile match.interface-name "provider0"
# nmcli connection modify example_profile match.interface-name "provider0"
Copy to Clipboard Copied! これで、接続プロファイルから古いインターフェイス名が削除されました。
接続プロファイルを再度アクティベートします。
nmcli connection up example_profile
# nmcli connection up example_profile
Copy to Clipboard Copied!
1.8. systemd リンクファイルを使用したネットワークインターフェイスへの代替名の割り当て
代替インターフェイス名の命名を使用すると、カーネルはネットワークインターフェイスに追加の名前を割り当てることができます。この代替名は、ネットワークインターフェイス名を必要とするコマンドで通常のインターフェイス名と同じように使用できます。
前提条件
- 代替名に ASCII 文字が使用されている。
- 代替名が 128 文字未満である。
手順
ネットワークインターフェイス名とその MAC アドレスを表示します。
ip link show
# ip link show ... enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff ...
Copy to Clipboard Copied! 代替名を割り当てるインターフェイスの MAC アドレスを記録します。
/etc/systemd/network/
ディレクトリーがない場合は作成します。mkdir -p /etc/systemd/network/
# mkdir -p /etc/systemd/network/
Copy to Clipboard Copied! 代替名が必要なインターフェイスごとに、
/etc/systemd/network/
ディレクトリーに、一意の名前と.link
接尾辞を持つ/usr/lib/systemd/network/99-default.link
ファイルのコピーを作成します。次に例を示します。cp /usr/lib/systemd/network/99-default.link /etc/systemd/network/98-lan.link
# cp /usr/lib/systemd/network/99-default.link /etc/systemd/network/98-lan.link
Copy to Clipboard Copied! 前のステップで作成したファイルを変更します。
[Match]
セクションを次のように書き換え、AlternativeName
エントリーを[Link]
セクションに追加します。[Match] MACAddress=<MAC_address> [Link] ... AlternativeName=<alternative_interface_name_1> AlternativeName=<alternative_interface_name_2> AlternativeName=<alternative_interface_name_n>
[Match] MACAddress=<MAC_address> [Link] ... AlternativeName=<alternative_interface_name_1> AlternativeName=<alternative_interface_name_2> AlternativeName=<alternative_interface_name_n>
Copy to Clipboard Copied! たとえば、次の内容を含む
/etc/systemd/network/70-altname.link
ファイルを作成して、MAC アドレス00:00:5e:00:53:1a
のインターフェイスに代替名としてprovider
を割り当てます。[Match] MACAddress=00:00:5e:00:53:1a [Link] NamePolicy=keep kernel database onboard slot path AlternativeNamesPolicy=database onboard slot path mac MACAddressPolicy=none AlternativeName=provider
[Match] MACAddress=00:00:5e:00:53:1a [Link] NamePolicy=keep kernel database onboard slot path AlternativeNamesPolicy=database onboard slot path mac MACAddressPolicy=none AlternativeName=provider
Copy to Clipboard Copied! initrd
RAM ディスクイメージを再生成します。dracut -f
# dracut -f
Copy to Clipboard Copied! システムを再起動します。
reboot
# reboot
Copy to Clipboard Copied!
検証
代替インターフェイス名を使用します。たとえば、代替名
provider
を使用してデバイスの IP アドレス設定を表示します。ip address show provider
# ip address show provider 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:00:5e:00:53:1a brd ff:ff:ff:ff:ff:ff altname provider ...
Copy to Clipboard Copied!
第2章 イーサネット接続の設定
NetworkManager は、ホストにインストールされている各イーサネットアダプターの接続プロファイルを作成します。デフォルトでは、このプロファイルは IPv4 接続と IPv6 接続の両方に DHCP を使用します。次の場合は、この自動作成されたプロファイルを変更するか、新しいプロファイルを追加してください。
- ネットワークに、静的 IP アドレス設定などのカスタム設定が必要な場合
- ホストが異なるネットワーク間をローミングするため、複数のプロファイルが必要な場合
Red Hat Enterprise Linux は、イーサネット接続を設定するためのさまざまなオプションを管理者に提供します。以下に例を示します。
-
nmcli
を使用して、コマンドラインで接続を設定します。 -
nmtui
を使用して、テキストベースのユーザーインターフェイスで接続を設定します。 - GNOME Settings メニューを使用して、グラフィカルインターフェイスで接続を設定します。
-
nmstatectl
を使用して、Nmstate API を介して接続を設定します。 - RHEL システムロールを使用して、1 つまたは複数のホストで接続の設定を自動化する。
Microsoft Azure クラウドで実行しているホストでイーサネット接続を手動で設定する場合は、cloud-init
サービスを無効にするか、クラウド環境から取得したネットワーク設定を無視するように設定します。それ以外の場合は、cloud-init
は、手動で設定したネットワーク設定を次回の再起動時に上書きされます。
2.1. nmcli
を使用したイーサネット接続の設定
イーサネット経由でホストをネットワークに接続する場合は、nmcli
ユーティリティーを使用してコマンドラインで接続の設定を管理できます。
前提条件
- 物理または仮想イーサネットネットワークインターフェイスコントローラー (NIC) がサーバーに設定されている。
手順
NetworkManager 接続プロファイルをリストします。
nmcli connection show
# nmcli connection show NAME UUID TYPE DEVICE Wired connection 1 a5eb6490-cc20-3668-81f8-0314a27f3f75 ethernet enp1s0
Copy to Clipboard Copied! デフォルトでは、NetworkManager はホスト内の各 NIC のプロファイルを作成します。この NIC を特定のネットワークにのみ接続する予定がある場合は、自動作成されたプロファイルを調整してください。この NIC をさまざまな設定のネットワークに接続する予定がある場合は、ネットワークごとに個別のプロファイルを作成してください。
追加の接続プロファイルを作成する場合は、次のように実行します。
nmcli connection add con-name <connection-name> ifname <device-name> type ethernet
# nmcli connection add con-name <connection-name> ifname <device-name> type ethernet
Copy to Clipboard Copied! 既存のプロファイルを変更するには、この手順をスキップしてください。
オプション: 接続プロファイルの名前を変更します。
nmcli connection modify "Wired connection 1" connection.id "Internal-LAN"
# nmcli connection modify "Wired connection 1" connection.id "Internal-LAN"
Copy to Clipboard Copied! ホストに複数のプロファイルがある場合は、わかりやすい名前を付けると、プロファイルの目的を識別しやすくなります。
接続プロファイルの現在の設定を表示します。
nmcli connection show Internal-LAN
# nmcli connection show Internal-LAN ... connection.interface-name: enp1s0 connection.autoconnect: yes ipv4.method: auto ipv6.method: auto ...
Copy to Clipboard Copied! IPv4 を設定します。
DHCP を使用するには、次のように実行します。
nmcli connection modify Internal-LAN ipv4.method auto
# nmcli connection modify Internal-LAN ipv4.method auto
Copy to Clipboard Copied! ipv4.method
がすでにauto
(デフォルト) に設定されている場合は、この手順をスキップしてください。静的 IPv4 アドレス、ネットワークマスク、デフォルトゲートウェイ、DNS サーバー、および検索ドメインを設定するには、次のように実行します。
nmcli connection modify Internal-LAN ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200 ipv4.dns-search example.com
# nmcli connection modify Internal-LAN ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200 ipv4.dns-search example.com
Copy to Clipboard Copied!
IPv6 設定を行います。
ステートレスアドレス自動設定 (SLAAC) を使用するには、次のように実行します。
nmcli connection modify Internal-LAN ipv6.method auto
# nmcli connection modify Internal-LAN ipv6.method auto
Copy to Clipboard Copied! ipv6.method
がすでにauto
(デフォルト) に設定されている場合は、この手順をスキップしてください。静的 IPv6 アドレス、ネットワークマスク、デフォルトゲートウェイ、DNS サーバー、および検索ドメインを設定するには、次のように実行します。
nmcli connection modify Internal-LAN ipv6.method manual ipv6.addresses 2001:db8:1::fffe/64 ipv6.gateway 2001:db8:1::fffe ipv6.dns 2001:db8:1::ffbb ipv6.dns-search example.com
# nmcli connection modify Internal-LAN ipv6.method manual ipv6.addresses 2001:db8:1::fffe/64 ipv6.gateway 2001:db8:1::fffe ipv6.dns 2001:db8:1::ffbb ipv6.dns-search example.com
Copy to Clipboard Copied!
プロファイルの他の設定をカスタマイズするには、次のコマンドを使用します。
nmcli connection modify <connection-name> <setting> <value>
# nmcli connection modify <connection-name> <setting> <value>
Copy to Clipboard Copied! 値はスペースまたはセミコロンで引用符で囲みます。
プロファイルをアクティブ化します。
nmcli connection up Internal-LAN
# nmcli connection up Internal-LAN
Copy to Clipboard Copied!
検証
NIC の IP 設定を表示します。
ip address show enp1s0
# ip address show enp1s0 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:17:b8:b6 brd ff:ff:ff:ff:ff:ff inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute enp1s0 valid_lft forever preferred_lft forever inet6 2001:db8:1::fffe/64 scope global noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied! IPv4 デフォルトゲートウェイを表示します。
ip route show default
# ip route show default default via 192.0.2.254 dev enp1s0 proto static metric 102
Copy to Clipboard Copied! IPv6 デフォルトゲートウェイを表示します。
ip -6 route show default
# ip -6 route show default default via 2001:db8:1::fffe dev enp1s0 proto static metric 102 pref medium
Copy to Clipboard Copied! DNS 設定を表示します。
cat /etc/resolv.conf search example.com nameserver 192.0.2.200 nameserver 2001:db8:1::ffbb
# cat /etc/resolv.conf search example.com nameserver 192.0.2.200 nameserver 2001:db8:1::ffbb
Copy to Clipboard Copied! 複数の接続プロファイルが同時にアクティブな場合、
nameserver
エントリーの順序は、これらのプロファイルの DNS 優先度の値と接続タイプによって異なります。ping
ユーティリティーを使用して、このホストがパケットを他のホストに送信できることを確認します。ping <host-name-or-IP-address>
# ping <host-name-or-IP-address>
Copy to Clipboard Copied!
トラブルシューティング
- ネットワークケーブルがホストとスイッチに差し込まれていることを確認します。
- リンク障害がこのホストだけに存在するか、同じスイッチに接続された他のホストにも存在するかを確認します。
- ネットワークケーブルとネットワークインターフェイスが予想どおりに機能していることを確認します。ハードウェア診断手順を実行し、不具合のあるケーブルとネットワークインターフェイスカードを交換します。
- ディスクの設定がデバイスの設定と一致しない場合は、NetworkManager を起動するか再起動して、インメモリー接続を作成することで、デバイスの設定を反映します。この問題の詳細と回避方法は、Red Hat ナレッジベースのソリューション記事 NetworkManager duplicates a connection after restart of NetworkManager service を参照してください。
2.2. nmtui
を使用したイーサネット接続の設定
イーサネット経由でホストをネットワークに接続する場合は、nmtui
アプリケーションを使用して、テキストベースのユーザーインターフェイスで接続の設定を管理できます。nmtui
では、グラフィカルインターフェイスを使用せずに、新しいプロファイルの作成や、ホスト上の既存のプロファイルの更新を行います。
nmtui
で以下を行います。
- カーソルキーを使用してナビゲートします。
- ボタンを選択して Enter を押します。
- Space を使用してチェックボックスをオンまたはオフにします。
- 前の画面に戻るには、ESC を使用します。
前提条件
- 物理または仮想イーサネットネットワークインターフェイスコントローラー (NIC) がサーバーに設定されている。
手順
接続に使用するネットワークデバイス名がわからない場合は、使用可能なデバイスを表示します。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet unavailable -- ...
Copy to Clipboard Copied! nmtui
を開始します。nmtui
# nmtui
Copy to Clipboard Copied! - Edit a connection 選択し、Enter を押します。
新しい接続プロファイルを追加するか、既存の接続プロファイルを変更するかを選択します。
新しいプロファイルを作成するには、以下を実行します。
- Add を押します。
- ネットワークタイプのリストから Ethernet を選択し、Enter を押します。
- 既存のプロファイルを変更するには、リストからプロファイルを選択し、Enter を押します。
オプション: 接続プロファイルの名前を更新します。
ホストに複数のプロファイルがある場合は、わかりやすい名前を付けると、プロファイルの目的を識別しやすくなります。
- 新しい接続プロファイルを作成する場合は、ネットワークデバイス名を connection フィールドに入力します。
環境に応じて、
IPv4 configuration
およびIPv6 configuration
領域に IP アドレス設定を設定します。これを行うには、これらの領域の横にあるボタンを押して、次を選択します。- この接続に IP アドレスが必要ない場合は、Disabled にします。
- DHCP サーバーが IP アドレスをこの NIC に動的に割り当てる場合は、Automatic にします。
ネットワークで静的 IP アドレス設定が必要な場合は、Manual にします。この場合、さらにフィールドに入力する必要があります。
- 設定するプロトコルの横にある Show を押して、追加のフィールドを表示します。
Addresses の横にある Add を押して、IP アドレスとサブネットマスクを Classless Inter-Domain Routing (CIDR) 形式で入力します。
サブネットマスクを指定しない場合、NetworkManager は IPv4 アドレスに
/32
サブネットマスクを設定し、IPv6 アドレスに/64
サブネットマスクを設定します。- デフォルトゲートウェイのアドレスを入力します。
- DNS servers の横にある Add を押して、DNS サーバーのアドレスを入力します。
- Search domains の横にある Add を押して、DNS 検索ドメインを入力します。
図2.1 静的 IP アドレス設定によるイーサネット接続の例
- OK を押すと、新しい接続が作成され、自動的にアクティブ化されます。
- Back を押してメインメニューに戻ります。
-
Quit を選択し、Enter キーを押して
nmtui
アプリケーションを閉じます。
検証
NIC の IP 設定を表示します。
ip address show enp1s0
# ip address show enp1s0 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:17:b8:b6 brd ff:ff:ff:ff:ff:ff inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute enp1s0 valid_lft forever preferred_lft forever inet6 2001:db8:1::fffe/64 scope global noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied! IPv4 デフォルトゲートウェイを表示します。
ip route show default
# ip route show default default via 192.0.2.254 dev enp1s0 proto static metric 102
Copy to Clipboard Copied! IPv6 デフォルトゲートウェイを表示します。
ip -6 route show default
# ip -6 route show default default via 2001:db8:1::fffe dev enp1s0 proto static metric 102 pref medium
Copy to Clipboard Copied! DNS 設定を表示します。
cat /etc/resolv.conf search example.com nameserver 192.0.2.200 nameserver 2001:db8:1::ffbb
# cat /etc/resolv.conf search example.com nameserver 192.0.2.200 nameserver 2001:db8:1::ffbb
Copy to Clipboard Copied! 複数の接続プロファイルが同時にアクティブな場合、
nameserver
エントリーの順序は、これらのプロファイルの DNS 優先度の値と接続タイプによって異なります。ping
ユーティリティーを使用して、このホストがパケットを他のホストに送信できることを確認します。ping <host-name-or-IP-address>
# ping <host-name-or-IP-address>
Copy to Clipboard Copied!
トラブルシューティング
- ネットワークケーブルがホストとスイッチに差し込まれていることを確認します。
- リンク障害がこのホストだけに存在するか、同じスイッチに接続された他のホストにも存在するかを確認します。
- ネットワークケーブルとネットワークインターフェイスが予想どおりに機能していることを確認します。ハードウェア診断手順を実行し、不具合のあるケーブルとネットワークインターフェイスカードを交換します。
- ディスクの設定がデバイスの設定と一致しない場合は、NetworkManager を起動するか再起動して、インメモリー接続を作成することで、デバイスの設定を反映します。この問題の詳細と回避方法は、Red Hat ナレッジベースのソリューション記事 NetworkManager duplicates a connection after restart of NetworkManager service を参照してください。
2.3. control-center によるイーサネット接続の設定
イーサネット経由でホストをネットワークに接続する場合は、GNOME 設定メニューを使用して、グラフィカルインターフェイスで接続の設定を管理できます。
control-center
は nmcli
ユーティリティーほど多くの設定オプションをサポートしていないことに注意してください。
前提条件
- 物理または仮想イーサネットネットワークインターフェイスコントローラー (NIC) がサーバーに設定されている。
- GNOME がインストールされている。
手順
-
Super キーを押して
Settings
を入力し、Enter を押します。 - 左側のナビゲーションにある Network を選択します。
新しい接続プロファイルを追加するか、既存の接続プロファイルを変更するかを選択します。
- 新しいプロファイルを作成するには、Ethernet エントリーの横にある ボタンをクリックします。
- 既存のプロファイルを変更するには、プロファイルエントリーの横にある歯車アイコンをクリックします。
オプション: ID タブで、接続プロファイルの名前を更新します。
ホストに複数のプロファイルがある場合は、わかりやすい名前を付けると、プロファイルの目的を識別しやすくなります。
環境に応じて、IPv4 タブと IPv6 タブで IP アドレス設定を設定します。
-
DHCP または IPv6 ステートレスアドレス自動設定 (SLAAC) を使用するには、方法として
Automatic (DHCP)
を選択します (デフォルト)。 静的 IP アドレス、ネットワークマスク、デフォルトゲートウェイ、DNS サーバー、および検索ドメインを設定するには、方法として
Manual
を選択し、タブのフィールドに入力します。
-
DHCP または IPv6 ステートレスアドレス自動設定 (SLAAC) を使用するには、方法として
接続プロファイルを追加するか変更するかに応じて、
または ボタンをクリックして接続を保存します。GNOME の
control-center
は、接続を自動的にアクティブにします。
検証
NIC の IP 設定を表示します。
ip address show enp1s0
# ip address show enp1s0 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:17:b8:b6 brd ff:ff:ff:ff:ff:ff inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute enp1s0 valid_lft forever preferred_lft forever inet6 2001:db8:1::fffe/64 scope global noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied! IPv4 デフォルトゲートウェイを表示します。
ip route show default
# ip route show default default via 192.0.2.254 dev enp1s0 proto static metric 102
Copy to Clipboard Copied! IPv6 デフォルトゲートウェイを表示します。
ip -6 route show default
# ip -6 route show default default via 2001:db8:1::fffe dev enp1s0 proto static metric 102 pref medium
Copy to Clipboard Copied! DNS 設定を表示します。
cat /etc/resolv.conf search example.com nameserver 192.0.2.200 nameserver 2001:db8:1::ffbb
# cat /etc/resolv.conf search example.com nameserver 192.0.2.200 nameserver 2001:db8:1::ffbb
Copy to Clipboard Copied! 複数の接続プロファイルが同時にアクティブな場合、
nameserver
エントリーの順序は、これらのプロファイルの DNS 優先度の値と接続タイプによって異なります。ping
ユーティリティーを使用して、このホストがパケットを他のホストに送信できることを確認します。ping <host-name-or-IP-address>
# ping <host-name-or-IP-address>
Copy to Clipboard Copied!
トラブルシューティングの手順
- ネットワークケーブルがホストとスイッチに差し込まれていることを確認します。
- リンク障害がこのホストだけに存在するか、同じスイッチに接続された他のホストにも存在するかを確認します。
- ネットワークケーブルとネットワークインターフェイスが予想どおりに機能していることを確認します。ハードウェア診断手順を実行し、不具合のあるケーブルとネットワークインターフェイスカードを交換します。
- ディスクの設定がデバイスの設定と一致しない場合は、NetworkManager を起動するか再起動して、インメモリー接続を作成することで、デバイスの設定を反映します。この問題の詳細と回避方法は、Red Hat ナレッジベースのソリューション記事 NetworkManager duplicates a connection after restart of NetworkManager service を参照してください。
2.4. nmstatectl
でインターフェイス名を指定して静的 IP アドレスによる Ethernet 接続を設定する
nmstatectl
ユーティリティーを使用して、Nmstate API を介してイーサネット接続を設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
Nmstate を使用すると、静的 IP アドレス、ゲートウェイ、および DNS 設定を使用してイーサネット接続を設定し、それらを指定のインターフェイス名に割り当てることができます。
前提条件
- 物理または仮想イーサネットネットワークインターフェイスコントローラー (NIC) がサーバーに設定されている。
-
nmstate
パッケージがインストールされている。
手順
以下の内容を含む YAML ファイル (例:
~/create-ethernet-profile.yml
) を作成します。--- interfaces: - name: enp1s0 type: ethernet state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: enp1s0 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: enp1s0 dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb
--- interfaces: - name: enp1s0 type: ethernet state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: enp1s0 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: enp1s0 dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb
Copy to Clipboard Copied! これらの設定では、次の設定を使用して
enp1s0
デバイスのイーサネット接続プロファイルを定義します。-
静的 IPv4 アドレス:
192.0.2.1
(サブネットマスクが/24
) -
静的 IPv6 アドレス:
2001:db8:1::1
(サブネットマスクが/64
) -
IPv4 デフォルトゲートウェイ -
192.0.2.254
-
IPv6 デフォルトゲートウェイ -
2001:db8:1::fffe
-
IPv4 DNS サーバー -
192.0.2.200
-
IPv6 DNS サーバー -
2001:db8:1::ffbb
-
DNS 検索ドメイン -
example.com
-
静的 IPv4 アドレス:
オプション:
interfaces
プロパティーでidentifier: mac-address
およびmac-address: <mac_address>
プロパティーを定義すると、ネットワークインターフェイスカードを名前ではなく MAC アドレスで識別できます。次に例を示します。--- interfaces: - name: <profile_name> type: ethernet identifier: mac-address mac-address: <mac_address> ...
--- interfaces: - name: <profile_name> type: ethernet identifier: mac-address mac-address: <mac_address> ...
Copy to Clipboard Copied! 設定をシステムに適用します。
nmstatectl apply ~/create-ethernet-profile.yml
# nmstatectl apply ~/create-ethernet-profile.yml
Copy to Clipboard Copied!
検証
現在の状態を YAML 形式で表示します。
nmstatectl show enp1s0
# nmstatectl show enp1s0
Copy to Clipboard Copied! NIC の IP 設定を表示します。
ip address show enp1s0
# ip address show enp1s0 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:17:b8:b6 brd ff:ff:ff:ff:ff:ff inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute enp1s0 valid_lft forever preferred_lft forever inet6 2001:db8:1::fffe/64 scope global noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied! IPv4 デフォルトゲートウェイを表示します。
ip route show default
# ip route show default default via 192.0.2.254 dev enp1s0 proto static metric 102
Copy to Clipboard Copied! IPv6 デフォルトゲートウェイを表示します。
ip -6 route show default
# ip -6 route show default default via 2001:db8:1::fffe dev enp1s0 proto static metric 102 pref medium
Copy to Clipboard Copied! DNS 設定を表示します。
cat /etc/resolv.conf search example.com nameserver 192.0.2.200 nameserver 2001:db8:1::ffbb
# cat /etc/resolv.conf search example.com nameserver 192.0.2.200 nameserver 2001:db8:1::ffbb
Copy to Clipboard Copied! 複数の接続プロファイルが同時にアクティブな場合、
nameserver
エントリーの順序は、これらのプロファイルの DNS 優先度の値と接続タイプによって異なります。ping
ユーティリティーを使用して、このホストがパケットを他のホストに送信できることを確認します。ping <host-name-or-IP-address>
# ping <host-name-or-IP-address>
Copy to Clipboard Copied!
2.5. network
RHEL システムロールとインターフェイス名を使用した静的 IP アドレスでのイーサネット接続の設定
Red Hat Enterprise Linux ホストをイーサネットネットワークに接続するには、ネットワークデバイスの NetworkManager 接続プロファイルを作成します。Ansible と network
RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。
network
RHEL システムロールを使用すると、静的 IP アドレス、ゲートウェイ、および DNS 設定を使用してイーサネット接続を設定し、それらを指定のインターフェイス名に割り当てることができます。
通常、管理者は Playbook を再利用します。Ansible が静的 IP アドレスを割り当てるホストごとに、個別の Playbook を管理することはありません。そうすることにより、Playbook 内の変数を使用し、外部ファイルで設定を維持できます。その結果、複数のホストに個別の設定を動的に割り当てるために必要な Playbook が 1 つだけになります。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - サーバーの構成に物理または仮想イーサネットデバイスが存在する。
- 管理対象ノードが NetworkManager を使用してネットワークを設定している。
手順
~/inventory
ファイルを編集し、ホストエントリーにホスト固有の設定を追加します。managed-node-01.example.com interface=enp1s0 ip_v4=192.0.2.1/24 ip_v6=2001:db8:1::1/64 gateway_v4=192.0.2.254 gateway_v6=2001:db8:1::fffe managed-node-02.example.com interface=enp1s0 ip_v4=192.0.2.2/24 ip_v6=2001:db8:1::2/64 gateway_v4=192.0.2.254 gateway_v6=2001:db8:1::fffe
managed-node-01.example.com interface=enp1s0 ip_v4=192.0.2.1/24 ip_v6=2001:db8:1::1/64 gateway_v4=192.0.2.254 gateway_v6=2001:db8:1::fffe managed-node-02.example.com interface=enp1s0 ip_v4=192.0.2.2/24 ip_v6=2001:db8:1::2/64 gateway_v4=192.0.2.254 gateway_v6=2001:db8:1::fffe
Copy to Clipboard Copied! 次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configure the network hosts: managed-node-01.example.com,managed-node-02.example.com tasks: - name: Ethernet connection profile with static IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: "{{ interface }}" interface_name: "{{ interface }}" type: ethernet autoconnect: yes ip: address: - "{{ ip_v4 }}" - "{{ ip_v6 }}" gateway4: "{{ gateway_v4 }}" gateway6: "{{ gateway_v6 }}" dns: - 192.0.2.200 - 2001:db8:1::ffbb dns_search: - example.com state: up
--- - name: Configure the network hosts: managed-node-01.example.com,managed-node-02.example.com tasks: - name: Ethernet connection profile with static IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: "{{ interface }}" interface_name: "{{ interface }}" type: ethernet autoconnect: yes ip: address: - "{{ ip_v4 }}" - "{{ ip_v6 }}" gateway4: "{{ gateway_v4 }}" gateway6: "{{ gateway_v6 }}" dns: - 192.0.2.200 - 2001:db8:1::ffbb dns_search: - example.com state: up
Copy to Clipboard Copied! この Playbook は、インベントリーファイルから各ホストの特定の値を動的に読み取り、すべてのホストで同じ設定に対して Playbook 内の静的な値を使用します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.network/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied!
検証
管理対象ノードの Ansible fact をクエリーし、アクティブなネットワーク設定を確認します。
ansible managed-node-01.example.com -m ansible.builtin.setup
# ansible managed-node-01.example.com -m ansible.builtin.setup ... "ansible_default_ipv4": { "address": "192.0.2.1", "alias": "enp1s0", "broadcast": "192.0.2.255", "gateway": "192.0.2.254", "interface": "enp1s0", "macaddress": "52:54:00:17:b8:b6", "mtu": 1500, "netmask": "255.255.255.0", "network": "192.0.2.0", "prefix": "24", "type": "ether" }, "ansible_default_ipv6": { "address": "2001:db8:1::1", "gateway": "2001:db8:1::fffe", "interface": "enp1s0", "macaddress": "52:54:00:17:b8:b6", "mtu": 1500, "prefix": "64", "scope": "global", "type": "ether" }, ... "ansible_dns": { "nameservers": [ "192.0.2.1", "2001:db8:1::ffbb" ], "search": [ "example.com" ] }, ...
Copy to Clipboard Copied!
2.6. network
RHEL システムロールとデバイスパスを使用した静的 IP アドレスでのイーサネット接続の設定
Red Hat Enterprise Linux ホストをイーサネットネットワークに接続するには、ネットワークデバイスの NetworkManager 接続プロファイルを作成します。Ansible と network
RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。
network
RHEL システムロールを使用すると、静的 IP アドレス、ゲートウェイ、および DNS 設定を使用してイーサネット接続を設定し、それらを名前ではなくパスに基づいてデバイスに割り当てることができます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - サーバーに、物理または仮想のイーサネットデバイスが設定されている。
- 管理対象ノードが NetworkManager を使用してネットワークを設定している。
-
デバイスのパスがわかっている。
udevadm info /sys/class/net/<device_name> | grep ID_PATH=
コマンドを使用すると、デバイスパスを表示できます。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Ethernet connection profile with static IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: example match: path: - pci-0000:00:0[1-3].0 - '&!pci-0000:00:02.0' type: ethernet autoconnect: yes ip: address: - 192.0.2.1/24 - 2001:db8:1::1/64 gateway4: 192.0.2.254 gateway6: 2001:db8:1::fffe dns: - 192.0.2.200 - 2001:db8:1::ffbb dns_search: - example.com state: up
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Ethernet connection profile with static IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: example match: path: - pci-0000:00:0[1-3].0 - '&!pci-0000:00:02.0' type: ethernet autoconnect: yes ip: address: - 192.0.2.1/24 - 2001:db8:1::1/64 gateway4: 192.0.2.254 gateway6: 2001:db8:1::fffe dns: - 192.0.2.200 - 2001:db8:1::ffbb dns_search: - example.com state: up
Copy to Clipboard Copied! サンプル Playbook で指定されている設定は次のとおりです。
match
-
設定を適用するために満たす必要がある条件を定義します。この変数は
path
オプションでのみ使用できます。 path
-
デバイスの永続パスを定義します。固定パスまたは式の形式で設定できます。値には修飾子とワイルドカードを含めることができます。この例では、PCI ID
0000:00:0[1-3].0
に一致するデバイスには設定を適用しますが、0000:00:02.0
に一致するデバイスには適用しません。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.network/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied!
検証
管理対象ノードの Ansible fact をクエリーし、アクティブなネットワーク設定を確認します。
ansible managed-node-01.example.com -m ansible.builtin.setup
# ansible managed-node-01.example.com -m ansible.builtin.setup ... "ansible_default_ipv4": { "address": "192.0.2.1", "alias": "enp1s0", "broadcast": "192.0.2.255", "gateway": "192.0.2.254", "interface": "enp1s0", "macaddress": "52:54:00:17:b8:b6", "mtu": 1500, "netmask": "255.255.255.0", "network": "192.0.2.0", "prefix": "24", "type": "ether" }, "ansible_default_ipv6": { "address": "2001:db8:1::1", "gateway": "2001:db8:1::fffe", "interface": "enp1s0", "macaddress": "52:54:00:17:b8:b6", "mtu": 1500, "prefix": "64", "scope": "global", "type": "ether" }, ... "ansible_dns": { "nameservers": [ "192.0.2.1", "2001:db8:1::ffbb" ], "search": [ "example.com" ] }, ...
Copy to Clipboard Copied!
2.7. nmstatectl
でインターフェイス名を指定して動的 IP アドレスによる Ethernet 接続を設定する
nmstatectl
ユーティリティーを使用して、Nmstate API を介してイーサネット接続を設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
Nmstate を使用すると、DHCP サーバーおよび IPv6 ステートレスアドレス自動設定 (SLAAC) から IP アドレス、ゲートウェイ、および DNS 設定を取得するイーサネット接続を設定できます。指定したインターフェイス名に接続プロファイルを割り当てることができます。
前提条件
- 物理または仮想イーサネットネットワークインターフェイスコントローラー (NIC) がサーバーに設定されている。
- DHCP サーバーをネットワークで使用できる。
-
nmstate
パッケージがインストールされている。
手順
以下の内容を含む YAML ファイル (例:
~/create-ethernet-profile.yml
) を作成します。--- interfaces: - name: enp1s0 type: ethernet state: up ipv4: enabled: true auto-dns: true auto-gateway: true auto-routes: true dhcp: true ipv6: enabled: true auto-dns: true auto-gateway: true auto-routes: true autoconf: true dhcp: true
--- interfaces: - name: enp1s0 type: ethernet state: up ipv4: enabled: true auto-dns: true auto-gateway: true auto-routes: true dhcp: true ipv6: enabled: true auto-dns: true auto-gateway: true auto-routes: true autoconf: true dhcp: true
Copy to Clipboard Copied! これらの設定では、
enp1s0
デバイスのイーサネット接続プロファイルを定義します。接続では、DHCP サーバーと IPv6 ステートレスアドレス自動設定 (SLAAC) から、IPv4 アドレス、IPv6 アドレス、デフォルトゲートウェイ、ルート、DNS サーバー、および検索ドメインを取得します。オプション:
interfaces
プロパティーでidentifier: mac-address
およびmac-address: <mac_address>
プロパティーを定義すると、ネットワークインターフェイスカードを名前ではなく MAC アドレスで識別できます。次に例を示します。--- interfaces: - name: <profile_name> type: ethernet identifier: mac-address mac-address: <mac_address> ...
--- interfaces: - name: <profile_name> type: ethernet identifier: mac-address mac-address: <mac_address> ...
Copy to Clipboard Copied! 設定をシステムに適用します。
nmstatectl apply ~/create-ethernet-profile.yml
# nmstatectl apply ~/create-ethernet-profile.yml
Copy to Clipboard Copied!
検証
現在の状態を YAML 形式で表示します。
nmstatectl show enp1s0
# nmstatectl show enp1s0
Copy to Clipboard Copied! NIC の IP 設定を表示します。
ip address show enp1s0
# ip address show enp1s0 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:17:b8:b6 brd ff:ff:ff:ff:ff:ff inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute enp1s0 valid_lft forever preferred_lft forever inet6 2001:db8:1::fffe/64 scope global noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied! IPv4 デフォルトゲートウェイを表示します。
ip route show default
# ip route show default default via 192.0.2.254 dev enp1s0 proto static metric 102
Copy to Clipboard Copied! IPv6 デフォルトゲートウェイを表示します。
ip -6 route show default
# ip -6 route show default default via 2001:db8:1::fffe dev enp1s0 proto static metric 102 pref medium
Copy to Clipboard Copied! DNS 設定を表示します。
cat /etc/resolv.conf search example.com nameserver 192.0.2.200 nameserver 2001:db8:1::ffbb
# cat /etc/resolv.conf search example.com nameserver 192.0.2.200 nameserver 2001:db8:1::ffbb
Copy to Clipboard Copied! 複数の接続プロファイルが同時にアクティブな場合、
nameserver
エントリーの順序は、これらのプロファイルの DNS 優先度の値と接続タイプによって異なります。ping
ユーティリティーを使用して、このホストがパケットを他のホストに送信できることを確認します。ping <host-name-or-IP-address>
# ping <host-name-or-IP-address>
Copy to Clipboard Copied!
2.8. network
RHEL システムロールとインターフェイス名を使用した動的 IP アドレスでのイーサネット接続の設定
Red Hat Enterprise Linux ホストをイーサネットネットワークに接続するには、ネットワークデバイスの NetworkManager 接続プロファイルを作成します。Ansible と network
RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。
network
RHEL システムロールを使用すると、DHCP サーバーおよび IPv6 ステートレスアドレス自動設定 (SLAAC) から IP アドレス、ゲートウェイ、および DNS 設定を取得するイーサネット接続を設定できます。このロールを使用すると、指定のインターフェイス名に接続プロファイルを割り当てることができます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - サーバーに、物理または仮想のイーサネットデバイスが設定されている。
- ネットワーク内で DHCP サーバーと SLAAC が利用できる。
- 管理対象ノードが NetworkManager サービスを使用してネットワークを設定している。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Ethernet connection profile with dynamic IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: enp1s0 interface_name: enp1s0 type: ethernet autoconnect: yes ip: dhcp4: yes auto6: yes state: up
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Ethernet connection profile with dynamic IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: enp1s0 interface_name: enp1s0 type: ethernet autoconnect: yes ip: dhcp4: yes auto6: yes state: up
Copy to Clipboard Copied! サンプル Playbook で指定されている設定は次のとおりです。
dhcp4: yes
- DHCP、PPP、または同様のサービスからの自動 IPv4 アドレス割り当てを有効にします。
auto6: yes
-
IPv6 自動設定を有効にします。デフォルトでは、NetworkManager はルーター広告を使用します。ルーターが
managed
フラグを通知すると、NetworkManager は DHCPv6 サーバーに IPv6 アドレスと接頭辞を要求します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.network/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied!
検証
管理対象ノードの Ansible fact をクエリーし、インターフェイスが IP アドレスと DNS 設定を受信したことを確認します。
ansible managed-node-01.example.com -m ansible.builtin.setup
# ansible managed-node-01.example.com -m ansible.builtin.setup ... "ansible_default_ipv4": { "address": "192.0.2.1", "alias": "enp1s0", "broadcast": "192.0.2.255", "gateway": "192.0.2.254", "interface": "enp1s0", "macaddress": "52:54:00:17:b8:b6", "mtu": 1500, "netmask": "255.255.255.0", "network": "192.0.2.0", "prefix": "24", "type": "ether" }, "ansible_default_ipv6": { "address": "2001:db8:1::1", "gateway": "2001:db8:1::fffe", "interface": "enp1s0", "macaddress": "52:54:00:17:b8:b6", "mtu": 1500, "prefix": "64", "scope": "global", "type": "ether" }, ... "ansible_dns": { "nameservers": [ "192.0.2.1", "2001:db8:1::ffbb" ], "search": [ "example.com" ] }, ...
Copy to Clipboard Copied!
2.9. network
RHEL システムロールとデバイスパスを使用した動的 IP アドレスでのイーサネット接続の設定
Red Hat Enterprise Linux ホストをイーサネットネットワークに接続するには、ネットワークデバイスの NetworkManager 接続プロファイルを作成します。Ansible と network
RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。
network
RHEL システムロールを使用すると、DHCP サーバーおよび IPv6 ステートレスアドレス自動設定 (SLAAC) から IP アドレス、ゲートウェイ、および DNS 設定を取得するイーサネット接続を設定できます。このロールにより、インターフェイス名ではなくパスに基づいてデバイスに接続プロファイルを割り当てることができます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - サーバーに、物理または仮想のイーサネットデバイスが設定されている。
- ネットワーク内で DHCP サーバーと SLAAC が利用できる。
- 管理対象ホストは、NetworkManager を使用してネットワークを設定します。
-
デバイスのパスがわかっている。
udevadm info /sys/class/net/<device_name> | grep ID_PATH=
コマンドを使用すると、デバイスパスを表示できます。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Ethernet connection profile with dynamic IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: example match: path: - pci-0000:00:0[1-3].0 - '&!pci-0000:00:02.0' type: ethernet autoconnect: yes ip: dhcp4: yes auto6: yes state: up
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Ethernet connection profile with dynamic IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: example match: path: - pci-0000:00:0[1-3].0 - '&!pci-0000:00:02.0' type: ethernet autoconnect: yes ip: dhcp4: yes auto6: yes state: up
Copy to Clipboard Copied! サンプル Playbook で指定されている設定は次のとおりです。
match: path
-
設定を適用するために満たす必要がある条件を定義します。この変数は
path
オプションでのみ使用できます。 path: <path_and_expressions>
-
デバイスの永続パスを定義します。固定パスまたは式の形式で設定できます。値には修飾子とワイルドカードを含めることができます。この例では、PCI ID
0000:00:0[1-3].0
に一致するデバイスには設定を適用しますが、0000:00:02.0
に一致するデバイスには適用しません。 dhcp4: yes
- DHCP、PPP、または同様のサービスからの自動 IPv4 アドレス割り当てを有効にします。
auto6: yes
-
IPv6 自動設定を有効にします。デフォルトでは、NetworkManager はルーター広告を使用します。ルーターが
managed
フラグを通知すると、NetworkManager は DHCPv6 サーバーに IPv6 アドレスと接頭辞を要求します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.network/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied!
検証
管理対象ノードの Ansible fact をクエリーし、インターフェイスが IP アドレスと DNS 設定を受信したことを確認します。
ansible managed-node-01.example.com -m ansible.builtin.setup
# ansible managed-node-01.example.com -m ansible.builtin.setup ... "ansible_default_ipv4": { "address": "192.0.2.1", "alias": "enp1s0", "broadcast": "192.0.2.255", "gateway": "192.0.2.254", "interface": "enp1s0", "macaddress": "52:54:00:17:b8:b6", "mtu": 1500, "netmask": "255.255.255.0", "network": "192.0.2.0", "prefix": "24", "type": "ether" }, "ansible_default_ipv6": { "address": "2001:db8:1::1", "gateway": "2001:db8:1::fffe", "interface": "enp1s0", "macaddress": "52:54:00:17:b8:b6", "mtu": 1500, "prefix": "64", "scope": "global", "type": "ether" }, ... "ansible_dns": { "nameservers": [ "192.0.2.1", "2001:db8:1::ffbb" ], "search": [ "example.com" ] }, ...
Copy to Clipboard Copied!
2.10. インターフェイス名による単一の接続プロファイルを使用した複数のイーサネットインターフェイスの設定
ほとんどの場合、1 つの接続プロファイルには 1 つのネットワークデバイスの設定が含まれています。ただし、接続プロファイルでインターフェイス名を設定する場合、NetworkManager はワイルドカードもサポートします。ホストが動的 IP アドレス割り当てを使用してイーサネットネットワーク間をローミングする場合、この機能を使用して、複数のイーサネットインターフェイスに使用できる単一の接続プロファイルを作成できます。
前提条件
- サーバーの設定には、物理または仮想のイーサネットデバイスが複数存在します。
- DHCP サーバーをネットワークで使用できる。
- ホストに接続プロファイルが存在しません。
手順
enp
で始まるすべてのインターフェイス名に適用される接続プロファイルを追加します。nmcli connection add con-name "Wired connection 1" connection.multi-connect multiple match.interface-name enp* type ethernet
# nmcli connection add con-name "Wired connection 1" connection.multi-connect multiple match.interface-name enp* type ethernet
Copy to Clipboard Copied!
検証
単一接続プロファイルのすべての設定を表示します。
nmcli connection show "Wired connection 1"
# nmcli connection show "Wired connection 1" connection.id: Wired connection 1 ... connection.multi-connect: 3 (multiple) match.interface-name: enp* ...
Copy to Clipboard Copied! 3
は、インターフェイスが特定の瞬間に複数回アクティブになる可能性があることを示します。接続プロファイルは、match.interface-name
パラメーターのパターンに一致するすべてのデバイスを使用するため、接続プロファイルには同じ Universally Unique Identifier (UUID) があります。接続のステータスを表示します。
nmcli connection show
# nmcli connection show NAME UUID TYPE DEVICE ... Wired connection 1 6f22402e-c0cc-49cf-b702-eaf0cd5ea7d1 ethernet enp7s0 Wired connection 1 6f22402e-c0cc-49cf-b702-eaf0cd5ea7d1 ethernet enp8s0 Wired connection 1 6f22402e-c0cc-49cf-b702-eaf0cd5ea7d1 ethernet enp9s0
Copy to Clipboard Copied!
2.11. PCI ID を使用した複数のイーサネットインターフェイスの単一接続プロファイルの設定
PCI ID は、システムに接続されているデバイスの一意の識別子です。接続プロファイルは、PCI ID のリストに基づいてインターフェイスを照合することにより、複数のデバイスを追加します。この手順を使用して、複数のデバイス PCI ID を単一の接続プロファイルに接続できます。
前提条件
- サーバーの設定には、物理または仮想のイーサネットデバイスが複数存在します。
- DHCP サーバーをネットワークで使用できる。
- ホストに接続プロファイルが存在しません。
手順
デバイスパスを特定します。たとえば、
enp
で始まるすべてのインターフェイスのデバイスパスを表示するには、次のように実行します。udevadm info /sys/class/net/enp* | grep ID_PATH=
# udevadm info /sys/class/net/enp* | grep ID_PATH= ... E: ID_PATH=pci-0000:07:00.0 E: ID_PATH=pci-0000:08:00.0
Copy to Clipboard Copied! 0000:00:0[7-8].0
式に一致するすべての PCI ID に適用される接続プロファイルを追加します。nmcli connection add type ethernet connection.multi-connect multiple match.path "pci-0000:07:00.0 pci-0000:08:00.0" con-name "Wired connection 1"
# nmcli connection add type ethernet connection.multi-connect multiple match.path "pci-0000:07:00.0 pci-0000:08:00.0" con-name "Wired connection 1"
Copy to Clipboard Copied!
検証
接続のステータスを表示します。
nmcli connection show
# nmcli connection show NAME UUID TYPE DEVICE Wired connection 1 9cee0958-512f-4203-9d3d-b57af1d88466 ethernet enp7s0 Wired connection 1 9cee0958-512f-4203-9d3d-b57af1d88466 ethernet enp8s0 ...
Copy to Clipboard Copied! 接続プロファイルのすべての設定を表示するには、次のコマンドを実行します。
nmcli connection show "Wired connection 1"
# nmcli connection show "Wired connection 1" connection.id: Wired connection 1 ... connection.multi-connect: 3 (multiple) match.path: pci-0000:07:00.0,pci-0000:08:00.0 ...
Copy to Clipboard Copied! この接続プロファイルは、
match.path
パラメーターのパターンに一致する PCI ID を持つすべてのデバイスを使用するため、接続プロファイルには同じ Universally Unique Identifier (UUID) があります。
第3章 ネットワークボンディングの設定
ネットワークボンディングは、物理ネットワークインターフェイスと仮想ネットワークインターフェイスを組み合わせるか集約して、より高いスループットまたは冗長性を備えた論理インターフェイスを提供する方法です。ボンディングでは、カーネルがすべての操作を排他的に処理します。イーサネットデバイスや VLAN など、さまざまなタイプのデバイスでネットワークボンディングを作成できます。
Red Hat Enterprise Linux は、チームデバイスを設定するためのさまざまなオプションを管理者に提供します。以下に例を示します。
-
nmcli
を使用し、コマンドラインを使用してボンディング接続を設定します。 - RHEL Web コンソールを使用し、Web ブラウザーを使用してボンディング接続を設定します。
-
nmtui
を使用して、テキストベースのユーザーインターフェイスでボンディング接続を設定します。 -
nmstatectl
を使用して、Nmstate API を介してボンディング接続を設定します。 - RHEL システムロールを使用して、1 つまたは複数のホストでボンディング設定を自動化します。
3.1. コントローラーおよびポートインターフェイスのデフォルト動作の理解
NetworkManager
サービスを使用してボンディングポートインターフェイスを管理またはトラブルシューティングする場合は、以下のデフォルトの動作を考慮してください。
- コントローラーインターフェイスを起動しても、ポートインターフェイスは自動的に起動しない。
- ポートインターフェイスを起動すると、コントローラーインターフェイスは毎回、起動する。
- コントローラーインターフェイスを停止すると、ポートインターフェイスも停止する。
- ポートのないコントローラーは、静的 IP 接続を開始できる。
- コントローラーにポートがない場合は、DHCP 接続の開始時にポートを待つ。
- DHCP 接続でポートを待機中のコントローラーは、キャリアを伴うポートの追加時に完了する。
- DHCP 接続でポートを待機中のコントローラーは、キャリアを伴わないポートを追加する時に待機を継続する。
3.2. ボンディングモードに応じたアップストリームのスイッチ設定
使用するボンディングモードに応じて、スイッチでポートを設定する必要があります。
ボンディングモード | スイッチの設定 |
---|---|
| Link Aggregation Control Protocol (LACP) ネゴシエーションによるものではなく、静的な EtherChannel を有効にする必要があります。 |
| このスイッチで必要な設定は必要ありません。 |
| LACP ネゴシエーションによるものではなく、静的な EtherChannel を有効にする必要があります。 |
| LACP ネゴシエーションによるものではなく、静的な EtherChannel を有効にする必要があります。 |
| LACP ネゴシエーションにより設定された EtherChannel が有効になっている必要があります。 |
| このスイッチで必要な設定は必要ありません。 |
| このスイッチで必要な設定は必要ありません。 |
| このスイッチで必要な設定は必要ありません。 |
スイッチの設定方法の詳細は、スイッチのドキュメントを参照してください。
特定のネットワークボンディング機能 (例: fail-over メカニズム) は、ネットワークスイッチなしでのダイレクトケーブル接続に対応していません。詳細は、Red Hat ナレッジベースのソリューション記事 Is bonding supported with direct connection using crossover cables を参照してください。
3.3. nmcli
を使用したネットワークボンディングの設定
コマンドラインでネットワークボンディングを設定するには、nmcli
ユーティリティーを使用します。
前提条件
- サーバーに、2 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。
- ボンディングのポートとしてイーサネットデバイスを使用するには、物理または仮想のイーサネットデバイスがサーバーにインストールされている。
ボンディングのポートにブリッジ、または VLAN デバイスを使用するには、ボンディングの作成時にこれらのデバイスを作成するか、次の説明に従って事前にデバイスを作成することができます。
手順
ボンドインターフェイスを作成します。
nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup"
# nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup"
Copy to Clipboard Copied! このコマンドは、
active-backup
モードを使用するbond0
という名前のボンディングを作成します。Media Independent Interface (MII) 監視間隔も設定する場合は、
miimon=interval
オプションをbond.options
プロパティーに追加します。次に例を示します。nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup,miimon=1000"
# nmcli connection add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup,miimon=1000"
Copy to Clipboard Copied! ネットワークインターフェイスを表示して、ボンドに追加する予定のインターフェイス名を書き留めます。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet disconnected -- enp8s0 ethernet disconnected -- bridge0 bridge connected bridge0 bridge1 bridge connected bridge1 ...
Copy to Clipboard Copied! この例では、以下のように設定されています。
-
enp7s0
およびenp8s0
は設定されません。これらのデバイスをポートとして使用するには、次のステップに接続プロファイルを追加します。 -
bridge0
およびbridge1
には既存の接続プロファイルがあります。これらのデバイスをポートとして使用するには、次の手順でプロファイルを変更します。
-
インターフェイスをボンディングに割り当てます。
ボンディングに割り当てるインターフェイスが設定されていない場合は、インターフェイス用に新しい接続プロファイルを作成します。
nmcli connection add type ethernet port-type bond con-name bond0-port1 ifname enp7s0 controller bond0 nmcli connection add type ethernet port-type bond con-name bond0-port2 ifname enp8s0 controller bond0
# nmcli connection add type ethernet port-type bond con-name bond0-port1 ifname enp7s0 controller bond0 # nmcli connection add type ethernet port-type bond con-name bond0-port2 ifname enp8s0 controller bond0
Copy to Clipboard Copied! これらのコマンドは、
enp7s0
およびenp8s0
のプロファイルを作成し、bond0
接続に追加します。既存の接続プロファイルをボンディングに割り当てるには、以下を実行します。
これらの接続の
controller
パラメーターをbond0
に設定します。nmcli connection modify bridge0 controller bond0 nmcli connection modify bridge1 controller bond0
# nmcli connection modify bridge0 controller bond0 # nmcli connection modify bridge1 controller bond0
Copy to Clipboard Copied! これらのコマンドは、
bridge0
およびbridge1
という名前の既存の接続プロファイルをbond0
接続に割り当てます。接続を再度アクティブにします。
nmcli connection up bridge0 nmcli connection up bridge1
# nmcli connection up bridge0 # nmcli connection up bridge1
Copy to Clipboard Copied!
IPv4 を設定します。
静的 IPv4 アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーを
bond0
接続に設定するには、次のように実行します。nmcli connection modify bond0 ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253' ipv4.dns-search 'example.com' ipv4.method manual
# nmcli connection modify bond0 ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253' ipv4.dns-search 'example.com' ipv4.method manual
Copy to Clipboard Copied! - DHCP を使用するために必要な操作はありません。
- このボンディングデバイスを他のデバイスのポートとして使用する予定の場合は、何もする必要はありません。
IPv6 設定を行います。
静的 IPv6 アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーを
bond0
接続に設定するには、次のように実行します。nmcli connection modify bond0 ipv6.addresses '2001:db8:1::1/64' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd' ipv6.dns-search 'example.com' ipv6.method manual
# nmcli connection modify bond0 ipv6.addresses '2001:db8:1::1/64' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd' ipv6.dns-search 'example.com' ipv6.method manual
Copy to Clipboard Copied! - ステートレスアドレス自動設定 (SLAAC) を使用する場合、アクションは必要ありません。
- このボンディングデバイスを他のデバイスのポートとして使用する予定の場合は、何もする必要はありません。
オプション: ボンディングポートにパラメーターを設定する場合は、次のコマンドを使用します。
nmcli connection modify bond0-port1 bond-port.<parameter> <value>
# nmcli connection modify bond0-port1 bond-port.<parameter> <value>
Copy to Clipboard Copied! 接続をアクティベートします。
nmcli connection up bond0
# nmcli connection up bond0
Copy to Clipboard Copied! ポートが接続されており、
CONNECTION
コラムがポートの接続名を表示していることを確認します。nmcli device
# nmcli device DEVICE TYPE STATE CONNECTION ... enp7s0 ethernet connected bond0-port1 enp8s0 ethernet connected bond0-port2
Copy to Clipboard Copied! 接続のいずれかのポートをアクティブにすると、NetworkManager はボンディングもアクティブにしますが、他のポートはアクティブにしません。ボンディングが有効な場合に、Red Hat Enterprise Linux がすべてのポートを自動的に有効にするように設定できます。
ボンディングの接続の
connection.autoconnect-ports
パラメーターを有効にします。nmcli connection modify bond0 connection.autoconnect-ports 1
# nmcli connection modify bond0 connection.autoconnect-ports 1
Copy to Clipboard Copied! ブリッジを再度アクティブにします。
nmcli connection up bond0
# nmcli connection up bond0
Copy to Clipboard Copied!
検証
ネットワークデバイスの 1 つからネットワークケーブルを一時的に取り外し、ボンディング内の他のデバイスがトラフィックを処理しているかどうかを確認します。
ソフトウェアユーティリティーを使用して、リンク障害イベントを適切にテストする方法がないことに注意してください。
nmcli
などの接続を非アクティブにするツールでは、ポート設定の変更を処理するボンディングドライバーの機能のみが表示され、実際のリンク障害イベントは表示されません。ボンドのステータスを表示します。
cat /proc/net/bonding/bond0
# cat /proc/net/bonding/bond0
Copy to Clipboard Copied!
3.4. RHEL Web コンソールを使用したネットワークボンディングの設定
Web ブラウザーベースのインターフェイスを使用してネットワーク設定を管理する場合は、RHEL Web コンソールを使用してネットワークボンディングを設定します。
前提条件
- RHEL Web コンソールにログインしています。
- サーバーに、2 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。
- ボンディングのメンバーとしてイーサネットデバイスを使用するには、物理または仮想のイーサネットデバイスがサーバーにインストールされている。
ブリッジまたは VLAN デバイスをボンディングのメンバーとして使用するには、次の説明に従って事前に作成します。
手順
- 画面左側のナビゲーションで Networking タブを選択します。
- Interfaces セクションで をクリックします。
- 作成するボンドデバイスの名前を入力します。
- 結合のメンバーにするインターフェイスを選択します。
結合のモードを選択します。
Active backup を選択すると、Web コンソールに追加フィールド Primary が表示され、ここで優先するアクティブデバイスを選択できます。
-
リンクモニタリング監視モードを設定します。たとえば、Adaptive load balancing モードを使用する場合は、
ARP
に設定します。 オプション: モニター間隔、リンクアップ遅延、およびリンクダウン遅延の設定を調整します。通常、トラブルシューティングの目的でのみデフォルトを変更します。
- をクリックします。
デフォルトでは、ボンドは動的 IP アドレスを使用します。静的 IP アドレスを設定する場合:
- Interfaces セクションでボンドの名前をクリックします。
- 設定するプロトコルの横にある Edit をクリックします。
- Addresses の横にある Manual を選択し、IP アドレス、接頭辞、およびデフォルトゲートウェイを入力します。
- DNS セクションで ボタンをクリックし、DNS サーバーの IP アドレスを入力します。複数の DNS サーバーを設定するには、この手順を繰り返します。
- DNS search domains セクションで、 ボタンをクリックし、検索ドメインを入力します。
インターフェイスにスタティックルートが必要な場合は、Routes セクションで設定します。
- をクリックします。
検証
画面左側のナビゲーションで Networking タブを選択し、インターフェイスに着信および発信トラフィックがあるか確認します。
ネットワークデバイスの 1 つからネットワークケーブルを一時的に取り外し、ボンディング内の他のデバイスがトラフィックを処理しているかどうかを確認します。
ソフトウェアユーティリティーを使用して、リンク障害イベントを適切にテストする方法がないことに注意してください。Web コンソールなどの接続を非アクティブ化するツールは、実際のリンク障害イベントではなく、メンバー設定の変更を処理するボンディングドライバーの機能のみを示します。
ボンドのステータスを表示します。
cat /proc/net/bonding/bond0
# cat /proc/net/bonding/bond0
Copy to Clipboard Copied!
3.5. nmtui
を使用したネットワークボンディングの設定
nmtui
アプリケーションは、NetworkManager 用のテキストベースのユーザーインターフェイスを提供します。nmtui
を使用して、グラフィカルインターフェイスを使用せずにホスト上でネットワークボンドを設定できます。
nmtui
で以下を行います。
- カーソルキーを使用してナビゲートします。
- ボタンを選択して Enter を押します。
- Space を使用してチェックボックスをオンまたはオフにします。
- 前の画面に戻るには、ESC を使用します。
前提条件
- サーバーに、2 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。
- ボンディングのポートとしてイーサネットデバイスを使用するには、物理または仮想のイーサネットデバイスがサーバーにインストールされている。
手順
ネットワークボンドを設定するネットワークデバイス名がわからない場合は、使用可能なデバイスを表示します。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet unavailable -- enp8s0 ethernet unavailable -- ...
Copy to Clipboard Copied! nmtui
を開始します。nmtui
# nmtui
Copy to Clipboard Copied! - Edit a connection 選択し、Enter を押します。
- Add を押します。
- ネットワークタイプのリストから Bond を選択し、Enter を押します。
オプション: 作成する NetworkManager プロファイルの名前を入力します。
ホストに複数のプロファイルがある場合は、わかりやすい名前を付けると、プロファイルの目的を識別しやすくなります。
- 作成するボンドデバイス名を Device フィールドに入力します。
作成するボンドにポートを追加します。
- Ports リストの横にある Add を押します。
- ボンドにポートとして追加するインターフェイスのタイプ (例: Ethernet) を選択します。
- オプション: このボンドポート用に作成する NetworkManager プロファイルの名前を入力します。
- ポートのデバイス名を Device フィールドに入力します。
OK を押して、ボンディング設定のウィンドウに戻ります。
図3.1 イーサネットデバイスをポートとしてボンドに追加する
- ボンドにさらにポートを追加するには、これらの手順を繰り返します。
-
ボンディングモードを設定します。設定した値に応じて、
nmtui
は、選択したモードに関連する設定の追加フィールドを表示します。 環境に応じて、IPv4 configuration および IPv6 configuration 領域に IP アドレス設定を設定します。これを行うには、これらの領域の横にあるボタンを押して、次を選択します。
-
ボンドが IP アドレスを必要としない場合は
Disabled
にします。 -
DHCP サーバーまたはステートレスアドレス自動設定 (SLAAC) が IP アドレスをボンディングに動的に割り当てる場合は、
Automatic
にします。 ネットワークで静的 IP アドレス設定が必要な場合は、
Manual
にします。この場合、さらにフィールドに入力する必要があります。- 設定するプロトコルの横にある Show を押して、追加のフィールドを表示します。
Addresses の横にある Add を押して、IP アドレスとサブネットマスクを Classless Inter-Domain Routing (CIDR) 形式で入力します。
サブネットマスクを指定しない場合、NetworkManager は IPv4 アドレスに
/32
サブネットマスクを設定し、IPv6 アドレスに/64
サブネットマスクを設定します。- デフォルトゲートウェイのアドレスを入力します。
- DNS servers の横にある Add を押して、DNS サーバーのアドレスを入力します。
- Search domains の横にある Add を押して、DNS 検索ドメインを入力します。
図3.2 静的 IP アドレス設定によるボンド接続例
-
ボンドが IP アドレスを必要としない場合は
- OK を押すと、新しい接続が作成され、自動的にアクティブ化されます。
- Back を押してメインメニューに戻ります。
-
Quit を選択し、Enter キーを押して
nmtui
アプリケーションを閉じます。
検証
ネットワークデバイスの 1 つからネットワークケーブルを一時的に取り外し、ボンディング内の他のデバイスがトラフィックを処理しているかどうかを確認します。
ソフトウェアユーティリティーを使用して、リンク障害イベントを適切にテストする方法がないことに注意してください。
nmcli
などの接続を非アクティブにするツールでは、ポート設定の変更を処理するボンディングドライバーの機能のみが表示され、実際のリンク障害イベントは表示されません。ボンドのステータスを表示します。
cat /proc/net/bonding/bond0
# cat /proc/net/bonding/bond0
Copy to Clipboard Copied!
3.6. nmstatectl
を使用したネットワークボンディングの設定
nmstatectl
ユーティリティーを使用して、Nmstate API を介してネットワークボンディングを設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
環境に応じて、YAML ファイルを適宜調整します。たとえば、ボンディングでイーサネットアダプターとは異なるデバイスを使用するには、ボンディングで使用するポートの Base-iface
属性と type
属性を調整します。
前提条件
- サーバーに、2 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。
- 物理または仮想のイーサネットデバイスをサーバーにインストールしてボンディングでポートとしてイーサネットデバイスを使用する。
-
ポート
リストでインターフェイス名を設定し、対応するインターフェイスを定義して、ボンディングのポートとしてチーム、ブリッジ、または VLAN デバイスを使用する。 -
nmstate
パッケージがインストールされている。
手順
以下の内容を含む YAML ファイルを作成します (例:
~/create-bond.yml
)。--- interfaces: - name: bond0 type: bond state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false link-aggregation: mode: active-backup port: - enp1s0 - enp7s0 - name: enp1s0 type: ethernet state: up - name: enp7s0 type: ethernet state: up routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: bond0 metric: 300 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: bond0 metric: 300 dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb
--- interfaces: - name: bond0 type: bond state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false link-aggregation: mode: active-backup port: - enp1s0 - enp7s0 - name: enp1s0 type: ethernet state: up - name: enp7s0 type: ethernet state: up routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: bond0 metric: 300 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: bond0 metric: 300 dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb
Copy to Clipboard Copied! これらの設定では、次の設定を使用してネットワークボンディングを定義します。
-
ボンドのネットワークインターフェイス:
enp1s0
およびenp7s0
-
モード:
active-backup
-
静的 IPv4 アドレス: サブネットマスクが
/24
の192.0.2.1
-
静的 IPv6 アドレス:
2001:db8:1::1
(/64
サブネットマスクあり) -
IPv4 デフォルトゲートウェイ:
192.0.2.254
-
IPv6 デフォルトゲートウェイ:
2001:db8:1::fffe
-
IPv4 DNS サーバー:
192.0.2.200
-
IPv6 DNS サーバー:
2001:db8:1::ffbb
-
DNS 検索ドメイン:
example.com
-
ボンドのネットワークインターフェイス:
設定をシステムに適用します。
nmstatectl apply ~/create-bond.yml
# nmstatectl apply ~/create-bond.yml
Copy to Clipboard Copied!
検証
デバイスおよび接続の状態を表示します。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION bond0 bond connected bond0
Copy to Clipboard Copied! 接続プロファイルのすべての設定を表示します。
nmcli connection show bond0
# nmcli connection show bond0 connection.id: bond0 connection.uuid: 79cbc3bd-302e-4b1f-ad89-f12533b818ee connection.stable-id: -- connection.type: bond connection.interface-name: bond0 ...
Copy to Clipboard Copied! 接続設定を YAML 形式で表示します。
nmstatectl show bond0
# nmstatectl show bond0
Copy to Clipboard Copied!
3.7. network
RHEL システムロールを使用したネットワークボンディングの設定
ネットワークインターフェイスをボンディングで組み合わせると、より高いスループットまたは冗長性を備えた論理インターフェイスを提供できます。ボンディングを設定するには、NetworkManager 接続プロファイルを作成します。Ansible と network
RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。
network
RHEL システムロールを使用してネットワークボンディングを設定できます。ボンディングの親デバイスの接続プロファイルが存在しない場合は、このロールによって作成することもできます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - サーバーに、2 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Bond connection profile with two Ethernet ports ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: # Bond profile - name: bond0 type: bond interface_name: bond0 ip: dhcp4: yes auto6: yes bond: mode: active-backup state: up # Port profile for the 1st Ethernet device - name: bond0-port1 interface_name: enp7s0 type: ethernet controller: bond0 state: up # Port profile for the 2nd Ethernet device - name: bond0-port2 interface_name: enp8s0 type: ethernet controller: bond0 state: up
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Bond connection profile with two Ethernet ports ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: # Bond profile - name: bond0 type: bond interface_name: bond0 ip: dhcp4: yes auto6: yes bond: mode: active-backup state: up # Port profile for the 1st Ethernet device - name: bond0-port1 interface_name: enp7s0 type: ethernet controller: bond0 state: up # Port profile for the 2nd Ethernet device - name: bond0-port2 interface_name: enp8s0 type: ethernet controller: bond0 state: up
Copy to Clipboard Copied! サンプル Playbook で指定されている設定は次のとおりです。
type: <profile_type>
- 作成するプロファイルのタイプを設定します。このサンプル Playbook では、3 つの接続プロファイルを作成します。1 つはボンディング用、2 つはイーサネットデバイス用です。
dhcp4: yes
- DHCP、PPP、または同様のサービスからの自動 IPv4 アドレス割り当てを有効にします。
auto6: yes
-
IPv6 自動設定を有効にします。デフォルトでは、NetworkManager はルーター広告を使用します。ルーターが
managed
フラグを通知すると、NetworkManager は DHCPv6 サーバーに IPv6 アドレスと接頭辞を要求します。 mode: <bond_mode>
ボンディングモードを設定します。可能な値は次のとおりです。
-
balance-rr
(デフォルト) -
active-backup
-
balance-xor
-
broadcast
-
802.3ad
-
balance-tlb
-
balance-alb
設定したモードに応じて、Playbook で追加の変数を設定する必要があります。
-
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.network/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied!
検証
ネットワークデバイスの 1 つからネットワークケーブルを一時的に取り外し、ボンディング内の他のデバイスがトラフィックを処理しているかどうかを確認します。
ソフトウェアユーティリティーを使用して、リンク障害イベントを適切にテストする方法がないことに注意してください。
nmcli
などの接続を非アクティブにするツールでは、ポート設定の変更を処理するボンディングドライバーの機能のみが表示され、実際のリンク障害イベントは表示されません。
3.8. 異なるネットワークボンディングモード
Linux ボンディングドライバーは、リンクアグリゲーションを提供します。ボンディングは、複数のネットワークインターフェイスを並行して集約して、単一の論理結合インターフェイスを提供するプロセスです。ボンディングされたインターフェイスのアクションは、モードとも呼ばれるボンディングポリシーによって異なります。さまざまなモードが、ロードバランシングサービスまたはホットスタンバイサービスのいずれかを提供します。
Linux ボンディングドライバーは、次のモードをサポートしています。
- Balance-rr (モード 0)
Balance-rr
は、使用可能な最初のポートから最後のポートへとパケットを順次送信するラウンドロビンアルゴリズムを使用します。このモードは、ロードバランシングとフォールトトレランスを提供します。このモードでは、EtherChannel または同様ポートのグループ化とも呼ばれるポートアグリゲーショングループのスイッチ設定が必要です。EtherChannel は、複数の物理イーサネットリンクを 1 つの論理イーサネットリンクにグループ化するポートリンクアグリゲーションテクノロジーです。
このモードの欠点は、負荷の高いワークロードや、TCP スループットと順序付けられたパケット配信が不可欠な場合には適していないことです。
- Active-backup (Mode 1)
Active-backup
は、結合内でアクティブなポートが 1 つだけであることを決定するポリシーを使用します。このモードはフォールトトレランスを提供し、スイッチ設定は必要ありません。アクティブポートに障害が発生すると、代替ポートがアクティブになります。ボンディングは、Gratuitous Address Resolution Protocol (ARP) 応答をネットワークに送信します。Gratuitous ARP は、ARP フレームの受信者に転送テーブルの更新を強制します。
Active-backup
モードは、Gratuitous ARP を送信して、ホストの接続を維持するための新しいパスを通知します。primary
オプションは、ボンディングインターフェイスの優先ポートを定義します。- Balance-xor (Mode 2)
Balance-xor
は、選択された送信ハッシュポリシーを使用してパケットを送信します。このモードは、ロードバランシングとフォールトトレランスを提供し、Etherchannel または同様のポートグループをセットアップするためのスイッチ設定を必要とします。パケット送信を変更して送信のバランスを取るために、このモードでは
xmit_hash_policy
オプションを使用します。インターフェイス上のトラフィックの送信元または宛先に応じて、インターフェイスには追加の負荷分散設定が必要です。xmit_hash_policy bonding parameter の説明を参照してください。- Broadcast (Mode 3)
Broadcast
は、すべてのインターフェイスですべてのパケットを送信するポリシーを使用します。このモードは、フォールトトレランスを提供し、EtherChannel または同様のポートグループをセットアップするためのスイッチ設定を必要とします。このモードの欠点は、負荷の高いワークロードや、TCP スループットと順序付けられたパケット配信が不可欠な場合には適していないことです。
- 802.3ad (Mode 4)
802.3ad
は、同じ名前の IEEE 標準の動的リンクアグリゲーションポリシーを使用します。このモードはフォールトトレランスを提供します。このモードでは、Link Aggregation Control Protocol (LACP) ポートグループを設定するためのスイッチ設定が必要です。このモードは、同じ速度とデュプレックス設定を共有するアグリゲーショングループを作成し、アクティブなアグリゲーターのすべてのポートを利用します。インターフェイス上のトラフィックの送信元または宛先に応じて、モードには追加の負荷分散設定が必要です。
デフォルトでは、発信トラフィックのポート選択は送信ハッシュポリシーに依存します。送信ハッシュポリシーの
xmit_hash_policy
オプションを使用して、ポートの選択を変更し、送信を分散します。802.3ad
とBalance-xor
の違いはコンプライアンスです。802.3ad
ポリシーは、ポートアグリゲーショングループ間で LACP をネゴシエートします。xmit_hash_policy bonding parameter の説明を参照してください。- Balance-tlb (Mode 5)
Balance-tlb
は、送信負荷分散ポリシーを使用します。このモードは、フォールトトレランスと負荷分散を提供し、スイッチサポートを必要としないチャネルボンディングを確立します。アクティブポートは着信トラフィックを受信します。アクティブポートに障害が発生した場合、別のポートが障害ポートの MAC アドレスを引き継ぎます。発信トラフィックを処理するインターフェイスを決定するには、次のいずれかのモードを使用します。
-
値が
0
: ハッシュ分散ポリシーを使用して、負荷分散なしでトラフィックを配分します 値が
1
: 負荷分散を使用してトラフィックを各ポートに配分しますボンディングオプション
tlb_dynamic_lb=0
を使用すると、このボンディングモードはxmit_hash_policy
ボンディングオプションを使用して送信を分散します。primary
オプションは、ボンディングインターフェイスの優先ポートを定義します。
xmit_hash_policy bonding parameter の説明を参照してください。
-
値が
- Balance-alb (Mode 6)
Balance-alb
は、適応負荷分散ポリシーを使用します。このモードは、フォールトトレランスとロードバランシングを提供し、特別なスイッチサポートを必要としません。このモードには、IPv4 および IPv6 トラフィックのバランス - 送信ロードバランシング (
balance-tlb
) と受信ロードバランシングが含まれます。ボンディングは、ローカルシステムから送信された ARP 応答を傍受し、ボンディング内のポートの 1 つの送信元ハードウェアアドレスを上書きします。ARP ネゴシエーションは、受信負荷分散を管理します。したがって、異なるポートは、サーバーに対して異なるハードウェアアドレスを使用します。primary
オプションは、ボンディングインターフェイスの優先ポートを定義します。ボンディングオプションtlb_dynamic_lb=0
を使用すると、このボンディングモードはxmit_hash_policy
ボンディングオプションを使用して送信を分散します。xmit_hash_policy bonding parameter の説明を参照してください。
さらに、NetworkManager を使用して次のモードも設定できます。
- Balance-slb
ソースロードバランシング (SLB) ボンディングモードは、トラフィックのソースアドレスと VLAN ハッシュに基づいて、送信データストリームを複数のネットワークインターフェイスに分散します。このモードではスイッチの設定は必要ありません。
NetworkManager は、
nftables
ルールと組み合わせてbalance-xor
モードを使用して SLB を提供します。このモードの設定の詳細は、Configuring a network bond on RHEL with source load balancing を参照してください。
3.9. xmit_hash_policy ボンディングパラメーター
xmit_hash_policy
負荷分散パラメーターは、balance-xor
、802.3ad
、balance-alb
、および balance-tlb
モードでのノード選択の送信ハッシュポリシーを選択します。tlb_dynamic_lb parameter is 0
の場合、モード 5 および 6 にのみ適用されます。このパラメーターで使用できる値は、layer2
、layer2+3
、layer3+4
、encap2+3
、encap3+4
、および vlan+srcmac
です。
詳細については、次の表を参照してください。
ポリシー層またはネットワーク層 | Layer2 | Layer2+3 | Layer3+4 | encap2+3 | encap3+4 | VLAN+srcmac |
用途 | 送信元および宛先の MAC アドレスとイーサネットプロトコルタイプの XOR | 送信元および宛先の MAC アドレスと IP アドレスの XOR | 送信元および宛先のポートと IP アドレスの XOR |
サポートされているトンネル内の送信元と宛先の MAC アドレスと IP アドレスの XOR (仮想拡張 LAN (VXLAN) など)。このモードは、 |
サポートされているトンネル内の送信元ポートと宛先ポートおよび IP アドレスの XOR (VXLAN など)。このモードは、 | VLAN ID、送信元 MAC ベンダー、送信元 MAC デバイスの XOR |
トラフィックの配置 | 基盤となる同一ネットワークインターフェイス上にある特定のネットワークピアに向かうすべてのトラフィック | 基盤となる同一ネットワークインターフェイス上の特定の IP アドレスに向かうすべてのトラフィック | 基盤となる同一ネットワークインターフェイス上の特定の IP アドレスとポートに向かうすべてのトラフィック | |||
プライマリーの選択 | このシステムと、同じブロードキャストドメイン内の他の複数システムとの間でネットワークトラフィックが発生している場合 | このシステムと他の複数システム間のネットワークトラフィックがデフォルトゲートウェイを通過する場合 | このシステムと別のシステムの間のネットワークトラフィックが同じ IP アドレスを使用しているが、複数のポートを通過する場合 | カプセル化されたトラフィックが、ソースシステムと、複数の IP アドレスを使用する他の複数システムとの間に発生している場合 | カプセル化されたトラフィックが、ソースシステムと、複数のポート番号を使用する他のシステムとの間で発生している場合 | ボンディングが複数のコンテナーまたは仮想マシン (VM) からのネットワークトラフィックを伝送し、それらの MAC アドレスをブリッジネットワークなどの外部ネットワークに直接公開し、モード 2 またはモード 4 のスイッチを設定できない場合 |
セカンダリーの選択 | ネットワークトラフィックの大部分が、このシステムとデフォルトゲートウェイの背後にある複数の他のシステムとの間で発生する場合 | ネットワークトラフィックの大部分がこのシステムと別のシステムとの間で発生する場合 | ||||
Compliant | 802.3ad | 802.3ad | 802.3ad 以外 | |||
デフォルトポリシー | 設定されていない場合、これがデフォルトポリシー |
非 IP トラフィックの場合、式は |
非 IP トラフィックの場合、式は |
第4章 VLAN タグの設定
仮想ローカルエリアネットワーク (VLAN) は、物理ネットワーク内の論理ネットワークです。VLAN インターフェイスは、インターフェイスを通過する際に VLAN ID でパケットをタグ付けし、返信パケットのタグを削除します。VLAN インターフェイスを、イーサネット、ボンド、チーム、ブリッジデバイスなどの別のインターフェイスに作成します。これらのインターフェイスは parent interface
と呼ばれます。
Red Hat Enterprise Linux は、VLAN デバイスを設定するためのさまざまなオプションを管理者に提供します。以下に例を示します。
-
nmcli
を使用し、コマンドラインを使用して VLAN のタグ付けを設定します。 - RHEL Web コンソールを使用し、Web ブラウザーを使用して VLAN のタグ付けを設定します。
-
nmtui
を使用し、テキストベースのユーザーインターフェイスで VLAN のタグ付けを設定します。 -
nmstatectl
を使用して、Nmstate API を介して接続を設定します。 - RHEL システムロールを使用して、1 つまたは複数のホストで VLAN 設定を自動化します。
4.1. nmcli
を使用した VLAN タグ付けの設定
nmcli
ユーティリティーを使用して、コマンドラインで仮想ローカルエリアネットワーク (VLAN) のタグ付けを設定できます。
前提条件
- 仮想 VLAN インターフェイスに対する親として使用するインターフェイスが VLAN タグに対応している。
ボンドインターフェイスに VLAN を設定する場合は、以下のようになります。
- ボンディングのポートが起動している。
-
ボンドが、
fail_over_mac=follow
オプションで設定されていない。VLAN 仮想デバイスは、親の新規 MAC アドレスに一致する MAC アドレスを変更できません。このような場合、トラフィックは間違ったソースの MAC アドレスで送信されます。 -
ボンドは通常、DHCP サーバーまたは IPv6 自動設定から IP アドレスを取得することは想定されていません。ボンディングの作成時に
ipv4.method=disable
およびipv6.method=disable
オプションを設定してこれを確認します。そうしないと、DHCP または IPv6 の自動設定がしばらくして失敗した場合に、インターフェイスがダウンする可能性があります。
- ホストが接続するスイッチは、VLAN タグに対応するように設定されています。詳細は、スイッチのドキュメントを参照してください。
手順
ネットワークインターフェイスを表示します。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet disconnected enp1s0 bridge0 bridge connected bridge0 bond0 bond connected bond0 ...
Copy to Clipboard Copied! VLAN インターフェイスを作成します。たとえば、VLAN インターフェイス
vlan10
を作成し、enp1s0
を親インターフェイスとして使用し、VLAN ID10
のタグパケットを作成するには、次のコマンドを実行します。nmcli connection add type vlan con-name vlan10 ifname vlan10 vlan.parent enp1s0 vlan.id 10
# nmcli connection add type vlan con-name vlan10 ifname vlan10 vlan.parent enp1s0 vlan.id 10
Copy to Clipboard Copied! VLAN は、
0
から4094
の範囲内に存在する必要があります。デフォルトでは、VLAN 接続は、親インターフェイスから最大伝送単位 (MTU) を継承します。必要に応じて、別の MTU 値を設定します。
nmcli connection modify vlan10 ethernet.mtu 2000
# nmcli connection modify vlan10 ethernet.mtu 2000
Copy to Clipboard Copied! IPv4 を設定します。
静的 IPv4 アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーを
vlan10
接続に設定するには、次のように実行します。nmcli connection modify vlan10 ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253' ipv4.method manual
# nmcli connection modify vlan10 ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253' ipv4.method manual
Copy to Clipboard Copied! - DHCP を使用するために必要な操作はありません。
- この VLAN デバイスを他のデバイスのポートとして使用する予定の場合は、何もする必要はありません。
IPv6 設定を行います。
静的 IPv6 アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーを
vlan10
接続に設定するには、次のように実行します。nmcli connection modify vlan10 ipv6.addresses '2001:db8:1::1/32' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd' ipv6.method manual
# nmcli connection modify vlan10 ipv6.addresses '2001:db8:1::1/32' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd' ipv6.method manual
Copy to Clipboard Copied! - ステートレスアドレス自動設定 (SLAAC) を使用する場合、アクションは必要ありません。
- この VLAN デバイスを他のデバイスのポートとして使用する予定の場合は、何もする必要はありません。
接続をアクティベートします。
nmcli connection up vlan10
# nmcli connection up vlan10
Copy to Clipboard Copied!
検証
設定を確認します。
ip -d addr show vlan10
# ip -d addr show vlan10 4: vlan10@enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 52:54:00:72:2f:6e brd ff:ff:ff:ff:ff:ff promiscuity 0 vlan protocol 802.1Q id 10 <REORDER_HDR> numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute vlan10 valid_lft forever preferred_lft forever inet6 2001:db8:1::1/32 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::8dd7:9030:6f8e:89e6/64 scope link noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied!
4.2. nmcli
を使用したネストされた VLAN の設定
802.1ad は、仮想ローカルエリアネットワーク (VLAN) のタグ付けに使用されるプロトコルです。これは Q-in-Q タグ付けとしても知られています。この技術を使用して、1 つのイーサネットフレーム内に複数の VLAN タグを作成すると、以下の利点が得られます。
- VLAN 内に複数の分離ネットワークセグメントを作成することで、ネットワークのスケーラビリティーが向上します。これにより、大規模なネットワークを、より小さく管理可能なユニットに分割して整理できます。
- さまざまな種類のネットワークトラフィックを分離および制御することで、トラフィック管理が改善されました。これにより、ネットワークパフォーマンスが向上し、ネットワークの輻輳を減らすことができます。
- より小規模で、よりターゲットを絞ったネットワークセグメントの作成を可能にすることで、リソースを効率的に利用します。
- ネットワークトラフィックを分離し、機密データへの不正アクセスのリスクを軽減することで、セキュリティーを強化します。
前提条件
- 仮想 VLAN インターフェイスに対する親として使用するインターフェイスが VLAN タグに対応している。
ボンドインターフェイスに VLAN を設定する場合は、以下のようになります。
- ボンディングのポートが起動している。
-
ボンドが、
fail_over_mac=follow
オプションで設定されていない。VLAN 仮想デバイスは、親の新規 MAC アドレスに一致する MAC アドレスを変更できません。このような場合、トラフィックは間違ったソースの MAC アドレスで送信されます。 -
ボンドは通常、DHCP サーバーまたは IPv6 自動設定から IP アドレスを取得することは想定されていません。ボンディングの作成時に
ipv4.method=disable
およびipv6.method=disable
オプションを設定してこれを確認します。そうしないと、DHCP または IPv6 の自動設定がしばらくして失敗した場合に、インターフェイスがダウンする可能性があります。
- ホストが接続するスイッチは、VLAN タグに対応するように設定されています。詳細は、スイッチのドキュメントを参照してください。
手順
物理ネットワークデバイスを表示します。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet connected enp1s0 ...
Copy to Clipboard Copied! ベース VLAN インターフェイスを作成します。たとえば、
enp1s0
を親インターフェイスとして使用し、パケットに VLAN ID10
のタグを付けるvlan10
という名前のベース VLAN インターフェイスを作成するには、次のように実行します。nmcli connection add type vlan con-name vlan10 dev enp1s0 vlan.id 10
# nmcli connection add type vlan con-name vlan10 dev enp1s0 vlan.id 10
Copy to Clipboard Copied! VLAN は、
0
から4094
の範囲内に存在する必要があります。デフォルトでは、VLAN 接続は、親インターフェイスから最大伝送単位 (MTU) を継承します。必要に応じて、別の MTU 値を設定します。
nmcli connection modify vlan10 ethernet.mtu 2000
# nmcli connection modify vlan10 ethernet.mtu 2000
Copy to Clipboard Copied! ベース VLAN インターフェイスの上にネストされた VLAN インターフェイスを作成します。
nmcli connection add type vlan con-name vlan10.20 dev enp1s0.10 id 20 vlan.protocol 802.1ad
# nmcli connection add type vlan con-name vlan10.20 dev enp1s0.10 id 20 vlan.protocol 802.1ad
Copy to Clipboard Copied! このコマンドは、親 VLAN 接続
vlan10
で、名前がvlan10.20
で VLAN ID が20
の新しい VLAN 接続を作成します。dev
オプションは、親ネットワークデバイスを指定します。この場合、enp1s0.10
です。vlan.protocol
オプションは、VLAN カプセル化プロトコルを指定します。この場合、802.1ad
(Q-in-Q) です。ネストされた VLAN インターフェイスの IPv4 設定を設定します。
- DHCP を使用するために必要な操作はありません。
静的 IPv4 アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーを
vlan10.20
接続に設定するには、次のように実行します。nmcli connection modify vlan10.20 ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200
# nmcli connection modify vlan10.20 ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200
Copy to Clipboard Copied!
ネストされた VLAN インターフェイスの IPv6 設定を設定します。
- ステートレスアドレス自動設定 (SLAAC) を使用する場合、アクションは必要ありません。
静的 IPv6 アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーを vlan10 接続に設定するには、次のように実行します。
nmcli connection modify vlan10.20 ipv6.addresses '2001:db8:1::1/64' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd' ipv6.dns-search 'example.com' ipv6.method manual
# nmcli connection modify vlan10.20 ipv6.addresses '2001:db8:1::1/64' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd' ipv6.dns-search 'example.com' ipv6.method manual
Copy to Clipboard Copied!
プロファイルをアクティブ化します。
nmcli connection up vlan10.20
# nmcli connection up vlan10.20
Copy to Clipboard Copied!
検証
ネストされた VLAN インターフェイスの設定を確認します。
ip -d addr show enp1s0.10.20
# ip -d addr show enp1s0.10.20 10: enp1s0.10.20@enp1s0.10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 52:54:00:d2:74:3e brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 0 maxmtu 65535 vlan protocol 802.1ad id 20 <REORDER_HDR> numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 tso_max_size 65536 tso_max_segs 65535 gro_max_size 65536 inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute enp1s0.10.20 valid_lft forever preferred_lft forever inet6 2001:db8:1::1/32 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::ce3b:84c5:9ef8:d0e6/64 scope link noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied!
4.3. RHEL Web コンソールを使用した VLAN タグ付けの設定
Web ブラウザーベースのインターフェイスを使用してネットワーク設定を管理する場合は、RHEL Web コンソールを使用して VLAN タグ付けを設定します。
前提条件
- 仮想 VLAN インターフェイスに対する親として使用するインターフェイスが VLAN タグに対応している。
ボンドインターフェイスに VLAN を設定する場合は、以下のようになります。
- ボンディングのポートが起動している。
-
ボンドが、
fail_over_mac=follow
オプションで設定されていない。VLAN 仮想デバイスは、親の新規 MAC アドレスに一致する MAC アドレスを変更できません。このような場合、トラフィックは間違ったソースの MAC アドレスで送信されます。 - ボンドは通常、DHCP サーバーまたは IPv6 自動設定から IP アドレスを取得することは想定されていません。結合を作成する IPv4 および IPv6 プロトコルを無効にして、これを確認します。そうしないと、DHCP または IPv6 の自動設定がしばらくして失敗した場合に、インターフェイスがダウンする可能性があります。
- ホストが接続するスイッチは、VLAN タグに対応するように設定されています。詳細は、スイッチのドキュメントを参照してください。
手順
- 画面左側のナビゲーションで Networking タブを選択します。
- Interfaces セクションで をクリックします。
- 親デバイスを選択します。
- VLAN ID を入力します。
VLAN デバイスの名前を入力するか、自動生成された名前のままにします。
- をクリックします。
デフォルトでは、VLAN デバイスは動的 IP アドレスを使用します。静的 IP アドレスを設定する場合:
- Interfaces セクションで VLAN デバイスの名前をクリックします。
- 設定するプロトコルの横にある Edit をクリックします。
- Addresses の横にある Manual を選択し、IP アドレス、接頭辞、およびデフォルトゲートウェイを入力します。
- DNS セクションで ボタンをクリックし、DNS サーバーの IP アドレスを入力します。複数の DNS サーバーを設定するには、この手順を繰り返します。
- DNS search domains セクションで、 ボタンをクリックし、検索ドメインを入力します。
インターフェイスにスタティックルートが必要な場合は、Routes セクションで設定します。
- をクリックします。
検証
画面左側のナビゲーションで Networking タブを選択し、インターフェイスに着信および発信トラフィックがあるか確認します。
4.4. nmtui
を使用した VLAN タグ付けの設定
nmtui
アプリケーションは、NetworkManager 用のテキストベースのユーザーインターフェイスを提供します。nmtui
を使用して、グラフィカルインターフェイスを使用せずにホスト上で VLAN タグ付けを設定できます。
nmtui
で以下を行います。
- カーソルキーを使用してナビゲートします。
- ボタンを選択して Enter を押します。
- Space を使用してチェックボックスをオンまたはオフにします。
- 前の画面に戻るには、ESC を使用します。
前提条件
- 仮想 VLAN インターフェイスに対する親として使用するインターフェイスが VLAN タグに対応している。
ボンドインターフェイスに VLAN を設定する場合は、以下のようになります。
- ボンディングのポートが起動している。
-
ボンドが、
fail_over_mac=follow
オプションで設定されていない。VLAN 仮想デバイスは、親の新規 MAC アドレスに一致する MAC アドレスを変更できません。このような場合、トラフィックは間違ったソースの MAC アドレスで送信されます。 -
ボンドは通常、DHCP サーバーまたは IPv6 自動設定から IP アドレスを取得することは想定されていません。ボンディングの作成時に
ipv4.method=disable
およびipv6.method=disable
オプションを設定してこれを確認します。そうしないと、DHCP または IPv6 の自動設定がしばらくして失敗した場合に、インターフェイスがダウンする可能性があります。
- ホストが接続するスイッチは、VLAN タグに対応するように設定されています。詳細は、スイッチのドキュメントを参照してください。
手順
VLAN タグ付けを設定するネットワークデバイス名がわからない場合は、使用可能なデバイスを表示します。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet unavailable -- ...
Copy to Clipboard Copied! nmtui
を開始します。nmtui
# nmtui
Copy to Clipboard Copied! - Edit a connection 選択し、Enter を押します。
- Add を押します。
- ネットワークタイプのリストから VLAN を選択し、Enter を押します。
オプション: 作成する NetworkManager プロファイルの名前を入力します。
ホストに複数のプロファイルがある場合は、わかりやすい名前を付けると、プロファイルの目的を識別しやすくなります。
- 作成する VLAN デバイス名を Device フィールドに入力します。
- VLAN タグ付けを設定するデバイスの名前を Parent フィールドに入力します。
-
VLAN ID を入力します。ID は
0
から4094
の範囲内である必要があります。 環境に応じて、IPv4 configuration および IPv6 configuration 領域に IP アドレス設定を設定します。これを行うには、これらの領域の横にあるボタンを押して、次を選択します。
-
この VLAN デバイスが IP アドレスを必要としない場合、または他のデバイスのポートとして使用する場合は、
Disabled
にします。 -
DHCP サーバーまたはステートレスアドレス自動設定 (SLAAC) が IP アドレスを VLAN デバイスに動的に割り当てる場合は、
Automatic
にします。 ネットワークで静的 IP アドレス設定が必要な場合は、
Manual
にします。この場合、さらにフィールドに入力する必要があります。- 設定するプロトコルの横にある Show を押して、追加のフィールドを表示します。
Addresses の横にある Add を押して、IP アドレスとサブネットマスクを Classless Inter-Domain Routing (CIDR) 形式で入力します。
サブネットマスクを指定しない場合、NetworkManager は IPv4 アドレスに
/32
サブネットマスクを設定し、IPv6 アドレスに/64
サブネットマスクを設定します。- デフォルトゲートウェイのアドレスを入力します。
- DNS servers の横にある Add を押して、DNS サーバーのアドレスを入力します。
- Search domains の横にある Add を押して、DNS 検索ドメインを入力します。
図4.1 静的 IP アドレス設定による VLAN 接続例
-
この VLAN デバイスが IP アドレスを必要としない場合、または他のデバイスのポートとして使用する場合は、
- OK を押すと、新しい接続が作成され、自動的にアクティブ化されます。
- Back を押してメインメニューに戻ります。
-
Quit を選択し、Enter キーを押して
nmtui
アプリケーションを閉じます。
検証
設定を確認します。
ip -d addr show vlan10
# ip -d addr show vlan10 4: vlan10@enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 52:54:00:72:2f:6e brd ff:ff:ff:ff:ff:ff promiscuity 0 vlan protocol 802.1Q id 10 <REORDER_HDR> numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute vlan10 valid_lft forever preferred_lft forever inet6 2001:db8:1::1/32 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::8dd7:9030:6f8e:89e6/64 scope link noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied!
4.5. nmstatectl
を使用した VLAN タグ付けの設定
nmstatectl
ユーティリティーを使用して、Nmstate API を介して仮想ローカルエリアネットワーク VLAN を設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
環境に応じて、YAML ファイルを適宜調整します。たとえば、VLAN でイーサネットアダプターとは異なるデバイスを使用するには、VLAN で使用するポートの Base-iface
属性と type
属性を調整します。
前提条件
- 物理または仮想のイーサネットデバイスをサーバーにインストールし、VLAN でイーサネットデバイスをポートとして使用する。
-
nmstate
パッケージがインストールされている。
手順
以下の内容を含む YAML ファイル (例:
~/create-vlan.yml
) を作成します。--- interfaces: - name: vlan10 type: vlan state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false vlan: base-iface: enp1s0 id: 10 - name: enp1s0 type: ethernet state: up routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: vlan10 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: vlan10 dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb
--- interfaces: - name: vlan10 type: vlan state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false vlan: base-iface: enp1s0 id: 10 - name: enp1s0 type: ethernet state: up routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: vlan10 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: vlan10 dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb
Copy to Clipboard Copied! これらの設定では、
enp1s0
デバイスを使用する ID 10 の VLAN を定義します。子デバイスの VLAN 接続の設定は以下のようになります。-
静的 IPv4 アドレス:
192.0.2.1
(サブネットマスクが/24
) -
静的 IPv6 アドレス:
2001:db8:1::1
(サブネットマスクが/64
) -
IPv4 デフォルトゲートウェイ -
192.0.2.254
-
IPv6 デフォルトゲートウェイ -
2001:db8:1::fffe
-
IPv4 DNS サーバー -
192.0.2.200
-
IPv6 DNS サーバー -
2001:db8:1::ffbb
-
DNS 検索ドメイン -
example.com
-
静的 IPv4 アドレス:
設定をシステムに適用します。
nmstatectl apply ~/create-vlan.yml
# nmstatectl apply ~/create-vlan.yml
Copy to Clipboard Copied!
検証
デバイスおよび接続の状態を表示します。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION vlan10 vlan connected vlan10
Copy to Clipboard Copied! 接続プロファイルのすべての設定を表示します。
nmcli connection show vlan10
# nmcli connection show vlan10 connection.id: vlan10 connection.uuid: 1722970f-788e-4f81-bd7d-a86bf21c9df5 connection.stable-id: -- connection.type: vlan connection.interface-name: vlan10 ...
Copy to Clipboard Copied! 接続設定を YAML 形式で表示します。
nmstatectl show vlan10
# nmstatectl show vlan10
Copy to Clipboard Copied!
4.6. network
RHEL システムロールを使用した VLAN タグ付けの設定
ネットワークで仮想ローカルエリアネットワーク (VLAN) を使用してネットワークトラフィックを論理ネットワークに分離する場合は、NetworkManager 接続プロファイルを作成して VLAN タグ付けを設定します。Ansible と network
RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。
network
RHEL システムロールを使用して VLAN タグ付けを設定できます。VLAN の親デバイスの接続プロファイルが存在しない場合は、このロールによって作成することもできます。
VLAN デバイスに IP アドレス、デフォルトゲートウェイ、および DNS 設定が必要な場合は、親デバイスではなく VLAN デバイスで設定してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: VLAN connection profile with Ethernet port ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: # Ethernet profile - name: enp1s0 type: ethernet interface_name: enp1s0 autoconnect: yes state: up ip: dhcp4: no auto6: no # VLAN profile - name: enp1s0.10 type: vlan vlan: id: 10 ip: dhcp4: yes auto6: yes parent: enp1s0 state: up
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: VLAN connection profile with Ethernet port ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: # Ethernet profile - name: enp1s0 type: ethernet interface_name: enp1s0 autoconnect: yes state: up ip: dhcp4: no auto6: no # VLAN profile - name: enp1s0.10 type: vlan vlan: id: 10 ip: dhcp4: yes auto6: yes parent: enp1s0 state: up
Copy to Clipboard Copied! サンプル Playbook で指定されている設定は次のとおりです。
type: <profile_type>
- 作成するプロファイルのタイプを設定します。このサンプル Playbook では、2 つの接続プロファイルを作成します。1 つは親イーサネットデバイス用、もう 1 つは VLAN デバイス用です。
dhcp4: <value>
-
yes
に設定すると、DHCP、PPP、または同様のサービスからの自動 IPv4 アドレス割り当てが有効になります。親デバイスの IP アドレス設定を無効にします。 auto6: <value>
-
yes
に設定すると、IPv6 自動設定が有効になります。この場合、デフォルトで NetworkManager がルーター広告を使用します。ルーターがmanaged
フラグを通知すると、NetworkManager は DHCPv6 サーバーから IPv6 アドレスと接頭辞を要求します。親デバイスの IP アドレス設定を無効にします。 parent: <parent_device>
- VLAN 接続プロファイルの親デバイスを設定します。この例では、親はイーサネットインターフェイスです。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.network/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied!
検証
VLAN 設定を確認します。
ansible managed-node-01.example.com -m command -a 'ip -d addr show enp1s0.10'
# ansible managed-node-01.example.com -m command -a 'ip -d addr show enp1s0.10' managed-node-01.example.com | CHANGED | rc=0 >> 4: vlan10@enp1s0.10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 52:54:00:72:2f:6e brd ff:ff:ff:ff:ff:ff promiscuity 0 vlan protocol 802.1Q id 10 <REORDER_HDR> numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 ...
Copy to Clipboard Copied!
第5章 ネットワークブリッジの設定
ネットワークブリッジは、MAC アドレスのテーブルに基づいてネットワーク間のトラフィックを転送するリンク層デバイスです。ブリッジは、ネットワークトラフィックをリッスンし、どのホストが各ネットワークに接続しているかを把握して、MAC アドレステーブルを構築します。たとえば、Red Hat Enterprise Linux ホストのソフトウェアブリッジを使用して、ハードウェアブリッジまたは仮想環境をエミュレートし、仮想マシンをホストと同じネットワークに統合できます。
ブリッジには、ブリッジが接続する必要がある各ネットワークにネットワークデバイスが必要です。ブリッジを設定する場合、ブリッジは controller
と呼ばれ、ブリッジが使用するデバイスは ports
と呼ばれます。
以下のように、さまざまなタイプのデバイスにブリッジを作成できます。
- 物理および仮想イーサネットデバイス
- ネットワークボンド
- ネットワークチーム
- VLAN デバイス
Wi-Fi で効率的に使用するために、Wi-Fi で 3-address フレームの使用を指定する IEEE 802.11 規格により、Ad-Hoc モードまたは Infrastructure モードで稼働している Wi-Fi ネットワークにはブリッジを設定できません。
Red Hat Enterprise Linux は、管理者にブリッジデバイスを設定するためのさまざまなオプションを提供します。以下に例を示します。
-
nmcli
を使用し、コマンドラインを使用して VLAN のタグ付けを設定します。 - RHEL Web コンソールを使用し、Web ブラウザーを使用して VLAN のタグ付けを設定します。
-
nmtui
を使用し、テキストベースのユーザーインターフェイスで VLAN のタグ付けを設定します。 -
nmstatectl
を使用して、Nmstate API を介して接続を設定します。 - RHEL システムロールを使用して、1 つまたは複数のホストで VLAN 設定を自動化します。
5.1. nmcli
を使用したネットワークブリッジの設定
コマンドラインでネットワークブリッジを設定するには、nmcli
ユーティリティーを使用します。
前提条件
- サーバーに、2 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。
- ブリッジのポートとしてイーサネットデバイスを使用するには、物理または仮想のイーサネットデバイスをサーバーにインストールする必要があります。
ブリッジのポートにボンディングまたは VLAN デバイスを使用するには、ブリッジの作成時にこれらのデバイスを作成するか、次の説明に従って事前にデバイスを作成することができます。
手順
ブリッジインターフェイスを作成します。
nmcli connection add type bridge con-name bridge0 ifname bridge0
# nmcli connection add type bridge con-name bridge0 ifname bridge0
Copy to Clipboard Copied! このコマンドにより
bridge0
という名前のブリッジが作成されます。ネットワークインターフェイスを表示し、ブリッジに追加するインターフェイスの名前を書き留めます。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet disconnected -- enp8s0 ethernet disconnected -- bond0 bond connected bond0 bond1 bond connected bond1 ...
Copy to Clipboard Copied! この例では、以下のように設定されています。
-
enp7s0
およびenp8s0
は設定されません。これらのデバイスをポートとして使用するには、次のステップに接続プロファイルを追加します。 -
bond0
およびbond1
には既存の接続プロファイルがあります。これらのデバイスをポートとして使用するには、次の手順でプロファイルを変更します。
-
インターフェイスをブリッジに割り当てます。
ブリッジに割り当てるインターフェイスが設定されていない場合は、それらのブリッジに新しい接続プロファイルを作成します。
nmcli connection add type ethernet port-type bridge con-name bridge0-port1 ifname enp7s0 controller bridge0 nmcli connection add type ethernet port-type bridge con-name bridge0-port2 ifname enp8s0 controller bridge0
# nmcli connection add type ethernet port-type bridge con-name bridge0-port1 ifname enp7s0 controller bridge0 # nmcli connection add type ethernet port-type bridge con-name bridge0-port2 ifname enp8s0 controller bridge0
Copy to Clipboard Copied! これらのコマンドにより、
enp7s0
およびenp8s0
のプロファイルが作成され、それらをbridge0
接続に追加します。既存の接続プロファイルをブリッジに割り当てるには、以下を実行します。
これらの接続の
master
パラメーターをbridge0
に設定します。nmcli connection modify bond0 master bridge0 nmcli connection modify bond1 master bridge0
# nmcli connection modify bond0 master bridge0 # nmcli connection modify bond1 master bridge0
Copy to Clipboard Copied! これらのコマンドは、
bond0
およびbond1
という名前の既存の接続プロファイルをbridge0
接続に割り当てます。接続を再度アクティブにします。
nmcli connection up bond0 nmcli connection up bond1
# nmcli connection up bond0 # nmcli connection up bond1
Copy to Clipboard Copied!
IPv4 を設定します。
静的 IPv4 アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーを
bridge0
接続に設定するには、次のように実行します。nmcli connection modify bridge0 ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253' ipv4.dns-search 'example.com' ipv4.method manual
# nmcli connection modify bridge0 ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253' ipv4.dns-search 'example.com' ipv4.method manual
Copy to Clipboard Copied! - DHCP を使用するために必要な操作はありません。
- このブリッジデバイスを他のデバイスのポートとして使用する予定の場合は、特に必要な操作はありません。
IPv6 設定を行います。
静的 IPv6 アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーを
bridge0
接続に設定するには、次のように実行します。nmcli connection modify bridge0 ipv6.addresses '2001:db8:1::1/64' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd' ipv6.dns-search 'example.com' ipv6.method manual
# nmcli connection modify bridge0 ipv6.addresses '2001:db8:1::1/64' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd' ipv6.dns-search 'example.com' ipv6.method manual
Copy to Clipboard Copied! - ステートレスアドレス自動設定 (SLAAC) を使用する場合、アクションは必要ありません。
- このブリッジデバイスを他のデバイスのポートとして使用する予定の場合は、特に必要な操作はありません。
必要に応じて、ブリッジのその他のプロパティーを設定します。たとえば、
bridge0
の STP (Spanning Tree Protocol) の優先度を16384
に設定するには、次のコマンドを実行します。nmcli connection modify bridge0 bridge.priority '16384'
# nmcli connection modify bridge0 bridge.priority '16384'
Copy to Clipboard Copied! デフォルトでは STP が有効になっています。
接続をアクティベートします。
nmcli connection up bridge0
# nmcli connection up bridge0
Copy to Clipboard Copied! ポートが接続されており、
CONNECTION
コラムがポートの接続名を表示していることを確認します。nmcli device
# nmcli device DEVICE TYPE STATE CONNECTION ... enp7s0 ethernet connected bridge0-port1 enp8s0 ethernet connected bridge0-port2
Copy to Clipboard Copied! 接続のいずれかのポートをアクティブにすると、NetworkManager はブリッジもアクティブにしますが、他のポートはアクティブにしません。ブリッジが有効な場合には、Red Hat Enterprise Linux がすべてのポートを自動的に有効にするように設定できます。
ブリッジ接続の
connection.autoconnect-ports
パラメーターを有効にします。nmcli connection modify bridge0 connection.autoconnect-ports 1
# nmcli connection modify bridge0 connection.autoconnect-ports 1
Copy to Clipboard Copied! ブリッジを再度アクティブにします。
nmcli connection up bridge0
# nmcli connection up bridge0
Copy to Clipboard Copied!
検証
ip
ユーティリティーを使用して、特定のブリッジのポートであるイーサネットデバイスのリンクステータスを表示します。ip link show master bridge0
# ip link show master bridge0 3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:62:61:0e brd ff:ff:ff:ff:ff:ff 4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:9e:f1:ce brd ff:ff:ff:ff:ff:ff
Copy to Clipboard Copied! bridge
ユーティリティーを使用して、任意のブリッジデバイスのポートであるイーサネットデバイスの状態を表示します。bridge link show
# bridge link show 3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state forwarding priority 32 cost 100 4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state listening priority 32 cost 100 5: enp9s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge1 state forwarding priority 32 cost 100 6: enp11s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge1 state blocking priority 32 cost 100 ...
Copy to Clipboard Copied! 特定のイーサネットデバイスのステータスを表示するには、
bridge link show dev <ethernet_device_name>
コマンドを使用します。
5.2. RHEL Web コンソールを使用したネットワークブリッジの設定
Web ブラウザーベースのインターフェイスを使用してネットワーク設定を管理する場合は、RHEL Web コンソールを使用してネットワークブリッジを設定します。
前提条件
- サーバーに、2 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。
- ブリッジのポートとしてイーサネットデバイスを使用するには、物理または仮想のイーサネットデバイスをサーバーにインストールする必要があります。
ブリッジのポートにボンディングまたは VLAN デバイスを使用するには、ブリッジの作成時にこれらのデバイスを作成するか、次の説明に従って事前にデバイスを作成することができます。
手順
- 画面左側のナビゲーションで Networking タブを選択します。
- Interfaces セクションで をクリックします。
- 作成するブリッジデバイスの名前を入力します。
- ブリッジのポートにするインターフェイスを選択します。
オプション: Spanning tree protocol (STP) 機能を有効にして、ブリッジループとブロードキャストの過剰拡散を回避します。
- をクリックします。
デフォルトでは、ブリッジは動的 IP アドレスを使用します。静的 IP アドレスを設定する場合:
- Interfaces セクションでブリッジの名前をクリックします。
- 設定するプロトコルの横にある Edit をクリックします。
- Addresses の横にある Manual を選択し、IP アドレス、接頭辞、およびデフォルトゲートウェイを入力します。
- DNS セクションで ボタンをクリックし、DNS サーバーの IP アドレスを入力します。複数の DNS サーバーを設定するには、この手順を繰り返します。
- DNS search domains セクションで、 ボタンをクリックし、検索ドメインを入力します。
インターフェイスにスタティックルートが必要な場合は、Routes セクションで設定します。
- をクリックします。
検証
画面左側のナビゲーションで Networking タブを選択し、インターフェイスに着信および発信トラフィックがあるか確認します。
5.3. nmtui
を使用したネットワークブリッジの設定
nmtui
アプリケーションは、NetworkManager 用のテキストベースのユーザーインターフェイスを提供します。nmtui
を使用して、グラフィカルインターフェイスを使用せずにホスト上でネットワークブリッジを設定できます。
nmtui
で以下を行います。
- カーソルキーを使用してナビゲートします。
- ボタンを選択して Enter を押します。
- Space を使用してチェックボックスをオンまたはオフにします。
- 前の画面に戻るには、ESC を使用します。
前提条件
- サーバーに、2 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。
- ブリッジのポートとしてイーサネットデバイスを使用するには、物理または仮想のイーサネットデバイスをサーバーにインストールする必要があります。
手順
ネットワークブリッジを設定するネットワークデバイス名がわからない場合は、使用可能なデバイスを表示します。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION enp7s0 ethernet unavailable -- enp8s0 ethernet unavailable -- ...
Copy to Clipboard Copied! nmtui
を開始します。nmtui
# nmtui
Copy to Clipboard Copied! -
Edit a connection
選択し、Enter を押します。 -
Add
を押します。 -
ネットワークタイプのリストから
Bridge
を選択し、Enter を押します。 オプション: 作成する NetworkManager プロファイルの名前を入力します。
ホストに複数のプロファイルがある場合は、わかりやすい名前を付けると、プロファイルの目的を識別しやすくなります。
-
作成するブリッジデバイス名を
Device
フィールドに入力します。 作成するブリッジにポートを追加します。
-
Ports
リストの横にあるAdd
を押します。 -
ブリッジにポートとして追加するインターフェイスのタイプ (例:
Ethernet
) を選択します。 - オプション: このブリッジポート用に作成する NetworkManager プロファイルの名前を入力します。
-
ポートのデバイス名を
Device
フィールドに入力します。 OK
を押して、ブリッジ設定のウィンドウに戻ります。図5.1 イーサネットデバイスをポートとしてブリッジに追加する
- ブリッジにさらにポートを追加するには、これらの手順を繰り返します。
-
環境に応じて、
IPv4 configuration
およびIPv6 configuration
領域に IP アドレス設定を設定します。これを行うには、これらの領域の横にあるボタンを押して、次を選択します。-
ブリッジが IP アドレスを必要としない場合は
Disabled
にします。 -
DHCP サーバーまたはステートレスアドレス自動設定 (SLAAC) が IP アドレスをブリッジに動的に割り当てる場合は、
Automatic
にします。 ネットワークで静的 IP アドレス設定が必要な場合は、
Manual
にします。この場合、さらにフィールドに入力する必要があります。-
設定するプロトコルの横にある
Show
を押して、追加のフィールドを表示します。 Addresses
の横にあるAdd
を押して、IP アドレスとサブネットマスクを Classless Inter-Domain Routing (CIDR) 形式で入力します。サブネットマスクを指定しない場合、NetworkManager は IPv4 アドレスに
/32
サブネットマスクを設定し、IPv6 アドレスに/64
サブネットマスクを設定します。- デフォルトゲートウェイのアドレスを入力します。
-
DNS servers
の横にあるAdd
を押して、DNS サーバーのアドレスを入力します。 -
Search domains
の横にあるAdd
を押して、DNS 検索ドメインを入力します。
-
設定するプロトコルの横にある
図5.2 IP アドレス設定なしのブリッジ接続例
-
ブリッジが IP アドレスを必要としない場合は
-
OK
を押すと、新しい接続が作成され、自動的にアクティブ化されます。 -
Back
を押してメインメニューに戻ります。 -
Quit
を選択し、Enter キーを押してnmtui
アプリケーションを閉じます。
検証
ip
ユーティリティーを使用して、特定のブリッジのポートであるイーサネットデバイスのリンクステータスを表示します。ip link show master bridge0
# ip link show master bridge0 3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:62:61:0e brd ff:ff:ff:ff:ff:ff 4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:9e:f1:ce brd ff:ff:ff:ff:ff:ff
Copy to Clipboard Copied! bridge
ユーティリティーを使用して、任意のブリッジデバイスのポートであるイーサネットデバイスの状態を表示します。bridge link show
# bridge link show 3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state forwarding priority 32 cost 100 4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state listening priority 32 cost 100 ...
Copy to Clipboard Copied! 特定のイーサネットデバイスのステータスを表示するには、
bridge link show dev <ethernet_device_name>
コマンドを使用します。
5.4. nmstatectl
を使用したネットワークブリッジの設定
nmstatectl
ユーティリティーを使用して、Nmstate API を介してネットワークブリッジを設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
環境に応じて、YAML ファイルを適宜調整します。たとえば、ブリッジでイーサネットアダプターとは異なるデバイスを使用するには、ブリッジで使用するポートの Base-iface
属性と type
属性を調整します。
前提条件
- サーバーに、2 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。
- 物理または仮想のイーサネットデバイスをサーバーにインストールし、ブリッジでイーサネットデバイスをポートとして使用する。
-
ポート
リストでインターフェイス名を設定し、対応するインターフェイスを定義して、ブリッジのポートとしてチーム、ボンディング、または VLAN デバイスを使用する。 -
nmstate
パッケージがインストールされている。
手順
以下の内容を含む YAML ファイル (例:
~/create-bridge.yml
) を作成します。--- interfaces: - name: bridge0 type: linux-bridge state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false bridge: options: stp: enabled: true port: - name: enp1s0 - name: enp7s0 - name: enp1s0 type: ethernet state: up - name: enp7s0 type: ethernet state: up routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: bridge0 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: bridge0 dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb
--- interfaces: - name: bridge0 type: linux-bridge state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false bridge: options: stp: enabled: true port: - name: enp1s0 - name: enp7s0 - name: enp1s0 type: ethernet state: up - name: enp7s0 type: ethernet state: up routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: bridge0 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: bridge0 dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb
Copy to Clipboard Copied! これらの設定では、次の設定でネットワークブリッジを定義します。
-
ブリッジのネットワークインターフェイス:
enp1s0
およびenp7s0
- スパニングツリープロトコル (STP): 有効化
-
静的 IPv4 アドレス:
192.0.2.1
(サブネットマスクが/24
) -
静的 IPv6 アドレス:
2001:db8:1::1
(サブネットマスクが/64
) -
IPv4 デフォルトゲートウェイ:
192.0.2.254
-
IPv6 デフォルトゲートウェイ:
2001:db8:1::fffe
-
IPv4 DNS サーバー:
192.0.2.200
-
IPv6 DNS サーバー:
2001:db8:1::ffbb
-
DNS 検索ドメイン:
example.com
-
ブリッジのネットワークインターフェイス:
設定をシステムに適用します。
nmstatectl apply ~/create-bridge.yml
# nmstatectl apply ~/create-bridge.yml
Copy to Clipboard Copied!
検証
デバイスおよび接続の状態を表示します。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION bridge0 bridge connected bridge0
Copy to Clipboard Copied! 接続プロファイルのすべての設定を表示します。
nmcli connection show bridge0
# nmcli connection show bridge0 connection.id: bridge0_ connection.uuid: e2cc9206-75a2-4622-89cf-1252926060a9 connection.stable-id: -- connection.type: bridge connection.interface-name: bridge0 ...
Copy to Clipboard Copied! 接続設定を YAML 形式で表示します。
nmstatectl show bridge0
# nmstatectl show bridge0
Copy to Clipboard Copied!
5.5. network
RHEL システムロールを使用したネットワークブリッジの設定
ネットワークブリッジを作成することにより、Open Systems Interconnection (OSI) モデルのレイヤー 2 で複数のネットワークを接続できます。ブリッジを設定するには、NetworkManager で接続プロファイルを作成します。Ansible と network
RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。
network
RHEL システムロールを使用してブリッジを設定できます。ブリッジの親デバイスの接続プロファイルが存在しない場合は、このロールによって作成することもできます。
IP アドレス、ゲートウェイ、DNS 設定をブリッジに割り当てる場合は、ポートではなくブリッジで設定してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - サーバーに、2 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Bridge connection profile with two Ethernet ports ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: # Bridge profile - name: bridge0 type: bridge interface_name: bridge0 ip: dhcp4: yes auto6: yes state: up # Port profile for the 1st Ethernet device - name: bridge0-port1 interface_name: enp7s0 type: ethernet controller: bridge0 port_type: bridge state: up # Port profile for the 2nd Ethernet device - name: bridge0-port2 interface_name: enp8s0 type: ethernet controller: bridge0 port_type: bridge state: up
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Bridge connection profile with two Ethernet ports ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: # Bridge profile - name: bridge0 type: bridge interface_name: bridge0 ip: dhcp4: yes auto6: yes state: up # Port profile for the 1st Ethernet device - name: bridge0-port1 interface_name: enp7s0 type: ethernet controller: bridge0 port_type: bridge state: up # Port profile for the 2nd Ethernet device - name: bridge0-port2 interface_name: enp8s0 type: ethernet controller: bridge0 port_type: bridge state: up
Copy to Clipboard Copied! サンプル Playbook で指定されている設定は次のとおりです。
type: <profile_type>
- 作成するプロファイルのタイプを設定します。このサンプル Playbook では、3 つの接続プロファイルを作成します。1 つはブリッジ用、2 つはイーサネットデバイス用です。
dhcp4: yes
- DHCP、PPP、または同様のサービスからの自動 IPv4 アドレス割り当てを有効にします。
auto6: yes
-
IPv6 自動設定を有効にします。デフォルトでは、NetworkManager はルーター広告を使用します。ルーターが
managed
フラグを通知すると、NetworkManager は DHCPv6 サーバーに IPv6 アドレスと接頭辞を要求します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.network/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied!
検証
特定のブリッジのポートであるイーサネットデバイスのリンクステータスを表示します。
ansible managed-node-01.example.com -m command -a 'ip link show master bridge0'
# ansible managed-node-01.example.com -m command -a 'ip link show master bridge0' managed-node-01.example.com | CHANGED | rc=0 >> 3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:62:61:0e brd ff:ff:ff:ff:ff:ff 4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master bridge0 state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:9e:f1:ce brd ff:ff:ff:ff:ff:ff
Copy to Clipboard Copied! ブリッジデバイスのポートであるイーサネットデバイスのステータスを表示します。
ansible managed-node-01.example.com -m command -a 'bridge link show'
# ansible managed-node-01.example.com -m command -a 'bridge link show' managed-node-01.example.com | CHANGED | rc=0 >> 3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state forwarding priority 32 cost 100 4: enp8s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state listening priority 32 cost 100
Copy to Clipboard Copied!
第6章 IPsec VPN のセットアップ
仮想プライベートネットワーク (VPN) は、インターネット経由でローカルネットワークに接続する方法です。Libreswan
により提供される IPsec
は、VPN を作成するための望ましい方法です。Libreswan
は、VPN のユーザー空間 IPsec
実装です。VPN は、インターネットなどの中間ネットワークにトンネルを設定して、使用中の LAN と別のリモート LAN との間の通信を可能にします。セキュリティー上の理由から、VPN トンネルは常に認証と暗号化を使用します。暗号化操作では、Libreswan
は NSS
ライブラリーを使用します。
6.1. IPsec VPN 実装としての Libreswan
RHEL では、IPsec プロトコルを使用して仮想プライベートネットワーク (VPN) を設定できます。これは、Libreswan アプリケーションによりサポートされます。Libreswan は、Openswan アプリケーションの延長であり、Openswan ドキュメントの多くの例は Libreswan でも利用できます。
VPN の IPsec プロトコルは、IKE (Internet Key Exchange) プロトコルを使用して設定されます。IPsec と IKE は同義語です。IPsec VPN は、IKE VPN、IKEv2 VPN、XAUTH VPN、Cisco VPN、または IKE/IPsec VPN とも呼ばれます。
Libreswan は、オープンソースのユーザー空間の IKE 実装です。IKE v1 および v2 は、ユーザーレベルのデーモンとして実装されます。IKE プロトコルも暗号化されています。IPsec プロトコルは Linux カーネルで実装され、Libreswan は、VPN トンネル設定を追加および削除するようにカーネルを設定します。
IKE プロトコルは、UDP ポート 500 および 4500 を使用します。IPsec プロトコルは、以下の 2 つのプロトコルで構成されます。
- 暗号セキュリティーペイロード (ESP) (プロトコル番号が 50)
- 認証ヘッダー (AH) (プロトコル番号 51)
AH プロトコルの使用は推奨されていません。AH のユーザーは、null 暗号化で ESP に移行することが推奨されます。
IPsec プロトコルは、以下の 2 つの操作モードを提供します。
- トンネルモード (デフォルト)
- トランスポートモード
IKE を使用せずに IPsec を使用してカーネルを設定できます。これは、手動キーリング と呼ばれます。また、ip xfrm
コマンドを使用して手動キーを設定できますが、これはセキュリティー上の理由からは強く推奨されません。Libreswan は、Netlink インターフェイスを使用して Linux カーネルと通信します。カーネルはパケットの暗号化と復号化を実行します。
Libreswan は、ネットワークセキュリティーサービス (NSS) 暗号化ライブラリーを使用します。
Libreswan および Linux カーネルが実装する IKE/IPsec の VPN は、RHEL で使用することが推奨される唯一の VPN 技術です。その他の VPN 技術は、そのリスクを理解せずに使用しないでください。
RHEL では、Libreswan はデフォルトで システム全体の暗号化ポリシー に従います。これにより、Libreswan は、デフォルトのプロトコルとして IKEv2 を含む現在の脅威モデルに対して安全な設定を使用するようになります。詳細は、システム全体の暗号化ポリシーの使用 を参照してください。
IKE/IPsec はピアツーピアプロトコルであるため、Libreswan では、"ソース" および "宛先"、または "サーバー" および "クライアント" という用語を使用しません。終了点 (ホスト) を参照する場合は、代わりに "左" と "右" という用語を使用します。これにより、ほとんどの場合、両方の終了点で同じ設定も使用できます。ただし、管理者は通常、ローカルホストに "左" を使用し、リモートホストに "右" を使用します。
leftid
と rightid
オプションは、認証プロセス内の各ホストの識別として機能します。詳細は、man ページの ipsec.conf(5)
を参照してください。
6.2. Libreswan の認証方法
Libreswan は複数の認証方法をサポートしますが、それぞれは異なるシナリオとなっています。
事前共有キー (PSK)
事前共有キー (PSK) は、最も簡単な認証メソッドです。セキュリティー上の理由から、PSK は 64 文字未満は使用しないでください。FIPS モードでは、PSK は、使用される整合性アルゴリズムに応じて、最低強度の要件に準拠する必要があります。authby=secret
接続を使用して PSK を設定できます。
Raw RSA 鍵
Raw RSA 鍵 は、静的なホスト間またはサブネット間の IPsec 設定で一般的に使用されます。各ホストは、他のすべてのホストのパブリック RSA 鍵を使用して手動で設定され、Libreswan はホストの各ペア間で IPsec トンネルを設定します。この方法は、多数のホストでは適切にスケーリングされません。
ipsec newhostkey
コマンドを使用して、ホストで Raw RSA 鍵を生成できます。ipsec showhostkey
コマンドを使用して、生成された鍵をリスト表示できます。leftrsasigkey=
の行は、CKA ID キーを使用する接続設定に必要です。Raw RSA 鍵に authby=rsasig
接続オプションを使用します。
X.509 証明書
X.509 証明書 は、共通の IPsec ゲートウェイに接続するホストが含まれる大規模なデプロイメントに一般的に使用されます。中央の 認証局 (CA) は、ホストまたはユーザーの RSA 証明書に署名します。この中央 CA は、個別のホストまたはユーザーの取り消しを含む、信頼のリレーを行います。
たとえば、openssl
コマンドおよび NSS certutil
コマンドを使用して X.509 証明書を生成できます。Libreswan は、leftcert=
設定オプションの証明書のニックネームを使用して NSS データベースからユーザー証明書を読み取るため、証明書の作成時にニックネームを指定します。
カスタム CA 証明書を使用する場合は、これを Network Security Services(NSS) データベースにインポートする必要があります。ipsec import
コマンドを使用して、PKCS #12 形式の証明書を Libreswan NSS データベースにインポートできます。
Libreswan は、section 3.1 of RFC 4945 で説明されているように、すべてのピア証明書のサブジェクト代替名 (SAN) としてインターネット鍵 Exchange(IKE) ピア ID を必要とします。require-id-on-certificate=no
接続オプションを設定してこのチェックを無効にすると、システムが中間者攻撃に対して脆弱になる可能性があります。
SHA-2 で RSA を使用した X.509 証明書に基づく認証に authby=rsasig
接続オプションを使用します。authby=
を ecdsa
に設定し、authby=rsa-sha2
を介した SHA-2 による RSA Probabilistic Signature Scheme (RSASSA-PSS) デジタル署名ベースの認証を設定することにより、SHA-2 を使用する ECDSA デジタル署名に対してさらに制限することができます。IKEv2 ピア認証のデフォルト値は authby=rsasig,ecdsa
です。
証明書と authby=
署名メソッドが一致する必要があります。これにより、相互運用性が向上し、1 つのデジタル署名システムでの認証が維持されます。
NULL 認証
NULL 認証 は、認証なしでメッシュ暗号化を実現するために使用されます。これは、パッシブ攻撃は防ぎますが、アクティブ攻撃は防ぎません。ただし、IKEv2 は非対称認証メソッドを許可するため、NULL 認証はインターネットスケールのオポチュニスティック IPsec にも使用できます。このモデルでは、クライアントはサーバーを認証しますが、サーバーはクライアントを認証しません。このモデルは、TLS を使用して Web サイトのセキュリティーを保護するのと似ています。NULL 認証に authby=null
を使用します。
量子コンピューターに対する保護
上記の認証方法に加えて、Post-quantum Pre-shared Key (PPK) メソッドを使用して、量子コンピューターによる潜在的な攻撃から保護することができます。個々のクライアントまたはクライアントグループは、帯域外で設定された事前共有鍵に対応する PPK ID を指定することにより、独自の PPK を使用できます。
事前共有キーで IKEv1 を使用すると、量子攻撃者から保護されます。IKEv2 の再設計は、この保護をネイティブに提供しません。Libreswan は、Post-quantum Pre-shared Key (PPK) を使用して、量子攻撃から IKEv2 接続を保護します。
任意の PPK 対応を有効にする場合は、接続定義に ppk=yes
を追加します。PPK が必要な場合は ppk=insist
を追加します。次に、各クライアントには、帯域外で通信する (および可能であれば量子攻撃に対して安全な) シークレット値を持つ PPK ID を付与できます。PPK はランダム性において非常に強力で、辞書の単語に基づいていません。PPK ID と PPK データは、次のように ipsec.secrets
ファイルに保存されます。
@west @east : PPKS "user1" "thestringismeanttobearandomstr"
@west @east : PPKS "user1" "thestringismeanttobearandomstr"
PPKS
オプションは、静的な PPK を参照します。実験的な関数は、ワンタイムパッドに基づいた動的 PPK を使用します。各接続では、ワンタイムパッドの新しい部分が PPK として使用されます。これを使用すると、ファイル内の動的な PPK の部分がゼロで上書きされ、再利用を防ぐことができます。複数のタイムパッドマテリアルが残っていないと、接続は失敗します。詳細は、man ページの ipsec.secrets(5)
を参照してください。
6.3. Libreswan のインストール
Libreswan IPsec/IKE 実装を通じて VPN を設定する前に、対応するパッケージをインストールし、ipsec
サービスを開始して、ファイアウォールでサービスを許可する必要があります。
前提条件
-
AppStream
リポジトリーが有効になっている。
手順
libreswan
パッケージをインストールします。dnf install libreswan
# dnf install libreswan
Copy to Clipboard Copied! Libreswan を再インストールする場合は、古いデータベースファイルを削除し、新しいデータベースを作成します。
systemctl stop ipsec rm /var/lib/ipsec/nss/*db ipsec initnss
# systemctl stop ipsec # rm /var/lib/ipsec/nss/*db # ipsec initnss
Copy to Clipboard Copied! ipsec
サービスを開始して有効にし、システムの起動時にサービスを自動的に開始できるようにします。systemctl enable ipsec --now
# systemctl enable ipsec --now
Copy to Clipboard Copied! ファイアウォールで、
ipsec
サービスを追加して、IKE プロトコル、ESP プロトコル、および AH プロトコルの 500/UDP ポートおよび 4500/UDP ポートを許可するように設定します。firewall-cmd --add-service="ipsec" firewall-cmd --runtime-to-permanent
# firewall-cmd --add-service="ipsec" # firewall-cmd --runtime-to-permanent
Copy to Clipboard Copied!
6.4. ホスト間の VPN の作成
raw RSA キーによる認証を使用して、左 および 右 と呼ばれる 2 つのホスト間に、ホストツーホスト IPsec VPN を作成するように Libreswan を設定できます。
前提条件
-
Libreswan がインストールされ、
ipsec
サービスが各ノードで開始している。
手順
各ホストで Raw RSA 鍵ペアを生成します。
ipsec newhostkey
# ipsec newhostkey
Copy to Clipboard Copied! 前の手順で生成した鍵の
ckaid
を返します。左 で次のコマンドを実行して、そのckaid
を使用します。以下に例を示します。ipsec showhostkey --left --ckaid 2d3ea57b61c9419dfd6cf43a1eb6cb306c0e857d
# ipsec showhostkey --left --ckaid 2d3ea57b61c9419dfd6cf43a1eb6cb306c0e857d
Copy to Clipboard Copied! 上のコマンドの出力により、設定に必要な
leftrsasigkey=
行が生成されます。次のホスト (右) でも同じ操作を行います。ipsec showhostkey --right --ckaid a9e1f6ce9ecd3608c24e8f701318383f41798f03
# ipsec showhostkey --right --ckaid a9e1f6ce9ecd3608c24e8f701318383f41798f03
Copy to Clipboard Copied! /etc/ipsec.d/
ディレクトリーで、新しいmy_host-to-host.conf
ファイルを作成します。上の手順のipsec showhostkey
コマンドの出力から、RSA ホストの鍵を新規ファイルに書き込みます。以下に例を示します。conn mytunnel leftid=@west left=192.1.2.23 leftrsasigkey=0sAQOrlo+hOafUZDlCQmXFrje/oZm [...] W2n417C/4urYHQkCvuIQ== rightid=@east right=192.1.2.45 rightrsasigkey=0sAQO3fwC6nSSGgt64DWiYZzuHbc4 [...] D/v8t5YTQ== authby=rsasig
conn mytunnel leftid=@west left=192.1.2.23 leftrsasigkey=0sAQOrlo+hOafUZDlCQmXFrje/oZm [...] W2n417C/4urYHQkCvuIQ== rightid=@east right=192.1.2.45 rightrsasigkey=0sAQO3fwC6nSSGgt64DWiYZzuHbc4 [...] D/v8t5YTQ== authby=rsasig
Copy to Clipboard Copied! 鍵をインポートしたら、
ipsec
サービスを再起動します。systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! 接続を読み込みます。
ipsec add mytunnel
# ipsec add mytunnel
Copy to Clipboard Copied! トンネルを確立します。
ipsec up mytunnel
# ipsec up mytunnel
Copy to Clipboard Copied! ipsec
サービスの開始時に自動的にトンネルを開始するには、以下の行を接続定義に追加します。auto=start
auto=start
Copy to Clipboard Copied! - DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策については、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
6.5. サイト間 VPN の設定
2 つのネットワークを結合してサイト間の IPsec VPN を作成する場合は、その 2 つのホスト間の IPsec トンネルが作成されます。これにより、ホストは終了点として動作し、1 つまたは複数のサブネットからのトラフィックが通過できるように設定されます。したがって、ホストを、ネットワークのリモート部分にゲートウェイとして見なすことができます。
サイト間の VPN の設定は、設定ファイル内で複数のネットワークまたはサブネットを指定する必要がある点のみが、ホスト間の VPN とは異なります。
前提条件
- ホスト間の VPN が設定されている。
手順
ホスト間の VPN の設定が含まれるファイルを、新規ファイルにコピーします。以下に例を示します。
cp /etc/ipsec.d/my_host-to-host.conf /etc/ipsec.d/my_site-to-site.conf
# cp /etc/ipsec.d/my_host-to-host.conf /etc/ipsec.d/my_site-to-site.conf
Copy to Clipboard Copied! 上の手順で作成したファイルに、サブネット設定を追加します。以下に例を示します。
conn mysubnet also=mytunnel leftsubnet=192.0.1.0/24 rightsubnet=192.0.2.0/24 auto=start conn mysubnet6 also=mytunnel leftsubnet=2001:db8:0:1::/64 rightsubnet=2001:db8:0:2::/64 auto=start # the following part of the configuration file is the same for both host-to-host and site-to-site connections: conn mytunnel leftid=@west left=192.1.2.23 leftrsasigkey=0sAQOrlo+hOafUZDlCQmXFrje/oZm [...] W2n417C/4urYHQkCvuIQ== rightid=@east right=192.1.2.45 rightrsasigkey=0sAQO3fwC6nSSGgt64DWiYZzuHbc4 [...] D/v8t5YTQ== authby=rsasig
conn mysubnet also=mytunnel leftsubnet=192.0.1.0/24 rightsubnet=192.0.2.0/24 auto=start conn mysubnet6 also=mytunnel leftsubnet=2001:db8:0:1::/64 rightsubnet=2001:db8:0:2::/64 auto=start # the following part of the configuration file is the same for both host-to-host and site-to-site connections: conn mytunnel leftid=@west left=192.1.2.23 leftrsasigkey=0sAQOrlo+hOafUZDlCQmXFrje/oZm [...] W2n417C/4urYHQkCvuIQ== rightid=@east right=192.1.2.45 rightrsasigkey=0sAQO3fwC6nSSGgt64DWiYZzuHbc4 [...] D/v8t5YTQ== authby=rsasig
Copy to Clipboard Copied! - DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策については、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
6.6. リモートアクセスの VPN の設定
ロードウォーリアーとは、モバイルクライアントと動的に割り当てられた IP アドレスを使用する移動するユーザーのことです。モバイルクライアントは、X.509 証明書を使用して認証します。
以下の例では、IKEv2
の設定を示しています。IKEv1
XAUTH プロトコルは使用していません。
サーバー上では以下の設定になります。
conn roadwarriors keyexchange=ikev2 # support (roaming) MOBIKE clients (RFC 4555) mobike=yes fragmentation=yes left=1.2.3.4 # if access to the LAN is given, enable this, otherwise use 0.0.0.0/0 # leftsubnet=10.10.0.0/16 leftsubnet=0.0.0.0/0 leftcert=gw.example.com leftid=%fromcert leftxauthserver=yes leftmodecfgserver=yes right=%any # trust our own Certificate Agency rightca=%same # pick an IP address pool to assign to remote users # 100.64.0.0/16 prevents RFC1918 clashes when remote users are behind NAT rightaddresspool=100.64.13.100-100.64.13.254 # if you want remote clients to use some local DNS zones and servers modecfgdns="1.2.3.4, 5.6.7.8" modecfgdomains="internal.company.com, corp" rightxauthclient=yes rightmodecfgclient=yes authby=rsasig # optionally, run the client X.509 ID through pam to allow or deny client # pam-authorize=yes # load connection, do not initiate auto=add # kill vanished roadwarriors
conn roadwarriors
keyexchange=ikev2
# support (roaming) MOBIKE clients (RFC 4555)
mobike=yes
fragmentation=yes
left=1.2.3.4
# if access to the LAN is given, enable this, otherwise use 0.0.0.0/0
# leftsubnet=10.10.0.0/16
leftsubnet=0.0.0.0/0
leftcert=gw.example.com
leftid=%fromcert
leftxauthserver=yes
leftmodecfgserver=yes
right=%any
# trust our own Certificate Agency
rightca=%same
# pick an IP address pool to assign to remote users
# 100.64.0.0/16 prevents RFC1918 clashes when remote users are behind NAT
rightaddresspool=100.64.13.100-100.64.13.254
# if you want remote clients to use some local DNS zones and servers
modecfgdns="1.2.3.4, 5.6.7.8"
modecfgdomains="internal.company.com, corp"
rightxauthclient=yes
rightmodecfgclient=yes
authby=rsasig
# optionally, run the client X.509 ID through pam to allow or deny client
# pam-authorize=yes
# load connection, do not initiate
auto=add
# kill vanished roadwarriors
ロードウォーリアーのデバイスであるモバイルクライアントでは、上記の設定に多少変更を加えて使用します。
conn to-vpn-server keyexchange=ikev2 # pick up our dynamic IP left=%defaultroute leftsubnet=0.0.0.0/0 leftcert=myname.example.com leftid=%fromcert leftmodecfgclient=yes # right can also be a DNS hostname right=1.2.3.4 # if access to the remote LAN is required, enable this, otherwise use 0.0.0.0/0 # rightsubnet=10.10.0.0/16 rightsubnet=0.0.0.0/0 fragmentation=yes # trust our own Certificate Agency rightca=%same authby=rsasig # allow narrowing to the server's suggested assigned IP and remote subnet narrowing=yes # support (roaming) MOBIKE clients (RFC 4555) mobike=yes # initiate connection auto=start
conn to-vpn-server
keyexchange=ikev2
# pick up our dynamic IP
left=%defaultroute
leftsubnet=0.0.0.0/0
leftcert=myname.example.com
leftid=%fromcert
leftmodecfgclient=yes
# right can also be a DNS hostname
right=1.2.3.4
# if access to the remote LAN is required, enable this, otherwise use 0.0.0.0/0
# rightsubnet=10.10.0.0/16
rightsubnet=0.0.0.0/0
fragmentation=yes
# trust our own Certificate Agency
rightca=%same
authby=rsasig
# allow narrowing to the server's suggested assigned IP and remote subnet
narrowing=yes
# support (roaming) MOBIKE clients (RFC 4555)
mobike=yes
# initiate connection
auto=start
6.7. メッシュ VPN の設定
any-to-any VPN とも呼ばれるメッシュ VPN ネットワークは、全ノードが IPsec を使用して通信するネットワークです。この設定では、IPsec を使用できないノードの例外が許可されます。メッシュの VPN ネットワークは、以下のいずれかの方法で設定できます。
- IPSec を必要とする。
- IPsec を優先するが、平文通信へのフォールバックを可能にする。
ノード間の認証は、X.509 証明書または DNSSEC (DNS Security Extensions) を基にできます。
これらの接続は通常の Libreswan 設定であるため、オポチュニスティック IPsec に通常の IKEv2 認証方法を使用できます。ただし、right=%opportunisticgroup
エントリーで定義されるオポチュニスティック IPsec を除きます。一般的な認証方法は、一般に共有される認証局 (CA) を使用して、X.509 証明書に基づいてホストを相互に認証させる方法です。クラウドデプロイメントでは通常、標準の手順の一部として、クラウド内の各ノードに証明書を発行します。
1 つのホストが侵害されると、グループの PSK シークレットも侵害されるため、PreSharedKey (PSK) 認証は使用しないでください。
NULL 認証を使用すると、認証なしでノード間に暗号化をデプロイできます。これを使用した場合、受動的な攻撃者からのみ保護されます。
以下の手順では、X.509 証明書を使用します。この証明書は、Dogtag Certificate System などの任意の種類の CA 管理システムを使用して生成できます。Dogtag は、各ノードの証明書が PKCS #12 形式 (.p12
ファイル) で利用可能であることを前提としています。これには、秘密鍵、ノード証明書、およびその他のノードの X.509 証明書を検証するのに使用されるルート CA 証明書が含まれます。
各ノードでは、その X.509 証明書を除いて、同じ設定を使用します。これにより、ネットワーク内で既存ノードを再設定せずに、新規ノードを追加できます。PKCS #12 ファイルには "分かりやすい名前" が必要であるため、名前には "node" を使用します。これにより、すべてのノードに対して、この名前を参照する設定ファイルが同一になります。
前提条件
-
Libreswan がインストールされ、
ipsec
サービスが各ノードで開始している。 新しい NSS データベースが初期化されている。
すでに古い NSS データベースがある場合は、古いデータベースファイルを削除します。
systemctl stop ipsec rm /var/lib/ipsec/nss/*db
# systemctl stop ipsec # rm /var/lib/ipsec/nss/*db
Copy to Clipboard Copied! 次のコマンドを使用して、新しいデータベースを初期化できます。
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied!
手順
各ノードで PKCS #12 ファイルをインポートします。この手順では、PKCS #12 ファイルの生成に使用するパスワードが必要になります。
ipsec import nodeXXX.p12
# ipsec import nodeXXX.p12
Copy to Clipboard Copied! IPsec required
(private)、IPsec optional
(private-or-clear)、およびNo IPsec
(clear) プロファイルに、以下のような 3 つの接続定義を作成します。cat /etc/ipsec.d/mesh.conf conn clear auto=ondemand type=passthrough authby=never left=%defaultroute right=%group conn private auto=ondemand type=transport authby=rsasig failureshunt=drop negotiationshunt=drop keyexchange=ikev2 left=%defaultroute leftcert=nodeXXXX leftid=%fromcert rightid=%fromcert right=%opportunisticgroup conn private-or-clear auto=ondemand type=transport authby=rsasig failureshunt=passthrough negotiationshunt=passthrough # left left=%defaultroute leftcert=nodeXXXX leftid=%fromcert leftrsasigkey=%cert # right rightrsasigkey=%cert rightid=%fromcert right=%opportunisticgroup
# cat /etc/ipsec.d/mesh.conf conn clear auto=ondemand
1 type=passthrough authby=never left=%defaultroute right=%group conn private auto=ondemand type=transport authby=rsasig failureshunt=drop negotiationshunt=drop keyexchange=ikev2 left=%defaultroute leftcert=nodeXXXX leftid=%fromcert
2 rightid=%fromcert right=%opportunisticgroup conn private-or-clear auto=ondemand type=transport authby=rsasig failureshunt=passthrough negotiationshunt=passthrough # left left=%defaultroute leftcert=nodeXXXX
3 leftid=%fromcert leftrsasigkey=%cert # right rightrsasigkey=%cert rightid=%fromcert right=%opportunisticgroup
Copy to Clipboard Copied! - 1
auto
変数にはいくつかのオプションがあります。ondemand
接続オプションは、IPsec 接続を開始するオポチュニスティック IPsec や、常にアクティブにする必要のない明示的に設定した接続に使用できます。このオプションは、カーネル内にトラップ XFRM ポリシーを設定し、そのポリシーに一致する最初のパケットを受信したときに IPsec 接続を開始できるようにします。オポチュニスティック IPsec を使用する場合も、明示的に設定した接続を使用する場合も、次のオプションを使用すると、IPsec 接続を効果的に設定および管理できます。
add
オプション-
接続設定をロードし、リモート開始に応答できるように準備します。ただし、接続はローカル側から自動的に開始されません。コマンド
ipsec up
を使用して、IPsec 接続を手動で開始できます。 start
オプション- 接続設定をロードし、リモート開始に応答できるように準備します。さらに、リモートピアへの接続を即座に開始します。このオプションは、永続的かつ常にアクティブな接続に使用できます。
- 2
leftid
変数とrightid
変数は、IPsec トンネル接続の右チャネルと左チャネルを指定します。これらの変数を使用して、ローカル IP アドレスの値、またはローカル証明書のサブジェクト DN を取得できます (設定している場合)。- 3
leftcert
変数は、使用する NSS データベースのニックネームを定義します。
ネットワークの IP アドレスを対応するカテゴリーに追加します。たとえば、すべてのノードが
10.15.0.0/16
ネットワーク内に存在し、すべてのノードで IPsec 暗号化を使用する必要がある場合は、次のコマンドを実行します。echo "10.15.0.0/16" >> /etc/ipsec.d/policies/private
# echo "10.15.0.0/16" >> /etc/ipsec.d/policies/private
Copy to Clipboard Copied! 特定のノード (
10.15.34.0/24
など) を IPsec の有無にかかわらず機能させるには、そのノードを private-or-clear グループに追加します。echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clear
# echo "10.15.34.0/24" >> /etc/ipsec.d/policies/private-or-clear
Copy to Clipboard Copied! ホストを、
10.15.1.2
など、IPsec の機能がない clear グループに定義する場合は、次のコマンドを実行します。echo "10.15.1.2/32" >> /etc/ipsec.d/policies/clear
# echo "10.15.1.2/32" >> /etc/ipsec.d/policies/clear
Copy to Clipboard Copied! /etc/ipsec.d/policies
ディレクトリーのファイルは、各新規ノードのテンプレートから作成することも、Puppet または Ansible を使用してプロビジョニングすることもできます。すべてのノードでは、例外のリストが同じか、異なるトラフィックフローが期待される点に注意してください。したがって、あるノードで IPsec が必要になり、別のノードで IPsec を使用できないために、ノード間の通信ができない場合もあります。
ノードを再起動して、設定したメッシュに追加します。
systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! - DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策については、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
検証
ping
コマンドを使用して IPsec トンネルを開きます。ping <nodeYYY>
# ping <nodeYYY>
Copy to Clipboard Copied! インポートされた証明書を含む NSS データベースを表示します。
certutil -L -d sql:/var/lib/ipsec/nss/
# certutil -L -d sql:/var/lib/ipsec/nss/ Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI west u,u,u ca CT,,
Copy to Clipboard Copied! ノード上の開いているトンネルを確認します。
ipsec trafficstatus
# ipsec trafficstatus 006 #2: "private#10.15.0.0/16"[1] ...<nodeYYY>, type=ESP, add_time=1691399301, inBytes=512, outBytes=512, maxBytes=2^63B, id='C=US, ST=NC, O=Example Organization, CN=east'
Copy to Clipboard Copied!
6.8. FIPS 準拠の IPsec VPN のデプロイ
Libreswan を使用して、FIPS 準拠の IPsec VPN ソリューションをデプロイできます。これを行うには、FIPS モードの Libreswan で使用できる暗号化アルゴリズムと無効になっている暗号化アルゴリズムを特定します。
前提条件
-
AppStream
リポジトリーが有効になっている。 - システムは FIPS モードでインストールされている。
手順
libreswan
パッケージをインストールします。dnf install libreswan
# dnf install libreswan
Copy to Clipboard Copied! Libreswan を再インストールする場合は、古い NSS データベースを削除します。
systemctl stop ipsec rm /var/lib/ipsec/nss/*db
# systemctl stop ipsec # rm /var/lib/ipsec/nss/*db
Copy to Clipboard Copied! ipsec
サービスを開始して有効にし、システムの起動時にサービスを自動的に開始できるようにします。systemctl enable ipsec --now
# systemctl enable ipsec --now
Copy to Clipboard Copied! ファイアウォールで、
ipsec
サービスを追加して、IKE プロトコル、ESP プロトコル、および AH プロトコルの500
および4500
UDP ポートを許可するように設定します。firewall-cmd --add-service="ipsec" firewall-cmd --runtime-to-permanent
# firewall-cmd --add-service="ipsec" # firewall-cmd --runtime-to-permanent
Copy to Clipboard Copied!
検証
Libreswan が FIPS モードで実行されていることを確認します。
ipsec whack --fipsstatus
# ipsec whack --fipsstatus FIPS mode enabled
Copy to Clipboard Copied! または、
systemd
ジャーナルでipsec
ユニットのエントリーを確認します。journalctl -u ipsec
$ journalctl -u ipsec ... Jan 22 11:26:50 localhost.localdomain pluto[3076]: FIPS Mode: ON
Copy to Clipboard Copied! FIPS モードで使用可能なアルゴリズムを表示するには、次のコマンドを実行します。
ipsec pluto --selftest 2>&1 | head -6
# ipsec pluto --selftest 2>&1 | head -6 Initializing NSS using read-only database "sql:/var/lib/ipsec/nss" FIPS Mode: ON NSS crypto library initialized FIPS mode enabled for pluto daemon NSS library is running in FIPS mode FIPS HMAC integrity support [not required]
Copy to Clipboard Copied! FIPS モードで無効化されたアルゴリズムをクエリーするには、次のコマンドを実行します。
ipsec pluto --selftest 2>&1 | grep disabled
# ipsec pluto --selftest 2>&1 | grep disabled Encryption algorithm CAMELLIA_CTR disabled; not FIPS compliant Encryption algorithm CAMELLIA_CBC disabled; not FIPS compliant Encryption algorithm NULL disabled; not FIPS compliant Encryption algorithm CHACHA20_POLY1305 disabled; not FIPS compliant Hash algorithm MD5 disabled; not FIPS compliant PRF algorithm HMAC_MD5 disabled; not FIPS compliant PRF algorithm AES_XCBC disabled; not FIPS compliant Integrity algorithm HMAC_MD5_96 disabled; not FIPS compliant Integrity algorithm HMAC_SHA2_256_TRUNCBUG disabled; not FIPS compliant Integrity algorithm AES_XCBC_96 disabled; not FIPS compliant DH algorithm MODP1536 disabled; not FIPS compliant DH algorithm DH31 disabled; not FIPS compliant
Copy to Clipboard Copied! FIPS モードで許可されているすべてのアルゴリズムと暗号のリストを表示するには、次のコマンドを実行します。
ipsec pluto --selftest 2>&1 | grep ESP | grep FIPS | sed "s/^.*FIPS//"
# ipsec pluto --selftest 2>&1 | grep ESP | grep FIPS | sed "s/^.*FIPS//" aes_ccm, aes_ccm_c aes_ccm_b aes_ccm_a NSS(CBC) 3des NSS(GCM) aes_gcm, aes_gcm_c NSS(GCM) aes_gcm_b NSS(GCM) aes_gcm_a NSS(CTR) aesctr NSS(CBC) aes aes_gmac NSS sha, sha1, sha1_96, hmac_sha1 NSS sha512, sha2_512, sha2_512_256, hmac_sha2_512 NSS sha384, sha2_384, sha2_384_192, hmac_sha2_384 NSS sha2, sha256, sha2_256, sha2_256_128, hmac_sha2_256 aes_cmac null NSS(MODP) null, dh0 NSS(MODP) dh14 NSS(MODP) dh15 NSS(MODP) dh16 NSS(MODP) dh17 NSS(MODP) dh18 NSS(ECP) ecp_256, ecp256 NSS(ECP) ecp_384, ecp384 NSS(ECP) ecp_521, ecp521
Copy to Clipboard Copied!
6.9. パスワードによる IPsec NSS データベースの保護
デフォルトでは、IPsec サービスは、初回起動時に空のパスワードを使用して Network Security Services (NSS) データベースを作成します。セキュリティーを強化するために、パスワード保護を追加できます。
前提条件
-
/var/lib/ipsec/nss/
ディレクトリーには NSS データベースファイルが含まれます。
手順
Libreswan の
NSS
データベースのパスワード保護を有効にします。certutil -N -d sql:/var/lib/ipsec/nss
# certutil -N -d sql:/var/lib/ipsec/nss Enter Password or Pin for "NSS Certificate DB": Enter a password which will be used to encrypt your keys. The password should be at least 8 characters long, and should contain at least one non-alphabetic character. Enter new password:
Copy to Clipboard Copied! 前の手順で設定したパスワードを含む
/etc/ipsec.d/nsspassword
ファイルを作成します。以下はその例です。cat /etc/ipsec.d/nsspassword NSS Certificate DB:<password>
# cat /etc/ipsec.d/nsspassword NSS Certificate DB:<password>
Copy to Clipboard Copied! nsspassword
ファイルは次の構文を使用します。<token_1>:<password1> <token_2>:<password2>
<token_1>:<password1> <token_2>:<password2>
Copy to Clipboard Copied! デフォルトの NSS ソフトウェアトークンは
NSS Certificate DB
です。システムが FIPS モードで実行し場合は、トークンの名前がNSS FIPS 140-2 Certificate DB
になります。選択したシナリオに応じて、
nsspassword
ファイルの完了後にipsec
サービスを起動または再起動します。systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied!
検証
NSS データベースに空でないパスワードを追加した後に、
ipsec
サービスが実行中であることを確認します。systemctl status ipsec
# systemctl status ipsec ● ipsec.service - Internet Key Exchange (IKE) Protocol Daemon for IPsec Loaded: loaded (/usr/lib/systemd/system/ipsec.service; enabled; vendor preset: disable> Active: active (running)…
Copy to Clipboard Copied!
検証
Journal
ログに初期化が成功したことを確認するエントリーが含まれていることを確認します。journalctl -u ipsec
# journalctl -u ipsec … pluto[6214]: Initializing NSS using read-only database "sql:/var/lib/ipsec/nss" pluto[6214]: NSS Password from file "/etc/ipsec.d/nsspassword" for token "NSS Certificate DB" with length 20 passed to NSS pluto[6214]: NSS crypto library initialized …
Copy to Clipboard Copied!
6.10. TCP を使用するように IPsec VPN を設定
Libreswan は、RFC 8229 で説明されているように、IKE パケットおよび IPsec パケットの TCP カプセル化に対応します。この機能により、UDP 経由でトラフィックが転送されないように、IPsec VPN をネットワークに確立し、セキュリティーのペイロード (ESP) を強化できます。フォールバックまたはメインの VPN トランスポートプロトコルとして TCP を使用するように VPN サーバーおよびクライアントを設定できます。TCP カプセル化にはパフォーマンスコストが大きくなるため、UDP がシナリオで永続的にブロックされている場合に限り、TCP を主な VPN プロトコルとして使用してください。
前提条件
- リモートアクセス VPN が設定されている。
手順
config setup
セクションの/etc/ipsec.conf
ファイルに以下のオプションを追加します。listen-tcp=yes
listen-tcp=yes
Copy to Clipboard Copied! UDP で最初の試行に失敗した場合に TCP カプセル化をフォールバックオプションとして使用するには、クライアントの接続定義に以下の 2 つのオプションを追加します。
enable-tcp=fallback tcp-remoteport=4500
enable-tcp=fallback tcp-remoteport=4500
Copy to Clipboard Copied! または、UDP を永続的にブロックしている場合は、クライアントの接続設定で以下のオプションを使用します。
enable-tcp=yes tcp-remoteport=4500
enable-tcp=yes tcp-remoteport=4500
Copy to Clipboard Copied!
6.11. RHEL システムロールを使用した VPN 接続の設定
VPN は、信頼できないネットワーク経由でトラフィックをセキュアに送信するための暗号化接続です。vpn
RHEL システムロールを使用すると、VPN 設定の作成プロセスを自動化できます。
vpn
RHEL システムロールは、VPN プロバイダーとして、IPsec 実装である Libreswan のみをサポートしています。
6.11.1. vpn
RHEL システムロールを使用して PSK 認証によるホスト間 IPsec VPN を作成する
IPsec を使用すると、VPN を介してホストを相互に直接接続できます。ホストは事前共有鍵 (PSK) を使用して相互に認証できます。vpn
RHEL システムロールを使用すると、PSK 認証による IPsec ホスト間接続を作成するプロセスを自動化できます。
デフォルトでは、このロールはトンネルベースの VPN を作成します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configuring VPN hosts: managed-node-01.example.com, managed-node-02.example.com tasks: - name: IPsec VPN with PSK authentication ansible.builtin.include_role: name: redhat.rhel_system_roles.vpn vars: vpn_connections: - hosts: managed-node-01.example.com: managed-node-02.example.com: auth_method: psk auto: start vpn_manage_firewall: true vpn_manage_selinux: true
--- - name: Configuring VPN hosts: managed-node-01.example.com, managed-node-02.example.com tasks: - name: IPsec VPN with PSK authentication ansible.builtin.include_role: name: redhat.rhel_system_roles.vpn vars: vpn_connections: - hosts: managed-node-01.example.com: managed-node-02.example.com: auth_method: psk auto: start vpn_manage_firewall: true vpn_manage_selinux: true
Copy to Clipboard Copied! サンプル Playbook で指定されている設定は次のとおりです。
hosts: <list>
VPN を設定するホストを含む YAML ディクショナリーを定義します。エントリーが Ansible 管理対象ノードでない場合は、
hostname
パラメーターに完全修飾ドメイン名 (FQDN) または IP アドレスを指定する必要があります。次に例を示します。... - hosts: ... external-host.example.com: hostname: 192.0.2.1
... - hosts: ... external-host.example.com: hostname: 192.0.2.1
Copy to Clipboard Copied! このロールは、各管理対象ノード上の VPN 接続を設定します。接続の名前は
<host_A>-to-<host_B>
です (例:managed-node-01.example.com-to-managed-node-02.example.com
)。このロールは外部 (管理対象外) ノード上で Libreswan を設定することはできないことに注意してください。そのようなホストでは手動で設定を作成する必要があります。auth_method: psk
-
ホスト間の PSK 認証を有効にします。ロールはコントロールノードで
openssl
を使用して PSK を作成します。 auto: <start-up_method>
-
接続の起動方法を指定します。有効な値は
add
、ondemand
、start
、およびignore
です。詳細は、Libreswan がインストールされているシステム上のipsec.conf(5)
man ページを参照してください。この変数のデフォルト値は null です。この値は自動起動操作を実行しないことを示します。 vpn_manage_firewall: true
-
ロールにより、管理対象ノード上の
firewalld
サービスで必要なポートを開くことを指定します。 vpn_manage_selinux: true
- ロールにより、IPsec ポートに必要な SELinux ポートタイプを設定することを指定します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.vpn/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied!
検証
接続が正常に開始されたことを確認します。次に例を示します。
ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "managed-node-01.example.com-to-managed-node-02.example.com"'
# ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "managed-node-01.example.com-to-managed-node-02.example.com"' ... 006 #3: "managed-node-01.example.com-to-managed-node-02.example.com", type=ESP, add_time=1741857153, inBytes=38622, outBytes=324626, maxBytes=2^63B, id='@managed-node-02.example.com'
Copy to Clipboard Copied! このコマンドは、VPN 接続がアクティブでないと成功しないことに注意してください。Playbook 内の
auto
変数をstart
以外の値に設定する場合は、まず管理対象ノードで接続を手動でアクティブ化する必要がある場合があります。
6.11.2. vpn
RHEL システムロールを使用して、個別のデータプレーンとコントロールプレーンおよび PSK 認証によるホスト間 IPsec VPN を作成する
IPsec を使用すると、VPN を介してホストを相互に直接接続できます。たとえば、制御メッセージの傍受や妨害のリスクを最小限に抑えてセキュリティーを強化するために、データトラフィックと制御トラフィックの両方に個別の接続を設定できます。vpn
RHEL システムロールを使用すると、個別のデータプレーンとコントロールプレーンおよび PSK 認証を使用して IPsec ホスト間接続を作成するプロセスを自動化できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configuring VPN hosts: managed-node-01.example.com, managed-node-02.example.com tasks: - name: IPsec VPN with PSK authentication ansible.builtin.include_role: name: redhat.rhel_system_roles.vpn vars: vpn_connections: - name: control_plane_vpn hosts: managed-node-01.example.com: hostname: 203.0.113.1 # IP address for the control plane managed-node-02.example.com: hostname: 198.51.100.2 # IP address for the control plane auth_method: psk auto: start - name: data_plane_vpn hosts: managed-node-01.example.com: hostname: 10.0.0.1 # IP address for the data plane managed-node-02.example.com: hostname: 172.16.0.2 # IP address for the data plane auth_method: psk auto: start vpn_manage_firewall: true vpn_manage_selinux: true
--- - name: Configuring VPN hosts: managed-node-01.example.com, managed-node-02.example.com tasks: - name: IPsec VPN with PSK authentication ansible.builtin.include_role: name: redhat.rhel_system_roles.vpn vars: vpn_connections: - name: control_plane_vpn hosts: managed-node-01.example.com: hostname: 203.0.113.1 # IP address for the control plane managed-node-02.example.com: hostname: 198.51.100.2 # IP address for the control plane auth_method: psk auto: start - name: data_plane_vpn hosts: managed-node-01.example.com: hostname: 10.0.0.1 # IP address for the data plane managed-node-02.example.com: hostname: 172.16.0.2 # IP address for the data plane auth_method: psk auto: start vpn_manage_firewall: true vpn_manage_selinux: true
Copy to Clipboard Copied! サンプル Playbook で指定されている設定は次のとおりです。
hosts: <list>
VPN を設定するホストを含む YAML ディクショナリーを定義します。接続の名前は
<name>-<IP_address_A>-to-<IP_address_B>
です (例:control_plane_vpn-203.0.113.1-to-198.51.100.2
)。このロールは、各管理対象ノード上の VPN 接続を設定します。このロールは外部 (管理対象外) ノード上で Libreswan を設定することはできないことに注意してください。そのようなホストでは手動で設定を作成する必要があります。
auth_method: psk
-
ホスト間の PSK 認証を有効にします。ロールはコントロールノードで
openssl
を使用して事前共有鍵を作成します。 auto: <start-up_method>
-
接続の起動方法を指定します。有効な値は
add
、ondemand
、start
、およびignore
です。詳細は、Libreswan がインストールされているシステム上のipsec.conf(5)
man ページを参照してください。この変数のデフォルト値は null です。この値は自動起動操作を実行しないことを示します。 vpn_manage_firewall: true
-
ロールにより、管理対象ノード上の
firewalld
サービスで必要なポートを開くことを指定します。 vpn_manage_selinux: true
- ロールにより、IPsec ポートに必要な SELinux ポートタイプを設定することを指定します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.vpn/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied!
検証
接続が正常に開始されたことを確認します。次に例を示します。
ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "control_plane_vpn-203.0.113.1-to-198.51.100.2"'
# ansible managed-node-01.example.com -m shell -a 'ipsec trafficstatus | grep "control_plane_vpn-203.0.113.1-to-198.51.100.2"' ... 006 #3: "control_plane_vpn-203.0.113.1-to-198.51.100.2", type=ESP, add_time=1741860073, inBytes=0, outBytes=0, maxBytes=2^63B, id='198.51.100.2'
Copy to Clipboard Copied! このコマンドは、VPN 接続がアクティブでないと成功しないことに注意してください。Playbook 内の
auto
変数をstart
以外の値に設定する場合は、まず管理対象ノードで接続を手動でアクティブ化する必要がある場合があります。
6.11.3. vpn
RHEL システムロールを使用して、証明書ベースの認証による複数ホスト間の IPsec メッシュ VPN を作成する
Libreswan はオポチュニスティックメッシュの作成をサポートしています。これは、各ホストで 1 つの設定を使用して、多数のホスト間で IPsec 接続を確立するためのものです。メッシュにホストを追加する場合、既存のホストの設定を更新する必要はありません。セキュリティーを強化するには、Libreswan で証明書ベースの認証を使用します。
vpn
RHEL システムロールを使用すると、証明書ベースの認証による管理対象ノード間の VPN メッシュの設定を自動化できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 各管理対象ノード用に PKCS #12 ファイルを用意した。
各ファイルには次のものを含めます。
- 認証局 (CA) 証明書
- ノードの秘密鍵
- ノードのクライアント証明書
-
ファイル名は
<managed_node_name_as_in_the_inventory>.p12
とします。 - ファイルは Playbook と同じディレクトリーに保存します。
手順
~/inventory
ファイルを編集し、cert_name
変数を追加します。managed-node-01.example.com cert_name=managed-node-01.example.com managed-node-02.example.com cert_name=managed-node-02.example.com managed-node-03.example.com cert_name=managed-node-03.example.com
managed-node-01.example.com cert_name=managed-node-01.example.com managed-node-02.example.com cert_name=managed-node-02.example.com managed-node-03.example.com cert_name=managed-node-03.example.com
Copy to Clipboard Copied! cert_name
変数は、各ホストの証明書で使用されるコモンネーム (CN) フィールドの値に設定します。通常、CN フィールドは完全修飾ドメイン名 (FQDN) に設定します。機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
ansible-vault create ~/vault.yml
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
Copy to Clipboard Copied! ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。pkcs12_pwd: <password>
pkcs12_pwd: <password>
Copy to Clipboard Copied! - 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。- name: Configuring VPN hosts: managed-node-01.example.com, managed-node-02.example.com, managed-node-03.example.com vars_files: - ~/vault.yml tasks: - name: Install LibreSwan ansible.builtin.package: name: libreswan state: present - name: Identify the path to IPsec NSS database ansible.builtin.set_fact: nss_db_dir: "{{ '/etc/ipsec.d/' if ansible_distribution in ['CentOS', 'RedHat'] and ansible_distribution_major_version is version('8', '=') else '/var/lib/ipsec/nss/' }}" - name: Locate IPsec NSS database files ansible.builtin.find: paths: "{{ nss_db_dir }}" patterns: "*.db" register: db_files - name: Remove IPsec NSS database files ansible.builtin.file: path: "{{ item.path }}" state: absent loop: "{{ db_files.files }}" when: db_files.matched > 0 - name: Initialize IPsec NSS database ansible.builtin.command: cmd: ipsec initnss - name: Copy PKCS #12 file to the managed node ansible.builtin.copy: src: "~/{{ inventory_hostname }}.p12" dest: "/etc/ipsec.d/{{ inventory_hostname }}.p12" mode: 0600 - name: Import PKCS #12 file in IPsec NSS database ansible.builtin.shell: cmd: 'pk12util -d {{ nss_db_dir }} -i /etc/ipsec.d/{{ inventory_hostname }}.p12 -W "{{ pkcs12_pwd }}"' - name: Remove PKCS #12 file ansible.builtin.file: path: "/etc/ipsec.d/{{ inventory_hostname }}.p12" state: absent - name: Opportunistic mesh IPsec VPN with certificate-based authentication ansible.builtin.include_role: name: redhat.rhel_system_roles.vpn vars: vpn_connections: - opportunistic: true auth_method: cert policies: - policy: private cidr: default - policy: private cidr: 192.0.2.0/24 - policy: clear cidr: 192.0.2.1/32 vpn_manage_firewall: true vpn_manage_selinux: true
- name: Configuring VPN hosts: managed-node-01.example.com, managed-node-02.example.com, managed-node-03.example.com vars_files: - ~/vault.yml tasks: - name: Install LibreSwan ansible.builtin.package: name: libreswan state: present - name: Identify the path to IPsec NSS database ansible.builtin.set_fact: nss_db_dir: "{{ '/etc/ipsec.d/' if ansible_distribution in ['CentOS', 'RedHat'] and ansible_distribution_major_version is version('8', '=') else '/var/lib/ipsec/nss/' }}" - name: Locate IPsec NSS database files ansible.builtin.find: paths: "{{ nss_db_dir }}" patterns: "*.db" register: db_files - name: Remove IPsec NSS database files ansible.builtin.file: path: "{{ item.path }}" state: absent loop: "{{ db_files.files }}" when: db_files.matched > 0 - name: Initialize IPsec NSS database ansible.builtin.command: cmd: ipsec initnss - name: Copy PKCS #12 file to the managed node ansible.builtin.copy: src: "~/{{ inventory_hostname }}.p12" dest: "/etc/ipsec.d/{{ inventory_hostname }}.p12" mode: 0600 - name: Import PKCS #12 file in IPsec NSS database ansible.builtin.shell: cmd: 'pk12util -d {{ nss_db_dir }} -i /etc/ipsec.d/{{ inventory_hostname }}.p12 -W "{{ pkcs12_pwd }}"' - name: Remove PKCS #12 file ansible.builtin.file: path: "/etc/ipsec.d/{{ inventory_hostname }}.p12" state: absent - name: Opportunistic mesh IPsec VPN with certificate-based authentication ansible.builtin.include_role: name: redhat.rhel_system_roles.vpn vars: vpn_connections: - opportunistic: true auth_method: cert policies: - policy: private cidr: default - policy: private cidr: 192.0.2.0/24 - policy: clear cidr: 192.0.2.1/32 vpn_manage_firewall: true vpn_manage_selinux: true
Copy to Clipboard Copied! サンプル Playbook で指定されている設定は次のとおりです。
opportunistic: true
-
複数ホスト間のオポチュニスティックメッシュを有効にします。
policies
変数は、どのサブネットとホストのトラフィックを暗号化する必要があるか、または暗号化できるか、またどのサブネットとホストでクリアテキストでの接続の使用を継続するかを定義します。 auth_method: cert
- 証明書ベースの認証を有効にします。これを行うには、インベントリーで各管理対象ノードの証明書のニックネームを指定する必要があります。
policies: <list_of_policies>
Libreswan ポリシーを YAML リスト形式で定義します。
デフォルトのポリシーは
private-or-clear
です。これをprivate
に変更するには、上記の Playbook に、デフォルトのcidr
エントリーに応じた適切なポリシーを含めます。Ansible コントロールノードが管理対象ノードと同じ IP サブネットにある場合は、Playbook の実行中に SSH 接続が失われるのを防ぐために、コントロールノードの IP アドレスに
clear
ポリシーを追加します。たとえば、メッシュを192.0.2.0/24
サブネット用に設定する必要があり、コントロールノードが IP アドレス192.0.2.1
を使用する場合、Playbook に示されているように、192.0.2.1/32
のclear
ポリシーが必要です。ポリシーの詳細は、Libreswan がインストールされているシステム上の
ipsec.conf(5)
man ページを参照してください。vpn_manage_firewall: true
-
ロールにより、管理対象ノード上の
firewalld
サービスで必要なポートを開くことを指定します。 vpn_manage_selinux: true
- ロールにより、IPsec ポートに必要な SELinux ポートタイプを設定することを指定します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.vpn/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied!
検証
メッシュ内のノードで、別のノードに ping を送信して接続をアクティブ化します。
ping managed-node-02.example.com
[root@managed-node-01]# ping managed-node-02.example.com
Copy to Clipboard Copied! 接続がアクティブであることを確認します。
ipsec trafficstatus
[root@managed-node-01]# ipsec trafficstatus 006 #2: "private#192.0.2.0/24"[1] ...192.0.2.2, type=ESP, add_time=1741938929, inBytes=372408, outBytes=545728, maxBytes=2^63B, id='CN=managed-node-02.example.com'
Copy to Clipboard Copied!
6.12. システム全体の暗号化ポリシーをオプトアウトする IPsec 接続の設定
接続向けのシステム全体の暗号化ポリシーのオーバーライド
RHEL のシステム全体の暗号化ポリシーでは、%default
と呼ばれる特別な接続が作成されます。この接続には、ikev2
オプション、esp
オプション、および ike
オプションのデフォルト値が含まれます。ただし、接続設定ファイルに上記のオプションを指定すると、デフォルト値を上書きできます。
たとえば、次の設定では、AES および SHA-1 または SHA-2 で IKEv1 を使用し、AES-GCM または AES-CBC で IPsec (ESP) を使用する接続が可能です。
conn MyExample ... keyexchange=ikev1 ike=aes-sha2,aes-sha1;modp2048 esp=aes_gcm,aes-sha2,aes-sha1 ...
conn MyExample
...
keyexchange=ikev1
ike=aes-sha2,aes-sha1;modp2048
esp=aes_gcm,aes-sha2,aes-sha1
...
AES-GCM は IPsec (ESP) および IKEv2 で利用できますが、IKEv1 では利用できません。
全接続向けのシステム全体の暗号化ポリシーの無効化
すべての IPsec 接続のシステム全体の暗号化ポリシーを無効にするには、/etc/ipsec.conf
ファイルで次の行をコメントアウトします。
include /etc/crypto-policies/back-ends/libreswan.config
include /etc/crypto-policies/back-ends/libreswan.config
次に、接続設定ファイルに keyexchange=ikev1
オプションを追加します。
6.13. IPsec VPN 設定のトラブルシューティング
IPsec VPN 設定に関連する問題は主に、一般的な理由が原因で発生する可能性が高くなっています。このような問題が発生した場合は、問題の原因が以下のシナリオのいずれかに該当するかを確認して、対応するソリューションを適用します。
基本的な接続のトラブルシューティング
VPN 接続関連の問題の多くは、管理者が不適当な設定オプションを指定してエンドポイントを設定した新しいデプロイメントで発生します。また、互換性のない値が新たに実装された場合に、機能していた設定が突然動作が停止する可能性があります。管理者が設定を変更した場合など、このような結果になることがあります。また、管理者が暗号化アルゴリズムなど、特定のオプションに異なるデフォルト値を使用して、ファームウェアまたはパッケージの更新をインストールした場合などです。
IPsec VPN 接続が確立されていることを確認するには、次のコマンドを実行します。
ipsec trafficstatus
# ipsec trafficstatus
006 #8: "vpn.example.com"[1] 192.0.2.1, type=ESP, add_time=1595296930, inBytes=5999, outBytes=3231, id='@vpn.example.com', lease=100.64.13.5/32
出力が空の場合や、エントリーで接続名が表示されない場合など、トンネルが破損します。
接続に問題があることを確認するには、以下を実行します。
vpn.example.com 接続をもう一度読み込みます。
ipsec add vpn.example.com
# ipsec add vpn.example.com 002 added connection description "vpn.example.com"
Copy to Clipboard Copied! 次に、VPN 接続を開始します。
ipsec up vpn.example.com
# ipsec up vpn.example.com
Copy to Clipboard Copied!
ファイアウォール関連の問題
最も一般的な問題は、IPSec エンドポイントの 1 つ、またはエンドポイント間にあるルーターにあるファイアウォールで Internet Key Exchange (IKE) パケットがドロップされるという点が挙げられます。
IKEv2 の場合には、以下の例のような出力は、ファイアウォールに問題があることを示しています。
ipsec up vpn.example.com
# ipsec up vpn.example.com 181 "vpn.example.com"[1] 192.0.2.2 #15: initiating IKEv2 IKE SA 181 "vpn.example.com"[1] 192.0.2.2 #15: STATE_PARENT_I1: sent v2I1, expected v2R1 010 "vpn.example.com"[1] 192.0.2.2 #15: STATE_PARENT_I1: retransmission; will wait 0.5 seconds for response 010 "vpn.example.com"[1] 192.0.2.2 #15: STATE_PARENT_I1: retransmission; will wait 1 seconds for response 010 "vpn.example.com"[1] 192.0.2.2 #15: STATE_PARENT_I1: retransmission; will wait 2 seconds for ...
Copy to Clipboard Copied! IKEv1 の場合は、最初のコマンドの出力は以下のようになります。
ipsec up vpn.example.com
# ipsec up vpn.example.com 002 "vpn.example.com" #9: initiating Main Mode 102 "vpn.example.com" #9: STATE_MAIN_I1: sent MI1, expecting MR1 010 "vpn.example.com" #9: STATE_MAIN_I1: retransmission; will wait 0.5 seconds for response 010 "vpn.example.com" #9: STATE_MAIN_I1: retransmission; will wait 1 seconds for response 010 "vpn.example.com" #9: STATE_MAIN_I1: retransmission; will wait 2 seconds for response ...
Copy to Clipboard Copied!
IPsec の設定に使用される IKE プロトコルは暗号化されているため、tcpdump
ツールを使用して、トラブルシューティングできるサブセットは一部のみです。ファイアウォールが IKE パケットまたは IPsec パケットをドロップしている場合は、tcpdump
ユーティリティーを使用して原因を見つけることができます。ただし、tcpdump
は IPsec VPN 接続に関する他の問題を診断できません。
eth0
インターフェイスで VPN および暗号化データすべてのネゴシエーションを取得するには、次のコマンドを実行します。tcpdump -i eth0 -n -n esp or udp port 500 or udp port 4500 or tcp port 4500
# tcpdump -i eth0 -n -n esp or udp port 500 or udp port 4500 or tcp port 4500
Copy to Clipboard Copied!
アルゴリズム、プロトコル、およびポリシーが一致しない場合
VPN 接続では、エンドポイントが IKE アルゴリズム、IPsec アルゴリズム、および IP アドレス範囲に一致する必要があります。不一致が発生した場合には接続は失敗します。以下の方法のいずれかを使用して不一致を特定した場合は、アルゴリズム、プロトコル、またはポリシーを調整して修正します。
リモートエンドポイントが IKE/IPsec を実行していない場合は、そのパケットを示す ICMP パケットが表示されます。以下に例を示します。
ipsec up vpn.example.com
# ipsec up vpn.example.com ... 000 "vpn.example.com"[1] 192.0.2.2 #16: ERROR: asynchronous network error report on wlp2s0 (192.0.2.2:500), complainant 198.51.100.1: Connection refused [errno 111, origin ICMP type 3 code 3 (not authenticated)] ...
Copy to Clipboard Copied! IKE アルゴリズムが一致しない例:
ipsec up vpn.example.com
# ipsec up vpn.example.com ... 003 "vpn.example.com"[1] 193.110.157.148 #3: dropping unexpected IKE_SA_INIT message containing NO_PROPOSAL_CHOSEN notification; message payloads: N; missing payloads: SA,KE,Ni
Copy to Clipboard Copied! IPsec アルゴリズムが一致しない例:
ipsec up vpn.example.com
# ipsec up vpn.example.com ... 182 "vpn.example.com"[1] 193.110.157.148 #5: STATE_PARENT_I2: sent v2I2, expected v2R2 {auth=IKEv2 cipher=AES_GCM_16_256 integ=n/a prf=HMAC_SHA2_256 group=MODP2048} 002 "vpn.example.com"[1] 193.110.157.148 #6: IKE_AUTH response contained the error notification NO_PROPOSAL_CHOSEN
Copy to Clipboard Copied! また、IKE バージョンが一致しないと、リモートエンドポイントが応答なしの状態でリクエストをドロップする可能性がありました。これは、すべての IKE パケットをドロップするファイアウォールと同じです。
IKEv2 (Traffic Selectors - TS) の IP アドレス範囲が一致しない例:
ipsec up vpn.example.com
# ipsec up vpn.example.com ... 1v2 "vpn.example.com" #1: STATE_PARENT_I2: sent v2I2, expected v2R2 {auth=IKEv2 cipher=AES_GCM_16_256 integ=n/a prf=HMAC_SHA2_512 group=MODP2048} 002 "vpn.example.com" #2: IKE_AUTH response contained the error notification TS_UNACCEPTABLE
Copy to Clipboard Copied! IKEv1 の IP アドレス範囲で一致しない例:
ipsec up vpn.example.com
# ipsec up vpn.example.com ... 031 "vpn.example.com" #2: STATE_QUICK_I1: 60 second timeout exceeded after 0 retransmits. No acceptable response to our first Quick Mode message: perhaps peer likes no proposal
Copy to Clipboard Copied! IKEv1 で PreSharedKeys (PSK) を使用する場合には、どちらでも同じ PSK に配置されなければ、IKE メッセージ全体の読み込みができなくなります。
ipsec up vpn.example.com
# ipsec up vpn.example.com ... 003 "vpn.example.com" #1: received Hash Payload does not match computed value 223 "vpn.example.com" #1: sending notification INVALID_HASH_INFORMATION to 192.0.2.23:500
Copy to Clipboard Copied! IKEv2 では、mismatched-PSK エラーが原因で AUTHENTICATION_FAILED メッセージが表示されます。
ipsec up vpn.example.com
# ipsec up vpn.example.com ... 002 "vpn.example.com" #1: IKE SA authentication request rejected by peer: AUTHENTICATION_FAILED
Copy to Clipboard Copied!
最大伝送単位 (MTU)
ファイアウォールが IKE または IPSec パケットをブロックする以外で、ネットワークの問題の原因として、暗号化パケットのパケットサイズの増加が最も一般的です。ネットワークハードウェアは、最大伝送単位 (MTU) を超えるパケットを 1500 バイトなどのサイズに断片化します。多くの場合、断片化されたパケットは失われ、パケットの再アセンブルに失敗します。これにより、小さいサイズのパケットを使用する ping テスト時には機能し、他のトラフィックでは失敗するなど、断続的な問題が発生します。このような場合に、SSH セッションを確立できますが、リモートホストに 'ls -al /usr' コマンドに入力した場合など、すぐにターミナルがフリーズします。
この問題を回避するには、トンネル設定ファイルに mtu=1400
のオプションを追加して、MTU サイズを縮小します。
または、TCP 接続の場合は、MSS 値を変更する iptables ルールを有効にします。
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
各シナリオで上記のコマンドを使用して問題が解決されない場合は、set-mss
パラメーターで直接サイズを指定します。
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1380
# iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1380
ネットワークアドレス変換 (NAT)
IPsec ホストが NAT ルーターとしても機能すると、誤ってパケットが再マッピングされる可能性があります。以下の設定例はこの問題を示しています。
conn myvpn left=172.16.0.1 leftsubnet=10.0.2.0/24 right=172.16.0.2 rightsubnet=192.168.0.0/16 …
conn myvpn
left=172.16.0.1
leftsubnet=10.0.2.0/24
right=172.16.0.2
rightsubnet=192.168.0.0/16
…
アドレスが 172.16.0.1 のシステムには NAT ルールが 1 つあります。
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
アドレスが 10.0.2.33 のシステムがパケットを 192.168.0.1 に送信する場合に、ルーターは IPsec 暗号化を適用する前にソースを 10.0.2.33 から 172.16.0.1 に変換します。
次に、ソースアドレスが 10.0.2.33 のパケットは conn myvpn
設定と一致しなくなるので、IPsec ではこのパケットが暗号化されません。
この問題を解決するには、ルーターのターゲット IPsec サブネット範囲の NAT を除外するルールを挿入します。以下に例を示します。
iptables -t nat -I POSTROUTING -s 10.0.2.0/24 -d 192.168.0.0/16 -j RETURN
iptables -t nat -I POSTROUTING -s 10.0.2.0/24 -d 192.168.0.0/16 -j RETURN
カーネル IPsec サブシステムのバグ
たとえば、バグが原因で IKE ユーザー空間と IPsec カーネルの同期が解除される場合など、カーネル IPsec サブシステムに問題が発生する可能性があります。このような問題がないかを確認するには、以下を実行します。
cat /proc/net/xfrm_stat XfrmInError 0 XfrmInBufferError 0 ...
$ cat /proc/net/xfrm_stat
XfrmInError 0
XfrmInBufferError 0
...
上記のコマンドの出力でゼロ以外の値が表示されると、問題があることを示しています。この問題が発生した場合は、新しい サポートケース を作成し、1 つ前のコマンドの出力と対応する IKE ログを添付してください。
Libreswan のログ
デフォルトでは、Libreswan は syslog
プロトコルを使用してログに記録します。journalctl
コマンドを使用して、IPsec に関連するログエントリーを検索できます。ログへの対応するエントリーは pluto
IKE デーモンにより送信されるため、以下のように、キーワード "pluto" を検索します。
journalctl -b | grep pluto
$ journalctl -b | grep pluto
ipsec
サービスのライブログを表示するには、次のコマンドを実行します。
journalctl -f -u ipsec
$ journalctl -f -u ipsec
ロギングのデフォルトレベルで設定問題が解決しない場合は、/etc/ipsec.conf
ファイルの config setup
セクションに plutodebug=all
オプションを追加してデバッグログを有効にします。
デバッグロギングは多くのエントリーを生成し、journald
サービスまたは syslogd
サービスレートのいずれかが syslog
メッセージを制限する可能性があることに注意してください。完全なログを取得するには、ロギングをファイルにリダイレクトします。/etc/ipsec.conf
を編集し、config setup
セクションに logfile=/var/log/pluto.log
を追加します。
6.14. control-center による VPN 接続の確立
グラフィカルインターフェイスで Red Hat Enterprise Linux を使用する場合は、この VPN 接続を GNOME control-center
で設定できます。
前提条件
-
NetworkManager-libreswan-gnome
パッケージがインストールされている。
手順
-
Super キーを押して
Settings
と入力し、Enter を押してcontrol-center
アプリケーションを開きます。 -
左側の
Network
エントリーを選択します。 - + アイコンをクリックします。
-
VPN
を選択します。 Identity
メニューエントリーを選択して、基本的な設定オプションを表示します。全般
Gateway
- リモート VPN ゲートウェイの名前またはIP
アドレスです。認証
Type
-
IKEv2 (証明書)
- クライアントは、証明書により認証されます。これはより安全です (デフォルト)。 IKEv1(XAUTH)
: クライアントは、ユーザー名とパスワード、または事前共有キー (PSK) で認証されます。Advanced
セクションでは、以下の設定が可能です。警告gnome-control-center
アプリケーションを使用して IPsec ベースの VPN 接続を設定すると、Advanced
ダイアログには設定が表示されますが、変更することはできません。したがって、詳細な IPsec オプションを変更できません。nm-connection-editor
ツールまたはnmcli
ツールを使用して、詳細なプロパティーの設定を実行します。識別
Domain
- 必要な場合は、ドメイン名を入力します。セキュリティー
-
Phase1 Algorithms
- Libreswan パラメーターike
に対応します。暗号化チャネルの認証およびセットアップに使用するアルゴリズムを入力します。 Phase2 Algorithms
- Libreswan パラメーターesp
に対応します。IPsec
ネゴシエーションに使用するアルゴリズムを入力します。Disable PFS
フィールドで PFS (Perfect Forward Secrecy) を無効にし、PFS に対応していない古いサーバーとの互換性があることを確認します。-
Phase1 Lifetime
- Libreswan パラメーターikelifetime
に対応します。このパラメーターは、トラフィックの暗号化に使用される鍵がどのぐらい有効であるかどうかを示します。 Phase2 Lifetime
- Libreswan パラメーターsalifetime
に対応します。このパラメーターは、接続の特定インスタンスが期限切れになるまでの持続時間を指定します。セキュリティー上の理由から、暗号化キーは定期的に変更する必要があります。
Remote network
- Libreswan パラメーターrightsubnet
に対応します。このパラメーターは、VPN から到達できる宛先のプライベートリモートネットワークです。絞り込むことのできる
narrowing
フィールドを確認します。これは IKEv2 ネゴシエーションの場合にのみ有効であることに注意してください。-
Enable fragmentation
- Libreswan パラメーターのfragmentation
に対応します。IKE 断片化を許可するかどうかを指定します。有効な値は、yes
(デフォルト) またはno
です。 -
Enable Mobike
- Libreswan パラメーターmobike
に対応します。最初から接続を再起動しなくても、接続がエンドポイントを移行することを Mobility and Multihoming Protocol (MOBIKE, RFC 4555) が許可するかどうかを設定します。これは、有線、無線、またはモバイルデータの接続の切り替えを行うモバイルデバイスで使用されます。値は、no
(デフォルト) またはyes
です。
-
IPv4 Method
-
Automatic (DHCP)
- 接続しているネットワークが動的IP
アドレスの割り当てにDHCP
サーバーを使用する場合は、このオプションを選択します。 -
Link-Local Only
- 接続しているネットワークにDHCP
サーバーがなく、IP
アドレスを手動で割り当てない場合は、このオプションを選択します。接頭辞169.254/16
付きのランダムなアドレスが、RFC 3927 に従って割り当てられます。 -
Manual
-IP
アドレスを手動で割り当てたい場合は、このオプションを選択します。 Disable
- この接続ではIPv4
は無効化されています。DNS
DNS
セクションでは、Automatic
がON
になっているときに、これをOFF
に切り替えて、使用する DNS サーバーの IP アドレスを入力します。IP アドレスはコンマで区切ります。Routes
Routes
セクションでは、Automatic
がON
になっている場合は、DHCP からのルートが使用されますが、他の静的ルートを追加することもできることに注意してください。OFF
の場合は、静的ルートだけが使用されます。-
Address
- リモートネットワークまたはホストのIP
アドレスを入力します。 -
Netmask
- 上記で入力したIP
アドレスのネットマスクまた接頭辞長。 -
Gateway
- 上記で入力したリモートネットワーク、またはホストにつながるゲートウェイのIP
アドレス。 Metric
- このルートに与える優先値であるネットワークコスト。数値が低い方が優先されます。Use this connection only for resources on its network (この接続はネットワーク上のリソースのためだけに使用)
このチェックボックスを選択すると、この接続はデフォルトルートになりません。このオプションを選択すると、この接続で自動的に学習したルートを使用することが明確なトラフィックか、手動で入力したトラフィックのみがこの接続を経由します。
-
VPN
接続のIPv6
設定を設定するには、 メニューエントリーを選択します。IPv6 Method
-
Automatic
-IPv6
ステートレスアドレス自動設定 (SLAAC) を使用して、ハードウェアのアドレスとルーター通知 (RA) に基づくステートレスの自動設定を作成するには、このオプションを選択します。 -
Automatic, DHCP only
- RA を使用しないで、DHCPv6
からの情報を直接要求してステートフルな設定を作成する場合は、このオプションを選択します。 -
Link-Local Only
- 接続しているネットワークにDHCP
サーバーがなく、IP
アドレスを手動で割り当てない場合は、このオプションを選択します。接頭辞FE80::0
付きのランダムなアドレスが、RFC 4862 に従って割り当てられます。 -
Manual
-IP
アドレスを手動で割り当てたい場合は、このオプションを選択します。 Disable
- この接続ではIPv6
は無効化されています。DNS
、Routes
、Use this connection only for resources on its network
が、一般的なIPv4
設定となることに注意してください。
-
-
VPN
接続の編集が終了したら、 ボタンをクリックして設定をカスタマイズするか、 ボタンをクリックして、既存の接続に保存します。 -
プロファイルを
ON
に切り替え、VPN
接続をアクティブにします。 - DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策については、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
6.15. nmstatectl を使用して IPsec ベースの VPN 接続を設定する
IPsec (Internet Protocol Security) は、VPN の実装用に Libreswan
によって提供されるセキュリティープロトコルスイートです。IPsec には、接続の確立時に認証を開始し、データ転送中にキーを管理するプロトコルが組み込まれています。アプリケーションがネットワークにデプロイされていて、IP プロトコルを使用して通信する場合、IPsec はデータ通信を保護できます。
VPN 接続を認証するための IPsec ベースの設定を管理するには、nmstatectl
ユーティリティーを使用できます。このユーティリティーは、ホストネットワーク管理用の宣言型 API へのコマンドラインアクセスを提供します。host-to-subnet
および host-to-host
通信モードの認証タイプを以下に示します。
- ホスト/サブネット間 PKI 認証
- ホスト/サブネット間 RSA 認証
- ホスト/サブネット間 PSK 認証
- ホスト間トンネルモード認証
- ホスト間トランスポートモード認証
6.15.1. nmstatectl を使用して PKI 認証とトンネルモードによるホスト/サブネット間 IPSec VPN を設定する
信頼できるエンティティー認証に基づく暗号化を IPsec で使用する必要がある場合、公開鍵基盤 (PKI) により、2 つのホスト間で暗号化キーを使用することで、セキュアな通信が実現します。通信する両方のホストが秘密鍵と公開鍵を生成します。各ホストは信頼できるエンティティーの認証局 (CA) と公開鍵を共有することで秘密鍵を維持します。CA は信頼性を検証した後、デジタル証明書を生成します。暗号化と復号を行う場合、ホストは暗号化に秘密鍵を使用し、復号化に公開鍵を使用します。
ネットワーク管理用の宣言型 API である Nmstate を使用すると、PKI 認証ベースの IPsec 接続を設定できます。設定すると、Nmstate API によって結果と設定ファイルが一致することが確認されます。何らかの障害が発生した場合、nmstate
は自動的に変更をロールバックし、システムが正しくない状態になるのを回避します。
host-to-subnet
設定で暗号化された通信を確立するために、リモート IPsec エンドがパラメーター dhcp: true
を使用してホストに別の IP を提供します。nmstate で IPsec
のシステムを定義する場合、left
という名前を持つシステムがローカルホストであり、right
という名前を持つシステムがリモートホストです。
NetworkManager-libreswan
プラグインの設計により、一方では nmstatectl
を使用できますが、もう一方では IPsec を手動で設定する必要があることに注意してください。
前提条件
- パスワードを使用して、証明書と暗号化キーを保存する PKCS #12 ファイルを生成した。
手順
必要なパッケージをインストールします。
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswan
Copy to Clipboard Copied! NetworkManager サービスを再起動します。
systemctl restart NetworkManager
# systemctl restart NetworkManager
Copy to Clipboard Copied! Libreswan
がすでにインストールされている場合は、古いデータベースファイルを削除して再作成します。systemctl stop ipsec rm /var/lib/ipsec/nss/*db ipsec initnss
# systemctl stop ipsec # rm /var/lib/ipsec/nss/*db # ipsec initnss
Copy to Clipboard Copied! ipsec
サービスを有効にして起動します。systemctl enable --now ipsec
# systemctl enable --now ipsec
Copy to Clipboard Copied! PKCS#12 ファイルをインポートします。
ipsec import node-example.p12
# ipsec import node-example.p12
Copy to Clipboard Copied! PKCS#12 ファイルをインポートするときは、ファイルの作成に使用したパスワードを入力します。
次の内容を含む YAML ファイル (例:
~/create-pki-authentication.yml
) を作成します。--- interfaces: - name: 'example_ipsec_conn1' type: ipsec ipv4: enabled: true dhcp: true libreswan: ipsec-interface: 'yes' left: '192.0.2.150' leftid: '%fromcert' leftcert: 'local-host.example.com' right: '192.0.2.250' rightid: '%fromcert' ikev2: 'insist' ikelifetime: '24h' salifetime: '24h'
--- interfaces: - name: 'example_ipsec_conn1'
1 type: ipsec ipv4: enabled: true dhcp: true libreswan: ipsec-interface: 'yes'
2 left: '192.0.2.150'
3 leftid: '%fromcert'
4 leftcert: 'local-host.example.com'
5 right: '192.0.2.250'
6 rightid: '%fromcert'
7 ikev2: 'insist'
8 ikelifetime: '24h'
9 salifetime: '24h'
10 Copy to Clipboard Copied! YAML ファイルで次の設定を定義します。
- 1
- IPsec 接続名
- 2
- 値が
yes
の場合、libreswan
が IPsecxfrm
仮想インターフェイスipsec<number>
を作成し、利用可能な次の番号を自動的に検出します。 - 3
- ローカルホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
- 4
%fromcert
値は、ローカルホストで、ロードされた証明書から取得された識別名 (DN) に ID を設定します。- 5
- ローカルホストの公開鍵の識別名 (DN)
- 6
- リモートホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
- 7
%fromcert
値は、リモートホストで、ロードされた証明書から取得された識別名 (DN) に ID を設定します。- 8
insist
値は、Internet Key Exchange (IKEv2) プロトコルのみを受け入れて受信します。- 9
- IKE プロトコルの存続時間
- 10
- IPsec セキュリティーアソシエーション (SA) の存続期間
設定をシステムに適用します。
nmstatectl apply ~/create-pki-authentication.yml
# nmstatectl apply ~/create-pki-authentication.yml
Copy to Clipboard Copied! - DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策については、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
検証
IPsec のステータスを確認します。
ip xfrm state
# ip xfrm state
Copy to Clipboard Copied! IPsec のポリシーを確認します。
ip xfrm policy
# ip xfrm policy
Copy to Clipboard Copied!
6.15.2. nmstatectl を使用して RSA 認証とトンネルモードによるホスト/サブネット間 IPSec VPN を設定する
IPsec で非対称暗号化ベースのキー認証を使用する必要がある場合、RSA アルゴリズムにより、2 つのホスト間の暗号化および復号に秘密鍵と公開鍵のいずれかを使用することで、セキュアな通信が実現します。この方法では、暗号化に秘密鍵を使用し、復号に公開鍵を使用します。
ネットワーク管理用の宣言型 API である Nmstate を使用すると、RSA ベースの IPsec 認証を設定できます。設定すると、Nmstate API によって結果と設定ファイルが一致することが確認されます。何らかの障害が発生した場合、nmstate
は自動的に変更をロールバックし、システムが正しくない状態になるのを回避します。
host-to-subnet
設定で暗号化された通信を確立するために、リモート IPsec エンドがパラメーター dhcp: true
を使用してホストに別の IP を提供します。nmstate で IPsec
のシステムを定義する場合、left
という名前を持つシステムがローカルホストであり、right
という名前を持つシステムがリモートホストです。
NetworkManager-libreswan
プラグインの設計により、一方では nmstatectl
を使用できますが、もう一方では IPsec を手動で設定する必要があることに注意してください。
手順
必要なパッケージをインストールします。
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswan
Copy to Clipboard Copied! NetworkManager サービスを再起動します。
systemctl restart NetworkManager
# systemctl restart NetworkManager
Copy to Clipboard Copied! Libreswan
がすでにインストールされている場合は、古いデータベースファイルを削除して再作成します。systemctl stop ipsec rm /var/lib/ipsec/nss/*db ipsec initnss
# systemctl stop ipsec # rm /var/lib/ipsec/nss/*db # ipsec initnss
Copy to Clipboard Copied! 各ホストで RSA 鍵ペアを生成します。
ipsec newhostkey
# ipsec newhostkey
Copy to Clipboard Copied! 前のステップで、生成された鍵
ckaid
が返されます。そのckaid
を、left 側で次のコマンドで使用します。次に例を示します。ipsec showhostkey --left --ckaid <0sAwEAAesFfVZqFzRA9F>
# ipsec showhostkey --left --ckaid <0sAwEAAesFfVZqFzRA9F>
Copy to Clipboard Copied! 上のコマンドの出力により、設定に必要な
leftrsasigkey=
行が生成されます。2 番目のホスト (right 側) でも同じ操作を実行します。ipsec showhostkey --right --ckaid <0sAwEAAesFfVZqFzRA9E>
# ipsec showhostkey --right --ckaid <0sAwEAAesFfVZqFzRA9E>
Copy to Clipboard Copied! 起動時に
ipsec
サービスを自動的に起動するように有効にします。systemctl enable --now ipsec
# systemctl enable --now ipsec
Copy to Clipboard Copied! 次の内容を含む YAML ファイル (例:
~/create-rsa-authentication.yml
) を作成します。--- interfaces: - name: 'example_ipsec_conn1' type: ipsec ipv4: enabled: true dhcp: true libreswan: ipsec-interface: '99' leftrsasigkey: '0sAwEAAesFfVZqFzRA9F' left: '192.0.2.150' leftid: 'local-host-rsa.example.com' right: '192.0.2.250' rightrsasigkey: '0sAwEAAesFfVZqFzRA9E' rightid: 'remote-host-rsa.example.com' ikev2: 'insist'
--- interfaces: - name: 'example_ipsec_conn1'
1 type: ipsec
2 ipv4: enabled: true dhcp: true libreswan: ipsec-interface: '99'
3 leftrsasigkey: '0sAwEAAesFfVZqFzRA9F'
4 left: '192.0.2.150'
5 leftid: 'local-host-rsa.example.com'
6 right: '192.0.2.250'
7 rightrsasigkey: '0sAwEAAesFfVZqFzRA9E'
8 rightid: 'remote-host-rsa.example.com'
9 ikev2: 'insist'
10 Copy to Clipboard Copied! YAML ファイルで次の設定を定義します。
- 1
- IPsec 接続名
- 2
- インターフェイス名
- 3
- 値が
99
の場合、libreswan
が IPsecxfrm
仮想インターフェイスipsec<number>
を作成し、利用可能な次の番号を自動的に検出します。 - 4
- ローカルホストの RSA 公開鍵
- 5
- ローカルホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
- 6
- ローカルホストの識別名 (DN)
- 7
- リモートホストの RSA 公開鍵
- 8
- リモートホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
- 9
- リモートホストの識別名 (DN)
- 10
insist
値は、Internet Key Exchange (IKEv2) プロトコルのみを受け入れて受信します。
設定をシステムに適用します。
nmstatectl apply ~/create-rsa-authentication.yml
# nmstatectl apply ~/create-rsa-authentication.yml
Copy to Clipboard Copied! - DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策については、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
検証
ネットワークインターフェイスの IP 設定を表示します。
ip addr show <device_name>
# ip addr show <device_name>
Copy to Clipboard Copied! IPsec のステータスを確認します。
ip xfrm state
# ip xfrm state
Copy to Clipboard Copied! IPsec のポリシーを確認します。
ip xfrm policy
# ip xfrm policy
Copy to Clipboard Copied!
6.15.3. nmstatectl を使用して PSK 認証とトンネルモードによるホスト/サブネット間 IPSec VPN を設定する
IPsec で相互認証に基づく暗号化を使用する必要がある場合、事前共有鍵 (PSK) 方式により、2 つのホスト間で秘密鍵を使用することで、セキュアな通信が実現します。ファイルに秘密鍵が保存され、その秘密鍵でトンネルを通過するデータが暗号化されます。
ネットワーク管理用の宣言型 API である Nmstate を使用すると、PSK ベースの IPsec 認証を設定できます。設定すると、Nmstate API によって結果と設定ファイルが一致することが確認されます。何らかの障害が発生した場合、nmstate
は自動的に変更をロールバックし、システムが正しくない状態になるのを回避します。
host-to-subnet
設定で暗号化された通信を確立するために、リモート IPsec エンドがパラメーター dhcp: true
を使用してホストに別の IP を提供します。nmstate で IPsec
のシステムを定義する場合、left
という名前を持つシステムがローカルホストであり、right
という名前を持つシステムがリモートホストです。
NetworkManager-libreswan
プラグインの設計により、一方では nmstatectl
を使用できますが、もう一方では IPsec を手動で設定する必要があることに注意してください。
この方式は、認証と暗号化に静的文字列を使用するため、テスト/開発目的でのみ使用してください。
手順
必要なパッケージをインストールします。
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswan
Copy to Clipboard Copied! NetworkManager サービスを再起動します。
systemctl restart NetworkManager
# systemctl restart NetworkManager
Copy to Clipboard Copied! Libreswan
がすでにインストールされている場合は、古いデータベースファイルを削除して再作成します。systemctl stop ipsec rm /var/lib/ipsec/nss/*db ipsec initnss
# systemctl stop ipsec # rm /var/lib/ipsec/nss/*db # ipsec initnss
Copy to Clipboard Copied! 起動時に
ipsec
サービスを自動的に起動するように有効にします。systemctl enable --now ipsec
# systemctl enable --now ipsec
Copy to Clipboard Copied! 次の内容を含む YAML ファイル (例:
~/create-pks-authentication.yml
) を作成します。--- interfaces: - name: 'example_ipsec_conn1' type: ipsec ipv4: enabled: true dhcp: true libreswan: ipsec-interface: 'no' right: '192.0.2.150' rightid: 'remote-host.example.org' left: '192.0.2.250' leftid: 'local-host.example.org' psk: "example_password" ikev2: 'insist'
--- interfaces: - name: 'example_ipsec_conn1'
1 type: ipsec ipv4: enabled: true dhcp: true libreswan: ipsec-interface: 'no'
2 right: '192.0.2.150'
3 rightid: 'remote-host.example.org'
4 left: '192.0.2.250'
5 leftid: 'local-host.example.org'
6 psk: "example_password" ikev2: 'insist'
7 Copy to Clipboard Copied! YAML ファイルで次の設定を定義します。
設定をシステムに適用します。
nmstatectl apply ~/create-pks-authentication.yml
# nmstatectl apply ~/create-pks-authentication.yml
Copy to Clipboard Copied! - DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策については、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
検証
ネットワークインターフェイスの IP 設定を表示します。
ip addr show <device_name>
# ip addr show <device_name>
Copy to Clipboard Copied! IPsec のステータスを確認します。
ip xfrm state
# ip xfrm state
Copy to Clipboard Copied! IPsec のポリシーを確認します。
ip xfrm policy
# ip xfrm policy
Copy to Clipboard Copied!
6.15.4. nmstatectl を使用して PKI 認証とトンネルモードによるホスト間 IPSec VPN を設定する
IPsec (Internet Protocol Security) は、ネットワークおよびデバイス内の IP 通信を認証および暗号化するためのセキュリティープロトコルスイートです。Libreswan
ソフトウェアが VPN 用の IPsec 実装を提供します。
トンネルモードでは、通信の送信元および宛先 IP アドレスが IPsec トンネル内で暗号化されます。外部のネットワークスニファーが取得できるのは、left の IP と right の IP だけです。一般に、トンネルモードでは、host-to-host
、host-to-host
、および subnet-to-subnet
がサポートされます。このモードでは、新しい IP パケットが既存のパケットをそのペイロードとヘッダーとともにカプセル化します。このモードのカプセル化により、セキュアでないネットワーク上の IP データ、送信元ヘッダー、および宛先ヘッダーが保護されます。このモードは、subnet-to-subnet
、リモートアクセス接続、および信頼できないネットワーク (オープンなパブリック Wi-Fi ネットワークなど) でデータを転送する場合に役立ちます。デフォルトでは、IPsec はトンネルモードで 2 つのサイト間にセキュアなチャネルを確立します。後述の設定を使用すると、host-to-host
アーキテクチャーとして VPN 接続を確立できます。
ネットワーク管理用の宣言型 API である Nmstate を使用すると、IPsec VPN 接続を設定できます。設定すると、Nmstate API によって結果と設定ファイルが一致することが確認されます。何らかの障害が発生した場合、nmstate
は自動的に変更をロールバックし、システムが正しくない状態になるのを回避します。
host-to-host
の設定では、leftmodecfgclient: no
(値として no
) を設定して、サーバーからネットワーク設定を受信できないようにする必要があります。nmstate で IPsec
のシステムを定義する場合、left
という名前を持つシステムがローカルホストであり、right
という名前を持つシステムがリモートホストです。
NetworkManager-libreswan
プラグインの設計により、一方では nmstatectl
を使用できますが、もう一方では IPsec を手動で設定する必要があることに注意してください。
前提条件
- パスワードを使用して、証明書と暗号化キーを保存する PKCS #12 ファイルを生成した。
手順
必要なパッケージをインストールします。
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswan
Copy to Clipboard Copied! NetworkManager サービスを再起動します。
systemctl restart NetworkManager
# systemctl restart NetworkManager
Copy to Clipboard Copied! Libreswan
がすでにインストールされている場合は、古いデータベースファイルを削除して再作成します。systemctl stop ipsec rm /var/lib/ipsec/nss/*db ipsec initnss
# systemctl stop ipsec # rm /var/lib/ipsec/nss/*db # ipsec initnss
Copy to Clipboard Copied! PKCS#12 ファイルをインポートします。
ipsec import node-example.p12
# ipsec import node-example.p12
Copy to Clipboard Copied! PKCS#12 ファイルをインポートするときは、ファイルの生成に使用したパスワードを入力します。
ipsec
サービスを有効にして起動します。systemctl enable --now ipsec
# systemctl enable --now ipsec
Copy to Clipboard Copied! 次の内容を含む YAML ファイル (例:
~/create-p2p-vpn-authentication.yml
) を作成します。--- interfaces: - name: 'example_ipsec_conn1' type: ipsec libreswan: left: '192.0.2.150' leftid: 'local-host.example.com' leftcert: 'local-host.example.com' leftmodecfgclient: no right: '192.0.2.250' rightid: 'remote-host.example.com' rightsubnet: '192.0.2.150/32' ikev2: 'insist'
--- interfaces: - name: 'example_ipsec_conn1'
1 type: ipsec libreswan: left: '192.0.2.150'
2 leftid: 'local-host.example.com'
3 leftcert: 'local-host.example.com'
4 leftmodecfgclient: no
5 right: '192.0.2.250'
6 rightid: 'remote-host.example.com'
7 rightsubnet: '192.0.2.150/32'
8 ikev2: 'insist'
9 Copy to Clipboard Copied! YAML ファイルで次の設定を定義します。
設定をシステムに適用します。
nmstatectl apply ~/create-p2p-vpn-authentication.yml
# nmstatectl apply ~/create-p2p-vpn-authentication.yml
Copy to Clipboard Copied! - DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策については、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
検証
作成された P2P ポリシーを表示します。
ip xfrm policy
# ip xfrm policy
Copy to Clipboard Copied! IPsec のステータスを確認します。
ip xfrm state
# ip xfrm state
Copy to Clipboard Copied!
6.15.5. nmstatectl を使用して PKI 認証とトランスポートモードを備えたホスト間 IPsec VPN を設定する
IPsec (Internet Protocol Security) は、ネットワークおよびデバイス内の IP 通信を認証および暗号化するためのセキュリティープロトコルスイートです。Libreswan
ユーティリティーが VPN 用の IPsec ベースの実装を提供します。
トランスポートモードでは、IP パケットのペイロードに対してのみ暗号化が機能します。また、元の IP ヘッダーがそのまま維持され、新しい IPsec ヘッダーが IP パケットに追加されます。トランスポートモードでは、通信の送信元 IP と宛先 IP は暗号化されず、外部 IP ヘッダーにコピーされます。したがって、ネットワーク上の IP データのみが暗号化によって保護されます。このモードは、ネットワークの host-to-host
接続でデータを転送する場合に便利です。このモードは、20 バイト (IP ヘッダー) のオーバーヘッドを節約するために、GRE トンネルと一緒に使用されることがよくあります。デフォルトでは、IPsec
ユーティリティーはトンネルモードを使用します。トランスポートモードを使用するには、host-to-host
接続データ転送に type: transport
を設定します。
ネットワーク管理用の宣言型 API である Nmstate を使用すると、IPsec VPN 接続を設定できます。設定すると、Nmstate API によって結果と設定ファイルが一致することが確認されます。何らかの障害が発生した場合、nmstate
は自動的に変更をロールバックし、システムが正しくない状態になるのを回避します。デフォルトの tunnel
モードをオーバーライドするには、transport
モードを指定します。
nmstate で IPsec
のシステムを定義する場合、left
という名前を持つシステムがローカルホストであり、right
という名前を持つシステムがリモートホストです。
NetworkManager-libreswan
プラグインの設計により、一方では nmstatectl
を使用できますが、もう一方では IPsec を手動で設定する必要があることに注意してください。
前提条件
- パスワードを使用して、証明書と暗号化キーを保存する PKCS #12 ファイルを生成した。
手順
必要なパッケージをインストールします。
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswan
Copy to Clipboard Copied! NetworkManager サービスを再起動します。
systemctl restart NetworkManager
# systemctl restart NetworkManager
Copy to Clipboard Copied! Libreswan
がすでにインストールされている場合は、古いデータベースファイルを削除して再作成します。systemctl stop ipsec rm /var/lib/ipsec/nss/*db ipsec initnss
# systemctl stop ipsec # rm /var/lib/ipsec/nss/*db # ipsec initnss
Copy to Clipboard Copied! PKCS#12 ファイルをインポートします。
ipsec import node-example.p12
# ipsec import node-example.p12
Copy to Clipboard Copied! PKCS#12 ファイルをインポートするときは、ファイルの作成に使用したパスワードを入力します。
ipsec
サービスを有効にして起動します。systemctl enable --now ipsec
# systemctl enable --now ipsec
Copy to Clipboard Copied! 次の内容を含む YAML ファイル (例:
~/create-p2p-transport-authentication.yml
) を作成します。--- interfaces: - name: 'example_ipsec_conn1' type: ipsec libreswan: type: 'transport' ipsec-interface: '99' left: '192.0.2.150' leftid: '%fromcert' leftcert: 'local-host.example.org' right: '192.0.2.250' prefix-length: '32' rightid: '%fromcert' ikev2: 'insist' ikelifetime: '24h' salifetime: '24h'
--- interfaces: - name: 'example_ipsec_conn1'
1 type: ipsec libreswan: type: 'transport'
2 ipsec-interface: '99'
3 left: '192.0.2.150'
4 leftid: '%fromcert'
5 leftcert: 'local-host.example.org'
6 right: '192.0.2.250'
7 prefix-length: '32'
8 rightid: '%fromcert'
9 ikev2: 'insist'
10 ikelifetime: '24h'
11 salifetime: '24h'
12 Copy to Clipboard Copied! YAML ファイルで次の設定を定義します。
- 1
- IPsec 接続名
- 2
- IPsec モード
- 3
- 値が
99
の場合、libreswan
が IPsecxfrm
仮想インターフェイスipsec<number>
を作成し、利用可能な次の番号を自動的に検出します。 - 4
- ローカルホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
- 5
%fromcert
値は、ローカルホストで、ロードされた証明書から取得された識別名 (DN) に ID を設定します。- 6
- ローカルホストの公開鍵の識別名 (DN)
- 7
- リモートホストのパブリックネットワークインターフェイスの静的 IPv4 アドレス
- 8
- ローカルホストの静的 IPv4 アドレスのサブネットマスク
- 9
%fromcert
値は、リモートホストで、ロードされた証明書から取得された識別名 (DN) に ID を設定します。- 10
- Internet Key Exchange (IKEv2) プロトコルのみを受け入れて受信するための値
- 11
- IKE プロトコルの存続時間
- 12
- IPsec セキュリティーアソシエーション (SA) の存続期間
設定をシステムに適用します。
nmstatectl apply ~/create-p2p-transport-authentication.yml
# nmstatectl apply ~/create-p2p-transport-authentication.yml
Copy to Clipboard Copied! - DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策については、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
検証
IPsec のステータスを確認します。
ip xfrm state
# ip xfrm state
Copy to Clipboard Copied! IPsec のポリシーを確認します。
ip xfrm policy
# ip xfrm policy
Copy to Clipboard Copied!
6.16. 接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる
DHCP サーバーとステートレスアドレス自動設定 (SLAAC) はどちらも、クライアントのルーティングテーブルにルートを追加できます。悪意のある DHCP サーバーがこの機能を使用すると、たとえば、VPN 接続を使用するホストに対して、VPN トンネルではなく物理インターフェイス経由でトラフィックをリダイレクトするように強制できます。この脆弱性は TunnelVision とも呼ばれ、CVE-2024-3661 の脆弱性に関する記事で説明されています。
この脆弱性を軽減するために、VPN 接続を専用のルーティングテーブルに割り当てることができます。これを行うと、DHCP 設定または SLAAC が、VPN トンネル宛のネットワークパケットに関するルーティング決定を操作できなくなります。
次の条件が 1 つ以上環境に当てはまる場合は、この手順を実行してください。
- 少なくとも 1 つのネットワークインターフェイスが DHCP または SLAAC を使用している。
- ネットワークで、不正な DHCP サーバーを防ぐ DHCP スヌーピングなどのメカニズムが使用されていない。
トラフィック全体を VPN 経由でルーティングすると、ホストがローカルネットワークリソースにアクセスできなくなります。
手順
- 使用するルーティングテーブルを決定します。次の手順ではテーブル 75 を使用します。デフォルトでは、RHEL はテーブル 1 - 254 を使用しないため、それらのテーブルのうちどれでも使用できます。
VPN ルートを専用のルーティングテーブルに割り当てるように VPN 接続プロファイルを設定します。
nmcli connection modify <vpn_connection_profile> ipv4.route-table 75 ipv6.route-table 75
# nmcli connection modify <vpn_connection_profile> ipv4.route-table 75 ipv6.route-table 75
Copy to Clipboard Copied! 上記のコマンドで使用したテーブルに低い優先度値を設定します。
nmcli connection modify <vpn_connection_profile> ipv4.routing-rules "priority 32345 from all table 75" ipv6.routing-rules "priority 32345 from all table 75"
# nmcli connection modify <vpn_connection_profile> ipv4.routing-rules "priority 32345 from all table 75" ipv6.routing-rules "priority 32345 from all table 75"
Copy to Clipboard Copied! 優先度の値は 1 - 32766 の範囲で指定できます。値が低いほど、優先度が高くなります。
VPN 接続を再接続します。
nmcli connection down <vpn_connection_profile> nmcli connection up <vpn_connection_profile>
# nmcli connection down <vpn_connection_profile> # nmcli connection up <vpn_connection_profile>
Copy to Clipboard Copied!
検証
テーブル 75 の IPv4 ルートを表示します。
ip route show table 75
# ip route show table 75 ... 192.0.2.0/24 via 192.0.2.254 dev vpn_device proto static metric 50 default dev vpn_device proto static scope link metric 50
Copy to Clipboard Copied! この出力から、リモートネットワークへのルートとデフォルトゲートウェイの両方がルーティングテーブル 75 に割り当てられており、すべてのトラフィックがトンネルを介してルーティングされることを確認できます。VPN 接続プロファイルで
ipv4.never-default true
を設定すると、デフォルトルートが作成されず、この出力には表示されません。テーブル 75 の IPv6 ルートを表示します。
ip -6 route show table 75
# ip -6 route show table 75 ... 2001:db8:1::/64 dev vpn_device proto kernel metric 50 pref medium default dev vpn_device proto static metric 50 pref medium
Copy to Clipboard Copied! この出力から、リモートネットワークへのルートとデフォルトゲートウェイの両方がルーティングテーブル 75 に割り当てられており、すべてのトラフィックがトンネルを介してルーティングされることを確認できます。VPN 接続プロファイルで
ipv6.never-default true
を設定すると、デフォルトルートが作成されず、この出力には表示されません。
第7章 WireGuard VPN の設定
WireGuard は、Linux カーネルで実行する高パフォーマンスの VPN ソリューションです。最新の暗号を使用し、他の多くの VPN ソリューションよりも簡単に設定できます。さらに、WireGuard のコードベースが小さくなり、攻撃の影響が減るため、セキュリティーが向上します。認証および暗号化には、WireGuard が SSH と同様の鍵を使用します。
WireGuard はテクノロジープレビューとしてのみ提供されます。テクノロジープレビュー機能は、Red Hat 製品サポートのサービスレベルアグリーメント (SLA) ではサポートされておらず、機能的に完全ではない可能性があるため、Red Hat では実稼働環境での使用を推奨していません。テクノロジープレビュー機能では、最新の製品機能をいち早く提供します。これにより、お客様は開発段階で機能をテストし、フィードバックを提供できます。
テクノロジープレビュー機能のサポート範囲は、Red Hat カスタマーポータルの テクノロジープレビュー機能のサポート範囲 を参照してください。
WireGuard VPN に参加するすべてのホストがピアであることに注意してください。このドキュメントでは、接続を確立するホストを説明する client
という用語と、クライアントが接続する固定ホスト名または IP アドレスを使用してホストを説明する server
という用語を使用し、必要に応じてすべてのトラフィックをこのサーバーにルーティングします。
WireGuard VPN を設定するには、次の手順を完了する必要があります。
- サーバーを設定します。
- ローカルファイアウォールの WireGuard ポートを開きます。
- クライアントを設定します。
WireGuard は、ネットワーク層 (レイヤー 3) で動作します。そのため、DHCP を使用できず、静的 IP アドレスまたは IPv6 グローバルアドレスを、サーバーとクライアントの両方のトンネルデバイスに割り当てる必要があります。
WireGuard は、RHEL の FIPS (Federal Information Processing Standard) モードが無効になっている場合にのみ使用できます。
7.1. WireGuard が使用するプロトコルおよびプリミティブ
WireGuard は、次のプロトコルおよびプリミティブを使用します。
7.2. WireGuard がトンネル IP アドレス、公開鍵、およびリモートエンドポイントを使用する方法
WireGuard がピアにネットワークパケットを送信する場合は、次のコマンドを実行します。
- WireGuard は、パケットから宛先 IP を読み込み、ローカル設定で許可されている IP アドレスのリストと比較します。ピアが見つからない場合、WireGuard はパケットを破棄します。
- ピアが有効な場合、WireGuard は、ピアの公開鍵を使用してパケットを暗号化します。
- 送信側ホストは、ホストの最新のインターネット IP アドレスを検索し、暗号化したパケットを送信します。
WireGuard がパケットを受信すると、以下が行われます。
- WireGuard は、リモートホストの秘密鍵を使用してパケットを復号します。
- WireGuard は、パケットから内部ソースアドレスを読み込み、ローカルホストのピア設定で許可されている IP アドレスのリストに IP が設定されているかどうかを調べます。ソース IP が許可リストにある場合、WireGuard はパケットを受け入れます。IP アドレスがリストにない場合は、WireGuard がパケットを破棄します。
公開鍵と許可された IP アドレスの関連付けは、Cryptokey Routing Table
と呼ばれます。つまり、IP アドレスのリストは、パケットの送信時にはルーティングテーブルと同様に動作し、パケットの受信時にはアクセス制御リストのように動作します。
7.3. NAT およびファイアウォールの背後で WireGuard クライアントを使用する
WireGuard は UDP プロトコルを使用し、ピアがパケットを送信する場合にのみデータを送信します。ルーターのステートフルファイアウォールとネットワークアドレス変換 (NAT) は、接続を追跡して、NAT の背後のピアまたはファイアウォールがパケットを受信できるようにします。
コネクションをアクティブな状態に保つために、WireGuard は persistent keepalives
をサポートしています。つまり、WireGuard がキープアライブパケットを送信する間隔を設定できます。デフォルトでは、ネットワークトラフィックを削減するために、永続的なキープアライブ機能は無効になっています。NAT を使用したネットワークでクライアントを使用する場合、またはしばらく非アクティブにした後にファイアウォールが接続を閉じる場合は、クライアントでこの機能を有効にします。
RHEL Web コンソールを使用して WireGuard 接続のキープアライブパケットを設定することはできないことに注意してください。この機能を設定するには、nmcli
ユーティリティーを使用して接続プロファイルを編集してください。
7.4. WireGuard 接続で使用される秘密鍵および公開鍵の作成
WireGuard は、base64 でエンコードされた秘密鍵と公開鍵を使用して、ホストを相互に認証します。そのため、WireGuard VPN に参加する各ホストで鍵を作成する必要があります。
セキュアな接続には、ホストごとに異なる鍵を作成し、公開鍵のみをリモートの WireGuard ホストと共有するようにしてください。このドキュメントで使用しているサンプルキーは使用しないでください。
RHEL Web コンソールを使用して WireGuard VPN 接続を作成する場合は、代わりに Web コンソールで公開鍵と秘密鍵のペアを生成することもできます。
手順
wireguard-tools
パッケージをインストールします。dnf install wireguard-tools
# dnf install wireguard-tools
Copy to Clipboard Copied! ホストの秘密鍵と、対応する公開鍵を作成します。
wg genkey | tee /etc/wireguard/$HOSTNAME.private.key | wg pubkey > /etc/wireguard/$HOSTNAME.public.key
# wg genkey | tee /etc/wireguard/$HOSTNAME.private.key | wg pubkey > /etc/wireguard/$HOSTNAME.public.key
Copy to Clipboard Copied! キーファイルの内容は必要ですが、ファイル自体は必要ありません。ただし、Red Hat では、将来的に鍵を覚えておく必要がある場合に備え、ファイルを保持することを推奨しています。
キーファイルにセキュアなパーミッションを設定します。
chmod 600 /etc/wireguard/$HOSTNAME.private.key /etc/wireguard/$HOSTNAME.public.key
# chmod 600 /etc/wireguard/$HOSTNAME.private.key /etc/wireguard/$HOSTNAME.public.key
Copy to Clipboard Copied! 秘密鍵を表示します。
cat /etc/wireguard/$HOSTNAME.private.key YFAnE0psgIdiAF7XR4abxiwVRnlMfeltxu10s/c4JXg=
# cat /etc/wireguard/$HOSTNAME.private.key YFAnE0psgIdiAF7XR4abxiwVRnlMfeltxu10s/c4JXg=
Copy to Clipboard Copied! ローカルホストで WireGuard 接続を設定するには、秘密鍵が必要です。秘密鍵を共有しないでください。
公開鍵を表示します。
cat /etc/wireguard/$HOSTNAME.public.key UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=
# cat /etc/wireguard/$HOSTNAME.public.key UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=
Copy to Clipboard Copied! リモートホストで WireGuard 接続を設定するには、公開鍵が必要です。
7.5. nmcli
を使用した WireGuard サーバーの設定
NetworkManager で接続プロファイルを作成することで、WireGuard サーバーを設定できます。この方法を使用して、NetworkManager に WireGuard 接続を管理させます。
この手順では、次の設定を前提としています。
サーバー
-
秘密鍵:
YFAnE0psgIdiAF7XR4abxiwVRnlMfeltxu10s/c4JXg=
-
トンネル IPv4 アドレス:
192.0.2.1/24
-
トンネル IPv6 アドレス:
2001:db8:1::1/32
-
秘密鍵:
クライアント:
-
Public key:
bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM=
-
トンネル IPv4 アドレス:
192.0.2.2/24
-
トンネル IPv6 アドレス:
2001:db8:1::2/32
-
Public key:
前提条件
- サーバーとクライアントの両方に公開鍵と秘密鍵を生成している。
以下の情報を把握している。
- サーバーの秘密鍵
- クライアントの静的トンネルの IP アドレスとサブネットマスク
- クライアントの公開鍵
- サーバーの静的トンネル IP アドレスおよびサブネットマスク
手順
NetworkManager WireGuard 接続プロファイルを追加します。
nmcli connection add type wireguard con-name server-wg0 ifname wg0 autoconnect no
# nmcli connection add type wireguard con-name server-wg0 ifname wg0 autoconnect no
Copy to Clipboard Copied! このコマンドは、
server-wg0
という名前のプロファイルを作成し、それに仮想インターフェイスwg0
を割り当てます。設定を確定せずに接続を追加した後、接続が自動的に開始しないようにするには、autoconnect
パラメーターを無効にします。サーバーのトンネル IPv4 アドレスおよびサブネットマスクを設定します。
nmcli connection modify server-wg0 ipv4.method manual ipv4.addresses 192.0.2.1/24
# nmcli connection modify server-wg0 ipv4.method manual ipv4.addresses 192.0.2.1/24
Copy to Clipboard Copied! サーバーのトンネル IPv6 アドレスおよびサブネットマスクを設定します。
nmcli connection modify server-wg0 ipv6.method manual ipv6.addresses 2001:db8:1::1/32
# nmcli connection modify server-wg0 ipv6.method manual ipv6.addresses 2001:db8:1::1/32
Copy to Clipboard Copied! サーバーの秘密鍵を接続プロファイルに追加します。
nmcli connection modify server-wg0 wireguard.private-key "YFAnE0psgIdiAF7XR4abxiwVRnlMfeltxu10s/c4JXg="
# nmcli connection modify server-wg0 wireguard.private-key "YFAnE0psgIdiAF7XR4abxiwVRnlMfeltxu10s/c4JXg="
Copy to Clipboard Copied! 着信 WireGuard 接続のポートを設定します。
nmcli connection modify server-wg0 wireguard.listen-port 51820
# nmcli connection modify server-wg0 wireguard.listen-port 51820
Copy to Clipboard Copied! 着信 WireGuard 接続を受信するホストでは、常に固定ポート番号を設定してください。ポートを設定しないと、WireGuard は
wg0
インターフェイスをアクティブにするたびにランダムに空きポートを使用します。このサーバーとの通信を許可する各クライアントに、ピア設定を追加します。これらの設定は手動で追加する必要があります。
nmcli
ユーティリティーでは、対応する接続プロパティーの設定をサポートしていないためです。/etc/NetworkManager/system-connections/server-wg0.nmconnection
ファイルを編集し、以下を追加します。[wireguard-peer.bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM=] allowed-ips=192.0.2.2;2001:db8:1::2;
[wireguard-peer.bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM=] allowed-ips=192.0.2.2;2001:db8:1::2;
Copy to Clipboard Copied! -
[wireguard-peer.<public_key_of_the_client>]
エントリーは、クライアントのピアセクションを定義し、セクション名にはクライアントの公開鍵が含まれます。 allowed-ips
パラメーターは、このサーバーへのデータ送信が許可されているクライアントのトンネル IP アドレスを設定します。各クライアントにセクションを追加します。
-
server-wg0
接続プロファイルをリロードします。nmcli connection load /etc/NetworkManager/system-connections/server-wg0.nmconnection
# nmcli connection load /etc/NetworkManager/system-connections/server-wg0.nmconnection
Copy to Clipboard Copied!
必要に応じて、自動的に起動するように接続を設定し、次のコマンドを実行します。
nmcli connection modify server-wg0 autoconnect yes
# nmcli connection modify server-wg0 autoconnect yes
Copy to Clipboard Copied! server-wg0
接続を再アクティブ化します。nmcli connection up server-wg0
# nmcli connection up server-wg0
Copy to Clipboard Copied! - DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策については、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
検証
wg0
デバイスのインターフェイス設定を表示します。wg show wg0
# wg show wg0 interface: wg0 public key: UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE= private key: (hidden) listening port: 51820 peer: bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM= allowed ips: 192.0.2.2/32, 2001:db8:1::2/128
Copy to Clipboard Copied! 出力に秘密鍵を表示するには、
WG_HIDE_KEYS=never wg show wg0
コマンドを使用します。wg0
デバイスの IP 設定を表示します。ip address show wg0
# ip address show wg0 20: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute wg0 valid_lft forever preferred_lft forever inet6 2001:db8:1::1/32 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::3ef:8863:1ce2:844/64 scope link noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied!
7.6. nmtui
を使用した WireGuard サーバーの設定
NetworkManager で接続プロファイルを作成することで、WireGuard サーバーを設定できます。この方法を使用して、NetworkManager に WireGuard 接続を管理させます。
この手順では、次の設定を前提としています。
サーバー
-
秘密鍵:
YFAnE0psgIdiAF7XR4abxiwVRnlMfeltxu10s/c4JXg=
-
トンネル IPv4 アドレス:
192.0.2.1/24
-
トンネル IPv6 アドレス:
2001:db8:1::1/32
-
秘密鍵:
クライアント:
-
Public key:
bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM=
-
トンネル IPv4 アドレス:
192.0.2.2/24
-
トンネル IPv6 アドレス:
2001:db8:1::2/32
-
Public key:
前提条件
- サーバーとクライアントの両方に公開鍵と秘密鍵を生成している。
以下の情報を把握している。
- サーバーの秘密鍵
- クライアントの静的トンネルの IP アドレスとサブネットマスク
- クライアントの公開鍵
- サーバーの静的トンネル IP アドレスおよびサブネットマスク
-
NetworkManager-tui
パッケージをインストールしました。
手順
nmtui
アプリケーションを開始します。nmtui
# nmtui
Copy to Clipboard Copied! - Edit a connection 選択し、Enter を押します。
- を選択し、Enter を押します。
- リストから WireGuard 接続タイプを選択し、Enter を押します。
Edit connection ウィンドウで:
-
NetworkManager が接続に割り当てる仮想インターフェイス (
wg0
など) の接続名を入力します。 - サーバーの秘密鍵を入力します。
着信 WireGuard 接続のリッスンポート番号 (
51820
など) を設定します。着信 WireGuard 接続を受信するホストでは、常に固定ポート番号を設定してください。ポートを設定しないと、WireGuard はインターフェイスをアクティブにするたびにランダムな空きポートを使用します。
Peers ペインの横にある をクリックします。
- クライアントの公開鍵を入力します。
- Allowed IPs フィールドを、このサーバーへのデータ送信が許可されているクライアントのトンネル IP アドレスに設定します。
IPv4 Configuration の横にある
を選択し、Enter キーを押します。- IPv4 設定方法 Manual を選択します。
- トンネルの IPv4 アドレスとサブネットマスクを入力します。Gateway フィールドは空のままにします。
IPv6 Configuration の横にある を選択し、Enter を押します。
- IPv6 設定方法 Manual を選択します。
-
トンネルの IPv6 アドレスとサブネットマスクを入力します。
Gateway
フィールドは空のままにします。
-
NetworkManager が接続に割り当てる仮想インターフェイス (
- 接続のリストが表示されたウィンドウで、 を選択し、Enter を押します。
- NetworkManager TUI のメインウィンドウで、 を選択し、Enter を押します。
- DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策については、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
検証
wg0
デバイスのインターフェイス設定を表示します。wg show wg0
# wg show wg0 interface: wg0 public key: UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE= private key: (hidden) listening port: 51820 peer: bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM= allowed ips: 192.0.2.2/32, 2001:db8:1::2/128
Copy to Clipboard Copied! 出力に秘密鍵を表示するには、
WG_HIDE_KEYS=never wg show wg0
コマンドを使用します。wg0
デバイスの IP 設定を表示します。ip address show wg0
# ip address show wg0 20: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute wg0 valid_lft forever preferred_lft forever inet6 _2001:db8:1::1/32 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::3ef:8863:1ce2:844/64 scope link noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied!
7.7. RHEL Web コンソールを使用した WireGuard サーバーの設定
ブラウザーベースの RHEL Web コンソールを使用して WireGuard サーバーを設定できます。この方法を使用して、NetworkManager に WireGuard 接続を管理させます。
前提条件
- RHEL Web コンソールにログインしています。
以下の情報を把握している。
- サーバーとクライアントの両方の静的トンネル IP アドレスとサブネットマスク
- クライアントの公開鍵
手順
- 画面左側のナビゲーションで Networking タブを選択します。
- Interfaces セクションで Add VPN をクリックします。
-
wireguard-tools
およびsystemd-resolved
パッケージがまだインストールされていない場合は、Web コンソールにその旨の通知が表示されます。これらのパッケージをインストールするには、Install をクリックします。 - 作成する WireGuard デバイスの名前を入力します。
このホストの鍵ペアを設定します。
Web コンソールによって作成された鍵を使用する場合は、次の手順を実行します。
- Private key エリアで、事前に選択済みの Generated オプションをそのままにします。
- Public key の値をメモします。クライアントを設定するときにこの情報が必要になります。
既存の秘密鍵を使用する場合は、次の手順を実行します。
- Private key エリアで Paste existing key を選択します。
- 秘密鍵をテキストフィールドに貼り付けます。Web コンソールにより対応する公開鍵が自動的に計算されます。
着信 WireGuard 接続のリッスンポート番号 (
51820
など) を設定します。着信 WireGuard 接続を受信するホストでは、常に固定ポート番号を設定してください。ポートを設定しないと、WireGuard はインターフェイスをアクティブにするたびにランダムな空きポートを使用します。
サーバーのトンネル IPv4 アドレスおよびサブネットマスクを設定します。
IPv6 アドレスも設定するには、接続を作成した後に編集する必要があります。
このサーバーとの通信を許可する各クライアントのピア設定を追加します。
- Add peer をクリックします。
- クライアントの公開鍵を入力します。
- Endpoint フィールドは空のままにします。
- Allowed IPs フィールドに、このサーバーへのデータ送信を許可するクライアントのトンネル IP アドレスを設定します。
- Add をクリックして WireGuard 接続を作成します。
トンネル IPv6 アドレスも設定する場合は、次の手順を実行します。
- Interfaces セクションで WireGuard 接続の名前をクリックします。
- IPv6 の横にある edit をクリックします。
-
Addresses フィールドを
Manual
に設定し、サーバーのトンネル IPv6 アドレスと接頭辞を入力します。 - Save をクリックします。
- DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策については、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
検証
wg0
デバイスのインターフェイス設定を表示します。wg show wg0
# wg show wg0 interface: wg0 public key: UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE= private key: (hidden) listening port: 51820 peer: bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM= allowed ips: 192.0.2.2/32, 2001:db8:1::2/128
Copy to Clipboard Copied! 出力に秘密鍵を表示するには、
WG_HIDE_KEYS=never wg show wg0
コマンドを使用します。wg0
デバイスの IP 設定を表示します。ip address show wg0
# ip address show wg0 20: wg0: <POINTOPOINT,NOARP,UP,LOWERUP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute wg0 valid_lft forever preferred_lft forever inet6 2001:db8:1::1/32 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::3ef:8863:1ce2:844/64 scope link noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied!
7.8. コマンドラインを使用した WireGuard サーバーでの firewalld
の設定
クライアントからの着信接続を許可するには、WireGuard サーバーで firewalld
サービスを設定する必要があります。また、クライアントが WireGuard サーバーをデフォルトゲートウェイとして使用し、すべてのトラフィックをトンネル経由でルーティングできるようにするには、マスカレードを有効にする必要があります。
手順
firewalld
サービスで着信接続用の WireGuard ポートを開きます。firewall-cmd --permanent --add-port=51820/udp --zone=public
# firewall-cmd --permanent --add-port=51820/udp --zone=public
Copy to Clipboard Copied! クライアントがすべてのトラフィックをトンネル経由でルーティングし、WireGuard サーバーをデフォルトゲートウェイとして使用する場合は、
public
ゾーンのマスカレードを有効にします。firewall-cmd --permanent --zone=public --add-masquerade
# firewall-cmd --permanent --zone=public --add-masquerade
Copy to Clipboard Copied! firewalld
ルールをリロードします。firewall-cmd --reload
# firewall-cmd --reload
Copy to Clipboard Copied!
検証
public
ゾーンの設定を表示します。firewall-cmd --list-all
# firewall-cmd --list-all public (active) ... ports: 51820/udp masquerade: yes ...
Copy to Clipboard Copied!
7.9. RHEL Web コンソールを使用した WireGuard サーバーでの firewalld
の設定
クライアントからの着信接続を許可するには、WireGuard サーバーで firewalld サービスを設定する必要があります。また、クライアントが WireGuard サーバーをデフォルトゲートウェイとして使用し、すべてのトラフィックをトンネル経由でルーティングできるようにするには、マスカレードを有効にする必要があります。
前提条件
- RHEL Web コンソールにログインしています。
手順
- 画面左側のナビゲーションで Networking タブを選択します。
- Firewall セクションで Edit rules and zones をクリックします。
- Add services をクリックします。
-
Filter services フィールドに
wireguard
と入力します。 リストから
wireguard
エントリーを選択します。- Add services をクリックします。
クライアントがすべてのトラフィックをトンネル経由でルーティングし、WireGuard サーバーをデフォルトゲートウェイとして使用する場合は、
public
ゾーンのマスカレードを有効にします。firewall-cmd --permanent --zone=public --add-masquerade firewall-cmd --reload
# firewall-cmd --permanent --zone=public --add-masquerade # firewall-cmd --reload
Copy to Clipboard Copied! Web コンソールでは
Firewalld
ゾーンのマスカレードを有効にすることはできないことに注意してください。
検証
- 画面左側のナビゲーションで Networking タブを選択します。
- Firewall セクションで Edit rules and zones をクリックします。
-
リストに
Wireguard
サービスのエントリーが含まれており、WireGuard 接続プロファイルで設定した UDP ポートが表示されます。 firewalld
のpublic
ゾーンでマスカレードが有効になっていることを確認するために、次のように入力します。firewall-cmd --list-all --zone=public
# firewall-cmd --list-all --zone=public public (active) ... services: ... wireguard ports: forward: yes masquerade: yes ...
Copy to Clipboard Copied!
7.10. nmcli
を使用した WireGuard クライアントの設定
NetworkManager で接続プロファイルを作成することで、WireGuard クライアントを設定できます。この方法を使用して、NetworkManager に WireGuard 接続を管理させます。
この手順では、次の設定を前提としています。
クライアント:
-
秘密鍵:
aPUcp5vHz8yMLrzk8SsDyYnV33IhE/k20e52iKJFV0A=
-
トンネル IPv4 アドレス:
192.0.2.2/24
-
トンネル IPv6 アドレス:
2001:db8:1::2/32
-
秘密鍵:
サーバー
-
公開鍵:
UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=
-
トンネル IPv4 アドレス:
192.0.2.1/24
-
トンネル IPv6 アドレス:
2001:db8:1::1/32
-
公開鍵:
前提条件
- サーバーとクライアントの両方に公開鍵と秘密鍵を生成している。
以下の情報を把握している。
- クライアントの秘密鍵
- クライアントの静的トンネルの IP アドレスとサブネットマスク
- サーバーの公開鍵
- サーバーの静的トンネル IP アドレスおよびサブネットマスク
手順
NetworkManager WireGuard 接続プロファイルを追加します。
nmcli connection add type wireguard con-name client-wg0 ifname wg0
# nmcli connection add type wireguard con-name client-wg0 ifname wg0
Copy to Clipboard Copied! client-wg0
という名前のプロファイルを作成し、そのプロファイルに仮想インターフェイスwg0
を割り当てます。オプション: NetworkManager が
client-wg
接続を自動的に起動しないように設定します。nmcli connection modify client-wg0 autoconnect no
# nmcli connection modify client-wg0 autoconnect no
Copy to Clipboard Copied! クライアントのトンネル IPv4 アドレスとサブネットマスクを設定します。
nmcli connection modify client-wg0 ipv4.method manual ipv4.addresses 192.0.2.2/24
# nmcli connection modify client-wg0 ipv4.method manual ipv4.addresses 192.0.2.2/24
Copy to Clipboard Copied! クライアントのトンネル IPv6 アドレスとサブネットマスクを設定します。
nmcli connection modify client-wg0 ipv6.method manual ipv6.addresses 2001:db8:1::2/32
# nmcli connection modify client-wg0 ipv6.method manual ipv6.addresses 2001:db8:1::2/32
Copy to Clipboard Copied! すべてのトラフィックをトンネル経由でルーティングする場合は、サーバーのトンネル IP アドレスをデフォルトゲートウェイとして設定します。
nmcli connection modify client-wg0 ipv4.gateway 192.0.2.1 ipv6.gateway 2001:db8:1::1
# nmcli connection modify client-wg0 ipv4.gateway 192.0.2.1 ipv6.gateway 2001:db8:1::1
Copy to Clipboard Copied! すべてのトラフィックをトンネル経由でルーティングするには、後の手順で、このクライアントの
allowed-ips
を0.0.0.0/0;::/0
に設定する必要があります。すべてのトラフィックをトンネル経由でルーティングすると、サーバーのルーティングとファイアウォールの設定によっては他のホストへの接続に影響が及ぶ可能性があることに注意してください。
クライアントの秘密鍵を接続プロファイルに追加します。
nmcli connection modify client-wg0 wireguard.private-key "aPUcp5vHz8yMLrzk8SsDyYnV33IhE/k20e52iKJFV0A="
# nmcli connection modify client-wg0 wireguard.private-key "aPUcp5vHz8yMLrzk8SsDyYnV33IhE/k20e52iKJFV0A="
Copy to Clipboard Copied! このクライアントとの通信を許可するサーバーごとにピア設定を追加します。これらの設定は手動で追加する必要があります。
nmcli
ユーティリティーでは、対応する接続プロパティーの設定をサポートしていないためです。/etc/NetworkManager/system-connections/client-wg0.nmconnection
ファイルを編集し、以下を追加します。[wireguard-peer.UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=] endpoint=server.example.com:51820 allowed-ips=192.0.2.1;2001:db8:1::1; persistent-keepalive=20
[wireguard-peer.UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=] endpoint=server.example.com:51820 allowed-ips=192.0.2.1;2001:db8:1::1; persistent-keepalive=20
Copy to Clipboard Copied! -
[wireguard-peer.<public_key_of_the_server>]
エントリーは、サーバーのピアセクションを定義します。セクション名には、サーバーの公開鍵が含まれます。 -
endpoint
パラメーターは、サーバーのホスト名または IP アドレスとポートを設定します。クライアントはこの情報を使用して接続を確立します。 allowed-ips
パラメーターは、このクライアントにデータを送信できる IP アドレスのリストを設定します。たとえば、このパラメーターを次のように設定します。- サーバーのトンネル IP アドレスに設定すると、そのサーバーのみがこのクライアントと通信できるようになります。上記の例の値を使用すると、そのように設定されます。
-
0.0.0.0/0;::/0;
に設定すると、リモートの IPv4 アドレスおよび IPv6 アドレスがこのクライアントと通信できるようになります。この設定を使用して、すべてのトラフィックをトンネル経由でルーティングし、WireGuard サーバーをデフォルトゲートウェイとして使用します。
-
オプションの
persistent-keepalive
パラメーターは、WireGuard がサーバーにキープアライブパケットを送信する間隔を秒単位で定義します。ネットワークアドレス変換 (NAT) を使用するネットワークでクライアントを使用する場合、またはしばらく非アクティブにした後にファイアウォールが UDP 接続を閉じる場合は、このパラメーターを設定します。
-
client-wg0
接続プロファイルをリロードします。nmcli connection load /etc/NetworkManager/system-connections/client-wg0.nmconnection
# nmcli connection load /etc/NetworkManager/system-connections/client-wg0.nmconnection
Copy to Clipboard Copied!
client-wg0
接続を再アクティブ化します。nmcli connection up client-wg0
# nmcli connection up client-wg0
Copy to Clipboard Copied! - DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策については、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
検証
サーバーの IP アドレスの ping を実行します。
ping 192.0.2.1 ping6 2001:db8:1::1
# ping 192.0.2.1 # ping6 2001:db8:1::1
Copy to Clipboard Copied! wg0
デバイスのインターフェイス設定を表示します。wg show wg0
# wg show wg0 interface: wg0 public key: bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM= private key: (hidden) listening port: 51820 peer: UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE= endpoint: server.example.com:51820 allowed ips: 192.0.2.1/32, 2001:db8:1::1/128 latest handshake: 1 minute, 41 seconds ago transfer: 824 B received, 1.01 KiB sent persistent keepalive: every 20 seconds
Copy to Clipboard Copied! 出力に秘密鍵を表示するには、
WG_HIDE_KEYS=never wg show wg0
コマンドを使用します。VPN トンネルを介してトラフィックを送信している場合は、
latest handshake
エントリーとtransfer
エントリーのみが含まれることに注意してください。wg0
デバイスの IP 設定を表示します。ip address show wg0
# ip address show wg0 10: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 192.0.2.2/24 brd 192.0.2.255 scope global noprefixroute wg0 valid_lft forever preferred_lft forever inet6 2001:db8:1::2/32 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::73d9:6f51:ea6f:863e/64 scope link noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied!
7.11. nmtui
を使用した WireGuard クライアントの設定
NetworkManager で接続プロファイルを作成することで、WireGuard クライアントを設定できます。この方法を使用して、NetworkManager に WireGuard 接続を管理させます。
この手順では、次の設定を前提としています。
クライアント:
-
秘密鍵:
aPUcp5vHz8yMLrzk8SsDyYnV33IhE/k20e52iKJFV0A=
-
トンネル IPv4 アドレス:
192.0.2.2/24
-
トンネル IPv6 アドレス:
2001:db8:1::2/32
-
秘密鍵:
サーバー
-
公開鍵:
UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=
-
トンネル IPv4 アドレス:
192.0.2.1/24
-
トンネル IPv6 アドレス:
2001:db8:1::1/32
-
公開鍵:
前提条件
- サーバーとクライアントの両方に公開鍵と秘密鍵を生成している。
以下の情報を把握している。
- クライアントの秘密鍵
- クライアントの静的トンネルの IP アドレスとサブネットマスク
- サーバーの公開鍵
- サーバーの静的トンネル IP アドレスおよびサブネットマスク
-
NetworkManager-tui
パッケージをインストールしました
手順
nmtui
アプリケーションを開始します。nmtui
# nmtui
Copy to Clipboard Copied! - Edit a connection 選択し、Enter を押します。
- を選択し、Enter を押します。
- リストから WireGuard 接続タイプを選択し、Enter を押します。
Edit connection ウィンドウで:
-
NetworkManager が接続に割り当てる仮想インターフェイス (
wg0
など) の接続名を入力します。 クライアントの秘密鍵を入力します。
Peers ペインの横にある をクリックします。
- サーバーの公開鍵を入力します。
Allowed IPs フィールドを設定します。たとえば、次のように設定します。
- サーバーのトンネル IP アドレスに設定すると、そのサーバーのみがこのクライアントと通信できるようになります。
-
リモートの IPv4 アドレスおよび IPv6 アドレスが、このクライアントと通信できるように許可する
0.0.0.0/0,::/0
この設定を使用して、すべてのトラフィックをトンネル経由でルーティングし、WireGuard サーバーをデフォルトゲートウェイとして使用します。
-
Endpoint フィールドに、WireGuard サーバーのホスト名または IP アドレスとポートを入力します。
<hostname_or_IP>:<port_number>
という形式を使用します。 - オプション: ネットワークアドレス変換 (NAT) を使用するネットワークでクライアントを使用するか、またはしばらく非アクティブにした後にファイアウォールが UDP 接続を閉じる場合は、永続的なキープアライブの間隔を秒単位で設定します。この間隔で、クライアントは、キープアライブパケットをサーバーに送信します。
IPv4 Configuration の横にある を選択し、Enter を押します。
- IPv4 設定方法 Manual を選択します。
- トンネルの IPv4 アドレスとサブネットマスクを入力します。Gateway フィールドは空のままにします。
IPv6 Configuration の横にある を選択し、Enter を押します。
- IPv6 設定方法 Manual を選択します。
- トンネルの IPv6 アドレスとサブネットマスクを入力します。Gateway フィールドは空のままにします。
- オプション: Automatically connect を選択します。
-
NetworkManager が接続に割り当てる仮想インターフェイス (
- 接続のリストが表示されたウィンドウで、 を選択し、Enter を押します。
- NetworkManager TUI のメインウィンドウで、 を選択し、Enter を押します。
- DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策については、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
検証
サーバーの IP アドレスの ping を実行します。
ping 192.0.2.1 ping6 2001:db8:1::1
# ping 192.0.2.1 # ping6 2001:db8:1::1
Copy to Clipboard Copied! wg0
デバイスのインターフェイス設定を表示します。wg show wg0
# wg show wg0 interface: wg0 public key: bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM= private key: (hidden) listening port: 51820 peer: UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE= endpoint: server.example.com:51820_ allowed ips: 192.0.2.1/32, 2001:db8:1::1/128 latest handshake: 1 minute, 41 seconds ago transfer: 824 B received, 1.01 KiB sent persistent keepalive: every 20 seconds
Copy to Clipboard Copied! 出力に秘密鍵を表示するには、
WG_HIDE_KEYS=never wg show wg0
コマンドを使用します。VPN トンネルを介してトラフィックをすでに送信している場合は、
latest handshake
エントリーとtransfer
エントリーのみが出力に含まれることに注意してください。wg0
デバイスの IP 設定を表示します。ip address show wg0
# ip address show wg0 10: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 192.0.2.2/24 brd 192.0.2.255 scope global noprefixroute wg0 valid_lft forever preferred_lft forever inet6 2001:db8:1::2/32 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::73d9:6f51:ea6f:863e/64 scope link noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied!
7.12. RHEL Web コンソールを使用した WireGuard クライアントの設定
ブラウザーベースの RHEL Web コンソールを使用して、WireGuard クライアントを設定できます。この方法を使用して、NetworkManager に WireGuard 接続を管理させます。
前提条件
- RHEL Web コンソールにログインしています。
以下の情報を把握している。
- サーバーとクライアントの両方の静的トンネル IP アドレスとサブネットマスク
- サーバーの公開鍵
手順
- 画面左側のナビゲーションで Networking タブを選択します。
- Interfaces セクションで Add VPN をクリックします。
-
wireguard-tools
およびsystemd-resolved
パッケージがまだインストールされていない場合は、Web コンソールにその旨の通知が表示されます。これらのパッケージをインストールするには、Install をクリックします。 - 作成する WireGuard デバイスの名前を入力します。
このホストの鍵ペアを設定します。
Web コンソールによって作成された鍵を使用する場合は、次の手順を実行します。
- Private key エリアで、事前に選択済みの Generated オプションをそのままにします。
- Public key の値をメモします。クライアントを設定するときにこの情報が必要になります。
既存の秘密鍵を使用する場合は、次の手順を実行します。
- Private key エリアで Paste existing key を選択します。
- 秘密鍵をテキストフィールドに貼り付けます。Web コンソールにより対応する公開鍵が自動的に計算されます。
-
Listen port フィールドの
0
値をそのまま使用します。 クライアントのトンネル IPv4 アドレスとサブネットマスクを設定します。
IPv6 アドレスも設定するには、接続を作成した後に編集する必要があります。
このクライアントとの通信を許可するサーバーのピア設定を追加します。
- Add peer をクリックします。
- サーバーの公開鍵を入力します。
-
Endpoint フィールドにサーバーのホスト名または IP アドレスとポートを設定します (例:
server.example.com:51820
)。クライアントはこの情報を使用して接続を確立します。 Allowed IPs フィールドに、このサーバーへのデータ送信を許可するクライアントのトンネル IP アドレスを設定します。たとえば、フィールドを次のいずれかに設定します。
- サーバーのトンネル IP アドレスに設定すると、そのサーバーのみがこのクライアントと通信できるようになります。以下のスクリーンキャプチャーの値を使用すると、そのように設定されます。
-
0.0.0.0/0
に設定すると、リモートの IPv4 アドレスがこのクライアントと通信できるようになります。この設定を使用して、すべてのトラフィックをトンネル経由でルーティングし、WireGuard サーバーをデフォルトゲートウェイとして使用します。
- Add をクリックして WireGuard 接続を作成します。
トンネル IPv6 アドレスも設定する場合は、次の手順を実行します。
- Interfaces セクションで WireGuard 接続の名前をクリックします。
- IPv6 の横にある edit をクリックします。
-
Addresses フィールドを
Manual
に設定し、クライアントのトンネル IPv6 アドレスと接頭辞を入力します。 - Save をクリックします。
- DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策については、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
検証
サーバーの IP アドレスの ping を実行します。
ping 192.0.2.1
# ping 192.0.2.1
Copy to Clipboard Copied! トンネル経由でトラフィックを送信しようとすると、WireGuard が接続を確立します。
wg0
デバイスのインターフェイス設定を表示します。wg show wg0
# wg show wg0 interface: wg0 public key: bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM= private key: (hidden) listening port: 45513 peer: UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE= endpoint: server.example.com:51820 allowed ips: 192.0.2.1/32, 2001:db8:1::1/128 latest handshake: 1 minute, 41 seconds ago transfer: 824 B received, 1.01 KiB sent persistent keepalive: every 20 seconds
Copy to Clipboard Copied! 出力に秘密鍵を表示するには、
WG_HIDE_KEYS=never wg show wg0
コマンドを使用します。VPN トンネルを介してトラフィックを送信している場合は、
latest handshake
エントリーとtransfer
エントリーのみが含まれることに注意してください。wg0
デバイスの IP 設定を表示します。ip address show wg0
# ip address show wg0 10: wg0: <POINTOPOINT,NOARP,UP,LOWERUP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 192.0.2.2/24 brd 192.0.2.255 scope global noprefixroute wg0 valid_lft forever preferred_lft forever inet6 2001:db8:1::2/32 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::73d9:6f51:ea6f:863e/64 scope link noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied!
7.13. 接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる
DHCP サーバーとステートレスアドレス自動設定 (SLAAC) はどちらも、クライアントのルーティングテーブルにルートを追加できます。悪意のある DHCP サーバーがこの機能を使用すると、たとえば、VPN 接続を使用するホストに対して、VPN トンネルではなく物理インターフェイス経由でトラフィックをリダイレクトするように強制できます。この脆弱性は TunnelVision とも呼ばれ、CVE-2024-3661 の脆弱性に関する記事で説明されています。
この脆弱性を軽減するために、VPN 接続を専用のルーティングテーブルに割り当てることができます。これを行うと、DHCP 設定または SLAAC が、VPN トンネル宛のネットワークパケットに関するルーティング決定を操作できなくなります。
次の条件が 1 つ以上環境に当てはまる場合は、この手順を実行してください。
- 少なくとも 1 つのネットワークインターフェイスが DHCP または SLAAC を使用している。
- ネットワークで、不正な DHCP サーバーを防ぐ DHCP スヌーピングなどのメカニズムが使用されていない。
トラフィック全体を VPN 経由でルーティングすると、ホストがローカルネットワークリソースにアクセスできなくなります。
手順
- 使用するルーティングテーブルを決定します。次の手順ではテーブル 75 を使用します。デフォルトでは、RHEL はテーブル 1 - 254 を使用しないため、それらのテーブルのうちどれでも使用できます。
VPN ルートを専用のルーティングテーブルに割り当てるように VPN 接続プロファイルを設定します。
nmcli connection modify <vpn_connection_profile> ipv4.route-table 75 ipv6.route-table 75
# nmcli connection modify <vpn_connection_profile> ipv4.route-table 75 ipv6.route-table 75
Copy to Clipboard Copied! 上記のコマンドで使用したテーブルに低い優先度値を設定します。
nmcli connection modify <vpn_connection_profile> ipv4.routing-rules "priority 32345 from all table 75" ipv6.routing-rules "priority 32345 from all table 75"
# nmcli connection modify <vpn_connection_profile> ipv4.routing-rules "priority 32345 from all table 75" ipv6.routing-rules "priority 32345 from all table 75"
Copy to Clipboard Copied! 優先度の値は 1 - 32766 の範囲で指定できます。値が低いほど、優先度が高くなります。
VPN 接続を再接続します。
nmcli connection down <vpn_connection_profile> nmcli connection up <vpn_connection_profile>
# nmcli connection down <vpn_connection_profile> # nmcli connection up <vpn_connection_profile>
Copy to Clipboard Copied!
検証
テーブル 75 の IPv4 ルートを表示します。
ip route show table 75
# ip route show table 75 ... 192.0.2.0/24 via 192.0.2.254 dev vpn_device proto static metric 50 default dev vpn_device proto static scope link metric 50
Copy to Clipboard Copied! この出力から、リモートネットワークへのルートとデフォルトゲートウェイの両方がルーティングテーブル 75 に割り当てられており、すべてのトラフィックがトンネルを介してルーティングされることを確認できます。VPN 接続プロファイルで
ipv4.never-default true
を設定すると、デフォルトルートが作成されず、この出力には表示されません。テーブル 75 の IPv6 ルートを表示します。
ip -6 route show table 75
# ip -6 route show table 75 ... 2001:db8:1::/64 dev vpn_device proto kernel metric 50 pref medium default dev vpn_device proto static metric 50 pref medium
Copy to Clipboard Copied! この出力から、リモートネットワークへのルートとデフォルトゲートウェイの両方がルーティングテーブル 75 に割り当てられており、すべてのトラフィックがトンネルを介してルーティングされることを確認できます。VPN 接続プロファイルで
ipv6.never-default true
を設定すると、デフォルトルートが作成されず、この出力には表示されません。
第8章 IP トンネルの設定
VPN と同様に、IP トンネルは、インターネットなどの 3 番目のネットワークを介して 2 つのネットワークを直接接続します。ただし、すべてのトンネルプロトコルが暗号化に対応しているわけではありません。
トンネルを確立する両方のネットワークのルーターには、最低でも 2 つのインターフェイスが必要です。
- ローカルネットワークに接続されているインターフェイス 1 つ
- トンネルが確立されたネットワークに接続されたインターフェイス 1 つ。
トンネルを確立するには、リモートサブネットから IP アドレスを使用して、両方のルーターに仮想インターフェイスを作成します。
NetworkManager は、以下の IP トンネルに対応します。
- GRE (Generic Routing Encapsulation)
- IP6GRE (Generic Routing Encapsulation over IPv6)
- GRETAP (Generic Routing Encapsulation Terminal Access Point)
- IP6GRETAP (Generic Routing Encapsulation Terminal Access Point over IPv6)
- IPIP (IPv4 over IPv4)
- IPIP6 (IPv4 over IPv6)
- IP6IP6 (IPv6 over IPv6)
- SIT (Simple Internet Transition)
このトンネルは、タイプに応じて、OSI (Open Systems Interconnection) モデルのレイヤー 2 または 3 で動作します。
8.1. IPv4 トラフィックを IPv4 パケットにカプセル化するための IPIP トンネルの設定
IP over IP (IPIP) トンネルは、RFC 2003 で説明されているように、OSI レイヤー 3 で動作し、IPv4 トラフィックを IPv4 パケットにカプセル化します。
IPIP トンネルを介して送信されるデータは暗号化されません。セキュリティー上の理由から、すでに暗号化されたデータにはトンネルを使用してください (HTTPS などの他のプロトコル)。
IPIP トンネルはユニキャストパケットのみをサポートすることに注意してください。マルチキャストをサポートする IPv4 トンネルが必要な場合は、nmcli を使用した GRE トンネルを設定して IPv4 パケット内のレイヤー 3 トラフィックをカプセル化 を参照します。
たとえば、以下の図に示すように、2 つの RHEL ルーター間で IPIP トンネルを作成し、インターネット経由で 2 つの内部サブネットに接続できます。

前提条件
- 各 RHEL ルーターには、ローカルサブネットに接続されているネットワークインターフェイスがあります。
- 各 RHEL ルーターには、インターネットに接続しているネットワークインターフェイスがあります。
- トンネル経由で送信するトラフィックは IPv4 ユニキャストです。
手順
ネットワーク A の RHEL ルーターで、次のコマンドを実行します。
tun0
という名前の IPIP トンネルインターフェイスを作成します。nmcli connection add type ip-tunnel ip-tunnel.mode ipip con-name tun0 ifname tun0 remote 198.51.100.5 local 203.0.113.10
# nmcli connection add type ip-tunnel ip-tunnel.mode ipip con-name tun0 ifname tun0 remote 198.51.100.5 local 203.0.113.10
Copy to Clipboard Copied! remote
パラメーターおよびlocal
パラメーターは、リモートルーターおよびローカルルーターのパブリック IP アドレスを設定します。IPv4 アドレスを
tun0
デバイスに設定します。nmcli connection modify tun0 ipv4.addresses '10.0.1.1/30'
# nmcli connection modify tun0 ipv4.addresses '10.0.1.1/30'
Copy to Clipboard Copied! トンネルには、2 つの使用可能な IP アドレスを持つ
/30
サブネットで十分であることに注意してください。IPv4 設定を使用するように手動で
tun0
接続を設定します。nmcli connection modify tun0 ipv4.method manual
# nmcli connection modify tun0 ipv4.method manual
Copy to Clipboard Copied! トラフィックを
172.16.0.0/24
ネットワークにルーティングする静的ルートをルーター B のトンネル IP に追加します。nmcli connection modify tun0 +ipv4.routes "172.16.0.0/24 10.0.1.2"
# nmcli connection modify tun0 +ipv4.routes "172.16.0.0/24 10.0.1.2"
Copy to Clipboard Copied! tun0
接続を有効にします。nmcli connection up tun0
# nmcli connection up tun0
Copy to Clipboard Copied! パケット転送を有効にします。
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
Copy to Clipboard Copied!
ネットワーク B の RHEL ルーターで、次のコマンドを実行します。
tun0
という名前の IPIP トンネルインターフェイスを作成します。nmcli connection add type ip-tunnel ip-tunnel.mode ipip con-name tun0 ifname tun0 remote 203.0.113.10 local 198.51.100.5
# nmcli connection add type ip-tunnel ip-tunnel.mode ipip con-name tun0 ifname tun0 remote 203.0.113.10 local 198.51.100.5
Copy to Clipboard Copied! remote
パラメーターおよびlocal
パラメーターは、リモートルーターおよびローカルルーターのパブリック IP アドレスを設定します。IPv4 アドレスを
tun0
デバイスに設定します。nmcli connection modify tun0 ipv4.addresses '10.0.1.2/30'
# nmcli connection modify tun0 ipv4.addresses '10.0.1.2/30'
Copy to Clipboard Copied! IPv4 設定を使用するように手動で
tun0
接続を設定します。nmcli connection modify tun0 ipv4.method manual
# nmcli connection modify tun0 ipv4.method manual
Copy to Clipboard Copied! トラフィックを
192.0.2.0/24
ネットワークにルーティングする静的ルートをルーター A のトンネル IP に追加します。nmcli connection modify tun0 +ipv4.routes "192.0.2.0/24 10.0.1.1"
# nmcli connection modify tun0 +ipv4.routes "192.0.2.0/24 10.0.1.1"
Copy to Clipboard Copied! tun0
接続を有効にします。nmcli connection up tun0
# nmcli connection up tun0
Copy to Clipboard Copied! パケット転送を有効にします。
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
Copy to Clipboard Copied!
検証
各 RHEL ルーターから、他のルーターの内部インターフェイスの IP アドレスに ping します。
ルーター A で
172.16.0.1
に ping します。ping 172.16.0.1
# ping 172.16.0.1
Copy to Clipboard Copied! ルーター B で
192.0.2.1
に ping します。ping 192.0.2.1
# ping 192.0.2.1
Copy to Clipboard Copied!
8.2. レイヤー 3 トラフィックを IPv4 パケットにカプセル化するための GRE トンネルの設定
Generic Routing Encapsulation (GRE) トンネルは、RFC 2784 で説明されているように、レイヤー 3 トラフィックを IPv4 パケットにカプセル化します。GRE トンネルは、有効なイーサネットタイプで任意のレイヤー 3 プロトコルをカプセル化できます。
GRE トンネルを介して送信されるデータは暗号化されません。セキュリティー上の理由から、すでに暗号化されたデータにはトンネルを使用してください (HTTPS などの他のプロトコル)。
たとえば、以下の図に示すように、2 つの RHEL ルーター間で GRE トンネルを作成し、インターネット経由で 2 つの内部サブネットに接続できます。

前提条件
- 各 RHEL ルーターには、ローカルサブネットに接続されているネットワークインターフェイスがあります。
- 各 RHEL ルーターには、インターネットに接続しているネットワークインターフェイスがあります。
手順
ネットワーク A の RHEL ルーターで、次のコマンドを実行します。
gre1
という名前の GRE トンネルインターフェイスを作成します。nmcli connection add type ip-tunnel ip-tunnel.mode gre con-name gre1 ifname gre1 remote 198.51.100.5 local 203.0.113.10
# nmcli connection add type ip-tunnel ip-tunnel.mode gre con-name gre1 ifname gre1 remote 198.51.100.5 local 203.0.113.10
Copy to Clipboard Copied! remote
パラメーターおよびlocal
パラメーターは、リモートルーターおよびローカルルーターのパブリック IP アドレスを設定します。重要gre0
デバイス名は予約されています。デバイスにgre1
または別の名前を使用します。IPv4 アドレスを
gre1
デバイスに設定します。nmcli connection modify gre1 ipv4.addresses '10.0.1.1/30'
# nmcli connection modify gre1 ipv4.addresses '10.0.1.1/30'
Copy to Clipboard Copied! トンネルには、2 つの使用可能な IP アドレスを持つ
/30
サブネットで十分であることに注意してください。手動の IPv4 設定を使用するように
gre1
接続を設定します。nmcli connection modify gre1 ipv4.method manual
# nmcli connection modify gre1 ipv4.method manual
Copy to Clipboard Copied! トラフィックを
172.16.0.0/24
ネットワークにルーティングする静的ルートをルーター B のトンネル IP に追加します。nmcli connection modify gre1 +ipv4.routes "172.16.0.0/24 10.0.1.2"
# nmcli connection modify gre1 +ipv4.routes "172.16.0.0/24 10.0.1.2"
Copy to Clipboard Copied! gre1
コネクションを有効にします。nmcli connection up gre1
# nmcli connection up gre1
Copy to Clipboard Copied! パケット転送を有効にします。
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
Copy to Clipboard Copied!
ネットワーク B の RHEL ルーターで、次のコマンドを実行します。
gre1
という名前の GRE トンネルインターフェイスを作成します。nmcli connection add type ip-tunnel ip-tunnel.mode gre con-name gre1 ifname gre1 remote 203.0.113.10 local 198.51.100.5
# nmcli connection add type ip-tunnel ip-tunnel.mode gre con-name gre1 ifname gre1 remote 203.0.113.10 local 198.51.100.5
Copy to Clipboard Copied! remote
パラメーターおよびlocal
パラメーターは、リモートルーターおよびローカルルーターのパブリック IP アドレスを設定します。IPv4 アドレスを
gre1
デバイスに設定します。nmcli connection modify gre1 ipv4.addresses '10.0.1.2/30'
# nmcli connection modify gre1 ipv4.addresses '10.0.1.2/30'
Copy to Clipboard Copied! 手動の IPv4 設定を使用するように
gre1
接続を設定します。nmcli connection modify gre1 ipv4.method manual
# nmcli connection modify gre1 ipv4.method manual
Copy to Clipboard Copied! トラフィックを
192.0.2.0/24
ネットワークにルーティングする静的ルートをルーター A のトンネル IP に追加します。nmcli connection modify gre1 +ipv4.routes "192.0.2.0/24 10.0.1.1"
# nmcli connection modify gre1 +ipv4.routes "192.0.2.0/24 10.0.1.1"
Copy to Clipboard Copied! gre1
コネクションを有効にします。nmcli connection up gre1
# nmcli connection up gre1
Copy to Clipboard Copied! パケット転送を有効にします。
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
Copy to Clipboard Copied!
検証
各 RHEL ルーターから、他のルーターの内部インターフェイスの IP アドレスに ping します。
ルーター A で
172.16.0.1
に ping します。ping 172.16.0.1
# ping 172.16.0.1
Copy to Clipboard Copied! ルーター B で
192.0.2.1
に ping します。ping 192.0.2.1
# ping 192.0.2.1
Copy to Clipboard Copied!
8.3. IPv4 でイーサネットフレームを転送するための GRETAP トンネルの設定
GRETAP (Generic Routing Encapsulation Terminal Access Point) トンネルは OSI レベル 2 で動作し、RFC 2784 で説明されているように IPv4 パケットのイーサネットトラフィックをカプセル化します。
GRETAP トンネルを介して送信されるデータは暗号化されません。セキュリティー上の理由から、VPN または別の暗号化された接続にトンネルを確立します。
たとえば、以下の図に示すように、2 つの RHEL ルーター間で GRETAP トンネルを作成し、ブリッジを使用して 2 つのネットワークに接続します。

前提条件
- 各 RHEL ルーターには、ローカルネットワークに接続されたネットワークインターフェイスがあり、IP 設定は割り当てられません。
- 各 RHEL ルーターには、インターネットに接続しているネットワークインターフェイスがあります。
手順
ネットワーク A の RHEL ルーターで、次のコマンドを実行します。
bridge0
という名前のブリッジインターフェイスを作成します。nmcli connection add type bridge con-name bridge0 ifname bridge0
# nmcli connection add type bridge con-name bridge0 ifname bridge0
Copy to Clipboard Copied! ブリッジの IP 設定を設定します。
nmcli connection modify bridge0 ipv4.addresses '192.0.2.1/24' nmcli connection modify bridge0 ipv4.method manual
# nmcli connection modify bridge0 ipv4.addresses '192.0.2.1/24' # nmcli connection modify bridge0 ipv4.method manual
Copy to Clipboard Copied! ローカルネットワークに接続されたインターフェイス用の新しい接続プロファイルをブリッジに追加します。
nmcli connection add type ethernet port-type bridge con-name bridge0-port1 ifname enp1s0 controller bridge0
# nmcli connection add type ethernet port-type bridge con-name bridge0-port1 ifname enp1s0 controller bridge0
Copy to Clipboard Copied! GRETAP トンネルインターフェイスの新しい接続プロファイルをブリッジに追加します。
nmcli connection add type ip-tunnel ip-tunnel.mode gretap port-type bridge con-name bridge0-port2 ifname gretap1 remote 198.51.100.5 local 203.0.113.10 controller bridge0
# nmcli connection add type ip-tunnel ip-tunnel.mode gretap port-type bridge con-name bridge0-port2 ifname gretap1 remote 198.51.100.5 local 203.0.113.10 controller bridge0
Copy to Clipboard Copied! remote
パラメーターおよびlocal
パラメーターは、リモートルーターおよびローカルルーターのパブリック IP アドレスを設定します。重要gretap0
デバイス名が予約されています。デバイスにgretap1
または別の名前を使用します。必要に応じて、STP (Spanning Tree Protocol) を無効にする必要がない場合は、これを無効にします。
nmcli connection modify bridge0 bridge.stp no
# nmcli connection modify bridge0 bridge.stp no
Copy to Clipboard Copied! デフォルトでは、STP は有効になり、接続を使用する前に遅延が生じます。
bridge0
接続がアクティベートするように、ブリッジのポートが自動的にアクティブになるようにします。nmcli connection modify bridge0 connection.autoconnect-ports 1
# nmcli connection modify bridge0 connection.autoconnect-ports 1
Copy to Clipboard Copied! bridge0
接続をアクティブにします。nmcli connection up bridge0
# nmcli connection up bridge0
Copy to Clipboard Copied!
ネットワーク B の RHEL ルーターで、次のコマンドを実行します。
bridge0
という名前のブリッジインターフェイスを作成します。nmcli connection add type bridge con-name bridge0 ifname bridge0
# nmcli connection add type bridge con-name bridge0 ifname bridge0
Copy to Clipboard Copied! ブリッジの IP 設定を設定します。
nmcli connection modify bridge0 ipv4.addresses '192.0.2.2/24' nmcli connection modify bridge0 ipv4.method manual
# nmcli connection modify bridge0 ipv4.addresses '192.0.2.2/24' # nmcli connection modify bridge0 ipv4.method manual
Copy to Clipboard Copied! ローカルネットワークに接続されたインターフェイス用の新しい接続プロファイルをブリッジに追加します。
nmcli connection add type ethernet port-type bridge con-name bridge0-port1 ifname enp1s0 controller bridge0
# nmcli connection add type ethernet port-type bridge con-name bridge0-port1 ifname enp1s0 controller bridge0
Copy to Clipboard Copied! GRETAP トンネルインターフェイスの新しい接続プロファイルをブリッジに追加します。
nmcli connection add type ip-tunnel ip-tunnel.mode gretap port-type bridge con-name bridge0-port2 ifname gretap1 remote 203.0.113.10 local 198.51.100.5 controller bridge0
# nmcli connection add type ip-tunnel ip-tunnel.mode gretap port-type bridge con-name bridge0-port2 ifname gretap1 remote 203.0.113.10 local 198.51.100.5 controller bridge0
Copy to Clipboard Copied! remote
パラメーターおよびlocal
パラメーターは、リモートルーターおよびローカルルーターのパブリック IP アドレスを設定します。必要に応じて、STP (Spanning Tree Protocol) を無効にする必要がない場合は、これを無効にします。
nmcli connection modify bridge0 bridge.stp no
# nmcli connection modify bridge0 bridge.stp no
Copy to Clipboard Copied! bridge0
接続がアクティベートするように、ブリッジのポートが自動的にアクティブになるようにします。nmcli connection modify bridge0 connection.autoconnect-ports 1
# nmcli connection modify bridge0 connection.autoconnect-ports 1
Copy to Clipboard Copied! bridge0
接続をアクティブにします。nmcli connection up bridge0
# nmcli connection up bridge0
Copy to Clipboard Copied!
検証
両方のルーターで、
enp1s0
接続およびgretap1
接続が接続され、CONNECTION
列にポートの接続名が表示されていることを確認します。nmcli device
# nmcli device nmcli device DEVICE TYPE STATE CONNECTION ... bridge0 bridge connected bridge0 enp1s0 ethernet connected bridge0-port1 gretap1 iptunnel connected bridge0-port2
Copy to Clipboard Copied! 各 RHEL ルーターから、他のルーターの内部インターフェイスの IP アドレスに ping します。
ルーター A で
192.0.2.2
に ping します。ping 192.0.2.2
# ping 192.0.2.2
Copy to Clipboard Copied! ルーター B で
192.0.2.1
に ping します。ping 192.0.2.1
# ping 192.0.2.1
Copy to Clipboard Copied!
第9章 Wi-Fi 接続の管理
RHEL には、Wi-Fi ネットワークを設定して接続するための複数のユーティリティーとアプリケーションが用意されています。次に例を示します。
-
nmcli
ユーティリティーを使用して、コマンドラインで接続を設定する。 -
nmtui
アプリケーションを使用して、テキストベースのユーザーインターフェイスで接続を設定する。 -
GNOME Settings
アプリケーションを使用して、GNOME アプリケーションで接続を設定する。 -
network
RHEL システムロールを使用して、1 つまたは複数のホストでの接続の設定を自動化する。
9.1. サポートされている Wi-Fi セキュリティータイプ
Wi-Fi ネットワークがサポートするセキュリティータイプにより、データ送信の安全度は異なります。
暗号化を使用しない、または安全でない WPA 標準のみをサポートする Wi-Fi ネットワークには接続しないでください。
Red Hat Enterprise Linux は、以下の Wi-Fi セキュリティータイプをサポートします。
-
None
: 暗号化は無効になり、ネットワーク経由でプレーンテキスト形式でデータが転送されます。 -
Enhanced Open
: opportunistic wireless encryption (OWE) を使用すると、デバイスは一意のペアワイズマスターキー (PMK) をネゴシエートして、認証なしでワイヤレスネットワークの接続を暗号化します。 -
LEAP
: Cisco が開発した Lightweight Extensible Authentication Protocol は、拡張認証プロトコル (EAP) の独自バージョンです。 -
WPA & WPA2 Personal
: パーソナルモードでは、Wi-Fi Protected Access (WPA) および Wi-Fi Protected Access 2 (WPA2) 認証方法で事前共有キーが使用されます。 -
WPA & WPA2 Enterprise
: エンタープライズモードでは、WPA と WPA2 は EAP フレームワークを使用し、Remote Authentication Dial-In User Service (RADIUS) サーバーに対してユーザーを認証します。 -
WPA3 Personal
: Wi-Fi Protected Access 3 (WPA3) Personal は、辞書攻撃を防ぐために pre-shared keys (PSK) の代わりに simultaneous authentication of equals (SAE) を使用します。WPA3 では、Perfect Forward Secrecy (PFS) が使用されます。
9.2. nmcli
を使用した Wi-Fi ネットワークへの接続
nmcli
ユーティリティーを使用して、Wi-Fi ネットワークに接続できます。初めてネットワークに接続しようとすると、ユーティリティーは NetworkManager 接続プロファイルを自動的に作成します。ネットワークに静的 IP アドレスなどの追加設定が必要な場合は、プロファイルが自動的に作成された後にプロファイルを変更できます。
前提条件
- ホストに Wi-Fi デバイスがインストールされている。
-
Wi-Fi デバイスが有効になっている。確認するには、
nmcli radio
コマンドを使用します。
手順
NetworkManager で Wi-Fi 無線が無効になっている場合は、この機能を有効にします。
nmcli radio wifi on
# nmcli radio wifi on
Copy to Clipboard Copied! オプション: 利用可能な Wi-Fi ネットワークを表示します。
nmcli device wifi list
# nmcli device wifi list IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY 00:53:00:2F:3B:08 Office Infra 44 270 Mbit/s 57 ▂▄▆_ WPA2 WPA3 00:53:00:15:03:BF -- Infra 1 130 Mbit/s 48 ▂▄__ WPA2 WPA3
Copy to Clipboard Copied! サービスセット識別子 (
SSID
) 列には、ネットワークの名前が含まれています。列に--
が表示されている場合、このネットワークのアクセスポイントは SSID をブロードキャストしていません。Wi-Fi ネットワークに接続します。
nmcli device wifi connect Office --ask
# nmcli device wifi connect Office --ask Password: wifi-password
Copy to Clipboard Copied! 対話的に入力するのではなく、コマンドでパスワードを設定する場合は、コマンドで
--ask
の代わりにpassword <Wi-Fi_password>
オプションを使用します。nmcli device wifi connect Office password <wifi_password>
# nmcli device wifi connect Office password <wifi_password>
Copy to Clipboard Copied! ネットワークが静的 IP アドレスを必要とする場合、NetworkManager はこの時点で接続のアクティブ化に失敗することに注意してください。後の手順で IP アドレスを設定できます。
ネットワークに静的 IP アドレスが必要な場合:
IPv4 アドレス設定を設定します。次に例を示します。
nmcli connection modify Office ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200 ipv4.dns-search example.com
# nmcli connection modify Office ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200 ipv4.dns-search example.com
Copy to Clipboard Copied! IPv6 アドレス設定を設定します。次に例を示します。
nmcli connection modify Office ipv6.method manual ipv6.addresses 2001:db8:1::1/64 ipv6.gateway 2001:db8:1::fffe ipv6.dns 2001:db8:1::ffbb ipv6.dns-search example.com
# nmcli connection modify Office ipv6.method manual ipv6.addresses 2001:db8:1::1/64 ipv6.gateway 2001:db8:1::fffe ipv6.dns 2001:db8:1::ffbb ipv6.dns-search example.com
Copy to Clipboard Copied!
接続を再度有効にします。
nmcli connection up Office
# nmcli connection up Office
Copy to Clipboard Copied!
検証
アクティブな接続を表示します。
nmcli connection show --active
# nmcli connection show --active NAME ID TYPE DEVICE Office 2501eb7e-7b16-4dc6-97ef-7cc460139a58 wifi wlp0s20f3
Copy to Clipboard Copied! 作成した Wi-Fi 接続が出力にリストされている場合、その接続はアクティブです。
ホスト名または IP アドレスに ping を実行します。
ping -c 3 example.com
# ping -c 3 example.com
Copy to Clipboard Copied!
9.3. GNOME 設定アプリケーションを使用した Wi-Fi ネットワークへの接続
gnome-control-center
という名前の GNOME settings
アプリケーションを使用して、Wi-Fi ネットワークに接続し、接続を設定できます。初めてネットワークに接続するとき、GNOME は NetworkManager 接続プロファイルを作成します。
GNOME settings
では、RHEL がサポートするすべての Wi-Fi ネットワークセキュリティータイプの Wi-Fi 接続を設定できます。
前提条件
- ホストに Wi-Fi デバイスがインストールされている。
-
Wi-Fi デバイスが有効になっている。確認するには、
nmcli radio
コマンドを使用します。
手順
-
Super キーを押し、
Wi-Fi
と入力して Enter を押します。 - 接続したい Wi-Fi ネットワークの名前をクリックします。
-
ネットワークのパスワードを入力し、
Connect
をクリックします。 静的 IP アドレスや WPA2 パーソナル以外のセキュリティータイプなど、ネットワークに追加の設定が必要な場合:
- ネットワーク名の横にある歯車のアイコンをクリックします。
オプション:
Details
タブでネットワークプロファイルを設定して、自動的に接続しないようにします。この機能を無効にした場合は、
GNOME settings
や GNOME システムメニューなどを使用して、常に手動でネットワークに接続する必要があります。-
IPv4
タブで IPv4 設定を設定し、IPv6
タブで IPv6 設定を設定します。 Security
タブで、ネットワークの認証 (WPA3 Personal
など) を選択し、パスワードを入力します。選択したセキュリティーに応じて、アプリケーションは追加のフィールドを表示します。それに応じてそれらを埋めます。詳細は、Wi-Fi ネットワークの管理者におたずねください。
-
Apply
をクリックします。
検証
トップバーの右側にあるシステムメニューを開き、Wi-Fi ネットワークが接続されていることを確認します。
ネットワークがリストに表示されていれば、接続されています。
ホスト名または IP アドレスに ping を実行します。
ping -c 3 example.com
# ping -c 3 example.com
Copy to Clipboard Copied!
9.4. nmtui
を使用した Wi-Fi 接続の設定
nmtui
アプリケーションは、NetworkManager 用のテキストベースのユーザーインターフェイスを提供します。nmtui
を使用して Wi-Fi ネットワークに接続できます。
nmtui
で以下を行います。
- カーソルキーを使用してナビゲートします。
- ボタンを選択して Enter を押します。
- Space を使用してチェックボックスをオンまたはオフにします。
- 前の画面に戻るには、ESC を使用します。
手順
nmtui
を開始します。nmtui
# nmtui
Copy to Clipboard Copied! -
Edit a connection
選択し、Enter を押します。 -
Add
ボタンを押します。 -
ネットワークタイプのリストから
Wi-Fi
を選択し、Enter を押します。 オプション: 作成する NetworkManager プロファイルの名前を入力します。
ホストに複数のプロファイルがある場合は、わかりやすい名前を付けると、プロファイルの目的を識別しやすくなります。
-
Wi-Fi ネットワークの名前である Service Set Identifier (SSID) を
SSID
フィールドに入力します。 -
Mode
フィールドはデフォルトのClient
のままにします。 Security
フィールドを選択して Enter を押し、リストからネットワークの認証タイプを設定します。選択した認証タイプに応じて、
nmtui
は異なるフィールドを表示します。- 認証タイプ関連のフィールドに入力します。
Wi-Fi ネットワークに静的 IP アドレスが必要な場合:
-
プロトコルの横にある
Automatic
ボタンを押し、表示されたリストからManual
を選択します。 -
設定するプロトコルの横にある
Show
ボタンを押して、追加のフィールドを表示し、それらに入力します。
-
プロトコルの横にある
OK
ボタンを押して、新しい接続を作成し、自動的にアクティブにします。-
Back
ボタンを押してメインメニューに戻ります。 -
Quit
を選択し、Enter キーを押してnmtui
アプリケーションを閉じます。
検証
nmtui を開きます。
nmcli connection show --active
# nmcli connection show --active NAME ID TYPE DEVICE Office 2501eb7e-7b16-4dc6-97ef-7cc460139a58 wifi wlp0s20f3
Copy to Clipboard Copied! 作成した Wi-Fi 接続が出力にリストされている場合、その接続はアクティブです。
ホスト名または IP アドレスに ping を実行します。
ping -c 3 example.com
# ping -c 3 example.com
Copy to Clipboard Copied!
9.5. nmcli
を使用した既存のプロファイルでの 802.1X ネットワーク認証による Wi-Fi 接続の設定
nmcli
ユーティリティーを使用して、クライアントがネットワークに対して自己認証するように設定できます。たとえば、wlp1s0
という名前の既存の NetworkManager Wi-Fi 接続プロファイルで、MSCHAPv2 (Microsoft Challenge-Handshake Authentication Protocol version 2) を使用する PEAP (Protected Extensible Authentication Protocol) 認証を設定します。
前提条件
- ネットワークには 802.1X ネットワーク認証が必要です。
- Wi-Fi 接続プロファイルが NetworkManager に存在し、有効な IP 設定があります。
-
クライアントがオーセンティケーターの証明書を検証する必要がある場合は、認証局 (CA) 証明書を
/etc/pki/ca-trust/source/anchors/
ディレクトリーに保存する必要があります。 -
wpa_supplicant
パッケージがインストールされている。
手順
Wi-Fi セキュリティーモードを
wpa-eap
に設定し、Extensible Authentication Protocol (EAP) をpeap
に設定し、内部認証プロトコルをmschapv2
に設定し、ユーザー名を設定します。nmcli connection modify wlp1s0 wireless-security.key-mgmt wpa-eap 802-1x.eap peap 802-1x.phase2-auth mschapv2 802-1x.identity <user_name>
# nmcli connection modify wlp1s0 wireless-security.key-mgmt wpa-eap 802-1x.eap peap 802-1x.phase2-auth mschapv2 802-1x.identity <user_name>
Copy to Clipboard Copied! 1 つのコマンドで
wireless-security.key-mgmt
パラメーター、802-1x.eap
パラメーター、802-1x.phase2-auth
パラメーター、および802-1x.identity
パラメーターを設定する必要があります。オプション: 設定にパスワードを保存します。
nmcli connection modify wlp1s0 802-1x.password <password>
# nmcli connection modify wlp1s0 802-1x.password <password>
Copy to Clipboard Copied! 重要デフォルトでは、NetworkManager はパスワードをプレーンテキストで
/etc/sysconfig/network-scripts/keys-connection_name
ファイルに保存します。このファイルはroot
ユーザーのみが読み取ることができます。ただし、設定ファイル内のプレーンテキストのパスワードは、セキュリティーリスクになる可能性があります。セキュリティーを強化するには、
802-1x.password-flags
パラメーターをagent-owned
に設定します。この設定では、GNOME デスクトップ環境またはnm-applet
が実行中のサーバーで、NetworkManager は最初にキーリングのロックを解除してから、これらのサービスからパスワードを取得します。その他の場合は、NetworkManager によりパスワードの入力が求められます。クライアントがオーセンティケーターの証明書を検証する必要がある場合は、接続プロファイルの
802-1x.ca-cert
パラメーターを CA 証明書のパスに設定します。nmcli connection modify wlp1s0 802-1x.ca-cert /etc/pki/ca-trust/source/anchors/ca.crt
# nmcli connection modify wlp1s0 802-1x.ca-cert /etc/pki/ca-trust/source/anchors/ca.crt
Copy to Clipboard Copied! 注記セキュリティー上の理由から、クライアントでオーセンティケーターの証明書を検証することを推奨します。
接続プロファイルをアクティベートします。
nmcli connection up wlp1s0
# nmcli connection up wlp1s0
Copy to Clipboard Copied!
検証
- ネットワーク認証が必要なネットワーク上のリソースにアクセスします。
9.6. network
RHEL システムロールを使用した 802.1X ネットワーク認証による Wi-Fi 接続の設定
ネットワークアクセス制御 (NAC) は、不正なクライアントからネットワークを保護します。クライアントがネットワークにアクセスできるようにするために、認証に必要な詳細を NetworkManager 接続プロファイルで指定できます。Ansible と network
RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。
Ansible Playbook を使用して秘密鍵、証明書、および CA 証明書をクライアントにコピーしてから、network
RHEL システムロールを使用して 802.1X ネットワーク認証による接続プロファイルを設定できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - ネットワークは 802.1X ネットワーク認証をサポートしている。
-
マネージドノードに
wpa_supplicant
パッケージをインストールしました。 - DHCP は、管理対象ノードのネットワークで使用できる。
TLS 認証に必要な以下のファイルがコントロールノードにある。
-
クライアントキーが
/srv/data/client.key
ファイルに保存されている。 -
クライアント証明書が
/srv/data/client.crt
ファイルに保存されている。 -
CA 証明書は
/srv/data/ca.crt
ファイルに保存されます。
-
クライアントキーが
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
ansible-vault create ~/vault.yml
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
Copy to Clipboard Copied! ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。pwd: <password>
pwd: <password>
Copy to Clipboard Copied! - 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configure a wifi connection with 802.1X authentication hosts: managed-node-01.example.com vars_files: - ~/vault.yml tasks: - name: Copy client key for 802.1X authentication ansible.builtin.copy: src: "/srv/data/client.key" dest: "/etc/pki/tls/private/client.key" mode: 0400 - name: Copy client certificate for 802.1X authentication ansible.builtin.copy: src: "/srv/data/client.crt" dest: "/etc/pki/tls/certs/client.crt" - name: Copy CA certificate for 802.1X authentication ansible.builtin.copy: src: "/srv/data/ca.crt" dest: "/etc/pki/ca-trust/source/anchors/ca.crt" - name: Wifi connection profile with dynamic IP address settings and 802.1X ansible.builtin.import_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: Wifi connection profile with dynamic IP address settings and 802.1X interface_name: wlp1s0 state: up type: wireless autoconnect: yes ip: dhcp4: true auto6: true wireless: ssid: "Example-wifi" key_mgmt: "wpa-eap" ieee802_1x: identity: <user_name> eap: tls private_key: "/etc/pki/tls/private/client.key" private_key_password: "{{ pwd }}" private_key_password_flags: none client_cert: "/etc/pki/tls/certs/client.crt" ca_cert: "/etc/pki/ca-trust/source/anchors/ca.crt" domain_suffix_match: "example.com" network_allow_restart: true
--- - name: Configure a wifi connection with 802.1X authentication hosts: managed-node-01.example.com vars_files: - ~/vault.yml tasks: - name: Copy client key for 802.1X authentication ansible.builtin.copy: src: "/srv/data/client.key" dest: "/etc/pki/tls/private/client.key" mode: 0400 - name: Copy client certificate for 802.1X authentication ansible.builtin.copy: src: "/srv/data/client.crt" dest: "/etc/pki/tls/certs/client.crt" - name: Copy CA certificate for 802.1X authentication ansible.builtin.copy: src: "/srv/data/ca.crt" dest: "/etc/pki/ca-trust/source/anchors/ca.crt" - name: Wifi connection profile with dynamic IP address settings and 802.1X ansible.builtin.import_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: Wifi connection profile with dynamic IP address settings and 802.1X interface_name: wlp1s0 state: up type: wireless autoconnect: yes ip: dhcp4: true auto6: true wireless: ssid: "Example-wifi" key_mgmt: "wpa-eap" ieee802_1x: identity: <user_name> eap: tls private_key: "/etc/pki/tls/private/client.key" private_key_password: "{{ pwd }}" private_key_password_flags: none client_cert: "/etc/pki/tls/certs/client.crt" ca_cert: "/etc/pki/ca-trust/source/anchors/ca.crt" domain_suffix_match: "example.com" network_allow_restart: true
Copy to Clipboard Copied! サンプル Playbook で指定されている設定は次のとおりです。
ieee802_1x
- この変数には、802.1X 関連の設定を含めます。
eap: tls
-
Extensible Authentication Protocol (EAP) に証明書ベースの
TLS
認証方式を使用するようにプロファイルを設定します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.network/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied!
9.7. ワイヤレス規制ドメインの手動設定
RHEL では、udev
ルールが setregdomain
ユーティリティーを実行してワイヤレス規制ドメインを設定します。次に、ユーティリティーはこの情報をカーネルに提供します。
デフォルトでは、setregdomain
は国コードを自動的に決定しようとします。これが失敗する場合は、ワイヤレス規制ドメインの設定が間違っている可能性があります。この問題を回避するには、国コードを手動で設定します。
規制ドメインを手動で設定すると、自動検出が無効になります。そのため、後で別の国でコンピューターを使用すると、以前に設定された設定が正しくなくなる可能性があります。この場合、/etc/sysconfig/regdomain
ファイルを削除して自動検出に戻すか、以下の手順を使用して規制ドメイン設定を手動で再度更新します。
前提条件
- Wi-Fi デバイスのドライバーが、規制ドメインの変更をサポートしている。
手順
オプション: 現在の規制ドメイン設定を表示します。
iw reg get
# iw reg get global country US: DFS-FCC ...
Copy to Clipboard Copied! 次の内容で
/etc/sysconfig/regdomain
ファイルを作成します。COUNTRY=<country_code>
COUNTRY=<country_code>
Copy to Clipboard Copied! COUNTRY
変数を ISO 3166-1 alpha2 国コード (ドイツの場合はDE
、アメリカ合衆国の場合はUS
など) に設定します。規制ドメインを設定します。
setregdomain
# setregdomain
Copy to Clipboard Copied!
検証
規制ドメインの設定を表示します。
iw reg get
# iw reg get global country DE: DFS-ETSI ...
Copy to Clipboard Copied!
第10章 MACsec を使用した同じ物理ネットワーク内のレイヤー 2 トラフィックの暗号化
MACsec を使用して、2 つのデバイス間の通信を (ポイントツーポイントで) セキュリティー保護できます。たとえば、ブランチオフィスがメトロイーサネット接続を介してセントラルオフィスに接続されている場合、オフィスを接続する 2 つのホストで MACsec を設定して、セキュリティーを強化できます。
10.1. MACsec がセキュリティーを強化する方法
Media Access Control Security (MACsec) は、イーサーネットリンクで異なるトラフィックタイプを保護するレイヤー 2 プロトコルです。これには以下が含まれます。
- Dynamic Host Configuration Protocol (DHCP)
- アドレス解決プロトコル (ARP)
- IPv4 および IPv6 トラフィック
- TCP や UDP などの IP 経由のトラフィック
MACsec はデフォルトで、LAN 内のすべてのトラフィックを GCM-AES-128 アルゴリズムで暗号化および認証し、事前共有キーを使用して参加者ホスト間の接続を確立します。事前共有キーを変更するには、MACsec を使用するすべてのネットワークホストで NM 設定を更新する必要があります。
MACsec 接続では、イーサネットネットワークカード、VLAN、トンネルデバイスなどのイーサネットデバイスを親として使用します。暗号化された接続のみを使用して他のホストと通信するように MACsec デバイスにのみ IP 設定を指定することも、親デバイスに IP 設定を設定することもできます。後者の場合、親デバイスを使用して、暗号化されていない接続と暗号化された接続用の MACsec デバイスで他のホストと通信できます。
MACsec には特別なハードウェアは必要ありません。たとえば、ホストとスイッチの間のトラフィックのみを暗号化する場合を除き、任意のスイッチを使用できます。このシナリオでは、スイッチが MACsec もサポートする必要があります。
つまり、次の 2 つの一般的なシナリオに合わせて MACsec を設定できます。
- ホストからホストへ
- ホストからスイッチへ、およびスイッチから他のホストへ
MACsec は、同じ物理 LAN または仮想 LAN 内にあるホスト間でのみ使用できます。
リンク層 (Open Systems Interconnection (OSI) モデルのレイヤー 2 とも呼ばれます) での通信を保護するために MACsec セキュリティー標準を使用すると、主に次のような利点が得られます。
- レイヤー 2 で暗号化することで、レイヤー 7 で個々のサービスを暗号化する必要がなくなります。これにより、各ホストの各エンドポイントで多数の証明書を管理することに関連するオーバーヘッドが削減されます。
- ルーターやスイッチなどの直接接続されたネットワークデバイス間のポイントツーポイントセキュリティー。
- アプリケーションや上位レイヤープロトコルに変更を加える必要がなくなります。
10.2. nmcli
を使用した MACsec 接続の設定
nmcli
ユーティリティーを使用して、MACsec を使用するようにイーサネットインターフェイスを設定できます。たとえば、イーサネット経由で接続された 2 つのホスト間に MACsec 接続を作成できます。
手順
MACsec を設定する最初のホストで:
事前共有鍵の接続アソシエーション鍵 (CAK) と接続アソシエーション鍵名 (CKN) を作成します。
16 バイトの 16 進 CAK を作成します。
dd if=/dev/urandom count=16 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"'
# dd if=/dev/urandom count=16 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' 50b71a8ef0bd5751ea76de6d6c98c03a
Copy to Clipboard Copied! 32 バイトの 16 進 CKN を作成します。
dd if=/dev/urandom count=32 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"'
# dd if=/dev/urandom count=32 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550
Copy to Clipboard Copied!
- 両方のホストで、MACsec 接続を介して接続します。
MACsec 接続を作成します。
nmcli connection add type macsec con-name macsec0 ifname macsec0 connection.autoconnect yes macsec.parent enp1s0 macsec.mode psk macsec.mka-cak 50b71a8ef0bd5751ea76de6d6c98c03a macsec.mka-ckn f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550
# nmcli connection add type macsec con-name macsec0 ifname macsec0 connection.autoconnect yes macsec.parent enp1s0 macsec.mode psk macsec.mka-cak 50b71a8ef0bd5751ea76de6d6c98c03a macsec.mka-ckn f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550
Copy to Clipboard Copied! 前の手順で生成された CAK および CKN を
macsec.mka-cak
およびmacsec.mka-ckn
パラメーターで使用します。この値は、MACsec で保護されるネットワーク内のすべてのホストで同じである必要があります。MACsec 接続で IP を設定します。
IPv4
設定を指定します。たとえば、静的IPv4
アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーをmacsec0
接続に設定するには、以下のコマンドを実行します。nmcli connection modify macsec0 ipv4.method manual ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253'
# nmcli connection modify macsec0 ipv4.method manual ipv4.addresses '192.0.2.1/24' ipv4.gateway '192.0.2.254' ipv4.dns '192.0.2.253'
Copy to Clipboard Copied! IPv6
設定を指定しますたとえば、静的IPv6
アドレス、ネットワークマスク、デフォルトゲートウェイ、および DNS サーバーをmacsec0
接続に設定するには、以下のコマンドを実行します。nmcli connection modify macsec0 ipv6.method manual ipv6.addresses '2001:db8:1::1/32' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd'
# nmcli connection modify macsec0 ipv6.method manual ipv6.addresses '2001:db8:1::1/32' ipv6.gateway '2001:db8:1::fffe' ipv6.dns '2001:db8:1::fffd'
Copy to Clipboard Copied!
接続をアクティベートします。
nmcli connection up macsec0
# nmcli connection up macsec0
Copy to Clipboard Copied!
検証
トラフィックが暗号化されていることを確認します。
tcpdump -nn -i enp1s0
# tcpdump -nn -i enp1s0
Copy to Clipboard Copied! オプション: 暗号化されていないトラフィックを表示します。
tcpdump -nn -i macsec0
# tcpdump -nn -i macsec0
Copy to Clipboard Copied! MACsec の統計を表示します。
ip macsec show
# ip macsec show
Copy to Clipboard Copied! integrity-only (encrypt off) および encryption (encrypt on) の各タイプの保護に対して個々のカウンターを表示します。
ip -s macsec show
# ip -s macsec show
Copy to Clipboard Copied!
10.3. nmstatectl
を使用した MACsec 接続の設定
nmstatectl
ユーティリティーを宣言的に使用して、イーサネットインターフェイスが MACsec を使用するように設定できます。たとえば、YAML ファイルでは、ネットワークの望ましい状態を記述します。ネットワークでは、イーサネット経由で接続された 2 つのホスト間に MACsec 接続があることが想定されます。nmstatectl
ユーティリティーは、YAML ファイルを解釈し、ホスト間に永続的かつ一貫したネットワーク設定をデプロイします。
前提条件
- 物理または仮想イーサネットネットワークインターフェイスコントローラー (NIC) がサーバーに設定されている。
-
nmstate
パッケージがインストールされている。
手順
MACsec を設定する最初のホストで、事前共有キー用の接続関連キー (CAK: connectivity association key) および接続関連キー名 (CKN: connectivity-association key name) を作成します。
16 バイトの 16 進 CAK を作成します。
dd if=/dev/urandom count=16 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"'
# dd if=/dev/urandom count=16 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' 50b71a8ef0bd5751ea76de6d6c98c03a
Copy to Clipboard Copied! 32 バイトの 16 進 CKN を作成します。
dd if=/dev/urandom count=32 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"'
# dd if=/dev/urandom count=32 bs=1 2> /dev/null | hexdump -e '1/2 "%04x"' f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550
Copy to Clipboard Copied!
MACsec 接続を介して接続するホストの両方で、次の手順を実行します。
次の設定を含む YAML ファイル (例:
create-macsec-connection.yml
) を作成します。--- routes: config: - destination: 0.0.0.0/0 next-hop-interface: macsec0 next-hop-address: 192.0.2.2 table-id: 254 - destination: 192.0.2.2/32 next-hop-interface: macsec0 next-hop-address: 0.0.0.0 table-id: 254 dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb interfaces: - name: macsec0 type: macsec state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 32 ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 macsec: encrypt: true base-iface: enp0s1 mka-cak: 50b71a8ef0bd5751ea76de6d6c98c03a mka-ckn: f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550 port: 0 validation: strict send-sci: true
--- routes: config: - destination: 0.0.0.0/0 next-hop-interface: macsec0 next-hop-address: 192.0.2.2 table-id: 254 - destination: 192.0.2.2/32 next-hop-interface: macsec0 next-hop-address: 0.0.0.0 table-id: 254 dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb interfaces: - name: macsec0 type: macsec state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 32 ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 macsec: encrypt: true base-iface: enp0s1 mka-cak: 50b71a8ef0bd5751ea76de6d6c98c03a mka-ckn: f2b4297d39da7330910a74abc0449feb45b5c0b9fc23df1430e1898fcf1c4550 port: 0 validation: strict send-sci: true
Copy to Clipboard Copied! -
前の手順で生成された CAK および CKN を
mka-cak
およびmka-ckn
パラメーターで使用します。この値は、MACsec で保護されるネットワーク内のすべてのホストで同じである必要があります。 オプション: 同じ YAML 設定ファイルで、以下も設定できます。
-
静的 IPv4 アドレス:
192.0.2.1
(サブネットマスクが/32
) -
静的 IPv6 アドレス:
2001:db8:1::1
(サブネットマスクが/64
) -
IPv4 デフォルトゲートウェイ -
192.0.2.2
-
IPv4 DNS サーバー -
192.0.2.200
-
IPv6 DNS サーバー -
2001:db8:1::ffbb
-
DNS 検索ドメイン -
example.com
-
静的 IPv4 アドレス:
設定をシステムに適用します。
nmstatectl apply create-macsec-connection.yml
# nmstatectl apply create-macsec-connection.yml
Copy to Clipboard Copied!
検証
現在の状態を YAML 形式で表示します。
nmstatectl show macsec0
# nmstatectl show macsec0
Copy to Clipboard Copied! トラフィックが暗号化されていることを確認します。
tcpdump -nn -i enp0s1
# tcpdump -nn -i enp0s1
Copy to Clipboard Copied! オプション: 暗号化されていないトラフィックを表示します。
tcpdump -nn -i macsec0
# tcpdump -nn -i macsec0
Copy to Clipboard Copied! MACsec の統計を表示します。
ip macsec show
# ip macsec show
Copy to Clipboard Copied! integrity-only (encrypt off) および encryption (encrypt on) の各タイプの保護に対して個々のカウンターを表示します。
ip -s macsec show
# ip -s macsec show
Copy to Clipboard Copied!
第11章 特定のデバイスを無視するように NetworkManager の設定
デフォルトでは、NetworkManager は /usr/lib/udev/rules.d/85-nm-unmanaged.rules
ファイルに記述されているデバイスを除くすべてのデバイスを管理します。他の特定のデバイスを無視するには、NetworkManager でそのデバイスを unmanaged
として設定できます。
11.1. NetworkManager でデバイスをマネージド外として永続的に設定
インターフェイス名、MAC アドレス、デバイスタイプなどのいくつかの基準に基づいてデバイスを unmanaged
として設定できます。設定内のデバイスセクションを使用してデバイスを管理対象外として設定した場合、NetworkManager は接続プロファイルでそのデバイスの使用を開始するまでそのデバイスを管理しません。
手順
オプション: デバイスの一覧を表示して、
unmanaged
に設定するデバイスまたは MAC アドレスを特定します。ip link show
# ip link show ... 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:74:79:56 brd ff:ff:ff:ff:ff:ff ...
Copy to Clipboard Copied! -
/etc/NetworkManager/conf.d/
ディレクトリーに*.conf
ファイルを作成します (例:/etc/NetworkManager/conf.d/99-unmanaged-devices.conf
)。 管理対象外として設定するデバイスごとに、一意の名前を持つセクションをファイルに追加します。
重要セクション名は
device-
で始まる必要があります。特定のインターフェイスを管理対象外として設定するには、以下を追加します。
[device-enp1s0-unmanaged] match-device=interface-name:enp1s0 managed=0
[device-enp1s0-unmanaged] match-device=interface-name:enp1s0 managed=0
Copy to Clipboard Copied! 特定の MAC アドレスを管理対象外として設定するには、以下を追加します。
[device-mac525400747956-unmanaged] match-device=mac:52:54:00:74:79:56 managed=0
[device-mac525400747956-unmanaged] match-device=mac:52:54:00:74:79:56 managed=0
Copy to Clipboard Copied! 特定のタイプのすべてのデバイスを管理対象外として設定するには、以下を追加します。
[device-ethernet-unmanaged] match-device=type:ethernet managed=0
[device-ethernet-unmanaged] match-device=type:ethernet managed=0
Copy to Clipboard Copied! 複数のデバイスを管理対象外に設定するには、
unmanaged-devices
パラメーターのエントリーをセミコロンで区切ります。以下に例を示します。[device-multiple-devices-unmanaged] match-device=interface-name:enp1s0;interface-name:enp7s0 managed=0
[device-multiple-devices-unmanaged] match-device=interface-name:enp1s0;interface-name:enp7s0 managed=0
Copy to Clipboard Copied! または、このファイルにデバイスごとに個別のセクションを追加したり、
/etc/NetworkManager/conf.d/
ディレクトリーに追加の*.conf
ファイルを作成したりすることもできます。
ホストシステムを再起動します。
reboot
# reboot
Copy to Clipboard Copied!
検証
デバイスのリストを表示します。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet unmanaged -- ...
Copy to Clipboard Copied! enp1s0
デバイスの横のunmanaged
状態は、NetworkManager がこのデバイスを管理していないことを示しています。
トラブルシューティング
nmcli device status
コマンドの出力にデバイスがunmanaged
としてリストされていない場合は、NetworkManager 設定を表示します。NetworkManager --print-config
# NetworkManager --print-config ... [device-enp1s0-unmanaged] match-device=interface-name:enp1s0 managed=0 ...
Copy to Clipboard Copied! 指定した設定と出力が一致しない場合は、より優先度が高い設定ファイルによって設定がオーバーライドされていないことを確認してください。NetworkManager が複数の設定ファイルをマージする方法の詳細は、システムの
NetworkManager.conf(5)
man ページを参照してください。
11.2. NetworkManager でデバイスをマネージド外として一時的に設定
たとえばテスト目的で、デバイスを一時的に unmanaged
として設定できます。この変更は、NetworkManager systemd サービスの再ロード後および再起動後も維持されますが、システムの再起動後は維持されません。
手順
必要に応じて、デバイスのリストを表示して、
マネージド外
に設定するデバイスを特定します。nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet disconnected -- ...
Copy to Clipboard Copied! enp1s0
デバイスをunmanaged
の状態に設定します。nmcli device set enp1s0 managed no
# nmcli device set enp1s0 managed no
Copy to Clipboard Copied!
検証
デバイスのリストを表示します。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet unmanaged -- ...
Copy to Clipboard Copied! enp1s0
デバイスの横のunmanaged
状態は、NetworkManager がこのデバイスを管理していないことを示しています。
11.3. NetworkManager が特定のネットワークデバイスを管理しない理由を特定する
NetworkManager は、各ネットワークデバイスのステータスに加えて、デバイスが現在のステータスになっている理由も追跡します。この機能を使用すると、NetworkManager が特定のデバイスを管理しない理由を特定できます。
手順
すべてのネットワークデバイスのステータスとその理由を表示します。
nmcli -f GENERAL.DEVICE,GENERAL.STATE,GENERAL.REASON device show
# nmcli -f GENERAL.DEVICE,GENERAL.STATE,GENERAL.REASON device show
Copy to Clipboard Copied! コマンドにデバイス名を渡すと、指定したデバイスの出力のみを表示できます。
出力例:
GENERAL.DEVICE: enp1s0 GENERAL.STATE: 10 (unmanaged) GENERAL.REASON: 75 (The device is unmanaged by explicit user decision (e.g. 'nmcli device set $DEV managed no')) GENERAL.DEVICE: enp7s0 GENERAL.STATE: 10 (unmanaged) GENERAL.REASON: 74 (The device is unmanaged by user decision in NetworkManager.conf ('unmanaged' in a [device*] section) GENERAL.DEVICE: veth3 GENERAL.STATE: 10 (unmanaged) GENERAL.REASON: 77 (The device is unmanaged via udev rule)
GENERAL.DEVICE: enp1s0 GENERAL.STATE: 10 (unmanaged) GENERAL.REASON: 75 (The device is unmanaged by explicit user decision (e.g. 'nmcli device set $DEV managed no')) GENERAL.DEVICE: enp7s0 GENERAL.STATE: 10 (unmanaged) GENERAL.REASON: 74 (The device is unmanaged by user decision in NetworkManager.conf ('unmanaged' in a [device*] section) GENERAL.DEVICE: veth3 GENERAL.STATE: 10 (unmanaged) GENERAL.REASON: 77 (The device is unmanaged via udev rule)
Copy to Clipboard Copied! 注記このコマンドは、管理対象か管理対象外かに関係なく、すべてのデバイスのステータスを返すことに注意してください。
第12章 デフォルトゲートウェイの管理
デフォルトゲートウェイは、他のルートがパケットの宛先と一致する場合にネットワークパケットを転送するルーターです。ローカルネットワークでは、通常、デフォルトゲートウェイは、インターネットの近くの 1 ホップのホストです。
12.1. nmcli
を使用して既存の接続にデフォルトゲートウェイを設定する
ほとんどの場合、管理者は接続を作成するときにデフォルトゲートウェイを設定します。ただし、nmcli
ユーティリティーを使用して、以前に作成した接続のデフォルトゲートウェイ設定を設定または更新することもできます。
前提条件
- デフォルトゲートウェイが設定されている接続で、静的 IP アドレスを少なくとも 1 つ設定している。
-
物理コンソールにログインしている場合は、十分な権限を有している。それ以外の場合は、
root
権限が必要になります。
手順
デフォルトゲートウェイの IP アドレスを設定します。
IPv4 デフォルトゲートウェイを設定するには、次のように実行します。
nmcli connection modify <connection_name> ipv4.gateway "<IPv4_gateway_address>"
# nmcli connection modify <connection_name> ipv4.gateway "<IPv4_gateway_address>"
Copy to Clipboard Copied! IPv6 デフォルトゲートウェイを設定するには、次のように実行します。
nmcli connection modify <connection_name> ipv6.gateway "<IPv6_gateway_address>"
# nmcli connection modify <connection_name> ipv6.gateway "<IPv6_gateway_address>"
Copy to Clipboard Copied! ネットワーク接続を再起動して、変更を有効にします。
nmcli connection up <connection_name>
# nmcli connection up <connection_name>
Copy to Clipboard Copied! 警告このネットワーク接続を現在使用しているすべての接続が、再起動時に一時的に中断されます。
検証
ルートがアクティブであることを確認します。
IPv4 デフォルトゲートウェイを表示するには、次のように実行します。
ip -4 route
# ip -4 route default via 192.0.2.1 dev example proto static metric 100
Copy to Clipboard Copied! IPv6 デフォルトゲートウェイを表示するには、次のように実行します。
ip -6 route
# ip -6 route default via 2001:db8:1::1 dev example proto static metric 100 pref medium
Copy to Clipboard Copied!
12.2. nmstatectl
を使用して既存の接続にデフォルトゲートウェイを設定する
ほとんどの場合、管理者は接続を作成するときにデフォルトゲートウェイを設定します。ただし、nmstatectl
ユーティリティーを使用して、以前に作成した接続のデフォルトゲートウェイ設定を設定または更新することもできます。
nmstatectl
ユーティリティーを使用して、Nmstate API を介してデフォルトゲートウェイを設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
前提条件
- デフォルトゲートウェイが設定されている接続で、静的 IP アドレスを少なくとも 1 つ設定している。
-
enp1s0
インターフェイスが設定され、デフォルトゲートウェイの IP アドレスがこのインターフェイスの IP 設定のサブネット内にある。 -
nmstate
パッケージがインストールされている。
手順
以下の内容を含む YAML ファイル (例:
~/set-default-gateway.yml
) を作成します。--- routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.1 next-hop-interface: enp1s0
--- routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.1 next-hop-interface: enp1s0
Copy to Clipboard Copied! これらの設定では、
192.0.2.1
をデフォルトゲートウェイとして定義します。デフォルトゲートウェイはenp1s0
インターフェイス経由で到達可能です。設定をシステムに適用します。
nmstatectl apply ~/set-default-gateway.yml
# nmstatectl apply ~/set-default-gateway.yml
Copy to Clipboard Copied!
12.3. network
RHEL システムロールを使用して既存の接続にデフォルトゲートウェイを設定する
パケットの宛先に、直接接続されたネットワーク経由でも、ホストに設定されたルート経由でも到達できない場合、ホストはネットワークパケットをデフォルトゲートウェイに転送します。ホストのデフォルトゲートウェイを設定するには、デフォルトゲートウェイと同じネットワークに接続されているインターフェイスの NetworkManager 接続プロファイルで、そのゲートウェイを設定します。Ansible と network
RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。
ほとんどの場合、管理者は接続を作成するときにデフォルトゲートウェイを設定します。ただし、以前に作成した接続でデフォルトゲートウェイ設定を設定または更新することもできます。
network
RHEL システムロールを使用して、既存接続プロファイル内の特定の値だけを更新することはできません。このロールは、接続プロファイルが Playbook の設定と正確に一致するようにします。同じ名前の接続プロファイルがすでに存在する場合、このロールは Playbook の設定を適用し、プロファイル内の他のすべての設定をデフォルトにリセットします。値がリセットされないようにするには、変更しない設定も含め、ネットワーク接続プロファイルの設定全体を Playbook に常に指定してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Ethernet connection profile with static IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: enp1s0 type: ethernet autoconnect: yes ip: address: - 198.51.100.20/24 - 2001:db8:1::1/64 gateway4: 198.51.100.254 gateway6: 2001:db8:1::fffe dns: - 198.51.100.200 - 2001:db8:1::ffbb dns_search: - example.com state: up
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Ethernet connection profile with static IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: enp1s0 type: ethernet autoconnect: yes ip: address: - 198.51.100.20/24 - 2001:db8:1::1/64 gateway4: 198.51.100.254 gateway6: 2001:db8:1::fffe dns: - 198.51.100.200 - 2001:db8:1::ffbb dns_search: - example.com state: up
Copy to Clipboard Copied! Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.network/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied!
検証
管理対象ノードの Ansible fact をクエリーし、アクティブなネットワーク設定を確認します。
ansible managed-node-01.example.com -m ansible.builtin.setup
# ansible managed-node-01.example.com -m ansible.builtin.setup ... "ansible_default_ipv4": { ... "gateway": "198.51.100.254", "interface": "enp1s0", ... }, "ansible_default_ipv6": { ... "gateway": "2001:db8:1::fffe", "interface": "enp1s0", ... } ...
Copy to Clipboard Copied!
12.4. NetworkManager が複数のデフォルトゲートウェイを管理する方法
フォールバック上の理由で特定の状況では、ホストに複数のデフォルトゲートウェイを設定します。ただし、非同期ルーティングの問題を回避するために、同じプロトコルの各デフォルトゲートウェイには別のメトリック値が必要です。RHEL は、最も低いメトリックセットを持つデフォルトゲートウェイへの接続のみを使用することに注意してください。
以下のコマンドを使用して、接続の IPv4 ゲートウェイと IPv6 ゲートウェイの両方にメトリックを設定できます。
nmcli connection modify <connection_name> ipv4.route-metric <value> ipv6.route-metric <value>
# nmcli connection modify <connection_name> ipv4.route-metric <value> ipv6.route-metric <value>
ルーティングの問題を回避するために、複数の接続プロファイルで同じプロトコルに同じメトリック値を設定しないでください。
メトリック値なしでデフォルトのゲートウェイを設定すると、NetworkManager は、インターフェイスタイプに基づいてメトリック値を自動的に設定します。このため、NetworkManager は、アクティブな最初の接続に、このネットワークタイプのデフォルト値を割り当て、そのネットワークタイプがアクティベートされる順序で、同じタイプの他の接続にインクリメントした値を設定します。たとえば、デフォルトゲートウェイを持つ 2 つのイーサネット接続が存在する場合、NetworkManager は、ルートに 100
のメトリックを、最初にアクティブにしている接続のデフォルトゲートウェイに設定します。2 つ目の接続では、NetworkManager は 101
を設定します。
以下は、よく使用されるネットワークタイプと、そのデフォルトのメトリックの概要です。
接続タイプ | デフォルトのメトリック値 |
---|---|
VPN | 50 |
イーサネット | 100 |
MACsec | 125 |
InfiniBand | 150 |
Bond | 300 |
VLAN | 400 |
ブリッジ | 425 |
TUN | 450 |
Wi-Fi | 600 |
IP トンネル | 675 |
12.5. 特定のプロファイルでのデフォルトゲートウェイの指定を防ぐための NetworkManager の設定
NetworkManager が特定のプロファイルを使用してデフォルトゲートウェイを指定しないようにすることができます。デフォルトゲートウェイに接続されていない接続プロファイルには、以下の手順に従います。
前提条件
- デフォルトゲートウェイに接続されていない接続の NetworkManager 接続プロファイルが存在する。
手順
接続で動的 IP 設定を使用する場合は、NetworkManager が、対応する IP タイプのデフォルト接続としてこの接続を使用しないように設定します。つまり、NetworkManager がデフォルトのルートをこの接続に割り当てないようにします。
nmcli connection modify <connection_name> ipv4.never-default yes ipv6.never-default yes
# nmcli connection modify <connection_name> ipv4.never-default yes ipv6.never-default yes
Copy to Clipboard Copied! ipv4.never-default
およびipv6.never-default
をyes
に設定すると、対応するプロトコルのデフォルトのゲートウェイ IP アドレスが、接続プロファイルから削除されることに注意してください。接続をアクティベートします。
nmcli connection up <connection_name>
# nmcli connection up <connection_name>
Copy to Clipboard Copied!
検証
-
ip -4 route
コマンドおよびip -6 route
コマンドを使用して、RHEL が、IPv4 プロトコルおよび IPv6 プロトコルのデフォルトルートにネットワークインターフェイスを使用しないことを確認します。
12.6. 複数のデフォルトゲートウェイによる予期しないルーティング動作の修正
ホストに複数のデフォルトゲートウェイが必要となる状況は、Multipath TCP を使用する場合など、ごく限られています。多くの場合、ルーティングの動作や非同期ルーティングの問題を回避するために、1 つのデフォルトゲートウェイのみを設定します。
異なるインターネットプロバイダーにトラフィックをルーティングするには、複数のデフォルトゲートウェイの代わりにポリシーベースのルーティングを使用します。
前提条件
- ホストは NetworkManager を使用してネットワーク接続を管理します。これはデフォルトです。
- ホストには複数のネットワークインターフェイスがある。
- ホストには複数のデフォルトゲートウェイが設定されている。
手順
ルーティングテーブルを表示します。
IPv4 の場合は、次のコマンドを実行します。
ip -4 route
# ip -4 route default via 192.0.2.1 dev enp1s0 proto dhcp metric 101 default via 198.51.100.1 dev enp7s0 proto dhcp metric 102 ...
Copy to Clipboard Copied! IPv6 の場合は、次のコマンドを実行します。
ip -6 route
# ip -6 route default via 2001:db8:1::1 dev enp1s0 proto ra metric 101 pref medium default via 2001:db8:2::1 dev enp7s0 proto ra metric 102 pref medium ...
Copy to Clipboard Copied!
default
で開始するエントリーはデフォルトのルートを示します。dev
の横に表示されるこれらのエントリーのインターフェイス名を書き留めます。以下のコマンドを使用して、前の手順で特定したインターフェイスを使用する NetworkManager 接続を表示します。
nmcli -f GENERAL.CONNECTION,IP4.GATEWAY,IP6.GATEWAY device show enp1s0 nmcli -f GENERAL.CONNECTION,IP4.GATEWAY,IP6.GATEWAY device show enp7s0
# nmcli -f GENERAL.CONNECTION,IP4.GATEWAY,IP6.GATEWAY device show enp1s0 GENERAL.CONNECTION: Corporate-LAN IP4.GATEWAY: 192.0.2.1 IP6.GATEWAY: 2001:db8:1::1 # nmcli -f GENERAL.CONNECTION,IP4.GATEWAY,IP6.GATEWAY device show enp7s0 GENERAL.CONNECTION: Internet-Provider IP4.GATEWAY: 198.51.100.1 IP6.GATEWAY: 2001:db8:2::1
Copy to Clipboard Copied! この例では、
Corporate-LAN
とInternet-Provider
という名前のプロファイルにはデフォルトのゲートウェイが設定されています。これは、ローカルネットワークでは、通常、インターネット 1 ホップ近いホストがデフォルトゲートウェイであるため、この手順の残りの部分では、Corporate-LAN
のデフォルトゲートウェイが正しくないことを想定するためです。NetworkManager が、IPv4 および IPv6 接続のデフォルトルートとして
Corporate-LAN
接続を使用しないように設定します。nmcli connection modify Corporate-LAN ipv4.never-default yes ipv6.never-default yes
# nmcli connection modify Corporate-LAN ipv4.never-default yes ipv6.never-default yes
Copy to Clipboard Copied! ipv4.never-default
およびipv6.never-default
をyes
に設定すると、対応するプロトコルのデフォルトのゲートウェイ IP アドレスが、接続プロファイルから削除されることに注意してください。Corporate-LAN
接続をアクティブにします。nmcli connection up Corporate-LAN
# nmcli connection up Corporate-LAN
Copy to Clipboard Copied!
検証
IPv4 および IPv6 ルーティングテーブルを表示し、プロトコルごとに 1 つのデフォルトゲートウェイのみが利用可能であることを確認します。
IPv4 の場合は、次のコマンドを実行します。
ip -4 route
# ip -4 route default via 198.51.100.1 dev enp7s0 proto dhcp metric 102 ...
Copy to Clipboard Copied! IPv6 の場合は、次のコマンドを実行します。
ip -6 route
# ip -6 route default via 2001:db8:2::1 dev enp7s0 proto ra metric 102 pref medium ...
Copy to Clipboard Copied!
第13章 静的ルートの設定
ルーティングにより、相互に接続されたネットワーク間でトラフィックを送受信できるようになります。大規模な環境では、管理者は通常、ルーターが他のルーターについて動的に学習できるようにサービスを設定します。小規模な環境では、管理者は多くの場合、静的ルートを設定して、トラフィックが 1 つのネットワークから次のネットワークに確実に到達できるようにします。
次の条件がすべて当てはまる場合、複数のネットワーク間で機能する通信を実現するには、静的ルートが必要です。
- トラフィックは複数のネットワークを通過する必要があります。
- デフォルトゲートウェイを通過する排他的なトラフィックフローは十分ではありません。
静的ルートを必要とするネットワークの例 セクションで、静的ルートを設定しない場合のシナリオと、異なるネットワーク間でトラフィックがどのように流れるかについて説明します。
13.1. 静的ルートを必要とするネットワークの例
すべての IP ネットワークが 1 つのルーターを介して直接接続されているわけではないため、この例では静的ルートが必要です。スタティックルートがないと、一部のネットワークは相互に通信できません。さらに、一部のネットワークからのトラフィックは一方向にしか流れません。
この例のネットワークトポロジーは人為的なものであり、静的ルーティングの概念を説明するためにのみ使用されています。これは、実稼働環境で推奨されるトポロジーではありません。
この例のすべてのネットワーク間で通信を機能させるには、Raleigh (198.51.100.0/24
) への静的ルートを設定し、次のホップ Router 2 (203.0.113.10
) を設定します。ネクストホップの IP アドレスは、データセンターネットワークのルーター 2 のものです (203.0.113.0/24
)。
スタティックルートは次のように設定できます。
-
設定を簡素化するには、この静的ルートをルーター 1 だけに設定します。ただし、データセンター (
203.0.113.0/24
) からのホストがトラフィックを Raleigh (198.51.100.0/24
) に送信するため、常にルーター 1 を経由してルーター 2 に送信されるため、ルーター 1 のトラフィックが増加します。 -
より複雑な設定の場合、データセンター (
203.0.113.0/24
) 内のすべてのホストでこの静的ルートを設定します。このサブネット内のすべてのホストは、Raleigh (198.51.100.0/24
) に近いルーター 2 (203.0.113.10
) にトラフィックを直接送信します。
どのネットワーク間でトラフィックが流れるかどうかの詳細は、図の下の説明を参照してください。

必要な静的経路が設定されていないときに、通信がうまくいく場合とうまくいかない場合を以下に示します。
ベルリンネットワークのホスト (
192.0.2.0/24
):- 直接接続されているため、同じサブネット内の他のホストと通信できます。
-
Router 1 はベルリンネットワーク (
192.0.2.0/24
) 内にあり、インターネットにつながるデフォルトゲートウェイがあるため、インターネットと通信できます。 -
ルーター 1 はベルリン (
192.0.2.0/24
) とデータセンター (203.0.113.0/24
) ネットワークの両方にインターフェイスを持っているため、データセンターネットワーク (203.0.113.0/24
) と通信できます。 -
ローリーネットワーク (
198.51.100.0/24
) と通信できません。これは、ルーター 1 がこのネットワークにインターフェイスを持たないためです。したがって、Router 1 はトラフィックを独自のデフォルトゲートウェイ (インターネット) に送信します。
データセンターネットワーク内のホスト (
203.0.113.0/24
):- 直接接続されているため、同じサブネット内の他のホストと通信できます。
-
デフォルトゲートウェイがルーター 1 に設定されているため、インターネットと通信できます。ルーター 1 には、データセンター (
203.0.113.0/24
) とインターネットの両方のネットワークにインターフェイスがあります。 -
デフォルトゲートウェイがルーター 1 に設定されているため、ベルリンネットワーク (
192.0.2.0/24
) と通信でき、ルーター 1 にはデータセンター (203.0.113.0/24
) とベルリン (192.0.2.0/24
) の両方にインターフェイスがあります。) ネットワーク。 -
Raleigh ネットワーク (
198.51.100.0/24
) と通信できません。これは、データセンターネットワークがこのネットワークにインターフェイスを持たないためです。したがって、データセンター (203.0.113.0/24
) 内のホストは、トラフィックをデフォルトゲートウェイ (ルーター 1) に送信します。ルーター 1 も Raleigh ネットワーク (198.51.100.0/24
) にインターフェイスを持たないため、ルーター 1 はこのトラフィックを独自のデフォルトゲートウェイ (インターネット) に送信します。
Raleigh ネットワーク内のホスト (
198.51.100.0/24
):- 直接接続されているため、同じサブネット内の他のホストと通信できます。
-
インターネット上のホストと通信できません。デフォルトゲートウェイの設定により、ルーター 2 はトラフィックをルーター 1 に送信します。ルーター 1 の実際の動作は、リバースパスフィルター (
rp_filter
) システム制御 (sysctl
) の設定によって異なります。RHEL のデフォルトでは、Router 1 は送信トラフィックをインターネットにルーティングする代わりにドロップします。ただし、設定された動作に関係なく、スタティックルートがないと通信できません。 -
データセンターネットワーク (
203.0.113.0/24
) と通信できません。デフォルトゲートウェイの設定により、発信トラフィックはルーター 2 を経由して宛先に到達します。ただし、データセンターネットワーク (203.0.113.0/24
) 内のホストがデフォルトゲートウェイ (ルーター 1) に応答を送信するため、パケットへの応答は送信者に届きません。次に、Router 1 がトラフィックをインターネットに送信します。 -
ベルリンのネットワーク (
192.0.2.0/24
) と通信できません。デフォルトゲートウェイの設定により、ルーター 2 はトラフィックをルーター 1 に送信します。ルーター 1 の実際の動作は、sysctl
設定のrp_filter
によって異なります。RHEL のデフォルトでは、Router 1 は発信トラフィックを Berlin ネットワーク (192.0.2.0/24
) に送信する代わりにドロップします。ただし、設定された動作に関係なく、スタティックルートがないと通信できません。
静的ルートの設定に加え、両方のルーターで IP 転送を有効にする必要があります。
13.2. nmcli
ユーティリティーを使用して静的ルートを設定する方法
静的ルートを設定するには、次の構文で nmcli
ユーティリティーを使用します。
nmcli connection modify connection_name ipv4.routes "ip[/prefix] [next_hop] [metric] [attribute=value] [attribute=value] ..."
$ nmcli connection modify connection_name ipv4.routes "ip[/prefix] [next_hop] [metric] [attribute=value] [attribute=value] ..."
このコマンドは、次のルート属性に対応します。
-
cwnd=n
: パケット数で定義された輻輳ウィンドウ (CWND) サイズを設定します。 -
lock-cwnd=true|false
: カーネルが CWND 値を更新できるかどうかを定義します。 -
lock-mtu=true|false
: カーネルが MTU をパス MTU ディスカバリーに更新できるかどうかを定義します。 -
lock-window=true|false
: カーネルが TCP パケットの最大ウィンドウサイズを更新できるかどうかを定義します。 -
mtu=<mtu_value>
: 宛先へのパスに沿って使用する最大転送単位 (MTU) を設定します。 -
onlink=true|false
: ネクストホップがどのインターフェイス接頭辞とも一致しない場合でも、このリンクに直接接続されるかどうかを定義します。 -
scope=<scope>
: IPv4 ルートの場合、この属性は、ルート接頭辞によってカバーされる宛先の範囲を設定します。値を整数 (0〜255) として設定します。 -
src=<source_address>
: ルート接頭辞の対象となる宛先にトラフィックを送信するときに優先する送信元アドレスを設定します。 -
table=<table_id>
: ルートを追加するテーブルの ID を設定します。このパラメーターを省略すると、NetworkManager はmain
テーブルを使用します。 -
tos=<type_of_service_key>
: Type of Service (TOS) キーを設定します。値を整数 (0〜255) として設定します。 -
type=<route_type>
: ルートタイプを設定します。NetworkManager は、unicast
、local
、blackhole
、unreachable
、prohibit
、およびthrow
ルートタイプをサポートします。デフォルトはunicast
です。 -
window=<window_size>
: これらの宛先にアドバタイズする TCP の最大ウィンドウサイズをバイト単位で設定します。
先頭に +
記号を付けずに ipv4.routes
オプションを使用すると、nmcli
はこのパラメーターの現在の設定をすべてオーバーライドします。
追加のルートを作成するには、次のように実行します。
nmcli connection modify connection_name +ipv4.routes "<route>"
$ nmcli connection modify connection_name +ipv4.routes "<route>"
Copy to Clipboard Copied! 特定のルートを削除するには、次のように実行します。
nmcli connection modify connection_name -ipv4.routes "<route>"
$ nmcli connection modify connection_name -ipv4.routes "<route>"
Copy to Clipboard Copied!
13.3. nmcli
を使用した静的ルートの設定
nmcli connection modify
コマンドを使用して、既存の NetworkManager 接続プロファイルに静的ルートを追加できます。
以下の手順では、次のルートを設定します。
-
リモート
198.51.100.0/24
ネットワークへの IPv4 ルート。IP アドレス192.0.2.10
を持つ対応するゲートウェイは、LAN
接続プロファイルを通じて到達可能です。 -
リモート
2001:db8:2::/64
ネットワークへの IPv6 ルート。IP アドレス2001:db8:1::10
を持つ対応するゲートウェイは、LAN
接続プロファイルを通じて到達可能です。
前提条件
-
LAN
接続プロファイルが存在し、このホストがゲートウェイと同じ IP サブネットに存在するように設定されている。
手順
LAN
接続プロファイルに静的 IPv4 ルートを追加します。nmcli connection modify LAN +ipv4.routes "198.51.100.0/24 192.0.2.10"
# nmcli connection modify LAN +ipv4.routes "198.51.100.0/24 192.0.2.10"
Copy to Clipboard Copied! 一度に複数のルートを設定するには、個々のルートをコンマで区切ってコマンドに渡します。
nmcli connection modify <connection_profile> +ipv4.routes "<remote_network_1>/<subnet_mask_1> <gateway_1>, <remote_network_n>/<subnet_mask_n> <gateway_n>, ..."
# nmcli connection modify <connection_profile> +ipv4.routes "<remote_network_1>/<subnet_mask_1> <gateway_1>, <remote_network_n>/<subnet_mask_n> <gateway_n>, ..."
Copy to Clipboard Copied! LAN
接続プロファイルに静的 IPv6 ルートを追加します。nmcli connection modify LAN +ipv6.routes "2001:db8:2::/64 2001:db8:1::10"
# nmcli connection modify LAN +ipv6.routes "2001:db8:2::/64 2001:db8:1::10"
Copy to Clipboard Copied! 接続を再度有効にします。
nmcli connection up LAN
# nmcli connection up LAN
Copy to Clipboard Copied!
検証
IPv4 ルートを表示します。
ip -4 route
# ip -4 route ... 198.51.100.0/24 via 192.0.2.10 dev enp1s0
Copy to Clipboard Copied! IPv6 ルートを表示します。
ip -6 route
# ip -6 route ... 2001:db8:2::/64 via 2001:db8:1::10 dev enp1s0 metric 1024 pref medium
Copy to Clipboard Copied!
13.4. nmtui
を使用した静的ルートの設定
nmtui
アプリケーションは、NetworkManager 用のテキストベースのユーザーインターフェイスを提供します。nmtui
を使用して、グラフィカルインターフェイスを使用せずにホスト上で静的ルートを設定できます。
たとえば、以下の手順では 198.51.100.1
で実行しているゲートウェイを使用する 192.0.2.0/24
ネットワークに経路を追加します。これは、既存の接続プロファイルから到達可能です。
nmtui
で以下を行います。
- カーソルキーを使用してナビゲートします。
- ボタンを選択して Enter を押します。
- Space を使用してチェックボックスをオンまたはオフにします。
- 前の画面に戻るには、ESC を使用します。
前提条件
- ネットワークが設定されている。
- 静的ルートのゲートウェイが、インターフェイスで直接到達できる。
- 物理コンソールにログインしている場合は、十分な権限を有している。それ以外の場合は、コマンドに root 権限が必要になります。
手順
nmtui
を開始します。nmtui
# nmtui
Copy to Clipboard Copied! - Edit a connection 選択し、Enter を押します。
- 宛先ネットワークへのネクストホップに到達できる接続プロファイルを選択し、Enter を押します。
- IPv4 ルートまたは IPv6 ルートに応じて、プロトコルの設定エリアの横にある Show ボタンを押します。
Routing の横にある Edit ボタンを押します。これにより、静的ルートを設定する新しいウィンドウが開きます。
Add ボタンを押して、次のように実行します。
- Classless Inter-Domain Routing (CIDR) 形式の接頭辞を含む宛先ネットワーク
- ネクストホップの IP アドレス
- 同じネットワークに複数のルートを追加し、効率によってルートに優先順位を付けたい場合のメトリック値
- 追加するルートごとに前の手順を繰り返し、この接続プロファイルを介して到達できます。
OK ボタンを押して、接続設定のウィンドウに戻ります。
図13.1 メトリックのない静的ルートの例
-
OK ボタンを押して
nmtui
メインメニューに戻ります。 - Activate a connection を選択し、Enter を押します。
編集した接続プロファイルを選択し、Enter キーを 2 回押して非アクティブ化し、再度アクティブ化します。
重要再アクティブ化する接続プロファイルを使用する SSH などのリモート接続で
nmtui
を実行する場合は、この手順をスキップしてください。この場合は、nmtui
で非アクティブ化すると、接続が切断されるため、再度アクティブ化することはできません。この問題を回避するには、上記のシナリオでnmcli connection <connection_profile> up
コマンドを使用して接続を再アクティブ化します。- Back ボタンを押してメインメニューに戻ります。
-
Quit を選択し、Enter キーを押して
nmtui
アプリケーションを閉じます。
検証
ルートがアクティブであることを確認します。
ip route
$ ip route ... 192.0.2.0/24 via 198.51.100.1 dev example proto static metric 100
Copy to Clipboard Copied!
13.5. nmstatectl
を使用した静的ルートの設定
nmstatectl
ユーティリティーを使用して、Nmstate API を介して静的ルートを設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
前提条件
-
enp1s0
ネットワークインターフェイスが設定され、ゲートウェイと同じ IP サブネット内にあります。 -
nmstate
パッケージがインストールされている。
手順
以下の内容を含む YAML ファイルを作成します (例:
~/add-static-route-to-enp1s0.yml
)。--- routes: config: - destination: 198.51.100.0/24 next-hop-address: 192.0.2.10 next-hop-interface: enp1s0 - destination: 2001:db8:2::/64 next-hop-address: 2001:db8:1::10 next-hop-interface: enp1s0
--- routes: config: - destination: 198.51.100.0/24 next-hop-address: 192.0.2.10 next-hop-interface: enp1s0 - destination: 2001:db8:2::/64 next-hop-address: 2001:db8:1::10 next-hop-interface: enp1s0
Copy to Clipboard Copied! これらの設定では、次の静的ルートを定義します。
-
リモート
198.51.100.0/24
ネットワークへの IPv4 ルート。IP アドレス192.0.2.10
の対応するゲートウェイは、enp1s0
インターフェイスを介して到達できます。 -
リモート
2001:db8:2::/64
ネットワークへの IPv6 ルート。IP アドレス2001:db8:1::10
の対応するゲートウェイは、enp1s0
インターフェイスを介して到達できます。
-
リモート
設定をシステムに適用します。
nmstatectl apply ~/add-static-route-to-enp1s0.yml
# nmstatectl apply ~/add-static-route-to-enp1s0.yml
Copy to Clipboard Copied!
検証
IPv4 ルートを表示します。
ip -4 route
# ip -4 route ... 198.51.100.0/24 via 192.0.2.10 dev enp1s0
Copy to Clipboard Copied! IPv6 ルートを表示します。
ip -6 route
# ip -6 route ... 2001:db8:2::/64 via 2001:db8:1::10 dev enp1s0 metric 1024 pref medium
Copy to Clipboard Copied!
13.6. network
RHEL システムロールを使用した静的ルートの設定
network
RHEL システムロールを使用して、静的ルートを設定できます。
network
RHEL システムロールを使用するプレイの実行時に、プレイで指定した値と設定値が一致しない場合、当該ロールは同じ名前の既存の接続プロファイルをオーバーライドします。これらの値がデフォルトにリセットされないようにするには、IP 設定などの設定がすでに存在する場合でも、ネットワーク接続プロファイルの設定全体をプレイで必ず指定してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Configure an Ethernet connection with static IP and additional routes ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: enp7s0 type: ethernet autoconnect: yes ip: address: - 192.0.2.1/24 - 2001:db8:1::1/64 gateway4: 192.0.2.254 gateway6: 2001:db8:1::fffe dns: - 192.0.2.200 - 2001:db8:1::ffbb dns_search: - example.com route: route: - network: 198.51.100.0 prefix: 24 gateway: 192.0.2.10 - network: '2001:db8:2::' prefix: 64 gateway: 2001:db8:1::10 state: up
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Configure an Ethernet connection with static IP and additional routes ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: enp7s0 type: ethernet autoconnect: yes ip: address: - 192.0.2.1/24 - 2001:db8:1::1/64 gateway4: 192.0.2.254 gateway6: 2001:db8:1::fffe dns: - 192.0.2.200 - 2001:db8:1::ffbb dns_search: - example.com route: route: - network: 198.51.100.0 prefix: 24 gateway: 192.0.2.10 - network: '2001:db8:2::' prefix: 64 gateway: 2001:db8:1::10 state: up
Copy to Clipboard Copied! この手順では、すでに存在するかどうかに応じて、以下の設定で
enp7s0
接続プロファイルを作成または更新します。-
静的 IPv4 アドレス: サブネットマスクが
/24
の192.0.2.1
-
静的 IPv6 アドレス -
2001:db8:1::1
(/64
サブネットマスクあり) -
IPv4 デフォルトゲートウェイ -
192.0.2.254
-
IPv6 デフォルトゲートウェイ -
2001:db8:1::fffe
-
IPv4 DNS サーバー -
192.0.2.200
-
IPv6 DNS サーバー -
2001:db8:1::ffbb
-
DNS 検索ドメイン -
example.com
静的ルート:
-
198.51.100.0/24
のゲートウェイ192.0.2.10
-
2001:db8:2::/64
とゲートウェイ2001:db8:1::10
-
-
静的 IPv4 アドレス: サブネットマスクが
Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied!
検証
管理対象ノードで以下を行います。
IPv4 ルートを表示します。
ip -4 route
# ip -4 route ... 198.51.100.0/24 via 192.0.2.10 dev enp7s0
Copy to Clipboard Copied! IPv6 ルートを表示します。
ip -6 route
# ip -6 route ... 2001:db8:2::/64 via 2001:db8:1::10 dev enp7s0 metric 1024 pref medium
Copy to Clipboard Copied!
第14章 代替ルートを定義するポリシーベースのルーティングの設定
デフォルトでは、RHEL のカーネルは、ルーティングテーブルを使用して宛先アドレスに基づいてネットワークパケットを転送する場所を決定します。ポリシーベースのルーティングにより、複雑なルーティングシナリオを設定できます。たとえば、送信元アドレス、パケットメタデータ、プロトコルなどのさまざまな基準に基づいてパケットをルーティングできます。
14.1. nmcli
を使用して、特定のサブネットから別のデフォルトゲートウェイにトラフィックをルーティングする
ポリシーベースのルーティングを使用して、特定のサブネットからのトラフィックに対して別のデフォルトゲートウェイを設定できます。たとえば、RHEL をルーターとして設定し、デフォルトルートを使用してすべてのトラフィックをインターネットプロバイダー A にデフォルトでルーティングできます。ただし、内部ワークステーションサブネットから受信したトラフィックはプロバイダー B にルーティングされます。
この手順では、次のネットワークトポロジーを想定しています。
前提条件
-
システムは、
NetworkManager
を使用して、ネットワークを設定します (これがデフォルトです)。 この手順で設定する RHEL ルーターには、4 つのネットワークインターフェイスがあります。
-
enp7s0
インターフェイスはプロバイダー A のネットワークに接続されます。プロバイダーのネットワークのゲートウェイ IP は198.51.100.2
で、ネットワークは/30
ネットワークマスクを使用します。 -
enp1s0
インターフェイスはプロバイダー B のネットワークに接続されます。プロバイダーのネットワークのゲートウェイ IP は192.0.2.2
で、ネットワークは/30
ネットワークマスクを使用します。 -
enp8s0
インターフェイスは、内部ワークステーションで10.0.0.0/24
サブネットに接続されています。 -
enp9s0
インターフェイスは、会社のサーバーで203.0.113.0/24
サブネットに接続されています。
-
-
内部ワークステーションのサブネット内のホストは、デフォルトゲートウェイとして
10.0.0.1
を使用します。この手順では、この IP アドレスをルーターのenp8s0
ネットワークインターフェイスに割り当てます。 -
サーバーサブネット内のホストは、デフォルトゲートウェイとして
203.0.113.1
を使用します。この手順では、この IP アドレスをルーターのenp9s0
ネットワークインターフェイスに割り当てます。 -
デフォルトでは、
firewalld
サービスは有効でアクティブになっています。
手順
プロバイダー A へのネットワークインターフェイスを設定します。
nmcli connection add type ethernet con-name Provider-A ifname enp7s0 ipv4.method manual ipv4.addresses 198.51.100.1/30 ipv4.gateway 198.51.100.2 ipv4.dns 198.51.100.200 connection.zone external
# nmcli connection add type ethernet con-name Provider-A ifname enp7s0 ipv4.method manual ipv4.addresses 198.51.100.1/30 ipv4.gateway 198.51.100.2 ipv4.dns 198.51.100.200 connection.zone external
Copy to Clipboard Copied! nmcli connection add
コマンドでは、NetworkManager 接続プロファイルが作成されます。このコマンドでは次のオプションを使用します。-
type ethernet
: 接続タイプがイーサネットであることを定義します。 -
con-name <connection_name>
: プロファイルの名前を設定します。混乱を避けるために、わかりやすい名前を使用してください。 -
ifname <network_device>
: ネットワークインターフェイスを設定します。 -
ipv4.method manual
: 静的 IP アドレスを設定できるようにします。 -
ipv4.addresses <IP_address>/<subnet_mask>
: IPv4 アドレスとサブネットマスクを設定します。 -
ipv4.gateway <IP_address>
: デフォルトゲートウェイアドレスを設定します。 -
ipv4.dns <IP_of_DNS_server>
: DNS サーバーの IPv4 アドレスを設定します。 -
connection.zone <firewalld_zone>
: 定義されたfirewalld
ゾーンにネットワークインターフェイスを割り当てます。firewalld
は、外部
ゾーンに割り当てられたマスカレードインターフェイスを自動的に有効にすることに注意してください。
-
プロバイダー B へのネットワークインターフェイスを設定します。
nmcli connection add type ethernet con-name Provider-B ifname enp1s0 ipv4.method manual ipv4.addresses 192.0.2.1/30 ipv4.routes "0.0.0.0/0 192.0.2.2 table=5000" connection.zone external
# nmcli connection add type ethernet con-name Provider-B ifname enp1s0 ipv4.method manual ipv4.addresses 192.0.2.1/30 ipv4.routes "0.0.0.0/0 192.0.2.2 table=5000" connection.zone external
Copy to Clipboard Copied! このコマンドは、デフォルトゲートウェイを設定する
ipv4.gateway
の代わりに、ipv4.routes
パラメーターを使用します。これは、この接続のデフォルトゲートウェイを、デフォルトのルーティングテーブル (5000
) に割り当てるために必要です。NetworkManager は、接続がアクティブになると、この新しいルーティングテーブルを自動的に作成します。内部ワークステーションサブネットへのネットワークインターフェイスを設定します。
nmcli connection add type ethernet con-name Internal-Workstations ifname enp8s0 ipv4.method manual ipv4.addresses 10.0.0.1/24 ipv4.routes "10.0.0.0/24 table=5000" ipv4.routing-rules "priority 5 from 10.0.0.0/24 table 5000" connection.zone trusted
# nmcli connection add type ethernet con-name Internal-Workstations ifname enp8s0 ipv4.method manual ipv4.addresses 10.0.0.1/24 ipv4.routes "10.0.0.0/24 table=5000" ipv4.routing-rules "priority 5 from 10.0.0.0/24 table 5000" connection.zone trusted
Copy to Clipboard Copied! このコマンドは、
ipv4.routes
パラメーターを使用して、ID が5000
のルーティングテーブルに静的ルートを追加します。10.0.0.0/24
サブネットのこの静的ルートは、ローカルネットワークインターフェイスの IP を使用してプロバイダー B (192.0.2.1
) を次のホップとして使用します。また、このコマンドでは
ipv4.routing-rules
パラメーターを使用して、優先度5
のルーティングルールを追加します。このルーティングルールは、トラフィックを10.0.0.0/24
サブネットからテーブル5000
へルーティングします。値が小さいほど優先度が高くなります。ipv4.routing-rules
パラメーターの構文はip rule add
コマンドと同じですが、ipv4.routing-rules
は常に優先度を指定する必要があります。サーバーサブネットへのネットワークインターフェイスを設定します。
nmcli connection add type ethernet con-name Servers ifname enp9s0 ipv4.method manual ipv4.addresses 203.0.113.1/24 connection.zone trusted
# nmcli connection add type ethernet con-name Servers ifname enp9s0 ipv4.method manual ipv4.addresses 203.0.113.1/24 connection.zone trusted
Copy to Clipboard Copied!
検証
内部ワークステーションサブネットの RHEL ホストで、以下を行います。
traceroute
パッケージをインストールします。dnf install traceroute
# dnf install traceroute
Copy to Clipboard Copied! traceroute
ユーティリティーを使用して、インターネット上のホストへのルートを表示します。traceroute redhat.com
# traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 _gateway (10.0.0.1) 0.337 ms 0.260 ms 0.223 ms 2 192.0.2.2 (192.0.2.2) 0.884 ms 1.066 ms 1.248 ms ...
Copy to Clipboard Copied! コマンドの出力には、ルーターがプロバイダー B のネットワークである
192.0.2.1
経由でパケットを送信することが表示されます。
サーバーのサブネットの RHEL ホストで、以下を行います。
traceroute
パッケージをインストールします。dnf install traceroute
# dnf install traceroute
Copy to Clipboard Copied! traceroute
ユーティリティーを使用して、インターネット上のホストへのルートを表示します。traceroute redhat.com
# traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 _gateway (203.0.113.1) 2.179 ms 2.073 ms 1.944 ms 2 198.51.100.2 (198.51.100.2) 1.868 ms 1.798 ms 1.549 ms ...
Copy to Clipboard Copied! コマンドの出力には、ルーターがプロバイダー A のネットワークである
198.51.100.2
経由でパケットを送信することが表示されます。
トラブルシューティングの手順
RHEL ルーターで以下を行います。
ルールのリストを表示します。
ip rule list
# ip rule list 0: from all lookup local 5: from 10.0.0.0/24 lookup 5000 32766: from all lookup main 32767: from all lookup default
Copy to Clipboard Copied! デフォルトでは、RHEL には、
local
テーブル、main
テーブル、およびdefault
テーブルのルールが含まれます。テーブル
5000
のルートを表示します。ip route list table 5000
# ip route list table 5000 default via 192.0.2.2 dev enp1s0 proto static metric 100 10.0.0.0/24 dev enp8s0 proto static scope link src 192.0.2.1 metric 102
Copy to Clipboard Copied! インターフェイスとファイアウォールゾーンを表示します。
firewall-cmd --get-active-zones
# firewall-cmd --get-active-zones external interfaces: enp1s0 enp7s0 trusted interfaces: enp8s0 enp9s0
Copy to Clipboard Copied! external
ゾーンでマスカレードが有効になっていることを確認します。firewall-cmd --info-zone=external
# firewall-cmd --info-zone=external external (active) target: default icmp-block-inversion: no interfaces: enp1s0 enp7s0 sources: services: ssh ports: protocols: masquerade: yes ...
Copy to Clipboard Copied!
14.2. network
RHEL システムロールを使用して、特定のサブネットから別のデフォルトゲートウェイにトラフィックをルーティングする
ポリシーベースのルーティングを使用して、特定のサブネットからのトラフィックに対して別のデフォルトゲートウェイを設定できます。たとえば、RHEL をルーターとして設定し、デフォルトルートを使用してすべてのトラフィックをインターネットプロバイダー A にデフォルトでルーティングできます。ただし、内部ワークステーションサブネットから受信したトラフィックはプロバイダー B にルーティングされます。
ポリシーベースのルーティングをリモートで複数のノードに設定するには、network
RHEL システムロールを使用できます。
この手順では、次のネットワークトポロジーを想定しています。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 -
管理対象ノードは、NetworkManager および
firewalld
サービスを使用します。 設定する管理対象ノードには、次の 4 つのネットワークインターフェイスがあります。
-
enp7s0
インターフェイスはプロバイダー A のネットワークに接続されます。プロバイダーのネットワークのゲートウェイ IP は198.51.100.2
で、ネットワークは/30
ネットワークマスクを使用します。 -
enp1s0
インターフェイスはプロバイダー B のネットワークに接続されます。プロバイダーのネットワークのゲートウェイ IP は192.0.2.2
で、ネットワークは/30
ネットワークマスクを使用します。 -
enp8s0
インターフェイスは、内部ワークステーションで10.0.0.0/24
サブネットに接続されています。 -
enp9s0
インターフェイスは、会社のサーバーで203.0.113.0/24
サブネットに接続されています。
-
-
内部ワークステーションのサブネット内のホストは、デフォルトゲートウェイとして
10.0.0.1
を使用します。この手順では、この IP アドレスをルーターのenp8s0
ネットワークインターフェイスに割り当てます。 -
サーバーサブネット内のホストは、デフォルトゲートウェイとして
203.0.113.1
を使用します。この手順では、この IP アドレスをルーターのenp9s0
ネットワークインターフェイスに割り当てます。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configuring policy-based routing hosts: managed-node-01.example.com tasks: - name: Routing traffic from a specific subnet to a different default gateway ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: Provider-A interface_name: enp7s0 type: ethernet autoconnect: True ip: address: - 198.51.100.1/30 gateway4: 198.51.100.2 dns: - 198.51.100.200 state: up zone: external - name: Provider-B interface_name: enp1s0 type: ethernet autoconnect: True ip: address: - 192.0.2.1/30 route: - network: 0.0.0.0 prefix: 0 gateway: 192.0.2.2 table: 5000 state: up zone: external - name: Internal-Workstations interface_name: enp8s0 type: ethernet autoconnect: True ip: address: - 10.0.0.1/24 route: - network: 10.0.0.0 prefix: 24 table: 5000 routing_rule: - priority: 5 from: 10.0.0.0/24 table: 5000 state: up zone: trusted - name: Servers interface_name: enp9s0 type: ethernet autoconnect: True ip: address: - 203.0.113.1/24 state: up zone: trusted
--- - name: Configuring policy-based routing hosts: managed-node-01.example.com tasks: - name: Routing traffic from a specific subnet to a different default gateway ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: Provider-A interface_name: enp7s0 type: ethernet autoconnect: True ip: address: - 198.51.100.1/30 gateway4: 198.51.100.2 dns: - 198.51.100.200 state: up zone: external - name: Provider-B interface_name: enp1s0 type: ethernet autoconnect: True ip: address: - 192.0.2.1/30 route: - network: 0.0.0.0 prefix: 0 gateway: 192.0.2.2 table: 5000 state: up zone: external - name: Internal-Workstations interface_name: enp8s0 type: ethernet autoconnect: True ip: address: - 10.0.0.1/24 route: - network: 10.0.0.0 prefix: 24 table: 5000 routing_rule: - priority: 5 from: 10.0.0.0/24 table: 5000 state: up zone: trusted - name: Servers interface_name: enp9s0 type: ethernet autoconnect: True ip: address: - 203.0.113.1/24 state: up zone: trusted
Copy to Clipboard Copied! Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied!
検証
内部ワークステーションサブネットの RHEL ホストで、以下を行います。
traceroute
パッケージをインストールします。dnf install traceroute
# dnf install traceroute
Copy to Clipboard Copied! traceroute
ユーティリティーを使用して、インターネット上のホストへのルートを表示します。traceroute redhat.com
# traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 _gateway (10.0.0.1) 0.337 ms 0.260 ms 0.223 ms 2 192.0.2.1 (192.0.2.1) 0.884 ms 1.066 ms 1.248 ms ...
Copy to Clipboard Copied! コマンドの出力には、ルーターがプロバイダー B のネットワークである
192.0.2.1
経由でパケットを送信することが表示されます。
サーバーのサブネットの RHEL ホストで、以下を行います。
traceroute
パッケージをインストールします。dnf install traceroute
# dnf install traceroute
Copy to Clipboard Copied! traceroute
ユーティリティーを使用して、インターネット上のホストへのルートを表示します。traceroute redhat.com
# traceroute redhat.com traceroute to redhat.com (209.132.183.105), 30 hops max, 60 byte packets 1 _gateway (203.0.113.1) 2.179 ms 2.073 ms 1.944 ms 2 198.51.100.2 (198.51.100.2) 1.868 ms 1.798 ms 1.549 ms ...
Copy to Clipboard Copied! コマンドの出力には、ルーターがプロバイダー A のネットワークである
198.51.100.2
経由でパケットを送信することが表示されます。
RHEL システムロールを使用して設定した RHEL ルーターで、次の手順を実行します。
ルールのリストを表示します。
ip rule list
# ip rule list 0: from all lookup local 5: from 10.0.0.0/24 lookup 5000 32766: from all lookup main 32767: from all lookup default
Copy to Clipboard Copied! デフォルトでは、RHEL には、
local
テーブル、main
テーブル、およびdefault
テーブルのルールが含まれます。テーブル
5000
のルートを表示します。ip route list table 5000
# ip route list table 5000 default via 192.0.2.2 dev enp1s0 proto static metric 100 10.0.0.0/24 dev enp8s0 proto static scope link src 192.0.2.1 metric 102
Copy to Clipboard Copied! インターフェイスとファイアウォールゾーンを表示します。
firewall-cmd --get-active-zones
# firewall-cmd --get-active-zones external interfaces: enp1s0 enp7s0 trusted interfaces: enp8s0 enp9s0
Copy to Clipboard Copied! external
ゾーンでマスカレードが有効になっていることを確認します。firewall-cmd --info-zone=external
# firewall-cmd --info-zone=external external (active) target: default icmp-block-inversion: no interfaces: enp1s0 enp7s0 sources: services: ssh ports: protocols: masquerade: yes ...
Copy to Clipboard Copied!
第15章 hostnamectl を使用したホスト名の変更
hostnamectl
ユーティリティーを使用してホスト名を更新できます。デフォルトでは、このユーティリティーは以下のホスト名タイプを設定します。
-
静的ホスト名:
/etc/hostname
ファイルに保存されます。通常、サービスはこの名前をホスト名として使用します。 -
Pretty hostname:
Proxy server in data center A
などの説明的な名前。 - 一時的なホスト名: 通常ネットワーク設定から受信されるフォールバック値。
手順
オプション: 現在のホスト名設定を表示します。
hostnamectl status --static
# hostnamectl status --static old-hostname.example.com
Copy to Clipboard Copied! 新しいホスト名を設定します。
hostnamectl set-hostname new-hostname.example.com
# hostnamectl set-hostname new-hostname.example.com
Copy to Clipboard Copied! このコマンドは、static と transient のホスト名を新しい値に設定します。特定のタイプのみを設定するには、
--static
オプション、--pretty
オプション、または--transient
オプションをコマンドに渡します。hostnamectl
ユーティリティーは、systemd-hostnamed
を自動的に再起動して、新しい名前をアクティブにします。変更を有効にするには、ホストを再起動します。reboot
# reboot
Copy to Clipboard Copied! あるいは、そのホスト名を使用するサービスがわかっている場合は、次のようにします。
サービスの起動時にホスト名のみを読み取るすべてのサービスを再起動します。
systemctl restart <service_name>
# systemctl restart <service_name>
Copy to Clipboard Copied! - 変更を反映するには、アクティブなシェルユーザーを再ログインする必要があります。
検証
ホスト名を表示します。
hostnamectl status --static
# hostnamectl status --static new-hostname.example.com
Copy to Clipboard Copied!
第16章 NetworkManager 接続の DHCP タイムアウト動作の設定
DHCP (Dynamic Host Configuration Protocol) クライアントは、クライアントがネットワークに接続するたびに、動的 IP アドレスと対応する設定情報を DHCP サーバーに要求します。
接続プロファイルで DHCP を有効にすると、NetworkManager はデフォルトでこの要求が完了するまで 45 秒間待機します。
Red Hat は NetworkManager 内部の DHCP クライアントのみをサポートします。
前提条件
- DHCP を使用する接続がホストに設定されている。
手順
オプション:
ipv4.dhcp-timeout
プロパティーおよびipv6.dhcp-timeout
プロパティーを設定します。たとえば、両方のオプションを30
秒に設定するには、次のコマンドを実行します。nmcli connection modify <connection_name> ipv4.dhcp-timeout 30 ipv6.dhcp-timeout 30
# nmcli connection modify <connection_name> ipv4.dhcp-timeout 30 ipv6.dhcp-timeout 30
Copy to Clipboard Copied! パラメーターを
infinity
に設定すると、成功するまで NetworkManager が IP アドレスのリクエストおよび更新を停止しないようにします。必要に応じて、タイムアウト前に NetworkManager が IPv4 アドレスを受信しない場合にこの動作を設定します。
nmcli connection modify <connection_name> ipv4.may-fail <value>
# nmcli connection modify <connection_name> ipv4.may-fail <value>
Copy to Clipboard Copied! ipv4.may-fail
オプションを以下のように設定します。yes
、接続のステータスは IPv6 設定により異なります。- IPv6 設定が有効になり、成功すると、NetworkManager は IPv6 接続をアクティブにし、IPv4 接続のアクティブ化を試みなくなります。
- IPv6 設定が無効であるか設定されていないと、接続は失敗します。
いいえ
、接続は非アクティブになります。この場合は、以下のようになります。-
接続の
autoconnect
プロパティーが有効になっている場合、NetworkManager は、autoconnect-retries
プロパティーに設定された回数だけ、接続のアクティベーションを再試行します。デフォルト値は4
です。 - それでも接続が DHCP アドレスを取得できないと、自動アクティベーションは失敗します。5 分後に自動接続プロセスが再開され、DHCP サーバーから IP アドレスを取得するようになりました。
-
接続の
必要に応じて、タイムアウト前に NetworkManager が IPv6 アドレスを受信しない場合にこの動作を設定します。
nmcli connection modify <connection_name> ipv6.may-fail <value>
# nmcli connection modify <connection_name> ipv6.may-fail <value>
Copy to Clipboard Copied!
第17章 DNS サーバーの順序の設定
ほとんどのアプリケーションは、glibc
ライブラリーの getaddrinfo()
関数を使用して DNS で名前を解決します。デフォルトでは、glibc
はすべての DNS 要求を、/etc/resolv.conf
ファイルで指定された最初の DNS サーバーに送信します。このサーバーが応答しない場合、{ProductShortName} はこのファイル内にある他のすべてのネームサーバーを試します。NetworkManager を使用すると、/etc/resolv.conf
内の DNS サーバーの順序に影響を与えることができます。
17.1. NetworkManager が /etc/resolv.conf で DNS サーバーを順序付ける方法
NetworkManager は、以下のルールに基づいて /etc/resolv.conf
ファイルの DNS サーバーの順序を付けます。
- 接続プロファイルが 1 つしか存在しない場合、NetworkManager は、その接続で指定された IPv4 および IPv6 の DNS サーバーの順序を使用します。
複数の接続プロファイルがアクティベートされると、NetworkManager は DNS の優先度の値に基づいて DNS サーバーを順序付けます。DNS の優先度を設定すると、NetworkManager の動作は、
dns
パラメーターに設定した値によって異なります。このパラメーターは、/etc/NetworkManager/NetworkManager.conf
ファイルの[main]
セクションで設定できます。dns=default
またはdns
パラメーターが設定されていないと、以下のようになります。NetworkManager は、各接続の
ipv4.dns-priority
パラメーターおよびipv6.dns-priority
パラメーターに基づいて、複数の接続から DNS サーバーを順序付けます。値を指定しない場合、または
ipv4.dns-priority
およびipv6.dns-priority
を0
に設定すると、NetworkManager はグローバルのデフォルト値を使用します。DNS 優先度パラメーターのデフォルト値 を参照してください。dns=dnsmasq
またはdns=systemd-resolved
:この設定のいずれかを使用すると、NetworkManager は
dnsmasq
の127.0.0.1
に設定するか、127.0.0.53
をnameserver
エントリーとして/etc/resolv.conf
ファイルに設定します。dnsmasq
サービスとsystemd-resolved
サービスはどちらも、NetworkManager 接続で設定された検索ドメインのクエリーをその接続で指定された DNS サーバーに転送し、他のドメインへのクエリーをデフォルトルートを持つ接続に転送します。複数の接続に同じ検索ドメインが設定されている場合は、dnsmasq
およびsystemd-resolved
が、このドメインのクエリーを、優先度の値が最も低い接続に設定された DNS サーバーへ転送します。
DNS 優先度パラメーターのデフォルト値
NetworkManager は、接続に以下のデフォルト値を使用します。
-
VPN 接続の場合は
50
-
他の接続の場合は
100
有効な DNS 優先度の値:
グローバルのデフォルトおよび接続固有の ipv4.dns-priority
パラメーターおよび ipv6.dns-priority
パラメーターの両方を -2147483647
から 2147483647
までの値に設定できます。
- 値が小さいほど優先度が高くなります。
- 負の値は、値が大きい他の設定を除外する特別な効果があります。たとえば、優先度が負の値の接続が 1 つでも存在する場合は、NetworkManager が、優先度が最も低い接続プロファイルで指定された DNS サーバーのみを使用します。
複数の接続の DNS の優先度が同じ場合、NetworkManager は以下の順番で DNS の優先順位を決定します。
- VPN 接続。
- アクティブなデフォルトルートとの接続。アクティブなデフォルトルートは、メトリックスが最も低いデフォルトルートです。
17.2. NetworkManager 全体でデフォルトの DNS サーバー優先度の値の設定
NetworkManager は、接続に以下の DNS 優先度のデフォルト値を使用します。
-
VPN 接続の場合は
50
-
他の接続の場合は
100
これらのシステム全体のデフォルトは、IPv4 接続および IPv6 接続のカスタムデフォルト値で上書きできます。
手順
/etc/NetworkManager/NetworkManager.conf
ファイルを編集します。[connection]
セクションが存在しない場合は追加します。[connection]
[connection]
Copy to Clipboard Copied! [connection]
セクションにカスタムのデフォルト値を追加します。たとえば、IPv4 と IPv6 の両方で新しいデフォルトを200
に設定するには、以下を追加します。ipv4.dns-priority=200 ipv6.dns-priority=200
ipv4.dns-priority=200 ipv6.dns-priority=200
Copy to Clipboard Copied! パラメーターは、
-2147483647
から2147483647
までの値に設定できます。パラメーターを0
に設定すると、組み込みのデフォルト (VPN 接続の場合は50
、他の接続の場合は100
) が有効になります。
NetworkManager
サービスを再読み込みします。systemctl reload NetworkManager
# systemctl reload NetworkManager
Copy to Clipboard Copied!
17.3. NetworkManager 接続の DNS 優先度の設定
特定の DNS サーバーの順序が必要な場合は、接続プロファイルに優先度の値を設定できます。NetworkManager はこれらの値を使用して、サービスが /etc/resolv.conf
ファイルを作成または更新する際にサーバーを順序付けます。
DNS 優先度の設定は、異なる DNS サーバーが設定された複数の接続がある場合にのみ有効であることに注意してください。複数の DNS サーバーが設定された接続が 1 つしかない場合は、接続プロファイルで DNS サーバーを優先順に手動で設定します。
前提条件
- システムに NetworkManager の接続が複数設定されている。
-
システムで、
/etc/NetworkManager/NetworkManager.conf
ファイルにdns
パラメーターが設定されていないか、そのパラメーターがdefault
に設定されている。
手順
必要に応じて、利用可能な接続を表示します。
nmcli connection show
# nmcli connection show NAME UUID TYPE DEVICE Example_con_1 d17ee488-4665-4de2-b28a-48befab0cd43 ethernet enp1s0 Example_con_2 916e4f67-7145-3ffa-9f7b-e7cada8f6bf7 ethernet enp7s0 ...
Copy to Clipboard Copied! ipv4.dns-priority
パラメーターおよびipv6.dns-priority
パラメーターを設定します。たとえば、両方のパラメーターを10
に設定するには、次のように入力します。nmcli connection modify <connection_name> ipv4.dns-priority 10 ipv6.dns-priority 10
# nmcli connection modify <connection_name> ipv4.dns-priority 10 ipv6.dns-priority 10
Copy to Clipboard Copied! - 必要に応じて、他のコネクションに対しても 1 つ前の手順を繰り返します。
更新した接続を再度アクティブにします。
nmcli connection up <connection_name>
# nmcli connection up <connection_name>
Copy to Clipboard Copied!
検証
/etc/resolv.conf
ファイルの内容を表示して、DNS サーバーの順序が正しいことを確認します。cat /etc/resolv.conf
# cat /etc/resolv.conf
Copy to Clipboard Copied!
17.4. 特定のインターフェイスを介して DNS トラフィックをルーティングする
NetworkManager は、システム内の DNS サーバーを設定するためのさまざまなメカニズムをサポートしています。これには、/etc/resolv.conf
ファイルへの設定の追加や、systemd-resolved
、dnsmasq
、dnsconfd
などの DNS サービスの設定が含まれます。
接続プロファイルに記載されている各 DNS サーバーは、特定のネットワークインターフェイスに関連付けられています。DNS バックエンドサービス systemd-resolved
および dnsmasq
により、各 DNS ネームサーバーは正しいネットワークインターフェイス経由でのみアクセス可能になります。ただし、他のバックエンドサービスではこの機能はサポートされていません。これに関連して、NetworkManager には、各ネームサーバーに正しいインターフェイス経由でのみアクセスできるように専用ルートを自動的に追加する機能があります。この機能を使用するには、ipv4.routed-dns
および ipv6.routed-dns
プロパティーを設定します。
サンプルシナリオ:
接続プロファイル 1 <example-connection-1>:
-
デフォルトケートウェイ:
192.0.2.254
-
DNS サーバー:
10.0.0.1
- 検索ドメイン: example-domain.com
-
デフォルトケートウェイ:
接続プロファイル 2 <example-connection-2> :
-
デフォルトゲートウェイ:
198.51.100.254
(このゲートウェイは10.0.0.0/24
ネットワークにアクセスできません) -
DNS サーバー:
203.0.113.1
-
デフォルトゲートウェイ:
この例では、enp1s0
および enp7s0
ネットワークインターフェイスを介して接続される <example-connection-1> と <example-connection-2> の 2 つの接続プロファイルがあります。2 番目のプロファイル <example-connection-2> が最初に接続された場合、この接続のデフォルトゲートウェイ 198.51.100.254
のメトリクスの方が引っ杭ため、最初のプロファイルよりも優先されます。その結果、RHEL は最初のプロファイルの DNS サーバー 10.0.0.1
に接続する際に、2 番目の接続のデフォルトゲートウェイを使用します。その結果、DNS 解決は失敗します。この問題を解決するには、両方の接続プロファイルに対して ipv4.routed-dns
設定を有効にして、NetworkManager が正しいインターフェイス (この場合は enp1s0
) を介して 10.0.0.1
DNS サーバーの専用ルートを作成するようにします。
前提条件
- 接続プロファイルがある。
手順
ネームサーバーへのルートの作成を有効にするために、接続プロファイルを変更します。
接続プロファイル 1 の場合は、次のように入力します。
nmcli connection modify <example-connection-1> ipv4.routed-dns yes
# nmcli connection modify <example-connection-1> ipv4.routed-dns yes
Copy to Clipboard Copied! 接続プロファイル 2 の場合は、次のように入力します。
nmcli connection modify <example-connection-2> ipv4.routed-dns yes
# nmcli connection modify <example-connection-2> ipv4.routed-dns yes
Copy to Clipboard Copied!
接続を再度有効にします。
nmcli connection up <example-connection-1> nmcli connection up <example-connection-2>
# nmcli connection up <example-connection-1> # nmcli connection up <example-connection-2>
Copy to Clipboard Copied!
検証
IP アドレスに到達するためのルートを表示します。
ip route get 203.0.113.1
# ip route get 203.0.113.1 203.0.113.1 dev enp1s0 table 20053 src 10.0.0.1 uid 0
Copy to Clipboard Copied! このコマンドは、ネームサーバーに正しいインターフェイス経由でアクセスしているかどうかを確認し、DNS サーバーのすべてのルートを特別なルーティングテーブル
20053
に配置するポリシールーティングメソッドを使用します。
第18章 NetworkManager で dnsmasq
を使用して、特定のドメインの DNS リクエストを選択した DNS サーバーに送信する
デフォルトでは、Red Hat Enterprise Linux (RHEL) は、すべての DNS リクエストを、/etc/resolv.conf
ファイルで指定されている最初の DNS サーバーに送信します。このサーバーが応答しない場合、RHEL は動作するサーバーが見つかるまでこのファイル内の次のサーバーを試行します。ある DNS サーバーがすべてのドメインを解決できない環境では、管理者は、特定のドメインの DNS 要求を選択した DNS サーバーに送信するように RHEL を設定できます。
たとえば、サーバーを仮想プライベートネットワーク (VPN) に接続し、VPN 内のホストが example.com
ドメインを使用するとします。この場合、次の方法で DNS クエリーを処理するように RHEL を設定できます。
-
example.com
の DNS 要求のみを VPN ネットワーク内の DNS サーバーに送信します。 - 他のすべての要求は、デフォルトゲートウェイを使用して接続プロファイルで設定されている DNS サーバーに送信します。
dnsmasq
のインスタンスを開始するように NetworkManager を設定できます。次に、この DNS キャッシュサーバーは、loopback
デバイスのポート 53
をリッスンします。したがって、このサービスはローカルシステムからのみ到達でき、ネットワークからは到達できません。
この設定では、NetworkManager は nameserver 127.0.0.1
エントリーを /etc/resolv.conf
ファイルに追加し、dnsmasq
は DNS 要求を NetworkManager 接続プロファイルで指定された対応する DNS サーバーに動的にルーティングします。
前提条件
- システムに NetworkManager の接続が複数設定されている。
DNS サーバーおよび検索ドメインは、特定のドメインを解決する NetworkManager 接続プロファイルで設定されます。
たとえば、VPN 接続で指定された DNS サーバーが
example.com
ドメインのクエリーを解決するようにするには、VPN 接続プロファイルに以下の設定が含まれている必要があります。-
example.com
を解決できる DNS サーバー -
ipv4.dns-search
およびipv6.dns-search
パラメーターでexample.com
に設定された検索ドメイン
-
-
dnsmasq
サービスが実行されていないか、localhost
とは異なるインターフェイスでリッスンするように設定されています。
手順
dnsmasq
パッケージをインストールします。dnf install dnsmasq
# dnf install dnsmasq
Copy to Clipboard Copied! /etc/NetworkManager/NetworkManager.conf
ファイルを編集し、[main]
セクションに以下のエントリーを設定します。dns=dnsmasq
dns=dnsmasq
Copy to Clipboard Copied! NetworkManager
サービスを再読み込みします。systemctl reload NetworkManager
# systemctl reload NetworkManager
Copy to Clipboard Copied!
検証
NetworkManager
ユニットのsystemd
ジャーナルで、サービスが別の DNS サーバーを使用しているドメインを検索します。journalctl -xeu NetworkManager
# journalctl -xeu NetworkManager ... Jun 02 13:30:17 <client_hostname>_ dnsmasq[5298]: using nameserver 198.51.100.7#53 for domain example.com ...
Copy to Clipboard Copied! tcpdump
パケットスニファを使用して、DNS 要求の正しいルートを確認します。tcpdump
パッケージをインストールします。dnf install tcpdump
# dnf install tcpdump
Copy to Clipboard Copied! 1 つのターミナルで
tcpdump
を起動し、すべてのインターフェイスで DNS トラフィックを取得します。tcpdump -i any port 53
# tcpdump -i any port 53
Copy to Clipboard Copied! 別のターミナルで、例外が存在するドメインと別のドメインのホスト名を解決します。次に例を示します。
host -t A www.example.com host -t A www.redhat.com
# host -t A www.example.com # host -t A www.redhat.com
Copy to Clipboard Copied! tcpdump
出力で、Red Hat Enterprise Linux がexample.com
ドメインの DNS クエリーのみを指定された DNS サーバーに、対応するインターフェイスを通じて送信していることを確認します。... 13:52:42.234533 tun0 Out IP server.43534 > 198.51.100.7.domain: 50121+ A? www.example.com. (33) ... 13:52:57.753235 enp1s0 Out IP server.40864 > 192.0.2.1.domain: 6906+ A? www.redhat.com. (33) ...
... 13:52:42.234533 tun0 Out IP server.43534 > 198.51.100.7.domain: 50121+ A? www.example.com. (33) ... 13:52:57.753235 enp1s0 Out IP server.40864 > 192.0.2.1.domain: 6906+ A? www.redhat.com. (33) ...
Copy to Clipboard Copied! Red Hat Enterprise Linux は、
www.example.com
の DNS クエリーを198.51.100.7
の DNS サーバーに送信し、www.redhat.com
のクエリーを192.0.2.1
に送信します。
トラブルシューティング
/etc/resolv.conf
ファイルのnameserver
エントリーが127.0.0.1
を指していることを確認します。cat /etc/resolv.conf nameserver 127.0.0.1
# cat /etc/resolv.conf nameserver 127.0.0.1
Copy to Clipboard Copied! エントリーがない場合は、
/etc/NetworkManager/NetworkManager.conf
ファイルのdns
パラメーターを確認します。dnsmasq
サービスがloopback
デバイスのポート53
でリッスンしていることを確認します。ss -tulpn | grep "127.0.0.1:53"
# ss -tulpn | grep "127.0.0.1:53" udp UNCONN 0 0 127.0.0.1:53 0.0.0.0:* users:(("dnsmasq",pid=7340,fd=18)) tcp LISTEN 0 32 127.0.0.1:53 0.0.0.0:* users:(("dnsmasq",pid=7340,fd=19))
Copy to Clipboard Copied! サービスが
127.0.0.1:53
をリッスンしていない場合は、NetworkManager
ユニットのジャーナルエントリーを確認します。journalctl -u NetworkManager
# journalctl -u NetworkManager
Copy to Clipboard Copied!
第19章 ファイルシステムに保存されている証明書で 802.1X 標準を使用したネットワークへの RHEL クライアントの認証
管理者は、IEEE 802.1X 標準に基づいてポートベースのネットワークアクセス制御 (NAC) を使用して、承認されていない LAN および Wi-Fi クライアントからネットワークを保護します。ネットワークで Extensible Authentication Protocol Transport Layer Security (EAP-TLS) メカニズムを使用している場合は、このネットワークに対してクライアントを認証するための証明書が必要です。
19.1. nmcli
を使用した既存のイーサネット接続での 802.1X ネットワーク認証の設定
nmcli
ユーティリティーを使用して、コマンドラインで 802.1X ネットワーク認証によるイーサネット接続を設定できます。
前提条件
- ネットワークは 802.1X ネットワーク認証をサポートしている。
- イーサネット接続プロファイルが NetworkManager に存在し、有効な IP 設定があります。
TLS 認証に必要な以下のファイルがクライアントにある。
-
クライアント鍵が保存されているのは
/etc/pki/tls/private/client.key
ファイルで、そのファイルは所有されており、root
ユーザーのみが読み取り可能です。 -
クライアント証明書は
/etc/pki/tls/certs/client.crt
に保存されます。 -
認証局 (CA) 証明書は、
/etc/pki/tls/certs/ca.crt
ファイルに保存されています。
-
クライアント鍵が保存されているのは
-
wpa_supplicant
パッケージがインストールされている。
手順
EAP (Extensible Authentication Protocol) を
tls
に設定し、クライアント証明書およびキーファイルへのパスを設定します。nmcli connection modify enp1s0 802-1x.eap tls 802-1x.client-cert /etc/pki/tls/certs/client.crt 802-1x.private-key /etc/pki/tls/certs/certs/client.key
# nmcli connection modify enp1s0 802-1x.eap tls 802-1x.client-cert /etc/pki/tls/certs/client.crt 802-1x.private-key /etc/pki/tls/certs/certs/client.key
Copy to Clipboard Copied! 1 つのコマンドで、
802-1x.eap
パラメーター、802-1x.client-cert
パラメーター、および802-1x.private-key
パラメーターを設定する必要があります。CA 証明書のパスを設定します。
nmcli connection modify enp1s0 802-1x.ca-cert /etc/pki/tls/certs/ca.crt
# nmcli connection modify enp1s0 802-1x.ca-cert /etc/pki/tls/certs/ca.crt
Copy to Clipboard Copied! 証明書で使用するユーザーの ID を設定します。
nmcli connection modify enp1s0 802-1x.identity user@example.com
# nmcli connection modify enp1s0 802-1x.identity user@example.com
Copy to Clipboard Copied! オプション: 設定にパスワードを保存します。
nmcli connection modify enp1s0 802-1x.private-key-password password
# nmcli connection modify enp1s0 802-1x.private-key-password password
Copy to Clipboard Copied! 重要デフォルトでは、NetworkManager はディスク上の接続プロファイルにパスワードをクリアテキストで保存します。このファイルを読み取ることができるのは
root
ユーザーだけです。ただし、設定ファイルのクリアテキストパスワードはセキュリティーリスクとなる可能性があります。セキュリティーを強化するには、
802-1x.password-flags
パラメーターをagent-owned
に設定します。この設定では、GNOME デスクトップ環境またはnm-applet
が実行中のサーバーで、NetworkManager はキーリングのロックを解除してから、これらのサービスからパスワードを取得します。その他の場合は、NetworkManager によりパスワードの入力が求められます。接続プロファイルをアクティベートします。
nmcli connection up enp1s0
# nmcli connection up enp1s0
Copy to Clipboard Copied!
検証
- ネットワーク認証が必要なネットワーク上のリソースにアクセスします。
19.2. nmstatectl
を使用した 802.1X ネットワーク認証による静的イーサネット接続の設定
nmstatectl
ユーティリティーを使用して、Nmstate API を介して、802.1X ネットワーク認証によるイーサネット接続を設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
nmstate
ライブラリーは、TLS
Extensible Authentication Protocol (EAP) 方式のみをサポートします。
前提条件
- ネットワークは 802.1X ネットワーク認証をサポートしている。
- 管理ノードは NetworkManager を使用している。
TLS 認証に必要な以下のファイルがクライアントにある。
-
クライアント鍵が保存されているのは
/etc/pki/tls/private/client.key
ファイルで、そのファイルは所有されており、root
ユーザーのみが読み取り可能です。 -
クライアント証明書は
/etc/pki/tls/certs/client.crt
に保存されます。 -
認証局 (CA) 証明書は、
/etc/pki/tls/certs/ca.crt
ファイルに保存されています。
-
クライアント鍵が保存されているのは
手順
以下の内容を含む YAML ファイル (例:
~/create-ethernet-profile.yml
) を作成します。--- interfaces: - name: enp1s0 type: ethernet state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false 802.1x: ca-cert: /etc/pki/tls/certs/ca.crt client-cert: /etc/pki/tls/certs/client.crt eap-methods: - tls identity: client.example.org private-key: /etc/pki/tls/private/client.key private-key-password: password routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: enp1s0 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: enp1s0 dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb
--- interfaces: - name: enp1s0 type: ethernet state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false 802.1x: ca-cert: /etc/pki/tls/certs/ca.crt client-cert: /etc/pki/tls/certs/client.crt eap-methods: - tls identity: client.example.org private-key: /etc/pki/tls/private/client.key private-key-password: password routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: enp1s0 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: enp1s0 dns-resolver: config: search: - example.com server: - 192.0.2.200 - 2001:db8:1::ffbb
Copy to Clipboard Copied! これらの設定では、次の設定を使用して
enp1s0
デバイスのイーサネット接続プロファイルを定義します。-
静的 IPv4 アドレス: サブネットマスクが
/24
の192.0.2.1
-
静的 IPv6 アドレス -
2001:db8:1::1
(/64
サブネットマスクあり) -
IPv4 デフォルトゲートウェイ -
192.0.2.254
-
IPv6 デフォルトゲートウェイ -
2001:db8:1::fffe
-
IPv4 DNS サーバー -
192.0.2.200
-
IPv6 DNS サーバー -
2001:db8:1::ffbb
-
DNS 検索ドメイン -
example.com
-
TLS
EAP プロトコルを使用した 802.1X ネットワーク認証
-
静的 IPv4 アドレス: サブネットマスクが
設定をシステムに適用します。
nmstatectl apply ~/create-ethernet-profile.yml
# nmstatectl apply ~/create-ethernet-profile.yml
Copy to Clipboard Copied!
検証
- ネットワーク認証が必要なネットワーク上のリソースにアクセスします。
19.3. network
RHEL システムロールを使用した 802.1X ネットワーク認証による静的イーサネット接続の設定
ネットワークアクセス制御 (NAC) は、不正なクライアントからネットワークを保護します。クライアントがネットワークにアクセスできるようにするために、認証に必要な詳細を NetworkManager 接続プロファイルで指定できます。Ansible と network
RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。
Ansible Playbook を使用して秘密鍵、証明書、および CA 証明書をクライアントにコピーしてから、network
RHEL システムロールを使用して 802.1X ネットワーク認証による接続プロファイルを設定できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - ネットワークは 802.1X ネットワーク認証をサポートしている。
- 管理対象ノードが NetworkManager を使用している。
TLS 認証に必要な次のファイルがコントロールノードに存在する。
-
クライアントキーが
/srv/data/client.key
ファイルに保存されている。 -
クライアント証明書が
/srv/data/client.crt
ファイルに保存されている。 -
認証局 (CA) 証明書が
/srv/data/ca.crt
ファイルに保存されている。
-
クライアントキーが
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
ansible-vault create ~/vault.yml
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
Copy to Clipboard Copied! ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。pwd: <password>
pwd: <password>
Copy to Clipboard Copied! - 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configure an Ethernet connection with 802.1X authentication hosts: managed-node-01.example.com vars_files: - ~/vault.yml tasks: - name: Copy client key for 802.1X authentication ansible.builtin.copy: src: "/srv/data/client.key" dest: "/etc/pki/tls/private/client.key" mode: 0600 - name: Copy client certificate for 802.1X authentication ansible.builtin.copy: src: "/srv/data/client.crt" dest: "/etc/pki/tls/certs/client.crt" - name: Copy CA certificate for 802.1X authentication ansible.builtin.copy: src: "/srv/data/ca.crt" dest: "/etc/pki/ca-trust/source/anchors/ca.crt" - name: Ethernet connection profile with static IP address settings and 802.1X ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: enp1s0 type: ethernet autoconnect: yes ip: address: - 192.0.2.1/24 - 2001:db8:1::1/64 gateway4: 192.0.2.254 gateway6: 2001:db8:1::fffe dns: - 192.0.2.200 - 2001:db8:1::ffbb dns_search: - example.com ieee802_1x: identity: <user_name> eap: tls private_key: "/etc/pki/tls/private/client.key" private_key_password: "{{ pwd }}" client_cert: "/etc/pki/tls/certs/client.crt" ca_cert: "/etc/pki/ca-trust/source/anchors/ca.crt" domain_suffix_match: example.com state: up
--- - name: Configure an Ethernet connection with 802.1X authentication hosts: managed-node-01.example.com vars_files: - ~/vault.yml tasks: - name: Copy client key for 802.1X authentication ansible.builtin.copy: src: "/srv/data/client.key" dest: "/etc/pki/tls/private/client.key" mode: 0600 - name: Copy client certificate for 802.1X authentication ansible.builtin.copy: src: "/srv/data/client.crt" dest: "/etc/pki/tls/certs/client.crt" - name: Copy CA certificate for 802.1X authentication ansible.builtin.copy: src: "/srv/data/ca.crt" dest: "/etc/pki/ca-trust/source/anchors/ca.crt" - name: Ethernet connection profile with static IP address settings and 802.1X ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: enp1s0 type: ethernet autoconnect: yes ip: address: - 192.0.2.1/24 - 2001:db8:1::1/64 gateway4: 192.0.2.254 gateway6: 2001:db8:1::fffe dns: - 192.0.2.200 - 2001:db8:1::ffbb dns_search: - example.com ieee802_1x: identity: <user_name> eap: tls private_key: "/etc/pki/tls/private/client.key" private_key_password: "{{ pwd }}" client_cert: "/etc/pki/tls/certs/client.crt" ca_cert: "/etc/pki/ca-trust/source/anchors/ca.crt" domain_suffix_match: example.com state: up
Copy to Clipboard Copied! サンプル Playbook で指定されている設定は次のとおりです。
ieee802_1x
- この変数には、802.1X 関連の設定を含めます。
eap: tls
-
Extensible Authentication Protocol (EAP) に証明書ベースの
TLS
認証方式を使用するようにプロファイルを設定します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.network/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied!
検証
- ネットワーク認証が必要なネットワーク上のリソースにアクセスします。
19.4. network
RHEL システムロールを使用した 802.1X ネットワーク認証による Wi-Fi 接続の設定
ネットワークアクセス制御 (NAC) は、不正なクライアントからネットワークを保護します。クライアントがネットワークにアクセスできるようにするために、認証に必要な詳細を NetworkManager 接続プロファイルで指定できます。Ansible と network
RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。
Ansible Playbook を使用して秘密鍵、証明書、および CA 証明書をクライアントにコピーしてから、network
RHEL システムロールを使用して 802.1X ネットワーク認証による接続プロファイルを設定できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - ネットワークは 802.1X ネットワーク認証をサポートしている。
-
マネージドノードに
wpa_supplicant
パッケージをインストールしました。 - DHCP は、管理対象ノードのネットワークで使用できる。
TLS 認証に必要な以下のファイルがコントロールノードにある。
-
クライアントキーが
/srv/data/client.key
ファイルに保存されている。 -
クライアント証明書が
/srv/data/client.crt
ファイルに保存されている。 -
CA 証明書は
/srv/data/ca.crt
ファイルに保存されます。
-
クライアントキーが
手順
機密性の高い変数を暗号化されたファイルに保存します。
vault を作成します。
ansible-vault create ~/vault.yml
$ ansible-vault create ~/vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
Copy to Clipboard Copied! ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。pwd: <password>
pwd: <password>
Copy to Clipboard Copied! - 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configure a wifi connection with 802.1X authentication hosts: managed-node-01.example.com vars_files: - ~/vault.yml tasks: - name: Copy client key for 802.1X authentication ansible.builtin.copy: src: "/srv/data/client.key" dest: "/etc/pki/tls/private/client.key" mode: 0400 - name: Copy client certificate for 802.1X authentication ansible.builtin.copy: src: "/srv/data/client.crt" dest: "/etc/pki/tls/certs/client.crt" - name: Copy CA certificate for 802.1X authentication ansible.builtin.copy: src: "/srv/data/ca.crt" dest: "/etc/pki/ca-trust/source/anchors/ca.crt" - name: Wifi connection profile with dynamic IP address settings and 802.1X ansible.builtin.import_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: Wifi connection profile with dynamic IP address settings and 802.1X interface_name: wlp1s0 state: up type: wireless autoconnect: yes ip: dhcp4: true auto6: true wireless: ssid: "Example-wifi" key_mgmt: "wpa-eap" ieee802_1x: identity: <user_name> eap: tls private_key: "/etc/pki/tls/private/client.key" private_key_password: "{{ pwd }}" private_key_password_flags: none client_cert: "/etc/pki/tls/certs/client.crt" ca_cert: "/etc/pki/ca-trust/source/anchors/ca.crt" domain_suffix_match: "example.com" network_allow_restart: true
--- - name: Configure a wifi connection with 802.1X authentication hosts: managed-node-01.example.com vars_files: - ~/vault.yml tasks: - name: Copy client key for 802.1X authentication ansible.builtin.copy: src: "/srv/data/client.key" dest: "/etc/pki/tls/private/client.key" mode: 0400 - name: Copy client certificate for 802.1X authentication ansible.builtin.copy: src: "/srv/data/client.crt" dest: "/etc/pki/tls/certs/client.crt" - name: Copy CA certificate for 802.1X authentication ansible.builtin.copy: src: "/srv/data/ca.crt" dest: "/etc/pki/ca-trust/source/anchors/ca.crt" - name: Wifi connection profile with dynamic IP address settings and 802.1X ansible.builtin.import_role: name: redhat.rhel_system_roles.network vars: network_connections: - name: Wifi connection profile with dynamic IP address settings and 802.1X interface_name: wlp1s0 state: up type: wireless autoconnect: yes ip: dhcp4: true auto6: true wireless: ssid: "Example-wifi" key_mgmt: "wpa-eap" ieee802_1x: identity: <user_name> eap: tls private_key: "/etc/pki/tls/private/client.key" private_key_password: "{{ pwd }}" private_key_password_flags: none client_cert: "/etc/pki/tls/certs/client.crt" ca_cert: "/etc/pki/ca-trust/source/anchors/ca.crt" domain_suffix_match: "example.com" network_allow_restart: true
Copy to Clipboard Copied! サンプル Playbook で指定されている設定は次のとおりです。
ieee802_1x
- この変数には、802.1X 関連の設定を含めます。
eap: tls
-
Extensible Authentication Protocol (EAP) に証明書ベースの
TLS
認証方式を使用するようにプロファイルを設定します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.network/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
$ ansible-playbook --ask-vault-pass --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied!
第20章 hostapd
と FreeRADIUS バックエンドを使用した LAN クライアント用の 802.1x ネットワーク認証サービスのセットアップ
IEEE 802.1X 標準では、許可されていないクライアントからネットワークを保護するためのセキュアな認証および認可方法を定義しています。hostapd
サービスと FreeRADIUS を使用すると、ネットワークにネットワークアクセス制御 (NAC) を提供できます。
Red Hat では、認証のバックエンドソースとして Red Hat Identity Management (IdM) を使用した FreeRADIUS のみをサポートしています。
このドキュメントでは、RHEL ホストは、さまざまなクライアントを既存のネットワークに接続するためのブリッジとして機能します。ただし、RHEL ホストは、認証されたクライアントのみにネットワークへのアクセスを許可します。

20.1. 前提条件
freeradius
およびfreeradius-ldap
パッケージのクリーンインストール。パッケージがすでにインストールされている場合は、
/etc/raddb/
ディレクトリーを削除し、パッケージをアンインストールしてから再度インストールします。/etc/raddb/
ディレクトリー内の権限とシンボリックリンクが異なるため、dnf reinstall
コマンドを使用してパッケージを再インストールしないでください。- FreeRADIUS を設定するホストが IdM ドメイン内のクライアント である。
20.2. オーセンティケーターにブリッジを設定する
ネットワークブリッジは、MAC アドレスのテーブルに基づいてホストとネットワーク間のトラフィックを転送するリンク層デバイスです。RHEL を 802.1X オーセンティケーターとして設定する場合は、認証を実行するインターフェイスと LAN インターフェイスの両方をブリッジに追加します。
前提条件
- サーバーには複数のイーサネットインターフェイスがあります。
手順
ブリッジインターフェイスが存在しない場合は、作成します。
nmcli connection add type bridge con-name br0 ifname br0
# nmcli connection add type bridge con-name br0 ifname br0
Copy to Clipboard Copied! イーサネットインターフェイスをブリッジに割り当てます。
nmcli connection add type ethernet port-type bridge con-name br0-port1 ifname enp1s0 controller br0 nmcli connection add type ethernet port-type bridge con-name br0-port2 ifname enp7s0 controller br0 nmcli connection add type ethernet port-type bridge con-name br0-port3 ifname enp8s0 controller br0 nmcli connection add type ethernet port-type bridge con-name br0-port4 ifname enp9s0 controller br0
# nmcli connection add type ethernet port-type bridge con-name br0-port1 ifname enp1s0 controller br0 # nmcli connection add type ethernet port-type bridge con-name br0-port2 ifname enp7s0 controller br0 # nmcli connection add type ethernet port-type bridge con-name br0-port3 ifname enp8s0 controller br0 # nmcli connection add type ethernet port-type bridge con-name br0-port4 ifname enp9s0 controller br0
Copy to Clipboard Copied! ブリッジが拡張認証プロトコル over LAN (EAPOL) パケットを転送できるようにします。
nmcli connection modify br0 group-forward-mask 8
# nmcli connection modify br0 group-forward-mask 8
Copy to Clipboard Copied! ブリッジデバイスで Spanning Tree Protocol (STP) を無効にします。
*nmcli connection modify br0 stp off"
# *nmcli connection modify br0 stp off"
Copy to Clipboard Copied! ポートを自動的にアクティブ化するように接続を設定します。
nmcli connection modify br0 connection.autoconnect-ports 1
# nmcli connection modify br0 connection.autoconnect-ports 1
Copy to Clipboard Copied! 接続をアクティベートします。
nmcli connection up br0
# nmcli connection up br0
Copy to Clipboard Copied!
検証
特定のブリッジのポートであるイーサネットデバイスのリンクステータスを表示します。
ip link show master br0
# ip link show master br0 3: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:62:61:0e brd ff:ff:ff:ff:ff:ff ...
Copy to Clipboard Copied! EAPOL パケットの転送が
br0
デバイスで有効になっているかどうかを確認します。cat /sys/class/net/br0/bridge/group_fwd_mask 0x8
# cat /sys/class/net/br0/bridge/group_fwd_mask 0x8
Copy to Clipboard Copied! コマンドが
0x8
を返す場合、転送が有効になります。
20.3. ネットワーククライアントを安全に認証するための FreeRADIUS の設定 (EAP 使用)
FreeRADIUS は、Extensible Authentication Protocol (EAP) のさまざまな方式をサポートしています。しかし、サポートされるセキュアな状況では、EAP-TTLS (Tunneled Transport Layer Security) を使用してください。
EAP-TTLS では、クライアントが、トンネルを設定するための外部認証プロトコルとしてセキュアな TLS 接続を使用します。内部認証では、LDAP を使用して Identity Management に対して認証を行います。EAP-TTLS を使用するには、TLS サーバー証明書が必要です。
デフォルトの FreeRADIUS 設定ファイルはドキュメントとして機能し、すべてのパラメーターとディレクティブを記述します。特定の機能を無効にする場合は、設定ファイルの対応する部分を削除するのではなく、コメントアウトしてください。これにより、設定ファイルと含まれているドキュメントの構造を保持できます。
前提条件
-
freeradius
およびfreeradius-ldap
パッケージがインストールされている。 -
/etc/raddb/
ディレクトリー内の設定ファイルが変更されておらず、freeradius
パッケージによって提供されるものである。 - ホストが Red Hat Identity Management (IdM) ドメインに登録されている。
手順
秘密鍵を作成し、IdM から証明書を要求します。
ipa-getcert request -w -k /etc/pki/tls/private/radius.key -f /etc/pki/tls/certs/radius.pem -o "root:radiusd" -m 640 -O "root:radiusd" -M 640 -T caIPAserviceCert -C 'systemctl restart radiusd.service' -N freeradius.idm.example.com -D freeradius.idm.example.com -K radius/freeradius.idm.example.com
# ipa-getcert request -w -k /etc/pki/tls/private/radius.key -f /etc/pki/tls/certs/radius.pem -o "root:radiusd" -m 640 -O "root:radiusd" -M 640 -T caIPAserviceCert -C 'systemctl restart radiusd.service' -N freeradius.idm.example.com -D freeradius.idm.example.com -K radius/freeradius.idm.example.com
Copy to Clipboard Copied! certmonger
サービスが、秘密鍵を/etc/pki/tls/private/radius.key
ファイルに保存し、証明書を/etc/pki/tls/certs/radius.pem
ファイルに保存して、セキュアな権限を設定します。さらに、certmonger
は証明書を監視し、有効期限が切れる前に更新し、証明書の更新後にradiusd
サービスを再起動します。CA が証明書を正常に発行したことを確認します。
ipa-getcert list -f /etc/pki/tls/certs/radius.pem
# ipa-getcert list -f /etc/pki/tls/certs/radius.pem ... Number of certificates and requests being tracked: 1. Request ID '20240918142211': status: MONITORING stuck: no key pair storage: type=FILE,location='/etc/pki/tls/private/radius.key' certificate: type=FILE,location='/etc/pki/tls/certs/radius.crt' ...
Copy to Clipboard Copied! Diffie-Hellman (DH) パラメーターを使用して
/etc/raddb/certs/dh
ファイルを作成します。たとえば、2048 ビットの素数を持つ DH ファイルを作成するには、次のように実行します。openssl dhparam -out /etc/raddb/certs/dh 2048
# openssl dhparam -out /etc/raddb/certs/dh 2048
Copy to Clipboard Copied! セキュリティー上の理由から、素数が 2048 ビット未満の DH ファイルは使用しないでください。ビット数によっては、ファイルの作成に数分かかる場合があります。
/etc/raddb/mods-available/eap
ファイルを編集します。tls-config tls-common
ディレクティブで TLS 関連の設定を指定します。eap { ... tls-config tls-common { ... private_key_file = /etc/pki/tls/private/radius.key certificate_file = /etc/pki/tls/certs/radius.pem ca_file = /etc/ipa/ca.crt ... } }
eap { ... tls-config tls-common { ... private_key_file = /etc/pki/tls/private/radius.key certificate_file = /etc/pki/tls/certs/radius.pem ca_file = /etc/ipa/ca.crt ... } }
Copy to Clipboard Copied! eap
ディレクティブのdefault_eap_type
パラメーターをttls
に設定します。eap { ... default_eap_type = ttls ... }
eap { ... default_eap_type = ttls ... }
Copy to Clipboard Copied! 安全でない EAP-MD5 認証方式を無効にするには、
md5
ディレクティブをコメントアウトします。eap { ... # md5 { # } ... }
eap { ... # md5 { # } ... }
Copy to Clipboard Copied! デフォルトの設定ファイルでは、他の安全でない EAP 認証方法がデフォルトでコメントアウトされていることに注意してください。
/etc/raddb/sites-available/default
ファイルを編集し、eap
以外のすべての認証方法をコメントアウトします。authenticate { ... # Auth-Type PAP { # pap # } # Auth-Type CHAP { # chap # } # Auth-Type MS-CHAP { # mschap # } # mschap # digest ... }
authenticate { ... # Auth-Type PAP { # pap # } # Auth-Type CHAP { # chap # } # Auth-Type MS-CHAP { # mschap # } # mschap # digest ... }
Copy to Clipboard Copied! これにより、外部認証で EAP のみが有効になり、プレーンテキスト認証方法が無効になります。
/etc/raddb/sites-available/inner-tunnel
ファイルを編集し、次の変更を加えます。-ldap
エントリーをコメントアウトし、ldap
モジュール設定をauthorize
ディレクティブに追加します。authorize { ... #-ldap ldap if ((ok || updated) && User-Password) { update { control:Auth-Type := ldap } } ... }
authorize { ... #-ldap ldap if ((ok || updated) && User-Password) { update { control:Auth-Type := ldap } } ... }
Copy to Clipboard Copied! authenticate
ディレクティブ内の LDAP 認証タイプのコメントを解除します。authenticate { Auth-Type LDAP { ldap } }
authenticate { Auth-Type LDAP { ldap } }
Copy to Clipboard Copied!
ldap
モジュールを有効にします。ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
# ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
Copy to Clipboard Copied! /etc/raddb/mods-available/ldap
ファイルを編集し、次の変更を加えます。ldap
ディレクティブで、IdM LDAP サーバーの URL とベース識別名 (DN) を設定します。ldap { ... server = 'ldaps://idm_server.idm.example.com' base_dn = 'cn=users,cn=accounts,dc=idm,dc=example,dc=com' ... }
ldap { ... server = 'ldaps://idm_server.idm.example.com' base_dn = 'cn=users,cn=accounts,dc=idm,dc=example,dc=com' ... }
Copy to Clipboard Copied! FreeRADIUS ホストと IdM サーバー間で TLS 暗号化接続を使用するには、サーバー URL に
ldaps
プロトコルを指定します。ldap
ディレクティブで、IdM LDAP サーバーの TLS 証明書検証を有効にします。tls { ... require_cert = 'demand' ... }
tls { ... require_cert = 'demand' ... }
Copy to Clipboard Copied!
/etc/raddb/clients.conf
ファイルを編集します。localhost
およびlocalhost_ipv6
クライアントディレクティブでセキュアなパスワードを設定します。client localhost { ipaddr = 127.0.0.1 ... secret = localhost_client_password ... } client localhost_ipv6 { ipv6addr = ::1 secret = localhost_client_password }
client localhost { ipaddr = 127.0.0.1 ... secret = localhost_client_password ... } client localhost_ipv6 { ipv6addr = ::1 secret = localhost_client_password }
Copy to Clipboard Copied! ネットワークオーセンティケーターのクライアントディレクティブを追加します。
client hostapd.example.org { ipaddr = 192.0.2.2/32 secret = hostapd_client_password }
client hostapd.example.org { ipaddr = 192.0.2.2/32 secret = hostapd_client_password }
Copy to Clipboard Copied! オプション: 他のホストも FreeRADIUS サービスにアクセスできるようにするには、それらのホストにもクライアントディレクティブを追加します。以下に例を示します。
client <hostname_or_description> { ipaddr = <IP_address_or_range> secret = <client_password> }
client <hostname_or_description> { ipaddr = <IP_address_or_range> secret = <client_password> }
Copy to Clipboard Copied! ipaddr
パラメーターは IPv4 および IPv6 アドレスを受け入れ、オプションのクラスレスドメイン間ルーティング (CIDR) 表記を使用して範囲を指定できます。ただし、このパラメーターに設定できる値は 1 つだけです。たとえば、IPv4 アドレスと IPv6 アドレスの両方へのアクセスを許可するには、2 つのクライアントディレクティブを追加する必要があります。ホスト名や IP 範囲が使用される場所を説明する単語など、クライアントディレクティブのわかりやすい名前を使用します。
設定ファイルを確認します。
radiusd -XC
# radiusd -XC ... Configuration appears to be OK
Copy to Clipboard Copied! firewalld
サービスで RADIUS ポートを開きます。firewall-cmd --permanent --add-service=radius firewall-cmd --reload
# firewall-cmd --permanent --add-service=radius # firewall-cmd --reload
Copy to Clipboard Copied! radiusd
サービスを有効にして開始します。systemctl enable --now radiusd
# systemctl enable --now radiusd
Copy to Clipboard Copied!
トラブルシューティング
radiusd
サービスの起動に失敗した場合は、IdM サーバーのホスト名を解決できることを確認します。host -v idm_server.idm.example.com
# host -v idm_server.idm.example.com
Copy to Clipboard Copied! その他の問題が発生した場合は、
radiusd
をデバッグモードで実行します。radiusd
サービスを停止します。systemctl stop radiusd
# systemctl stop radiusd
Copy to Clipboard Copied! デバッグモードでサービスを開始します。
radiusd -X
# radiusd -X ... Ready to process requests
Copy to Clipboard Copied! -
Verification
セクションで参照されているように、FreeRADIUS ホストで認証テストを実行します。
次のステップ
- 不要になった認証方法や使用しないその他の機能を無効にします。
20.4. 有線ネットワークで hostapd
をオーセンティケーターとして設定する
ホストアクセスポイントデーモン (hostapd
) サービスは、有線ネットワークでオーセンティケーターとして機能し、802.1X 認証を提供できます。このため、hostapd
サービスには、クライアントを認証する RADIUS サーバーが必要です。
hostapd
サービスは、統合された RADIUS サーバーを提供します。ただし、統合 RADIUS サーバーはテスト目的でのみ使用してください。実稼働環境では、さまざまな認証方法やアクセス制御などの追加機能をサポートする FreeRADIUS サーバーを使用します。
hostapd
サービスはトラフィックプレーンと相互作用しません。このサービスは、オーセンティケーターとしてのみ機能します。たとえば、hostapd
制御インターフェイスを使用するスクリプトまたはサービスを使用して、認証イベントの結果に基づいてトラフィックを許可または拒否します。
前提条件
-
hostapd
パッケージをインストールしました。 - FreeRADIUS サーバーが設定され、クライアントを認証する準備が整いました。
手順
次のコンテンツで
/etc/hostapd/hostapd.conf
ファイルを作成します。General settings of hostapd =========================== Control interface settings Enable logging for all modules Log level Wired 802.1X authentication =========================== Driver interface type Enable IEEE 802.1X authorization Use port access entry (PAE) group address (01:80:c2:00:00:03) when sending EAPOL frames Network interface for authentication requests RADIUS client configuration =========================== Local IP address used as NAS-IP-Address Unique NAS-Identifier within scope of RADIUS server RADIUS authentication server RADIUS accounting server
# General settings of hostapd # =========================== # Control interface settings ctrl_interface=/var/run/hostapd ctrl_interface_group=wheel # Enable logging for all modules logger_syslog=-1 logger_stdout=-1 # Log level logger_syslog_level=2 logger_stdout_level=2 # Wired 802.1X authentication # =========================== # Driver interface type driver=wired # Enable IEEE 802.1X authorization ieee8021x=1 # Use port access entry (PAE) group address # (01:80:c2:00:00:03) when sending EAPOL frames use_pae_group_addr=1 # Network interface for authentication requests interface=br0 # RADIUS client configuration # =========================== # Local IP address used as NAS-IP-Address own_ip_addr=192.0.2.2 # Unique NAS-Identifier within scope of RADIUS server nas_identifier=hostapd.example.org # RADIUS authentication server auth_server_addr=192.0.2.1 auth_server_port=1812 auth_server_shared_secret=hostapd_client_password # RADIUS accounting server acct_server_addr=192.0.2.1 acct_server_port=1813 acct_server_shared_secret=hostapd_client_password
Copy to Clipboard Copied! この設定で使用されるパラメーターの詳細は、
/usr/share/doc/hostapd/hostapd.conf
サンプル設定ファイルの説明を参照してください。hostapd
サービスを有効にして開始します。systemctl enable --now hostapd
# systemctl enable --now hostapd
Copy to Clipboard Copied!
トラブルシューティング
hostapd
サービスの起動に失敗した場合は、/etc/hostapd/hostapd.conf
ファイルで使用するブリッジインターフェイスがシステム上に存在することを確認します。ip link show br0
# ip link show br0
Copy to Clipboard Copied! その他の問題が発生した場合は、
hostapd
をデバッグモードで実行します。hostapd
サービスを停止します。systemctl stop hostapd
# systemctl stop hostapd
Copy to Clipboard Copied! デバッグモードでサービスを開始します。
hostapd -d /etc/hostapd/hostapd.conf
# hostapd -d /etc/hostapd/hostapd.conf
Copy to Clipboard Copied! -
Verification
セクションで参照されているように、FreeRADIUS ホストで認証テストを実行します。
20.5. FreeRADIUS サーバーまたはオーセンティケーターに対する EAP-TTLS 認証のテスト
Extensible Authentication Protocol - Tunneled Transport Layer Security (EAP-TTLS) を使用した認証が、期待どおりに機能するかテストするには、次の手順を実行します。
- FreeRADIUS サーバーをセットアップした後
-
hostapd
サービスを 802.1X ネットワーク認証のオーセンティケーターとして設定した後。
この手順で使用されるテストユーティリティーの出力は、EAP 通信に関する追加情報を提供し、問題のデバッグに役立ちます。
前提条件
認証先が以下の場合:
FreeRADIUS サーバー:
-
hostapd
パッケージによって提供されるeapol_test
ユーティリティーがインストールされている。 - この手順の実行対象のクライアントが、FreeRADIUS サーバーのクライアントデータベースで認可されている。
-
-
同じ名前のパッケージによって提供されるオーセンティケーターである
wpa_supplicant
ユーティリティーがインストールされている。
-
認証局 (CA) 証明書が
/etc/ipa/ca.cert
ファイルに保存されている。
手順
オプション: Identity Management (IdM) でユーザーを作成します。
ipa user-add --first "Test" --last "User" idm_user --password
# ipa user-add --first "Test" --last "User" idm_user --password
Copy to Clipboard Copied! 次のコンテンツで
/etc/wpa_supplicant/wpa_supplicant-TTLS.conf
ファイルを作成します。ap_scan=0 network={ eap=TTLS eapol_flags=0 key_mgmt=IEEE8021X # Anonymous identity (sent in unencrypted phase 1) # Can be any string anonymous_identity="anonymous" # Inner authentication (sent in TLS-encrypted phase 2) phase2="auth=PAP" identity="idm_user" password="idm_user_password" # CA certificate to validate the RADIUS server's identity ca_cert="/etc/ipa/ca.crt" }
ap_scan=0 network={ eap=TTLS eapol_flags=0 key_mgmt=IEEE8021X # Anonymous identity (sent in unencrypted phase 1) # Can be any string anonymous_identity="anonymous" # Inner authentication (sent in TLS-encrypted phase 2) phase2="auth=PAP" identity="idm_user" password="idm_user_password" # CA certificate to validate the RADIUS server's identity ca_cert="/etc/ipa/ca.crt" }
Copy to Clipboard Copied! 認証するには:
FreeRADIUS サーバーには、次のように実行します。
eapol_test -c /etc/wpa_supplicant/wpa_supplicant-TTLS.conf -a 192.0.2.1 -s <client_password>
# eapol_test -c /etc/wpa_supplicant/wpa_supplicant-TTLS.conf -a 192.0.2.1 -s <client_password> ... EAP: Status notification: remote certificate verification (param=success) ... CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully ... SUCCESS
Copy to Clipboard Copied! -a
オプションは FreeRADIUS サーバーの IP アドレスを定義し、-s
オプションは FreeRADIUS サーバーのクライアント設定でコマンドを実行するホストのパスワードを指定します。オーセンティケーター。次のように実行します。
wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant-TTLS.conf -D wired -i enp0s31f6
# wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant-TTLS.conf -D wired -i enp0s31f6 ... enp0s31f6: CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully ...
Copy to Clipboard Copied! -i
オプションは、wpa_supplicant
が LAN(EAPOL) パケットを介して拡張認証プロトコルを送信するネットワークインターフェイス名を指定します。デバッグ情報の詳細は、コマンドに
-d
オプションを渡してください。
20.6. hostapd
認証イベントに基づくトラフィックのブロックと許可
hostapd
サービスはトラフィックプレーンと相互作用しません。このサービスは、オーセンティケーターとしてのみ機能します。ただし、認証イベントの結果に基づいてトラフィックを許可および拒否するスクリプトを作成できます。
この手順はサポートされておらず、エンタープライズ対応のソリューションではありません。hostapd_cli
によって取得されたイベントを評価することにより、トラフィックをブロックまたは許可する方法のみを示しています。
802-1x-tr-mgmt
systemd サービスが開始すると、RHEL は LAN(EAPOL) パケットを介した拡張認証プロトコルを除く hostapd
のリッスンポート上のすべてのトラフィックをブロックし、hostapd_cli
ユーティリティーを使用して hostapd
制御インターフェイスに接続します。次に、/usr/local/bin/802-1x-tr-mgmt
スクリプトがイベントを評価します。hostapd_cli
が受信するさまざまなイベントに応じて、スクリプトは MAC アドレスのトラフィックを許可またはブロックします。802-1x-tr-mgmt
サービスが停止すると、すべてのトラフィックが自動的に再度許可されることに注意してください。
hostapd
サーバーでこの手順を実行します。
前提条件
-
hostapd
サービスが設定され、サービスはクライアントを認証する準備ができています。
手順
次のコンテンツで
/usr/local/bin/802-1x-tr-mgmt
ファイルを作成します。#!/bin/sh TABLE="tr-mgmt-${1}" read -r -d '' TABLE_DEF << EOF table bridge ${TABLE} { set allowed_macs { type ether_addr } chain accesscontrol { ether saddr @allowed_macs accept ether daddr @allowed_macs accept drop } chain forward { type filter hook forward priority 0; policy accept; meta ibrname "$0" jump accesscontrol } } EOF case ${2:-NOTANEVENT} in block_all) nft destroy table bridge "$TABLE" printf "$TABLE_DEF" | nft -f - echo "$1: All the bridge traffic blocked. Traffic for a client with a given MAC will be allowed after 802.1x authentication" ;; AP-STA-CONNECTED | CTRL-EVENT-EAP-SUCCESS | CTRL-EVENT-EAP-SUCCESS2) nft add element bridge tr-mgmt-br0 allowed_macs { $3 } echo "$1: Allowed traffic from $3" ;; AP-STA-DISCONNECTED | CTRL-EVENT-EAP-FAILURE) nft delete element bridge tr-mgmt-br0 allowed_macs { $3 } echo "$1: Denied traffic from $3" ;; allow_all) nft destroy table bridge "$TABLE" echo "$1: Allowed all bridge traffice again" ;; NOTANEVENT) echo "$0 was called incorrectly, usage: $0 interface event [mac_address]" ;; esac
#!/bin/sh TABLE="tr-mgmt-${1}" read -r -d '' TABLE_DEF << EOF table bridge ${TABLE} { set allowed_macs { type ether_addr } chain accesscontrol { ether saddr @allowed_macs accept ether daddr @allowed_macs accept drop } chain forward { type filter hook forward priority 0; policy accept; meta ibrname "$0" jump accesscontrol } } EOF case ${2:-NOTANEVENT} in block_all) nft destroy table bridge "$TABLE" printf "$TABLE_DEF" | nft -f - echo "$1: All the bridge traffic blocked. Traffic for a client with a given MAC will be allowed after 802.1x authentication" ;; AP-STA-CONNECTED | CTRL-EVENT-EAP-SUCCESS | CTRL-EVENT-EAP-SUCCESS2) nft add element bridge tr-mgmt-br0 allowed_macs { $3 } echo "$1: Allowed traffic from $3" ;; AP-STA-DISCONNECTED | CTRL-EVENT-EAP-FAILURE) nft delete element bridge tr-mgmt-br0 allowed_macs { $3 } echo "$1: Denied traffic from $3" ;; allow_all) nft destroy table bridge "$TABLE" echo "$1: Allowed all bridge traffice again" ;; NOTANEVENT) echo "$0 was called incorrectly, usage: $0 interface event [mac_address]" ;; esac
Copy to Clipboard Copied! 次のコンテンツで
/etc/systemd/system/802-1x-tr-mgmt@.service
サービスファイルを作成します。[Unit] Description=Example 802.1x traffic management for hostapd After=hostapd.service After=sys-devices-virtual-net-%i.device [Service] Type=simple ExecStartPre=bash -c '/usr/sbin/hostapd_cli ping | grep PONG' ExecStartPre=/usr/local/bin/802-1x-tr-mgmt %i block_all ExecStart=/usr/sbin/hostapd_cli -i %i -a /usr/local/bin/802-1x-tr-mgmt ExecStopPost=/usr/local/bin/802-1x-tr-mgmt %i allow_all [Install] WantedBy=multi-user.target
[Unit] Description=Example 802.1x traffic management for hostapd After=hostapd.service After=sys-devices-virtual-net-%i.device [Service] Type=simple ExecStartPre=bash -c '/usr/sbin/hostapd_cli ping | grep PONG' ExecStartPre=/usr/local/bin/802-1x-tr-mgmt %i block_all ExecStart=/usr/sbin/hostapd_cli -i %i -a /usr/local/bin/802-1x-tr-mgmt ExecStopPost=/usr/local/bin/802-1x-tr-mgmt %i allow_all [Install] WantedBy=multi-user.target
Copy to Clipboard Copied! systemd を再ロードします。
systemctl daemon-reload
# systemctl daemon-reload
Copy to Clipboard Copied! hostapd
がリッスンしているインターフェイス名で802-1x-tr-mgmt
サービスを有効にして開始します。systemctl enable --now 802-1x-tr-mgmt@br0.service
# systemctl enable --now 802-1x-tr-mgmt@br0.service
Copy to Clipboard Copied!
検証
- ネットワークに対してクライアントで認証します。FreeRADIUS サーバーまたはオーセンティケーターに対する EAP-TTLS 認証のテスト を参照してください。
第21章 キーファイル形式の NetworkManager 接続プロファイル
Red Hat Enterprise Linux (RHEL) の NetworkManager は、接続プロファイルをキーファイル形式で保存します。この形式は、NetworkManager が提供するすべての接続設定をサポートします。
ifcfg
形式の接続プロファイルは RHEL 10 ではサポートされていません。NetworkManager はこの形式のファイルを無視します。また、RHEL 10 でキーファイル形式に変換することもできません。
21.1. NetworkManager プロファイルのキーファイル形式
キーファイルの形式は INI 形式に似ています。たとえば、次はキーファイル形式のイーサネット接続プロファイルです。
[connection] id=example_connection uuid=82c6272d-1ff7-4d56-9c7c-0eb27c300029 type=ethernet autoconnect=true [ipv4] method=auto [ipv6] method=auto [ethernet] mac-address=00:53:00:8f:fa:66
[connection]
id=example_connection
uuid=82c6272d-1ff7-4d56-9c7c-0eb27c300029
type=ethernet
autoconnect=true
[ipv4]
method=auto
[ipv6]
method=auto
[ethernet]
mac-address=00:53:00:8f:fa:66
パラメーターの入力や配置を誤ると、予期しない動作が発生する可能性があります。したがって、NetworkManager プロファイルを手動で編集または作成しないでください。
NetworkManager 接続を管理するには、nmcli
ユーティリティー、network
RHEL システムロール、または nmstate
API を使用してください。たとえば、オフラインモードで nmcli
ユーティリティー を使用して接続プロファイルを作成できます。
各セクションは、nm-settings(5)
man ページで説明されている NetworkManager 設定名に対応しています。セクションの各 key-value-pair は、man ページの settings 仕様に記載されているプロパティーのいずれかになります。
NetworkManager キーファイルのほとんどの変数には、1 対 1 のマッピングがあります。つまり、NetworkManager プロパティーは、同じ名前と形式の変数としてキーファイルに保存されます。ただし、主にキーファイルの構文を読みやすくするために例外があります。この例外のリストは、システム上の nm-settings-keyfile(5)
man ページを参照してください。
接続プロファイルには秘密鍵やパスフレーズなどの機密情報が含まれる可能性があるため、セキュリティー上の理由から、NetworkManager は root
ユーザーが所有し、root
のみが読み書きできる設定ファイルのみを使用します。
接続プロファイルを .nmconnection
接尾辞付きで /etc/NetworkManager/system-connections/
ディレクトリーに保存します。このディレクトリーには永続的なプロファイルが含まれています。NetworkManager API を使用して、永続プロファイルを変更すると、NetworkManager は、このディレクトリーにファイルを書き込み、上書きします。
NetworkManager は、ディスクからプロファイルを自動的に再読み込みしません。キーファイル形式で接続プロファイルを作成または更新する場合は、nmcli connection reload
コマンドを使用して、変更を NetworkManager に通知します。
21.2. nmcli
を使用したオフラインモードでのキーファイル接続プロファイルの作成
NetworkManager ユーティリティー (nmcli
、network
RHEL システムロール、NetworkManager 接続を管理するための nmstate
API など) を使用して、設定ファイルを作成および更新します。ただし、nmcli --offline connection add
コマンドを使用して、オフラインモードでキーファイル形式のさまざまな接続プロファイルを作成することもできます。
オフラインモードでは、nmcli
が NetworkManager
サービスなしで動作し、標準出力を介してキーファイル接続プロファイルを生成することが保証されます。この機能は、次の場合に役立ちます。
- どこかに事前に展開する必要がある接続プロファイルを作成する場合。たとえば、コンテナーイメージ内、または RPM パッケージとして作成する場合。
-
NetworkManager
サービスが利用できない環境で接続プロファイルを作成する場合 (chroot
ユーティリティーを使用する場合など)。または、Kickstart%post
スクリプトを使用してインストールする RHEL システムのネットワーク設定を作成または変更する場合。
手順
キーファイル形式で新しい接続プロファイルを作成します。たとえば、DHCP を使用しないイーサネットデバイスの接続プロファイルの場合は、同様の
nmcli
コマンドを実行します。nmcli --offline connection add type ethernet con-name Example-Connection ipv4.addresses 192.0.2.1/24 ipv4.dns 192.0.2.200 ipv4.method manual > /etc/NetworkManager/system-connections/example.nmconnection
# nmcli --offline connection add type ethernet con-name Example-Connection ipv4.addresses 192.0.2.1/24 ipv4.dns 192.0.2.200 ipv4.method manual > /etc/NetworkManager/system-connections/example.nmconnection
Copy to Clipboard Copied! 注記con-name
キーで指定した接続名は、生成されたプロファイルのid
変数に保存されます。後でnmcli
コマンドを使用してこの接続を管理する場合は、次のように接続を指定します。-
id
変数を省略しない場合は、Example-Connection
などの接続名を使用します。 -
id
変数を省略する場合は、output
のように.nmconnection
接尾辞のないファイル名を使用します。
-
設定ファイルにパーミッションを設定して、
root
ユーザーのみが読み取りおよび更新できるようにします。chmod 600 /etc/NetworkManager/system-connections/example.nmconnection chown root:root /etc/NetworkManager/system-connections/example.nmconnection
# chmod 600 /etc/NetworkManager/system-connections/example.nmconnection # chown root:root /etc/NetworkManager/system-connections/example.nmconnection
Copy to Clipboard Copied! NetworkManager 接続をリロードします。
nmcli connection reload
# nmcli connection reload
Copy to Clipboard Copied! プロファイルの
autoconnect
変数をfalse
に設定した場合は、コネクションをアクティブにします。nmcli connection up Example-Connection
# nmcli connection up Example-Connection
Copy to Clipboard Copied!
検証
NetworkManager
サービスが実行されていることを確認します。systemctl status NetworkManager.service
# systemctl status NetworkManager.service ● NetworkManager.service - Network Manager Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2022-08-03 13:08:32 CEST; 1min 40s ago ...
Copy to Clipboard Copied! NetworkManager が設定ファイルからプロファイルを読み込めることを確認します。
nmcli -f TYPE,FILENAME,NAME connection
# nmcli -f TYPE,FILENAME,NAME connection TYPE FILENAME NAME ethernet /etc/NetworkManager/system-connections/example.nmconnection Example-Connection ...
Copy to Clipboard Copied! 新しく作成された接続が出力に表示されない場合は、使用したキーファイルのパーミッションと構文が正しいことを確認してください。
接続プロファイルを表示します。
nmcli connection show Example-Connection
# nmcli connection show Example-Connection connection.id: Example-Connection connection.uuid: 232290ce-5225-422a-9228-cb83b22056b4 connection.stable-id: -- connection.type: 802-3-ethernet connection.interface-name: -- connection.autoconnect: yes ...
Copy to Clipboard Copied!
21.3. キーファイル形式での NetworkManager プロファイルの手動作成
NetworkManager 接続プロファイルは、キーファイル形式で手動で作成できます。
設定ファイルを手動で作成または更新すると、予期しないネットワーク設定や、機能しないネットワーク設定が発生する可能性があります。代わりに、オフラインモードで nmcli
を使用できます。nmcli
を使用したオフラインモードでのキーファイル接続プロファイルの作成 を参照してください。
手順
接続プロファイルを作成します。たとえば、DHCP を使用する
enp1s0
イーサネットデバイスの接続プロファイルを作成する場合は、次の内容の/etc/NetworkManager/system-connections/example.nmconnection
ファイルを作成します。[connection] id=Example-Connection type=ethernet autoconnect=true interface-name=enp1s0 [ipv4] method=auto [ipv6] method=auto
[connection] id=Example-Connection type=ethernet autoconnect=true interface-name=enp1s0 [ipv4] method=auto [ipv6] method=auto
Copy to Clipboard Copied! 注記ファイル名には、
.nmconnection
の接尾辞を付けた任意のファイル名を使用できます。ただし、後でnmcli
コマンドを使用して接続を管理する場合は、この接続を参照する際に、id
に設定した接続名を使用する必要があります。id
を省略する場合は、.nmconnection
を使用せずにファイルネームを使用して、このコネクションを参照してください。設定ファイルにパーミッションを設定して、
root
のユーザーのみが読み取りおよび更新できるようにします。chown root:root /etc/NetworkManager/system-connections/example.nmconnection chmod 600 /etc/NetworkManager/system-connections/example.nmconnection
# chown root:root /etc/NetworkManager/system-connections/example.nmconnection # chmod 600 /etc/NetworkManager/system-connections/example.nmconnection
Copy to Clipboard Copied! 接続プロファイルを再読み込みします。
nmcli connection reload
# nmcli connection reload
Copy to Clipboard Copied! NetworkManager が設定ファイルからプロファイルを読み込んでいることを確認します。
nmcli -f NAME,UUID,FILENAME connection
# nmcli -f NAME,UUID,FILENAME connection NAME UUID FILENAME Example-Connection 86da2486-068d-4d05-9ac7-957ec118afba /etc/NetworkManager/system-connections/example.nmconnection ...
Copy to Clipboard Copied! このコマンドで、新しく追加した接続が表示されない場合は、ファイルの権限と、ファイルで使用した構文が正しいことを確認します。
プロファイルの
autoconnect
変数をfalse
に設定した場合は、コネクションをアクティブにします。nmcli connection up Example-Connection
# nmcli connection up Example-Connection
Copy to Clipboard Copied!
検証
接続プロファイルを表示します。
nmcli connection show Example-Connection
# nmcli connection show Example-Connection
Copy to Clipboard Copied!
第22章 systemd ネットワークターゲットおよびサービス
RHEL は、ネットワーク設定を適用する間に、network
および network-online
ターゲットと NetworkManager-wait-online
サービスを使用します。また、systemd
サービスがネットワークが稼働していることを前提としており、ネットワーク状態の変化に動的に反応できない場合は、ネットワークが完全に利用可能になった後にサービスが起動するように設定することもできます。
22.1. systemd ターゲット network と network-online の違い
Systemd は、ターゲットユニット network
および network-online
を維持します。NetworkManager-wait-online.service
などの特殊ユニットは、WantedBy=network-online.target
パラメーターおよび Before=network-online.target
パラメーターを持ちます。有効にすると、このようなユニットは network-online.target
で開始し、一部の形式のネットワーク接続が確立されるまでターゲットに到達させるよう遅延します。ネットワークが接続されるまで、network-online
ターゲットが遅延します。
network-online
ターゲットはサービスを開始します。これにより、実行の遅延が大幅に増加します。Systemd は、このターゲットユニットの Wants
パラメーターおよび After
パラメーターの依存関係を、$network
ファシリティーを参照する Linux Standard Base (LSB) ヘッダーを持つすべての System V(SysV) init
スクリプトサービスユニットに自動的に追加します。LSB ヘッダーは、init
スクリプトのメタデータです。これを使用して依存関係を指定できます。これは systemd
ターゲットに似ています。
network
ターゲットは、起動プロセスの実行を大幅に遅らせません。network
ターゲットに到達すると、ネットワークの設定を行うサービスが開始していることになります。ただし、ネットワークデバイスが設定されているわけではありません。このターゲットは、システムのシャットダウン時に重要です。たとえば、起動中に network
ターゲットの後に順序付けされたサービスがあると、この依存関係はシャットダウン中に元に戻されます。サービスが停止するまで、ネットワークは切断されません。リモートネットワークファイルシステムのすべてのマウントユニットは、network-online
ターゲットユニットを自動的に起動し、その後に自身を置きます。
network-online
ターゲットユニットは、システムの起動時にのみ役に立ちます。システムの起動が完了すると、このターゲットがネットワークのオンライン状態を追跡しなくなります。したがって、network-online
を使用してネットワーク接続を監視することはできません。このターゲットは、1 回限りのシステム起動の概念を提供します。
22.2. NetworkManager-wait-online
の概要
NetworkManager-wait-online
サービスは、起動が完了したことを NetworkManager が報告するまで、network-online
ターゲットへの到達を遅らせます。NetworkManager は、起動時に connection.autoconnect
パラメーターが yes
に設定されたすべてのプロファイルをアクティブにします。ただし、NetworkManager プロファイルがアクティブ化状態である限り、プロファイルのアクティベーションは完了しません。アクティベーションに失敗すると、NetworkManager は connection.autoconnect-retries
の値に応じてアクティベーションを再試行します。
デバイスがアクティブ状態に達するタイミングは、その設定により異なります。たとえば、プロファイルに IPv4 と IPv6 の両方の設定が含まれている場合、アドレスファミリーの 1 つだけ準備が完了していると、NetworkManager はデフォルトでデバイスが完全にアクティブ化されていると見なします。接続プロファイルの ipv4.may-fail
および ipv6.may-fail
パラメーターが、この動作を制御します。
イーサネットデバイスの場合、NetworkManager はタイムアウトでキャリアを待ちます。したがって、イーサネットケーブルが接続されていないと、NetworkManager-wait-online.service
はさらに遅延します。
起動が完了すると、すべてのプロファイルが非接続状態になるか、正常にアクティブ化されます。プロファイルを自動接続するように設定できます。以下は、タイムアウトを設定したり、接続がアクティブとみなされるタイミングを定義するいくつかのパラメーター例です。
-
connection.wait-device-timeout
: ドライバーがデバイスを検出するためのタイムアウトを設定します。 -
ipv4.may-fail
およびipv6.may-fail
: 1 つの IP アドレスファミリーの準備ができている状態でアクティベーションを設定します。または、特定のアドレスファミリーが設定を完了する必要があるかを設定します。 -
ipv4.gateway-ping-timeout
: アクティベーションを遅延します。
22.3. ネットワークの開始後に systemd サービスが起動する設定
Red Hat Enterprise Linux は、systemd
サービスファイルを /usr/lib/systemd/system/
ディレクトリーにインストールします。この手順では、/etc/systemd/system/<service_name>.service.d/
内のサービスファイル用のドロップインスニペットを作成します。このスニペットは、ネットワークがオンラインになった後に特定のサービスを起動するために、/usr/lib/systemd/system/
内のサービスファイルと一緒に使用します。ドロップインスニペットの設定が、/usr/lib/systemd/system/
内のサービスファイルにある値と重複する場合は、優先度が高くなります。
手順
エディターでサービスファイルを開きます。
systemctl edit <service_name>
# systemctl edit <service_name>
Copy to Clipboard Copied! 以下を入力し、変更を保存します。
[Unit] After=network-online.target
[Unit] After=network-online.target
Copy to Clipboard Copied! systemd
サービスを再度読み込みます。systemctl daemon-reload
# systemctl daemon-reload
Copy to Clipboard Copied!
22.4. アクティブなネットワーク接続を確保するために IP アドレスの ping ターゲットを設定する
システムの起動後に NetworkManager サービスが開始されます。ネットワークファイルシステム (NFS) などの特定のサービスは、ネットワーク接続に依存します。ゲートウェイ IP またはターゲット IP アドレスが応答を返さない場合、ネットワークが完全に起動していないため宛先に接続できず、NFS はマウントに失敗します。このような問題は、connection.ip-ping-addresses
および connection.ip-ping-timeout
を設定して、特定のターゲットへの接続を確認することで回避できます。connection.ip-ping-addresses
設定は、IPv4 および IPv6 アドレスの設定をサポートします。
手順
接続プロファイルがまだ存在しない場合は作成します。たとえば、動的 IP アドレス割り当てを使用して
enp1s0
インターフェイスのプロファイルを作成するには、次のように入力します。nmcli connection add con-name enp1s0 ifname enp1s0 type ethernet
# nmcli connection add con-name enp1s0 ifname enp1s0 type ethernet
Copy to Clipboard Copied! 注記connection.ip-ping-addresses
を設定すると、ping 操作の完了またはタイムアウト時間のいずれかを待機するため、systemd
のnetwork-online
ターゲットサービスからの応答が遅れる可能性があります。定義されたタイムアウト時間で指定された IP アドレスに ping を実行するように接続を設定します。
nmcli connection modify enp1s0 connection.ip-ping-addresses "192.0.2.56, 192.0.2.60" connection.ip-ping-timeout 10 ipv4.may-fail no
# nmcli connection modify enp1s0 connection.ip-ping-addresses "192.0.2.56, 192.0.2.60" connection.ip-ping-timeout 10 ipv4.may-fail no
Copy to Clipboard Copied! ipv4.may-fail
属性をno
に設定すると、確実に IPv4 設定が正常に完了します。接続を再度有効にします。
nmcli connection up enp1s0
# nmcli connection up enp1s0
Copy to Clipboard Copied!
第23章 Nmstate の概要
nmstate は宣言型のネットワークマネージャー API です。Nmstate を使用する場合、YAML または JSON 形式の命令を使用して想定されるネットワーク状態を記述します。
Nmstate には多くの利点があります。たとえば、以下のようになります。
- 安定性と拡張可能なインターフェイスを提供して RHEL ネットワーク機能を管理する。
- ホストおよびクラスターレベルでのアトミックおよびトランザクション操作をサポートする。
- ほとんどのプロパティーの部分編集をサポートし、この手順で指定されていない既存の設定を保持する。
Nmstate は次のパッケージで構成されています。
パッケージ | 内容 |
---|---|
|
|
|
|
| Nmstate C ライブラリー |
| Nmstate C ライブラリーヘッダー |
23.1. Python アプリケーションでの libnmstate ライブラリーの使用
libnmstate
Python ライブラリーを使用すると、開発者は独自のアプリケーションで Nmstate を使用できます。
ライブラリーを使用するには、ソースコードにインポートします。
import libnmstate
import libnmstate
このライブラリーを使用するには、nmstate
および python3-libnmstate
パッケージをインストールする必要があることに注意してください。
例23.1 libnmstate ライブラリーを使用したネットワーク状態のクエリー
以下の Python コードは、libnmstate
ライブラリーをインポートし、利用可能なネットワークインターフェイスとその状態を表示します。
import libnmstate from libnmstate.schema import Interface net_state = libnmstate.show() for iface_state in net_state[Interface.KEY]: print(iface_state[Interface.NAME] + ": " + iface_state[Interface.STATE])
import libnmstate
from libnmstate.schema import Interface
net_state = libnmstate.show()
for iface_state in net_state[Interface.KEY]:
print(iface_state[Interface.NAME] + ": "
+ iface_state[Interface.STATE])
23.2. nmstatectl
を使用した現在のネットワーク設定の更新
nmstatectl
ユーティリティーを使用して、1 つまたはすべてのインターフェイスの現在のネットワーク設定をファイルに保存できます。このファイルを使用して、以下を行うことができます。
- 設定を変更し、同じシステムに適用します。
- 別のホストにファイルをコピーし、同じまたは変更された設定でホストを設定します。
たとえば、enp1s0
インターフェイスの設定をファイルにエクスポートして、設定を変更し、その設定をホストに適用することができます。
前提条件
-
nmstate
パッケージがインストールされている。
手順
enp1s0
インターフェイスの設定を~/network-config.yml
ファイルにエクスポートします。nmstatectl show enp1s0 > ~/network-config.yml
# nmstatectl show enp1s0 > ~/network-config.yml
Copy to Clipboard Copied! このコマンドにより、
enp1s0
の設定が YAML 形式で保存されます。JSON 形式で出力を保存するには、--json
オプションをコマンドに渡します。インターフェイス名を指定しない場合、
nmstatectl
はすべてのインターフェイスの設定をエクスポートします。-
テキストエディターで
~/network-config.yml
ファイルを変更して、設定を更新します。 ~/network-config.yml
ファイルからの設定を適用します。nmstatectl apply ~/network-config.yml
# nmstatectl apply ~/network-config.yml
Copy to Clipboard Copied! JSON 形式で設定をエクスポートしている場合は、
--json
オプションをコマンドに渡します。
23.3. nmstate
systemd サービス
nmstate
パッケージをインストールすると、nmstate
systemd サービスを設定することで、Red Hat Enterprise Linux システムの起動時に新しいネットワーク設定を自動的に適用できます。このサービスは oneshot
systemd サービスです。そのため、systemd は、システムの起動時とサービスを手動で再起動した場合にのみこれを実行します。
デフォルトでは、nmstate
サービスは無効になっています。これを有効にするには systemctl enable nmstate
コマンドを使用します。その後、systemd
は、システムが起動するたびにこのサービスを実行します。
このサービスを使用するには、Nmstate 命令を含む *.yml
ファイルを /etc/nmstate/
ディレクトリーに保存します。nmstate
サービスは、次回の再起動時、またはサービスを手動で再起動したときに、ファイルを自動的に適用します。デフォルトでは、Nmstate がファイルを正常に適用すると、サービスが同じファイルを再度処理しないように、ファイルの .yml
接尾辞の名前が .applied
に変更されます。
nmstate
サービスは /etc/nmstate/nmstate.conf
ファイルで設定できます。たとえば、適用後の元の *.yml
ファイルを保持し、.applied
接尾辞を持つコピーのみを作成するには、/etc/nmstate/nmstate.conf
に次の行を追加します。
[service] keep_state_file_after_apply = false
[service]
keep_state_file_after_apply = false
詳細およびその他の設定オプションについては、システムの nmstate.service(8)
man ページを参照してください。
23.4. network
RHEL システムロールのネットワーク状態
network
RHEL システムロールは、Playbook でデバイスを設定するための状態設定をサポートしています。これには、network_state
変数の後に状態設定を使用します。
Playbook で network_state
変数を使用する利点:
- 状態設定で宣言型の方法を使用すると、インターフェイスを設定でき、NetworkManager はこれらのインターフェイスのプロファイルをバックグラウンドで作成します。
-
network_state
変数を使用すると、変更が必要なオプションを指定できます。他のすべてのオプションはそのまま残ります。ただし、network_connections
変数を使用して、ネットワーク接続プロファイルを変更するには、すべての設定を指定する必要があります。
network_state
では Nmstate YAML 命令のみを設定できます。この命令は、network_connections
で設定できる変数とは異なります。
たとえば、動的 IP アドレス設定でイーサネット接続を作成するには、Playbook で次の vars
ブロックを使用します。
状態設定を含む Playbook | 通常の Playbook |
vars: network_state: interfaces: - name: enp7s0 type: ethernet state: up ipv4: enabled: true auto-dns: true auto-gateway: true auto-routes: true dhcp: true ipv6: enabled: true auto-dns: true auto-gateway: true auto-routes: true autoconf: true dhcp: true
|
vars: network_connections: - name: enp7s0 interface_name: enp7s0 type: ethernet autoconnect: yes ip: dhcp4: yes auto6: yes state: up
|
たとえば、上記のように作成した動的 IP アドレス設定の接続ステータスのみを変更するには、Playbook で次の vars
ブロックを使用します。
状態設定を含む Playbook | 通常の Playbook |
vars: network_state: interfaces: - name: enp7s0 type: ethernet state: down
|
vars: network_connections: - name: enp7s0 interface_name: enp7s0 type: ethernet autoconnect: yes ip: dhcp4: yes auto6: yes state: down
|
第24章 Multipath TCP の使用
Transmission Control Protocol (TCP) は、インターネットを介したデータの信頼できる配信を保証し、ネットワーク負荷に応じて帯域幅を自動的に調整します。マルチパス TCP (MPTCP) は、元の TCP プロトコル (シングルパス) のエクステンションです。MPTCP は、トランスポート接続が複数のパスで同時に動作することを可能にし、ユーザーエンドポイントデバイスにネットワーク接続の冗長性をもたらします。
24.1. MPTCP について
マルチパス TCP (MPTCP) プロトコルを使用すると、接続エンドポイント間で複数のパスを同時に使用できます。プロトコル設計により、接続の安定性が向上し、シングルパス TCP と比較して他の利点ももたらされます。
MPTCP 用語では、リンクはパスと見なされます。
以下に、MPTCP を使用する利点の一部を示します。
- これにより、接続が複数のネットワークインターフェイスを同時に使用できるようになります。
- 接続がリンク速度にバインドされている場合は、複数のリンクを使用すると、接続スループットが向上します。接続が CPU にバインドされている場合は、複数のリンクを使用すると接続が遅くなることに注意してください。
- これは、リンク障害に対する耐障害性を高めます。
MPTCP の詳細は、関連情報 を参照してください。
24.2. MPTCP アプリケーションの複数パスの永続的な設定
nmcli
コマンドを使用して MultiPath TCP (MPTCP) を設定し、送信元システムと宛先システムの間に複数のサブフローを永続的に確立できます。サブフローは、さまざまなリソース、宛先へのさまざまなルート、さまざまなネットワークを使用できます。たとえばイーサネット、セルラー、Wi-Fi などです。その結果、接続が組み合わされ、ネットワークの回復力とスループットが向上します。
ここで使用した例では、サーバーは次のネットワークインターフェイスを使用します。
-
enp4s0:
192.0.2.1/24
-
enp1s0:
198.51.100.1/24
-
enp7s0:
192.0.2.3/24
ここで使用した例では、クライアントは次のネットワークインターフェイスを使用します。
-
enp4s0f0:
192.0.2.2/24
-
enp4s0f1:
198.51.100.2/24
-
enp6s0:
192.0.2.5/24
前提条件
- 関連するインターフェイスでデフォルトゲートウェイを設定している
手順
カーネルで MPTCP ソケットを有効にします。
echo "net.mptcp.enabled=1" > /etc/sysctl.d/90-enable-MPTCP.conf sysctl -p /etc/sysctl.d/90-enable-MPTCP.conf
# echo "net.mptcp.enabled=1" > /etc/sysctl.d/90-enable-MPTCP.conf # sysctl -p /etc/sysctl.d/90-enable-MPTCP.conf
Copy to Clipboard Copied! オプション: RHEL カーネルのサブフロー制限のデフォルトは 2 です。不足する場合、以下を実行します。
次の内容で
/etc/systemd/system/set_mptcp_limit.service
ファイルを作成します。[Unit] Description=Set MPTCP subflow limit to 3 After=network.target [Service] ExecStart=ip mptcp limits set subflows 3 Type=oneshot [Install] WantedBy=multi-user.target
[Unit] Description=Set MPTCP subflow limit to 3 After=network.target [Service] ExecStart=ip mptcp limits set subflows 3 Type=oneshot [Install] WantedBy=multi-user.target
Copy to Clipboard Copied! ワンショット ユニットは、各ブートプロセス中にネットワーク (
network.target
) が動作した後にip mptcp limits set subflows 3
コマンドを実行します。ip mptcp limits set subflows 3
コマンドは、各接続の 追加 サブフローの最大数を設定するため、合計が 4 になります。追加サブフローは最大 3 つです。set_mptcp_limit
サービスを有効にします。systemctl enable --now set_mptcp_limit
# systemctl enable --now set_mptcp_limit
Copy to Clipboard Copied!
接続のアグリゲーションに使用するすべての接続プロファイルで MPTCP を有効にします。
nmcli connection modify <profile_name> connection.mptcp-flags signal,subflow,also-without-default-route
# nmcli connection modify <profile_name> connection.mptcp-flags signal,subflow,also-without-default-route
Copy to Clipboard Copied! connection.mptcp-flags
パラメーターは、MPTCP エンドポイントと IP アドレスフラグを設定します。MPTCP が NetworkManager 接続プロファイルで有効になっている場合、設定により、関連するネットワークインターフェイスの IP アドレスが MPTCP エンドポイントとして設定されます。デフォルトでは、デフォルトゲートウェイがない場合、NetworkManager は MPTCP フラグを IP アドレスに追加しません。そのチェックをバイパスしたい場合は、
also-without-default-route
フラグも使用する必要があります。
検証
MPTCP カーネルパラメーターが有効になっていることを確認します。
sysctl net.mptcp.enabled
# sysctl net.mptcp.enabled net.mptcp.enabled = 1
Copy to Clipboard Copied! デフォルトでは不足する場合に備えて、サブフロー制限を適切に設定していることを確認します。
ip mptcp limit show
# ip mptcp limit show add_addr_accepted 2 subflows 3
Copy to Clipboard Copied! アドレスごとの MPTCP 設定が正しく設定されていることを確認します。
ip mptcp endpoint show
# ip mptcp endpoint show 192.0.2.1 id 1 subflow dev enp4s0 198.51.100.1 id 2 subflow dev enp1s0 192.0.2.3 id 3 subflow dev enp7s0 192.0.2.4 id 4 subflow dev enp3s0 ...
Copy to Clipboard Copied!
24.3. mptcpd の設定
mptcpd
サービスは、mptcp
エンドポイントを設定するためのインストルメントを提供する mptcp
プロトコルのコンポーネントです。mptcpd
サービスは、デフォルトでアドレスごとにサブフローエンドポイントを作成します。エンドポイントリストは、実行中のホストでの IP アドレスの変更に応じて動的に更新されます。mptcpd
サービスは、エンドポイントのリストを自動的に作成します。ip
ユーティリティーを使用する代わりに複数のパスを有効にします。
前提条件
-
インストールされた
mptcpd
パッケージ
手順
次のコマンドを使用して、カーネルで
mptcp.enabled
オプションを有効にします。echo "net.mptcp.enabled=1" > /etc/sysctl.d/90-enable-MPTCP.conf sysctl -p /etc/sysctl.d/90-enable-MPTCP.conf
# echo "net.mptcp.enabled=1" > /etc/sysctl.d/90-enable-MPTCP.conf # sysctl -p /etc/sysctl.d/90-enable-MPTCP.conf
Copy to Clipboard Copied! mptcpd
サービスを有効にして起動します。systemctl enable --now mptcp.service
# systemctl enable --now mptcp.service
Copy to Clipboard Copied! mptcpd
サービスを手動で設定するには、/etc/mptcpd/mptcpd.conf
設定ファイルを変更します。mptcpd サービスが作成するエンドポイントは、ホストがシャットダウンするまで続くことに注意してください。
検証
エンドポイントの作成を確認します。
ip mptcp endpoint
# ip mptcp endpoint
Copy to Clipboard Copied!
第25章 Linux トラフィックの制御
Linux は、パケットの送信を管理および操作するためのツールを提供します。Linux Traffic Control (TC) サブシステムは、ネットワークトラフィックの規制、分類、成熟、およびスケジューリングに役立ちます。また、TC はフィルターとアクションを使用して分類中にパケットコンテンツをマスリングします。TC サブシステムは、TC アーキテクチャーの基本要素であるキューイング規則 (qdisc
) を使用してこれを実現します。
スケジューリングメカニズムは、異なるキューに入るか、終了する前にパケットを設定または再編成します。最も一般的なスケジューラーは First-In-First-Out (FIFO) スケジューラーです。qdiscs
操作は、tc
ユーティリティーを使用して一時的に、NetworkManager を使用して永続的に実行できます。
Red Hat Enterprise Linux では、デフォルトのキューの規則をさまざまな方法で設定して、ネットワークインターフェイスのトラフィックを管理できます。
25.1. キュー規則の概要
グルーピング規則 (qdiscs
) は、ネットワークインターフェイスによるトラフィックのスケジューリング、後でキューに役に立ちます。qdisc
には 2 つの操作があります。
- パケットを後送信用にキューに入れるできるようにするキュー要求。
- キューに置かれたパケットのいずれかを即時に送信できるように要求を解除します。
各 qdisc
には、ハンドル
と呼ばれる 16 ビットの 16 進数の識別番号があり、1:
や abcd:
などのコロンが付けられています。この番号は qdisc
メジャー番号と呼ばれます。qdisc
にクラスがある場合、識別子はマイナー番号 (<major>:<minor>
) の前にメジャー番号を持つ 2 つの数字のペア (abcd:1
) として形成されます。マイナー番号の番号設定スキームは、qdisc
タイプによって異なります。1 つ目のクラスには ID <major>:1
、2 つ目の <major>:2
などが含まれる場合があります。一部の qdiscs
では、クラスの作成時にクラスマイナー番号を任意に設定することができます。
- 分類的な
qdiscs
ネットワークインターフェイスへのパケット転送には、さまざまな
qdiscs
があり、そのタイプの qdiscs が存在します。root、親、または子クラスを使用してqdiscs
を設定できます。子を割り当て可能なポイントはクラスと呼ばれます。qdisc
のクラスは柔軟性があり、常に複数の子クラス、または 1 つの子qdisc
を含めることができます。これは、クラスフルなqdisc
自体を含むクラスに対して禁止がないため、複雑なトラフィック制御シナリオが容易になります。分類的な
qdiscs
はパケットを格納しません。代わりに、qdisc
固有の基準に従って、子のいずれかに対してキューをキューに入れ、デキューします。最終的にこの再帰パケットが渡される場所は、パケットが格納される場所 (またはデキューの場合はから取得) となります。- クラスレス
qdiscs
-
一部の
qdiscs
には子クラスがなく、クラスレスqdiscs
と呼ばれます。クラスレスqdiscs
は、クラスフルqdiscs
と比較してカスタマイズが少なくなります。通常、インターフェイスに割り当てるだけで十分です。
25.2. tc
ユーティリティーを使用したネットワークインターフェイスの qdiscs の検査
デフォルトでは、Red Hat Enterprise Linux システムは fq_codel qdisc
を使用します。tc
ユーティリティーを使用して qdisc
カウンターを検査できます。
手順
オプション: 現在の
qdisc
を表示します。tc qdisc show dev enp0s1
# tc qdisc show dev enp0s1
Copy to Clipboard Copied! 現在の
qdisc
カウンターを検査します。tc -s qdisc show dev enp0s1
# tc -s qdisc show dev enp0s1 qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn Sent 1008193 bytes 5559 pkt (dropped 233, overlimits 55 requeues 77) backlog 0b 0p requeues 0
Copy to Clipboard Copied! -
dropped
: すべてのキューが満杯であるため、パケットがドロップされる回数 -
overlimits
: 設定されたリンク容量が一杯になる回数 -
sent
: デキューの数
-
25.3. デフォルトの qdisc の更新
現在の qdisc
でネットワークパケットの損失を確認する場合は、ネットワーク要件に基づいて qdisc
を変更できます。
手順
現在のデフォルト
qdisc
を表示します。sysctl -a | grep qdisc
# sysctl -a | grep qdisc net.core.default_qdisc = fq_codel
Copy to Clipboard Copied! 現在のイーサネット接続の
qdisc
を表示します。tc -s qdisc show dev enp0s1
# tc -s qdisc show dev enp0s1 qdisc fq_codel 0: root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 32Mb ecn Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0 new_flows_len 0 old_flows_len 0
Copy to Clipboard Copied! 既存の
qdisc
を更新します。sysctl -w net.core.default_qdisc=pfifo_fast
# sysctl -w net.core.default_qdisc=pfifo_fast
Copy to Clipboard Copied! 変更を適用するには、ネットワークドライバーを再読み込みします。
modprobe -r NETWORKDRIVERNAME modprobe NETWORKDRIVERNAME
# modprobe -r NETWORKDRIVERNAME # modprobe NETWORKDRIVERNAME
Copy to Clipboard Copied! ネットワークインターフェイスを起動します。
ip link set enp0s1 up
# ip link set enp0s1 up
Copy to Clipboard Copied!
検証
イーサネット接続の
qdisc
を表示します。tc -s qdisc show dev enp0s1
# tc -s qdisc show dev enp0s1 qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 Sent 373186 bytes 5333 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 ...
Copy to Clipboard Copied!
25.4. tc ユーティリティーを使用してネットワークインターフェイスの現在の qdisc を一時的に設定する手順
デフォルトの qdisc を変更せずに、現在の qdisc
を更新できます。
手順
オプション: 現在の
qdisc
を表示します。tc -s qdisc show dev enp0s1
# tc -s qdisc show dev enp0s1
Copy to Clipboard Copied! 現在の
qdisc
を更新します。tc qdisc replace dev enp0s1 root htb
# tc qdisc replace dev enp0s1 root htb
Copy to Clipboard Copied!
検証
更新された現在の
qdisc
を表示します。tc -s qdisc show dev enp0s1
# tc -s qdisc show dev enp0s1 qdisc htb 8001: root refcnt 2 r2q 10 default 0 direct_packets_stat 0 direct_qlen 1000 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0
Copy to Clipboard Copied!
25.5. NetworkManager を使用してネットワークインターフェイスの現在の qdisc を永続的に設定する
NetworkManager 接続の現在の qdisc
値を更新できます。
手順
オプション: 現在の
qdisc
を表示します。tc qdisc show dev enp0s1
# tc qdisc show dev enp0s1 qdisc fq_codel 0: root refcnt 2
Copy to Clipboard Copied! 現在の
qdisc
を更新します。nmcli connection modify enp0s1 tc.qdiscs 'root pfifo_fast'
# nmcli connection modify enp0s1 tc.qdiscs 'root pfifo_fast'
Copy to Clipboard Copied! 必要に応じて、既存の
qdisc
に別のqdisc
を追加するには、+tc.qdisc
オプションを使用します。nmcli connection modify enp0s1 +tc.qdisc 'ingress handle ffff:'
# nmcli connection modify enp0s1 +tc.qdisc 'ingress handle ffff:'
Copy to Clipboard Copied! 変更を有効にします。
nmcli connection up enp0s1
# nmcli connection up enp0s1
Copy to Clipboard Copied!
検証
ネットワークインターフェイスの現在の
qdisc
を表示します。tc qdisc show dev enp0s1
# tc qdisc show dev enp0s1 qdisc pfifo_fast 8001: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 qdisc ingress ffff: parent ffff:fff1 ................
Copy to Clipboard Copied!
25.6. tc-ctinfo ユーティリティーを使用したパケットのレート制限の設定
レート制限を使用すると、ネットワークトラフィックを制限し、ネットワーク内のリソースの枯渇を防ぐことができます。レート制限を使用すると、特定の時間枠内での反復的なパケット要求を制限することで、サーバーの負荷を軽減することもできます。さらに、tc-ctinfo
ユーティリティーを使用して、カーネルでトラフィック制御を設定することにより、帯域幅レートを管理できます。
接続追跡エントリーには、Netfilter
マークと接続情報が格納されます。ルーターがファイアウォールからパケットを転送するとき、ルーターはパケットから接続追跡エントリーを削除または変更します。接続追跡情報 (ctinfo
) モジュールは、接続追跡マークからさまざまなフィールドにデータを取り出します。このカーネルモジュールは、Netfilter
マークを、ソケットバッファー (skb
) マークメタデータフィールドにコピーすることで保存します。
前提条件
-
iperf3
ユーティリティーがサーバーとクライアントにインストールされている。
手順
サーバーで次の手順を実行します。
ネットワークインターフェイスに仮想リンクを追加します。
ip link add name ifb4eth0 numtxqueues 48 numrxqueues 48 type ifb
# ip link add name ifb4eth0 numtxqueues 48 numrxqueues 48 type ifb
Copy to Clipboard Copied! このコマンドには次のパラメーターがあります。
name ifb4eth0
- 新しい仮想デバイスインターフェイスを設定します。
numtxqueues 48
- 送信キューの数を設定します。
numrxqueues 48
- 受信キューの数を設定します。
type ifb
- 新しいデバイスのタイプを設定します。
インターフェイスの状態を変更します。
ip link set dev ifb4eth0 up
# ip link set dev ifb4eth0 up
Copy to Clipboard Copied! 物理ネットワークインターフェイスに
qdisc
属性を追加し、それを受信トラフィックに適用します。tc qdisc add dev enp1s0 handle ffff: ingress
# tc qdisc add dev enp1s0 handle ffff: ingress
Copy to Clipboard Copied! handle ffff:
オプションでは、handle
パラメーターはデフォルト値としてメジャー番号ffff:
をenp1s0
物理ネットワークインターフェイス上のクラスフルqdisc
に割り当てます。ここで、qdisc
は、トラフィック制御を分析するためのキューイング規則パラメーターになります。IP
プロトコルの物理インターフェイスにフィルターを追加して、パケットを分類します。tc filter add dev enp1s0 parent ffff: protocol ip u32 match u32 0 0 action ctinfo cpmark 100 action mirred egress redirect dev ifb4eth0
# tc filter add dev enp1s0 parent ffff: protocol ip u32 match u32 0 0 action ctinfo cpmark 100 action mirred egress redirect dev ifb4eth0
Copy to Clipboard Copied! このコマンドには次の属性があります。
parent ffff:
-
親
qdisc
のメジャー番号ffff:
を設定します。 u32 match u32 0 0
-
パターン
u32
の IP ヘッダーと一致 (match
) するように、u32
フィルターを設定します。最初の0
は、IP ヘッダーの 2 番目のバイトを表し、もう 1 つの0
は、一致させるビットがどれであるかをフィルターに指示するマスク照合です。 action ctinfo
- 接続追跡マークからさまざまなフィールドにデータを取り出すアクションを設定します。
cpmark 100
-
接続追跡マーク (connmark)
100
をパケットの IP ヘッダーフィールドにコピーします。 action mirred egress redirect dev ifb4eth0
-
action
をmirred
に設定して、受信したパケットを宛先インターフェイスifb4eth0
にリダイレクトします。
クラスフル
qdisc
をインターフェイスに追加します。tc qdisc add dev ifb4eth0 root handle 1: htb default 1000
# tc qdisc add dev ifb4eth0 root handle 1: htb default 1000
Copy to Clipboard Copied! このコマンドは、メジャー番号
1
を rootqdisc
に設定し、マイナー ID1000
のクラスフルqdisc
を持つhtb
階層トークンバケットを使用します。インターフェイス上のトラフィックを 1 Mbit/s に制限し、上限を 2 Mbit/s にします。
tc class add dev ifb4eth0 parent 1:1 classid 1:100 htb ceil 2mbit rate 1mbit prio 100
# tc class add dev ifb4eth0 parent 1:1 classid 1:100 htb ceil 2mbit rate 1mbit prio 100
Copy to Clipboard Copied! このコマンドには次のパラメーターがあります。
parent 1:1
-
classid
を1
、root
を1
としてparent
を設定します。 classid 1:100
-
classid
を1:100
に設定します。ここで、1
は親qdisc
の数で、100
は親qdisc
のクラスの数です。 htb ceil 2mbit
-
htb
のクラスフルなqdisc
では、ceil
レート制限として2 Mbit/s
の上限帯域幅が許可されます。
クラスレス
qdisc
の Stochastic Fairness Queuing (sfq
) を、60
秒の時間間隔でインターフェイスに適用して、キューアルゴリズムの摂動を軽減します。tc qdisc add dev ifb4eth0 parent 1:100 sfq perturb 60
# tc qdisc add dev ifb4eth0 parent 1:100 sfq perturb 60
Copy to Clipboard Copied! ファイアウォールマーク (
fw
) フィルターをインターフェイスに追加します。tc filter add dev ifb4eth0 parent 1:0 protocol ip prio 100 handle 100 fw classid 1:100
# tc filter add dev ifb4eth0 parent 1:0 protocol ip prio 100 handle 100 fw classid 1:100
Copy to Clipboard Copied! 接続マーク (
CONNMARK
) からパケットのメタマークを復元します。nft add rule ip mangle PREROUTING counter meta mark set ct mark
# nft add rule ip mangle PREROUTING counter meta mark set ct mark
Copy to Clipboard Copied! このコマンドでは、
nft
ユーティリティーにはチェーンルール仕様PREROUTING
を含むmangle
テーブルがあり、ルーティング前に受信パケットを変更してパケットマークをCONNMARK
に置き換えます。nft
テーブルとチェーンが存在しない場合は、以下のようにテーブルを作成してチェーンルールを追加します。nft add table ip mangle nft add chain ip mangle PREROUTING {type filter hook prerouting priority mangle \;}
# nft add table ip mangle # nft add chain ip mangle PREROUTING {type filter hook prerouting priority mangle \;}
Copy to Clipboard Copied! 指定された宛先アドレス
192.0.2.3
で受信したtcp
パケットにメタマークを設定します。nft add rule ip mangle PREROUTING ip daddr 192.0.2.3 counter meta mark set 0x64
# nft add rule ip mangle PREROUTING ip daddr 192.0.2.3 counter meta mark set 0x64
Copy to Clipboard Copied! パケットマークを接続マークに保存します。
nft add rule ip mangle PREROUTING counter ct mark set mark
# nft add rule ip mangle PREROUTING counter ct mark set mark
Copy to Clipboard Copied! -s
パラメーターを使用して、iperf3
ユーティリティーをシステム上のサーバーとして実行すると、サーバーはクライアント接続の応答を待ちます。iperf3 -s
# iperf3 -s
Copy to Clipboard Copied!
クライアント上で、
iperf3
をクライアントとして実行し、IP アドレス192.0.2.3
で定期的な HTTP 要求と応答のタイムスタンプをリッスンするサーバーに接続します。iperf3 -c 192.0.2.3 | tee rate
# iperf3 -c 192.0.2.3 | tee rate
Copy to Clipboard Copied! 192.0.2.3
はサーバーの IP アドレスで、192.0.2.4
はクライアントの IP アドレスです。Ctrl+C を押して、サーバー上の
iperf3
ユーティリティーを終了します。Accepted connection from 192.0.2.4, port 52128 [5] local 192.0.2.3 port 5201 connected to 192.0.2.4 port 52130 [ID] Interval Transfer Bitrate [5] 0.00-1.00 sec 119 KBytes 973 Kbits/sec [5] 1.00-2.00 sec 116 KBytes 950 Kbits/sec ... [ID] Interval Transfer Bitrate [5] 0.00-14.81 sec 1.51 MBytes 853 Kbits/sec receiver iperf3: interrupt - the server has terminated
Accepted connection from 192.0.2.4, port 52128 [5] local 192.0.2.3 port 5201 connected to 192.0.2.4 port 52130 [ID] Interval Transfer Bitrate [5] 0.00-1.00 sec 119 KBytes 973 Kbits/sec [5] 1.00-2.00 sec 116 KBytes 950 Kbits/sec ... [ID] Interval Transfer Bitrate [5] 0.00-14.81 sec 1.51 MBytes 853 Kbits/sec receiver iperf3: interrupt - the server has terminated
Copy to Clipboard Copied! Ctrl+C を押して、クライアント上の
iperf3
ユーティリティーを終了します。Connecting to host 192.0.2.3, port 5201 [5] local 192.0.2.4 port 52130 connected to 192.0.2.3 port 5201 [ID] Interval Transfer Bitrate Retr Cwnd [5] 0.00-1.00 sec 481 KBytes 3.94 Mbits/sec 0 76.4 KBytes [5] 1.00-2.00 sec 223 KBytes 1.83 Mbits/sec 0 82.0 KBytes ... [ID] Interval Transfer Bitrate Retr [5] 0.00-14.00 sec 3.92 MBytes 2.35 Mbits/sec 32 sender [5] 0.00-14.00 sec 0.00 Bytes 0.00 bits/sec receiver iperf3: error - the server has terminated
Connecting to host 192.0.2.3, port 5201 [5] local 192.0.2.4 port 52130 connected to 192.0.2.3 port 5201 [ID] Interval Transfer Bitrate Retr Cwnd [5] 0.00-1.00 sec 481 KBytes 3.94 Mbits/sec 0 76.4 KBytes [5] 1.00-2.00 sec 223 KBytes 1.83 Mbits/sec 0 82.0 KBytes ... [ID] Interval Transfer Bitrate Retr [5] 0.00-14.00 sec 3.92 MBytes 2.35 Mbits/sec 32 sender [5] 0.00-14.00 sec 0.00 Bytes 0.00 bits/sec receiver iperf3: error - the server has terminated
Copy to Clipboard Copied!
検証
インターフェイス上の
htb
クラスとsfq
クラスのパケット数に関する統計情報を表示します。tc -s qdisc show dev ifb4eth0
# tc -s qdisc show dev ifb4eth0 qdisc htb 1: root ... Sent 26611455 bytes 3054 pkt (dropped 76, overlimits 4887 requeues 0) ... qdisc sfq 8001: parent ... Sent 26535030 bytes 2296 pkt (dropped 76, overlimits 0 requeues 0) ...
Copy to Clipboard Copied! mirred
アクションとctinfo
アクションのパケット数の統計情報を表示します。tc -s filter show dev enp1s0 ingress
# tc -s filter show dev enp1s0 ingress filter parent ffff: protocol ip pref 49152 u32 chain 0 filter parent ffff: protocol ip pref 49152 u32 chain 0 fh 800: ht divisor 1 filter parent ffff: protocol ip pref 49152 u32 chain 0 fh 800::800 order 2048 key ht 800 bkt 0 terminal flowid not_in_hw (rule hit 8075 success 8075) match 00000000/00000000 at 0 (success 8075 ) action order 1: ctinfo zone 0 pipe index 1 ref 1 bind 1 cpmark 0x00000064 installed 3105 sec firstused 3105 sec DSCP set 0 error 0 CPMARK set 7712 Action statistics: Sent 25891504 bytes 3137 pkt (dropped 0, overlimits 0 requeues 0) backlog 0b 0p requeues 0 action order 2: mirred (Egress Redirect to device ifb4eth0) stolen index 1 ref 1 bind 1 installed 3105 sec firstused 3105 sec Action statistics: Sent 25891504 bytes 3137 pkt (dropped 0, overlimits 61 requeues 0) backlog 0b 0p requeues 0
Copy to Clipboard Copied! htb
レートリミッターとその設定の統計情報を表示します。tc -s class show dev ifb4eth0
# tc -s class show dev ifb4eth0 class htb 1:100 root leaf 8001: prio 7 rate 1Mbit ceil 2Mbit burst 1600b cburst 1600b Sent 26541716 bytes 2373 pkt (dropped 61, overlimits 4887 requeues 0) backlog 0b 0p requeues 0 lended: 7248 borrowed: 0 giants: 0 tokens: 187250 ctokens: 93625
Copy to Clipboard Copied!
25.7. RHEL で利用できる qdiscs
各 qdisc
は、ネットワーク関連の固有の問題に対応します。以下は、RHEL で利用可能な qdiscs
のリストです。以下の qdisc
を使用して、ネットワーク要件に基づいてネットワークトラフィックを形成できます。
qdisc 名 | 以下に含まれる | オフロードサポート |
---|---|---|
Credit-Based Shaper |
| Yes |
Enhanced Transmission Selection (ETS) |
| Yes |
Earliest TxTime First (ETF) |
| |
Fair Queue (FQ) |
| |
FQ_CODel (Fair Queuing Controlled Delay) |
| |
GRED (Generalized Random Early Detection) |
| |
階層化されたサービス曲線 (HSFC) |
| |
階層型トークンバケット (HTB) |
| Yes |
INGRESS |
| Yes |
MQPRIO (Multi Queue Priority) |
| Yes |
マルチキュー (MULTIQ) |
| Yes |
ネットワークエミュレーター (NETEM) |
| |
ランダム初期値検出 (RED) |
| Yes |
SFQ (Stochastic Fairness Queueing) |
| |
Time-aware Priority Shaper (TAPRIO) |
| |
トークンバケットフィルター (TBF) |
| Yes |
qdisc
オフロードには、NIC でハードウェアとドライバーのサポートが必要です。
第26章 InfiniBand ネットワークおよび RDMA ネットワークの設定
さまざまなプロトコルを使用して、Remote Directory Memory Access (RDMA) ネットワークと InfiniBand ハードウェアをエンタープライズレベルで設定および管理できます。これらには、InfiniBand (IB)、RDMA over Converged Ethernet (RoCE)、iWARP などの IP ネットワークプロトコル、および RDMA 対応ハードウェアでのネイティブサポートとしての Omni-Path Architecture (OPA) プロトコルが含まれます。低レイテンシーで高スループットの接続を実現するために、IP over InfiniBand (IPoIB) を設定できます。
26.1. InfiniBand と RDMA の概要
InfiniBand は、次の 2 つの異なるものを指します。
- InfiniBand ネットワーク用の物理リンク層プロトコル
- Remote Direct Memory Access (RDMA) テクノロジーの実装である InfiniBand Verbs API
RDMA は、オペレーティングシステム、キャッシュ、またはストレージを使用せずに、2 台のコンピューターのメインメモリー間のアクセスを提供します。RDMA を使用することで、高スループット、低レイテンシー、低 CPU 使用率でデータ転送が可能になります。
通常の IP データ転送では、あるマシンのアプリケーションが別のマシンのアプリケーションにデータを送信すると、受信側で以下のアクションが起こります。
- カーネルがデータを受信する必要がある。
- カーネルは、データがアプリケーションに属するかどうかを判別する必要がある。
- カーネルは、アプリケーションを起動する。
- カーネルは、アプリケーションがカーネルへのシステムコールを実行するまで待機する。
- アプリケーションは、データをカーネルの内部メモリー領域から、アプリケーションが提供するバッファーにコピーする。
このプロセスでは、ホストアダプターが直接メモリーアクセス (DMA) などを使用する場合には、ほとんどのネットワークトラフィックが、システムのメインメモリーに少なくとも 2 回コピーされます。さらに、コンピューターはいくつかのコンテキストスイッチを実行して、カーネルとアプリケーションを切り替えます。これらのコンテキストスイッチは、他のタスクの速度を低下させる一方で、高いトラフィックレートで高い CPU 負荷を引き起こす可能性があります。
従来の IP 通信とは異なり、RDMA 通信は通信プロセスでのカーネルの介入を回避します。これにより、CPU のオーバーヘッドが軽減されます。パケットがネットワークに入ると、RDMA プロトコルにより、どのアプリケーションがパケットを受信するか、またそのアプリケーションのメモリー空間のどこにパケットを保存するかをホストアダプターが決定できるようになります。処理のためにパケットをカーネルに送信してユーザーアプリケーションのメモリーにコピーする代わりに、ホストアダプターは、パケットの内容をアプリケーションバッファーに直接配置します。このプロセスには、別個の API である InfiniBand Verbs API が必要であり、アプリケーションは RDMA を使用するために InfiniBand Verbs API を実装する必要があります。
Red Hat Enterprise Linux は、InfiniBand ハードウェアと InfiniBand Verbs API の両方をサポートしています。さらに、InfiniBand 以外のハードウェアで InfiniBand Verbs API を使用するための次のテクノロジーをサポートしています。
- iWARP: IP ネットワーク上で RDMA を実装するネットワークプロトコル
- RDMA over Converged Ethernet (RoCE)、別名 InfiniBand over Ethernet (IBoE): RDMA over Ethernet ネットワークを実装するネットワークプロトコル
26.2. コア RDMA サブシステムの設定
rdma
サービス設定は、InfiniBand、iWARP、RoCE などのネットワークプロトコルと通信標準を管理します。
手順
rdma-core
パッケージをインストールします。dnf install rdma-core
# dnf install rdma-core
Copy to Clipboard Copied!
検証
libibverbs-utils
およびinfiniband-diags
パッケージをインストールします。dnf install libibverbs-utils infiniband-diags
# dnf install libibverbs-utils infiniband-diags
Copy to Clipboard Copied! 利用可能な InfiniBand デバイスのリストを表示します。
ibv_devices
# ibv_devices mlx5_0 946dae0300418002 mlx5_1 946dae0300418003
Copy to Clipboard Copied! mlx5_0
デバイスの情報を表示します。ibv_devinfo -d mlx5_0
# ibv_devinfo -d mlx5_0 hca_id: mlx5_0 transport: InfiniBand (0) fw_ver: 28.42.1000 node_guid: 946d:ae03:0041:8002 sys_image_guid: 946d:ae03:0041:8002 vendor_id: 0x02c9 vendor_part_id: 4129 hw_ver: 0x0 board_id: MT_0000000834 phys_port_cnt: 1 port: 1 state: PORT_ACTIVE (4) max_mtu: 4096 (5) active_mtu: 4096 (5) sm_lid: 3 port_lid: 66 port_lmc: 0x00 link_layer: InfiniBand
Copy to Clipboard Copied! mlx5_0
デバイスのステータスを表示します。ibstat mlx5_0
# ibstat mlx5_0 CA 'mlx5_0' CA type: MT4129 Number of ports: 1 Firmware version: 28.42.1000 Hardware version: 0 Node GUID: 0x946dae0300418002 System image GUID: 0x946dae0300418002 Port 1: State: Active Physical state: LinkUp Rate: 100 Base lid: 66 LMC: 0 SM lid: 3 Capability mask: 0xa759e848 Port GUID: 0x946dae0300418002 Link layer: InfiniBand
Copy to Clipboard Copied! ibping
ユーティリティーは、パラメーターを設定することで InfiniBand アドレスに ping を実行し、クライアント/サーバーとして動作します。ホスト上で InfiniBand チャネルアダプター (CA) 名
-C
を指定し、ポート番号-P
でサーバーモード-S
を開始します。ibping -S -C mlx5_0 -P 1
# ibping -S -C mlx5_0 -P 1
Copy to Clipboard Copied! ホスト上でローカル識別子 (LID)
-L
および InfiniBand チャネルアダプター (CA) 名-C
を指定し、ポート番号-P
でクライアントモードを開始して、パケット-c
をいくつか送信します。ibping -c 50 -C mlx5_0 -P 1 -L 2
# ibping -c 50 -C mlx5_0 -P 1 -L 2
Copy to Clipboard Copied!
26.3. IPoIB の設定
デフォルトでは、InfiniBand は通信にインターネットプロトコル (IP) を使用しません。ただし、IPoIB (IP over InfiniBand) は、InfiniBand Remote Direct Memory Access (RDMA) ネットワーク上に IP ネットワークエミュレーション層を提供します。これにより、変更を加えていない既存のアプリケーションが InfiniBand ネットワーク経由でデータを送信できるようになりますが、アプリケーションが RDMA をネイティブに使用する場合よりもパフォーマンスが低下します。
RHEL 8 以降の Mellanox デバイス (ConnectX-4 以降) は、デフォルトで Enhanced IPoIB モードを使用します (データグラムのみ)。これらのデバイスでは、Connected モードはサポートされていません。
26.3.1. IPoIB の通信モード
IPoIB デバイスは、Datagram
モードまたは Connected
モードのいずれかで設定可能です。違いは、通信の反対側で IPoIB 層がマシンで開こうとするキューペアのタイプです。
Datagram
モードでは、システムは信頼できない非接続のキューペアを開きます。このモードは、InfiniBand リンク層の Maximum Transmission Unit (MTU) を超えるパッケージには対応していません。IPoIB 層は、データ転送時に IP パケットに 4 バイトの IPoIB ヘッダーを追加します。その結果、IPoIB MTU は InfiniBand リンク層 MTU より 4 バイト少なくなります。一般的な InfiniBand リンク層 MTU は
2048
であるため、Datagram
モードの一般的な IPoIB デバイス MTU は2044
になります。Connected
モードでは、システムは信頼できる接続されたキューペアを開きます。このモードでは、InfiniBand のリンク層の MTU より大きなメッセージを許可します。ホストアダプターがパケットのセグメンテーションと再構築を処理します。その結果、
Connected
モードでは、Infiniband アダプターから送信されるメッセージのサイズに制限がありません。しかし、data
フィールドと TCP/IPheader
フィールドにより、IP パケットには制限があります。このため、Connected
モードの IPoIB MTU は65520
バイトです。Connected
モードではパフォーマンスが向上しますが、より多くのカーネルメモリーを消費します。
システムが Connected
モードを使用するように設定されていても、InfiniBand スイッチとファブリックは Connected
モードでマルチキャストトラフィックを渡すことができないため、システムは引き続き Datagram
モードを使用してマルチキャストトラフィックを送信します。また、ホストが Connected
モードを使用するように設定されていない場合、システムは Datagram
モードにフォールバックします。
インターフェイス上で MTU までのマルチキャストデータを送信するアプリケーションを実行しながら、インターフェイスを Datagram
モードに設定するか、データグラムサイズのパケットに収まるように、パケットの送信サイズに上限を設けるようにアプリケーションを設定します。
26.3.2. IPoIB ハードウェアアドレスについて
IPoIB デバイスには、以下の部分で構成される 20
バイトのハードウェアアドレスがあります。
- 最初の 4 バイトはフラグとキューペアの番号です。
次の 8 バイトはサブネットの接頭辞です。
デフォルトのサブネットの接頭辞は
0xfe:80:00:00:00:00:00:00
です。デバイスがサブネットマネージャーに接続すると、デバイスはこの接頭辞を変更して、設定されたサブネットマネージャーと一致させます。- 最後の 8 バイトは、IPoIB デバイスに接続する InfiniBand ポートのグローバル一意識別子 (GUID) です。
最初の 12 バイトは変更される可能性があるため、udev
デバイスマネージャールールでは使用しないでください。
26.3.3. systemd リンクファイルを使用した IPoIB デバイスの名前の変更
デフォルトでは、カーネルは Internet Protocol over InfiniBand (IPoIB) デバイスに、ib0
、ib1
などの名前を付けます。競合を回避するには、systemd
リンクファイルを作成して、mlx5_ib0
など、永続的でわかりやすい名前を作成します。
前提条件
- InfiniBand デバイスがインストールされている。
手順
デバイス
ib0
のハードウェアアドレスを表示します。ip addr show ib0
# ip addr show ib0 7: ib0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65520 qdisc fq_codel state UP group default qlen 256 link/infiniband 00:00:10:71:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff altname ibp7s0 altname ibs2 inet 172.31.0.181/24 brd 172.31.0.255 scope global dynamic noprefixroute ib0 valid_lft 2899sec preferred_lft 2899sec inet6 fe80::f652:1403:7b:e1b1/64 scope link noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied! MAC アドレス
00:00:10:71:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02
を持つインターフェイスにmlx5_ib0
という名前を付けるには、次の内容の/etc/systemd/network/70-custom-ifnames.link
ファイルを作成します。[Match] MACAddress=00:00:10:71:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02 [Link] Name=_mlx5_ib0
[Match] MACAddress=00:00:10:71:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02 [Link] Name=_mlx5_ib0
Copy to Clipboard Copied! このリンクファイルによって MAC アドレスが照合され、ネットワークインターフェイスの名前が
Name
パラメーターに設定された名前に変更されます。
検証
ホストを再起動します。
reboot
# reboot
Copy to Clipboard Copied! リンクファイルで指定した MAC アドレスを持つデバイスが
mlx5_ib0
に割り当てられていることを確認します。ip addr show mlx5_ib0
# ip addr show mlx5_ib0 3: mlx5_ib0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2044 qdisc mq state UP group default qlen 1000 link/infiniband 00:00:00:8c:fe:80:00:00:00:00:00:00:94:6d:ae:03:00:41:80:02 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff altname ibp196s0f0 altname ibs2f0 inet 172.31.0.40/24 brd 172.31.0.255 scope global dynamic noprefixroute mlx5_ib0 valid_lft 2497sec preferred_lft 2497sec inet6 fe80::6a6d:6879:7ccf:34c7/64 scope link noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied!
26.3.4. nmcli
を使用した IPoIB 接続の設定
nmcli
ユーティリティーを使用して、コマンドラインで IP over InfiniBand 接続を作成できます。
前提条件
- InfiniBand デバイスがサーバーにインストールされている。
- 対応するカーネルモジュールがロードされている。
手順
InfiniBand 接続を作成して、
Connected
トランスポートモードでmlx5_ib0
インターフェイスを使用し、最大 MTU が65520
バイトになるようにします。nmcli connection add type infiniband con-name mlx5_ib0 ifname mlx5_ib0 transport-mode Connected mtu 65520
# nmcli connection add type infiniband con-name mlx5_ib0 ifname mlx5_ib0 transport-mode Connected mtu 65520
Copy to Clipboard Copied! P_Key
を設定します。次に例を示します。nmcli connection modify mlx5_ib0 infiniband.p-key 0x8002
# nmcli connection modify mlx5_ib0 infiniband.p-key 0x8002
Copy to Clipboard Copied! IPv4 を設定します。
DHCP を使用するには、次のように実行します。
nmcli connection modify mlx5_ib0 ipv4.method auto
# nmcli connection modify mlx5_ib0 ipv4.method auto
Copy to Clipboard Copied! ipv4.method
がすでにauto
(デフォルト) に設定されている場合は、この手順をスキップしてください。静的 IPv4 アドレス、ネットワークマスク、デフォルトゲートウェイ、DNS サーバー、および検索ドメインを設定するには、次のように実行します。
nmcli connection modify mlx5_ib0 ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200 ipv4.dns-search example.com
# nmcli connection modify mlx5_ib0 ipv4.method manual ipv4.addresses 192.0.2.1/24 ipv4.gateway 192.0.2.254 ipv4.dns 192.0.2.200 ipv4.dns-search example.com
Copy to Clipboard Copied!
IPv6 設定を行います。
ステートレスアドレス自動設定 (SLAAC) を使用するには、次のように実行します。
nmcli connection modify mlx5_ib0 ipv6.method auto
# nmcli connection modify mlx5_ib0 ipv6.method auto
Copy to Clipboard Copied! ipv6.method
がすでにauto
(デフォルト) に設定されている場合は、この手順をスキップしてください。静的 IPv6 アドレス、ネットワークマスク、デフォルトゲートウェイ、DNS サーバー、および検索ドメインを設定するには、次のように実行します。
nmcli connection modify mlx5_ib0 ipv6.method manual ipv6.addresses 2001:db8:1::fffe/64 ipv6.gateway 2001:db8:1::fffe ipv6.dns 2001:db8:1::ffbb ipv6.dns-search example.com
# nmcli connection modify mlx5_ib0 ipv6.method manual ipv6.addresses 2001:db8:1::fffe/64 ipv6.gateway 2001:db8:1::fffe ipv6.dns 2001:db8:1::ffbb ipv6.dns-search example.com
Copy to Clipboard Copied!
プロファイルの他の設定をカスタマイズするには、次のコマンドを使用します。
nmcli connection modify mlx5_ib0 <setting> <value>
# nmcli connection modify mlx5_ib0 <setting> <value>
Copy to Clipboard Copied! 値はスペースまたはセミコロンで引用符で囲みます。
プロファイルをアクティブ化します。
nmcli connection up mlx5_ib0
# nmcli connection up mlx5_ib0
Copy to Clipboard Copied!
検証
ping
ユーティリティーを使用して、ICMP パケットをリモートホストの InfiniBand アダプターに送信します。次に例を示します。ping -c5 192.0.2.2
# ping -c5 192.0.2.2
Copy to Clipboard Copied!
26.3.5. network
RHEL システムロールを使用した IPoIB 接続の設定
IP over InfiniBand (IPoIB) を使用すると、InfiniBand インターフェイス経由で IP パケットを送信できます。IPoIB を設定するには、NetworkManager 接続プロファイルを作成します。Ansible と network
システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。
network
RHEL システムロールを使用して IPoIB を設定できます。InfiniBand の親デバイスの接続プロファイルが存在しない場合は、このロールによって作成することもできます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 -
mlx5_ib0
という名前の InfiniBand デバイスが管理対象ノードにインストールされている。 - 管理対象ノードが NetworkManager を使用してネットワークを設定している。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: IPoIB connection profile with static IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: # InfiniBand connection mlx5_ib0 - name: mlx5_ib0 interface_name: mlx5_ib0 type: infiniband # IPoIB device mlx5_ib0.8002 on top of mlx5_ib0 - name: mlx5_ib0.8002 type: infiniband autoconnect: yes infiniband: p_key: 0x8002 transport_mode: datagram parent: mlx5_ib0 ip: address: - 192.0.2.1/24 - 2001:db8:1::1/64 state: up
--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: IPoIB connection profile with static IP address settings ansible.builtin.include_role: name: redhat.rhel_system_roles.network vars: network_connections: # InfiniBand connection mlx5_ib0 - name: mlx5_ib0 interface_name: mlx5_ib0 type: infiniband # IPoIB device mlx5_ib0.8002 on top of mlx5_ib0 - name: mlx5_ib0.8002 type: infiniband autoconnect: yes infiniband: p_key: 0x8002 transport_mode: datagram parent: mlx5_ib0 ip: address: - 192.0.2.1/24 - 2001:db8:1::1/64 state: up
Copy to Clipboard Copied! サンプル Playbook で指定されている設定は次のとおりです。
type: <profile_type>
- 作成するプロファイルのタイプを設定します。このサンプル Playbook では、2 つの接続プロファイルを作成します。1 つは InfiniBand 接続用、もう 1 つは IPoIB デバイス用です。
parent: <parent_device>
- IPoIB 接続プロファイルの親デバイスを設定します。
p_key: <value>
-
InfiniBand パーティションキーを設定します。この変数を設定する場合は、IPoIB デバイスに
interface_name
を設定しないでください。 transport_mode: <mode>
-
IPoIB 接続の動作モードを設定します。この変数は、
datagram
(デフォルト) またはconnected
に設定できます。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.network/README.md
ファイルを参照してください。Playbook の構文を検証します。
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied!
検証
mlx5_ib0.8002
デバイスの IP 設定を表示します。ansible managed-node-01.example.com -m command -a 'ip address show mlx5_ib0.8002'
# ansible managed-node-01.example.com -m command -a 'ip address show mlx5_ib0.8002' managed-node-01.example.com | CHANGED | rc=0 >> ... inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute ib0.8002 valid_lft forever preferred_lft forever inet6 2001:db8:1::1/64 scope link tentative noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied! mlx5_ib0.8002
デバイスのパーティションキー (P_Key) を表示します。ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx5_ib0.8002/pkey' managed-node-01.example.com | CHANGED | rc=0 >> 0x8002
# ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx5_ib0.8002/pkey' managed-node-01.example.com | CHANGED | rc=0 >> 0x8002
Copy to Clipboard Copied! mlx5_ib0.8002
デバイスのモードを表示します。ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx5_ib0.8002/mode' managed-node-01.example.com | CHANGED | rc=0 >> datagram
# ansible managed-node-01.example.com -m command -a 'cat /sys/class/net/mlx5_ib0.8002/mode' managed-node-01.example.com | CHANGED | rc=0 >> datagram
Copy to Clipboard Copied!
26.3.6. nmstatectl
を使用して IPoIB 接続を設定する
nmstatectl
ユーティリティーを使用して、Nmstate API を介して IP over InfiniBand (IPoIB) 接続を設定できます。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
前提条件
- InfiniBand デバイスがサーバーにインストールされている。
- InfiniBand デバイスのカーネルモジュールがロードされている。
手順
次の内容を含む YAML ファイル (例:
~/create-IPoIB-profile.yml
) を作成します。interfaces: - name: mlx5_ib0.8002 type: infiniband state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false infiniband: base-iface: "mlx5_ib0" mode: datagram pkey: "0x8002" routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: mlx5_ib0.8002 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: mlx5_ib0.8002
interfaces: - name: mlx5_ib0.8002 type: infiniband state: up ipv4: enabled: true address: - ip: 192.0.2.1 prefix-length: 24 dhcp: false ipv6: enabled: true address: - ip: 2001:db8:1::1 prefix-length: 64 autoconf: false dhcp: false infiniband: base-iface: "mlx5_ib0" mode: datagram pkey: "0x8002" routes: config: - destination: 0.0.0.0/0 next-hop-address: 192.0.2.254 next-hop-interface: mlx5_ib0.8002 - destination: ::/0 next-hop-address: 2001:db8:1::fffe next-hop-interface: mlx5_ib0.8002
Copy to Clipboard Copied! IPoIB 接続に以下が設定されました。
-
IPOIB デバイス名:
mlx5_ib0.8002
-
基本インターフェイス (親):
mlx5_ib0
-
InfiniBand パーティションキー:
0x8002
-
トランスポートモード:
datagram
-
静的 IPv4 アドレス:
192.0.2.1
(サブネットマスクが/24
) -
静的 IPv6 アドレス:
2001:db8:1::1
(サブネットマスクが/64
) -
IPv4 デフォルトゲートウェイ:
192.0.2.254
-
IPv6 デフォルトゲートウェイ:
2001:db8:1::fffe
-
IPOIB デバイス名:
設定をシステムに適用します。
nmstatectl apply ~/create-IPoIB-profile.yml
# nmstatectl apply ~/create-IPoIB-profile.yml
Copy to Clipboard Copied!
検証
mlx5_ib0.8002
デバイスの IP 設定を表示します。ip address show mlx5_ib0.8002
# ip address show mlx5_ib0.8002 ... inet 192.0.2.1/24 brd 192.0.2.255 scope global noprefixroute ib0.8002 valid_lft forever preferred_lft forever inet6 2001:db8:1::1/64 scope link tentative noprefixroute valid_lft forever preferred_lft forever
Copy to Clipboard Copied! mlx5_ib0.8002
デバイスのパーティションキー (P_Key) を表示します。cat /sys/class/net/mlx5_ib0.8002/pkey 0x8002
# cat /sys/class/net/mlx5_ib0.8002/pkey 0x8002
Copy to Clipboard Copied! mlx5_ib0.8002
デバイスのモードを表示します。cat /sys/class/net/mlx5_ib0.8002/mode datagram
# cat /sys/class/net/mlx5_ib0.8002/mode datagram
Copy to Clipboard Copied!
26.3.7. IPoIB の設定後に iperf3 を使用して RDMA ネットワークをテストする
次の例では、大きなバッファーサイズを使用して、60 秒のテストを実行し、最大スループットを測定します。iperf3
ユーティリティーを使用して 2 つのホスト間の帯域幅とレイテンシーを十分に使用します。
前提条件
- 両方のホストで IPoIB を設定している。
手順
iperf3
をシステム上のサーバーとして実行するには、時間の間隔を定義して、定期的な帯域幅の更新-i
を指定し、クライアント接続の応答を待機するサーバー-s
としてリッスンします。iperf3 -i 5 -s
# iperf3 -i 5 -s
Copy to Clipboard Copied! iperf3
を別のシステムでクライアントとして実行するには、時間の間隔を定義して、定期的な帯域幅の更新-i
を指定し、-t
秒使用して IP アドレス192.168.2.2
のリスニングサーバー-c
に接続します。iperf3 -i 5 -t 60 -c 192.168.2.2
# iperf3 -i 5 -t 60 -c 192.168.2.2
Copy to Clipboard Copied! 以下のコマンドを使用します。
サーバーとして動作するシステムでテスト結果を表示します。
iperf3 -i 10 -s
# iperf3 -i 10 -s ----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- Accepted connection from 192.168.2.3, port 22216 [5] local 192.168.2.2 port 5201 connected to 192.168.2.3 port 22218 [ID] Interval Transfer Bandwidth [5] 0.00-10.00 sec 17.5 GBytes 15.0 Gbits/sec [5] 10.00-20.00 sec 17.6 GBytes 15.2 Gbits/sec [5] 20.00-30.00 sec 18.4 GBytes 15.8 Gbits/sec [5] 30.00-40.00 sec 18.0 GBytes 15.5 Gbits/sec [5] 40.00-50.00 sec 17.5 GBytes 15.1 Gbits/sec [5] 50.00-60.00 sec 18.1 GBytes 15.5 Gbits/sec [5] 60.00-60.04 sec 82.2 MBytes 17.3 Gbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ID] Interval Transfer Bandwidth [5] 0.00-60.04 sec 0.00 Bytes 0.00 bits/sec sender [5] 0.00-60.04 sec 107 GBytes 15.3 Gbits/sec receiver
Copy to Clipboard Copied! クライアントとして動作するシステムでテスト結果を表示します。
iperf3 -i 1 -t 60 -c 192.168.2.2
# iperf3 -i 1 -t 60 -c 192.168.2.2 Connecting to host 192.168.2.2, port 5201 [4] local 192.168.2.3 port 22218 connected to 192.168.2.2 port 5201 [ID] Interval Transfer Bandwidth Retr Cwnd [4] 0.00-10.00 sec 17.6 GBytes 15.1 Gbits/sec 0 6.01 MBytes [4] 10.00-20.00 sec 17.6 GBytes 15.1 Gbits/sec 0 6.01 MBytes [4] 20.00-30.00 sec 18.4 GBytes 15.8 Gbits/sec 0 6.01 MBytes [4] 30.00-40.00 sec 18.0 GBytes 15.5 Gbits/sec 0 6.01 MBytes [4] 40.00-50.00 sec 17.5 GBytes 15.1 Gbits/sec 0 6.01 MBytes [4] 50.00-60.00 sec 18.1 GBytes 15.5 Gbits/sec 0 6.01 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ID] Interval Transfer Bandwidth Retr [4] 0.00-60.00 sec 107 GBytes 15.4 Gbits/sec 0 sender [4] 0.00-60.00 sec 107 GBytes 15.4 Gbits/sec receiver
Copy to Clipboard Copied!
26.4. RoCE の設定
Remote Direct Memory Access (RDMA) over Converged Ethernet (RoCE) は、イーサネットネットワーク上で RDMA を利用するネットワークプロトコルです。RoCE の設定には特定のハードウェアが必要です。ハードウェアベンダーには Mellanox、Broadcom、QLogic などがあります。
26.4.1. RoCE プロトコルバージョンの概要
以下は、RoCE のさまざまなバージョンです。
- RoCE v1
-
RoCE バージョン 1 プロトコルは、Ethertype
0x8915
を持つイーサネットリンク層プロトコルです。同じイーサネットブロードキャストドメイン内にある 2 つのホスト間の通信を可能にします。 - RoCE v2
-
RoCE バージョン 2 プロトコルは、UDP over IPv4 または UDP over IPv6 プロトコルの上位に存在します。RoCE v2 の場合、UDP の宛先ポート番号は
4791
です。
RDMA_CM は、データを転送するためにクライアントとサーバーとの間に信頼できる接続を確立します。RDMA_CM は、接続を確立するために RDMA トランスポートに依存しないインターフェイスを提供します。通信は、特定の RDMA デバイスとメッセージベースのデータ転送を使用します。
クライアントで RoCE v2 を使用し、サーバーで RoCE v1 を使用するなど、異なるバージョンの使用はサポートされていません。このような場合は、サーバーとクライアントの両方が RoCE v1 で通信するように設定してください。
RoCE v1 はデータリンク層 (Layer 2) で動作し、同じネットワーク内の 2 台のマシンの通信のみをサポートします。デフォルトでは、RoCE v2 を使用できます。これは、ネットワーク層 (Layer 3) で機能します。RoCE v2 は、複数のイーサネットとの接続を提供するパケットルーティングをサポートしています。
26.4.2. デフォルトの RoCE バージョンを一時的に変更する
クライアントで RoCE v2 プロトコルを使用し、サーバーで RoCE v1 を使用することはサポートされていません。サーバーのハードウェアが RoCE v1 のみをサポートしている場合は、サーバーと通信できるようにクライアントを RoCE v1 用に設定します。たとえば、RoCE v1 のみをサポートする Mellanox ConnectX-5 InfiniBand デバイス用には、mlx5_0
ドライバーを使用するクライアントを設定できます。
ここで説明する変更は、ホストを再起動するまで有効です。
前提条件
- クライアントが、RoCE v2 プロトコルに対応した InfiniBand デバイスを使用している。
- サーバーが、RoCEv1 のみをサポートする InfiniBand デバイスを使用している。
手順
/sys/kernel/config/rdma_cm/mlx5_0/
ディレクトリーを作成します。mkdir /sys/kernel/config/rdma_cm/mlx5_0/
# mkdir /sys/kernel/config/rdma_cm/mlx5_0/
Copy to Clipboard Copied! デフォルトの RoCE モードを表示します。
cat /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode RoCE v2
# cat /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode RoCE v2
Copy to Clipboard Copied! デフォルトの RoCE モードをバージョン 1 に変更します。
echo "IB/RoCE v1" > /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode
# echo "IB/RoCE v1" > /sys/kernel/config/rdma_cm/mlx5_0/ports/1/default_roce_mode
Copy to Clipboard Copied!
26.5. システムでユーザーがピニング (固定) できるメモリーの量を増やす
Remote Direct Memory Access (RDMA) の操作には、物理メモリーのピニングが必要です。これにより、カーネルがスワップ領域にメモリーを書き込むことができなくなります。ユーザーがメモリーを過剰に固定すると、システムのメモリーが不足し、カーネルがプロセスを終了してより多くのメモリーを解放することがあります。したがって、メモリーのピニングは特権が必要な操作です。
root 以外のユーザーが大規模な RDMA アプリケーションを実行する必要がある場合は、プライマリーメモリー内のページを常にピニングしておくために、メモリーの量を増やす必要があります。
手順
root
ユーザーで、/etc/security/limits.conf
ファイルを以下の内容で作成します。@rdma soft memlock unlimited @rdma hard memlock unlimited
@rdma soft memlock unlimited @rdma hard memlock unlimited
Copy to Clipboard Copied!
検証
/etc/security/limits.conf
ファイルの編集後、rdma
グループのメンバーとしてログインします。Red Hat Enterprise Linux は、ユーザーのログイン時に、更新された
ulimit
の設定を適用することに注意してください。ulimit -l
コマンドを使用して制限を表示します。ulimit -l
$ ulimit -l unlimited
Copy to Clipboard Copied! コマンドが
unlimited
を返す場合、ユーザーはメモリーのピニングを無制限に行うことができます。
26.6. NFS サーバーで NFS over RDMA を有効にする
Remote Direct Memory Access (RDMA) は、クライアントシステムがストレージサーバーのメモリーから自身のメモリーにデータを直接転送できるようにするプロトコルです。これにより、ストレージのスループットが向上し、サーバーとクライアント間のデータ転送の遅延が減少し、両側の CPU 負荷が軽減されます。NFS サーバーとクライアントの両方が RDMA 経由で接続されている場合、クライアントは NFS over RDMA (NFSoRDMA) を使用してエクスポートされたディレクトリーをマウントできます。
前提条件
- NFS サービスが実行および設定されている。
- InfiniBand または RDMA over Converged Ethernet (RoCE) デバイスがサーバーにインストールされている。
- サーバーに IP over InfiniBand (IPoIB) が設定され、InfiniBand デバイスに IP アドレスが割り当てられている。
手順
rdma-core
パッケージをインストールします。dnf install rdma-core
# dnf install rdma-core
Copy to Clipboard Copied! パッケージがすでにインストールされている場合は、
/etc/rdma/modules/rdma.conf
ファイル内のxprtrdma
およびsvcrdma
モジュールのコメントが解除されていることを確認します。NFS over RDMA client support NFS over RDMA server support
# NFS over RDMA client support xprtrdma # NFS over RDMA server support svcrdma
Copy to Clipboard Copied! オプション: デフォルトでは、NFS over RDMA はポート 20049 を使用します。別のポートを使用する場合は、
/etc/nfs.conf
ファイルの[nfsd]
セクションでrdma-port
設定を指定します。rdma-port=<port>
rdma-port=<port>
Copy to Clipboard Copied! firewalld
で NFSoRDMA ポートを開きます。firewall-cmd --permanent --add-port={20049/tcp,20049/udp} firewall-cmd --reload
# firewall-cmd --permanent --add-port={20049/tcp,20049/udp} # firewall-cmd --reload
Copy to Clipboard Copied! 20049 以外のポートを設定する場合は、ポート番号を変更します。
nfs-server
サービスを再起動します。systemctl restart nfs-server
# systemctl restart nfs-server
Copy to Clipboard Copied!
検証
InfiniBand ハードウェアを搭載したクライアントで、次の手順を実行します。
以下のパッケージをインストールします。
dnf install nfs-utils rdma-core
# dnf install nfs-utils rdma-core
Copy to Clipboard Copied! エクスポートされた NFS 共有を RDMA 経由でマウントします。
mount -o rdma server.example.com:/nfs/projects/ /mnt/
# mount -o rdma server.example.com:/nfs/projects/ /mnt/
Copy to Clipboard Copied! デフォルト (20049) 以外のポート番号を設定する場合は、コマンドに
port=<port_number>
を渡します。mount -o rdma,port=<port_number> server.example.com:/nfs/projects/ /mnt/
# mount -o rdma,port=<port_number> server.example.com:/nfs/projects/ /mnt/
Copy to Clipboard Copied! rdma
オプションを使用して共有がマウントされたことを確認します。mount | grep "/mnt"
# mount | grep "/mnt" server.example.com:/nfs/projects/ on /mnt type nfs (...,proto=rdma,...)
Copy to Clipboard Copied!
26.7. InfiniBand サブネットマネージャー
すべての InfiniBand ネットワークでは、ネットワークが機能するために、サブネットマネージャーが実行されている必要があります。これは、2 台のマシンがスイッチなしで直接接続されている場合にも当てはまります。
複数のサブネットマネージャーを使用することもできます。その場合、1 つのサブネットマネージャーはコントローラーとして、もう 1 つはポートとして機能します。ポートは、マスターサブネットマネージャーに障害が発生した場合に引き継ぎます。
Red Hat Enterprise Linux は、InfiniBand サブネットマネージャーの実装である OpenSM
を提供します。ただし、OpenSM
は機能が限られており、アップストリームの開発が活発に行われていません。通常、InfiniBand スイッチに組み込まれているサブネットマネージャーのほうが、より多くの機能を備えており、最新の InfiniBand ハードウェアをサポートしています。詳細は、Installing and configuring the OpenSM InfiniBand subnet manager を参照してください。