ネットワークの設定および管理
ネットワークインターフェイスおよび高度なネットワーク機能の管理
概要
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! Toggle word wrap Toggle overflow インターフェイスの 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! Toggle word wrap Toggle overflow このプロパティーは
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! Toggle word wrap Toggle overflow システムを再起動します。
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 記録した 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! Toggle word wrap Toggle overflow スキームを切り替えた後、
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! Toggle word wrap Toggle overflow 接続プロファイルの
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! Toggle word wrap Toggle overflow 接続プロファイルを再アクティブ化します。
nmcli connection up example_profile
# nmcli connection up example_profile
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ネットワークインターフェイスの
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! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow インターフェイスの MAC アドレスを記録します。
インターフェイスのデバイスタイプ ID を表示します。
cat /sys/class/net/enp1s0/type 1
# cat /sys/class/net/enp1s0/type 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /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! Toggle word wrap Toggle overflow 重要ブートプロセス中に一貫したデバイス名が必要な場合は、ファイル名として
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! Toggle word wrap Toggle overflow オプション:
initrd
RAM ディスクイメージを再生成します。dracut -f
# dracut -f
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この手順は、RAM ディスクにネットワーク機能が必要な場合にのみ必要です。たとえば、ルートファイルシステムが iSCSI などのネットワークデバイスに保存されている場合がこれに当てはまります。
名前を変更するインターフェイスを使用する NetworkManager 接続プロファイルを特定します。
nmcli -f device,name connection show
# nmcli -f device,name connection show DEVICE NAME enp1s0 example_profile ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続プロファイルの
connection.interface-name
プロパティーの設定を解除します。nmcli connection modify example_profile connection.interface-name ""
# nmcli connection modify example_profile connection.interface-name ""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一時的に、新しいインターフェイス名と以前のインターフェイス名の両方に一致するように接続プロファイルを設定します。
nmcli connection modify example_profile match.interface-name "provider0 enp1s0"
# nmcli connection modify example_profile match.interface-name "provider0 enp1s0"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow システムを再起動します。
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow リンクファイルで指定した 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! Toggle word wrap Toggle overflow 新しいインターフェイス名のみと一致するように接続プロファイルを設定します。
nmcli connection modify example_profile match.interface-name "provider0"
# nmcli connection modify example_profile match.interface-name "provider0"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これで、接続プロファイルから古いインターフェイス名が削除されました。
接続プロファイルを再アクティブ化します。
nmcli connection up example_profile
# nmcli connection up example_profile
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow インターフェイスの MAC アドレスを記録します。
/etc/systemd/network/
ディレクトリーがない場合は作成します。mkdir -p /etc/systemd/network/
# mkdir -p /etc/systemd/network/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 名前を変更するインターフェイスごとに、次の内容を含む
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! Toggle word wrap Toggle overflow 重要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! Toggle word wrap Toggle overflow オプション:
initrd
RAM ディスクイメージを再生成します。dracut -f
# dracut -f
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この手順は、RAM ディスクにネットワーク機能が必要な場合にのみ必要です。たとえば、ルートファイルシステムが iSCSI などのネットワークデバイスに保存されている場合がこれに当てはまります。
名前を変更するインターフェイスを使用する NetworkManager 接続プロファイルを特定します。
nmcli -f device,name connection show
# nmcli -f device,name connection show DEVICE NAME enp1s0 example_profile ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続プロファイルの
connection.interface-name
プロパティーの設定を解除します。nmcli connection modify example_profile connection.interface-name ""
# nmcli connection modify example_profile connection.interface-name ""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一時的に、新しいインターフェイス名と以前のインターフェイス名の両方に一致するように接続プロファイルを設定します。
nmcli connection modify example_profile match.interface-name "provider0 enp1s0"
# nmcli connection modify example_profile match.interface-name "provider0 enp1s0"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow システムを再起動します。
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow リンクファイルで指定した 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! Toggle word wrap Toggle overflow 新しいインターフェイス名のみと一致するように接続プロファイルを設定します。
nmcli connection modify example_profile match.interface-name "provider0"
# nmcli connection modify example_profile match.interface-name "provider0"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これで、接続プロファイルから古いインターフェイス名が削除されました。
接続プロファイルを再度アクティベートします。
nmcli connection up example_profile
# nmcli connection up example_profile
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow 代替名を割り当てるインターフェイスの MAC アドレスを記録します。
/etc/systemd/network/
ディレクトリーがない場合は作成します。mkdir -p /etc/systemd/network/
# mkdir -p /etc/systemd/network/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 代替名が必要なインターフェイスごとに、
/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! Toggle word wrap Toggle overflow 前のステップで作成したファイルを変更します。
[Match]
セクションを次のように書き換え、AlternativeName
エントリーを[Link]
セクションに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、次の内容を含む
/etc/systemd/network/70-altname.link
ファイルを作成して、MAC アドレス00:00:5e:00:53:1a
のインターフェイスに代替名としてprovider
を割り当てます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow initrd
RAM ディスクイメージを再生成します。dracut -f
# dracut -f
Copy to Clipboard Copied! Toggle word wrap Toggle overflow システムを再起動します。
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
代替インターフェイス名を使用します。たとえば、代替名
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! Toggle word wrap Toggle overflow
第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! Toggle word wrap Toggle overflow デフォルトでは、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! Toggle word wrap Toggle overflow 既存のプロファイルを変更するには、この手順をスキップしてください。
オプション: 接続プロファイルの名前を変更します。
nmcli connection modify "Wired connection 1" connection.id "Internal-LAN"
# nmcli connection modify "Wired connection 1" connection.id "Internal-LAN"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストに複数のプロファイルがある場合は、わかりやすい名前を付けると、プロファイルの目的を識別しやすくなります。
接続プロファイルの現在の設定を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4 を設定します。
DHCP を使用するには、次のように実行します。
nmcli connection modify Internal-LAN ipv4.method auto
# nmcli connection modify Internal-LAN ipv4.method auto
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
IPv6 設定を行います。
ステートレスアドレス自動設定 (SLAAC) を使用するには、次のように実行します。
nmcli connection modify Internal-LAN ipv6.method auto
# nmcli connection modify Internal-LAN ipv6.method auto
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
プロファイルの他の設定をカスタマイズするには、次のコマンドを使用します。
nmcli connection modify <connection-name> <setting> <value>
# nmcli connection modify <connection-name> <setting> <value>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 値はスペースまたはセミコロンで引用符で囲みます。
変更できる設定の詳細は、システム上の
nm-settings(5)
man ページを参照してください。プロファイルをアクティブ化します。
nmcli connection up Internal-LAN
# nmcli connection up Internal-LAN
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
NIC の IP 設定を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 複数の接続プロファイルが同時にアクティブな場合、
nameserver
エントリーの順序は、これらのプロファイルの DNS 優先度の値と接続タイプによって異なります。ping
ユーティリティーを使用して、このホストがパケットを他のホストに送信できることを確認します。ping <host-name-or-IP-address>
# ping <host-name-or-IP-address>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
トラブルシューティング
- ネットワークケーブルがホストとスイッチに差し込まれていることを確認します。
- リンク障害がこのホストだけに存在するか、同じスイッチに接続された他のホストにも存在するかを確認します。
- ネットワークケーブルとネットワークインターフェイスが予想どおりに機能していることを確認します。ハードウェア診断手順を実行し、不具合のあるケーブルとネットワークインターフェイスカードを交換します。
- ディスクの設定がデバイスの設定と一致しない場合は、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! Toggle word wrap Toggle overflow nmtui
を開始します。nmtui
# nmtui
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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 設定を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 複数の接続プロファイルが同時にアクティブな場合、
nameserver
エントリーの順序は、これらのプロファイルの DNS 優先度の値と接続タイプによって異なります。ping
ユーティリティーを使用して、このホストがパケットを他のホストに送信できることを確認します。ping <host-name-or-IP-address>
# ping <host-name-or-IP-address>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
トラブルシューティング
- ネットワークケーブルがホストとスイッチに差し込まれていることを確認します。
- リンク障害がこのホストだけに存在するか、同じスイッチに接続された他のホストにも存在するかを確認します。
- ネットワークケーブルとネットワークインターフェイスが予想どおりに機能していることを確認します。ハードウェア診断手順を実行し、不具合のあるケーブルとネットワークインターフェイスカードを交換します。
- ディスクの設定がデバイスの設定と一致しない場合は、NetworkManager を起動するか再起動して、インメモリー接続を作成することで、デバイスの設定を反映します。この問題の詳細と回避方法は、Red Hat ナレッジベースのソリューション記事 NetworkManager duplicates a connection after restart of NetworkManager service を参照してください。
2.3. control-center によるイーサネット接続の設定 リンクのコピーリンクがクリップボードにコピーされました!
イーサネット経由でホストをネットワークに接続する場合は、GNOME Settings メニューを使用して、グラフィカルインターフェイスで接続の設定を管理できます。
control-center
は nmcli
ユーティリティーほど多くの設定オプションをサポートしていないことに注意してください。
前提条件
- サーバーの構成に物理または仮想イーサネットネットワークインターフェイスコントローラー (NIC) が存在する。
- GNOME がインストールされている。
手順
-
Super キーを押して
Settings
を入力し、Enter を押します。 - 左側のナビゲーションにある Network を選択します。
新しい接続プロファイルを追加するか、既存の接続プロファイルを変更するかを選択します。
- 新しいプロファイルを作成するには、Ethernet エントリーの横にある ボタンをクリックします。
- 既存のプロファイルを変更するには、プロファイルエントリーの横にある歯車アイコンをクリックします。
オプション: Identity タブで、接続プロファイルの名前を更新します。
ホストに複数のプロファイルがある場合は、わかりやすい名前を付けると、プロファイルの目的を識別しやすくなります。
環境に応じて、IPv4 タブと IPv6 タブで IP アドレス設定を設定します。
-
DHCP または IPv6 ステートレスアドレス自動設定 (SLAAC) を使用するには、方法として
Automatic (DHCP)
を選択します (デフォルト)。 静的 IP アドレス、ネットワークマスク、デフォルトゲートウェイ、DNS サーバー、および検索ドメインを設定するには、方法として
Manual
を選択し、タブのフィールドに入力します。
-
DHCP または IPv6 ステートレスアドレス自動設定 (SLAAC) を使用するには、方法として
接続プロファイルを追加するか変更するかに応じて、
または ボタンをクリックして接続を保存します。GNOME の
control-center
は、接続を自動的にアクティブにします。
検証
NIC の IP 設定を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 複数の接続プロファイルが同時にアクティブな場合、
nameserver
エントリーの順序は、これらのプロファイルの DNS 優先度の値と接続タイプによって異なります。ping
ユーティリティーを使用して、このホストがパケットを他のホストに送信できることを確認します。ping <host-name-or-IP-address>
# ping <host-name-or-IP-address>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
トラブルシューティングの手順
- ネットワークケーブルがホストとスイッチに差し込まれていることを確認します。
- リンク障害がこのホストだけに存在するか、同じスイッチに接続された他のホストにも存在するかを確認します。
- ネットワークケーブルとネットワークインターフェイスが予想どおりに機能していることを確認します。ハードウェア診断手順を実行し、不具合のあるケーブルとネットワークインターフェイスカードを交換します。
- ディスクの設定がデバイスの設定と一致しない場合は、NetworkManager を起動するか再起動して、インメモリー接続を作成することで、デバイスの設定を反映します。この問題の詳細と回避方法は、Red Hat ナレッジベースのソリューション記事 NetworkManager duplicates a connection after restart of NetworkManager service を参照してください。
2.4. nmstatectl でインターフェイス名を指定して静的 IP アドレスによるイーサネット接続を設定する リンクのコピーリンクがクリップボードにコピーされました!
nmstatectl
ユーティリティーを使用して、Nmstate API を介してイーサネット接続を設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
Nmstate を使用すると、静的 IP アドレス、ゲートウェイ、および DNS 設定を使用してイーサネット接続を設定し、それらを指定のインターフェイス名に割り当てることができます。
前提条件
- サーバーの構成に物理または仮想イーサネットネットワークインターフェイスコントローラー (NIC) が存在する。
-
nmstate
パッケージがインストールされている。
手順
以下の内容を含む YAML ファイル (例:
~/create-ethernet-profile.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの設定では、次の設定を使用して
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 アドレスで識別できます。次に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 設定をシステムに適用します。
nmstatectl apply ~/create-ethernet-profile.yml
# nmstatectl apply ~/create-ethernet-profile.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
現在の状態を YAML 形式で表示します。
nmstatectl show enp1s0
# nmstatectl show enp1s0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NIC の IP 設定を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 複数の接続プロファイルが同時にアクティブな場合、
nameserver
エントリーの順序は、これらのプロファイルの DNS 優先度の値と接続タイプによって異なります。ping
ユーティリティーを使用して、このホストがパケットを他のホストに送信できることを確認します。ping <host-name-or-IP-address>
# ping <host-name-or-IP-address>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5. nmstatectl で PCI アドレスを指定して静的 IP アドレスによるイーサネット接続を設定する リンクのコピーリンクがクリップボードにコピーされました!
nmstatectl
ユーティリティーを使用して、Nmstate API を介してイーサネット接続を設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
Nmstate を使用すると、静的 IP アドレス、ゲートウェイ、および DNS 設定を使用してイーサネット接続を設定し、それらをインターフェイス名ではなく PCI アドレスに基づいてデバイスに割り当てることができます。
前提条件
- サーバーの構成に物理イーサネットネットワークインターフェイスコントローラー (NIC) が存在する。
-
デバイスの PCI アドレスがわかっている。PCI アドレスは、
ethtool -i <interface_name> | grep bus-info
コマンドを使用して確認できます。 -
nmstate
パッケージがインストールされている。
手順
以下の内容を含む YAML ファイル (例:
~/create-ethernet-profile.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の設定により、ID
0000:00:14.3
のデバイスのイーサネット接続プロファイルが、以下の設定で定義されます。-
静的 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-ethernet-profile.yml
# nmstatectl apply ~/create-ethernet-profile.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
現在の状態を YAML 形式で表示します。
nmstatectl show <interface_name>
# nmstatectl show <interface_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NIC の IP 設定を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4 デフォルトゲートウェイを表示します。
ip route show default
# ip route show default default via 192.0.2.254 dev <interface_name> proto static metric 102
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv6 デフォルトゲートウェイを表示します。
ip -6 route show default
# ip -6 route show default default via 2001:db8:1::fffe dev <interface_name> proto static metric 102 pref medium
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow ping
ユーティリティーを使用して、このホストがパケットを他のホストに送信できることを確認します。ping <host-name-or-IP-address>
# ping <host-name-or-IP-address>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.6. 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! Toggle word wrap Toggle overflow 次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この 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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
管理対象ノードの Ansible fact をクエリーし、アクティブなネットワーク設定を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.7. 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
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル 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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
管理対象ノードの Ansible fact をクエリーし、アクティブなネットワーク設定を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8. nmstatectl でインターフェイス名を指定して動的 IP アドレスによる Ethernet 接続を設定する リンクのコピーリンクがクリップボードにコピーされました!
nmstatectl
ユーティリティーを使用して、Nmstate API を介してイーサネット接続を設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
Nmstate を使用すると、DHCP サーバーおよび IPv6 ステートレスアドレス自動設定 (SLAAC) から IP アドレス、ゲートウェイ、および DNS 設定を取得するイーサネット接続を設定できます。指定したインターフェイス名に接続プロファイルを割り当てることができます。
前提条件
- サーバーの構成に物理または仮想イーサネットネットワークインターフェイスコントローラー (NIC) が存在する。
- DHCP サーバーをネットワークで使用できる。
-
nmstate
パッケージがインストールされている。
手順
以下の内容を含む YAML ファイル (例:
~/create-ethernet-profile.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの設定では、
enp1s0
デバイスのイーサネット接続プロファイルを定義します。接続では、DHCP サーバーと IPv6 ステートレスアドレス自動設定 (SLAAC) から、IPv4 アドレス、IPv6 アドレス、デフォルトゲートウェイ、ルート、DNS サーバー、および検索ドメインを取得します。オプション:
interfaces
プロパティーでidentifier: mac-address
およびmac-address: <mac_address>
プロパティーを定義すると、ネットワークインターフェイスカードを名前ではなく MAC アドレスで識別できます。次に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 設定をシステムに適用します。
nmstatectl apply ~/create-ethernet-profile.yml
# nmstatectl apply ~/create-ethernet-profile.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
現在の状態を YAML 形式で表示します。
nmstatectl show enp1s0
# nmstatectl show enp1s0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NIC の IP 設定を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 複数の接続プロファイルが同時にアクティブな場合、
nameserver
エントリーの順序は、これらのプロファイルの DNS 優先度の値と接続タイプによって異なります。ping
ユーティリティーを使用して、このホストがパケットを他のホストに送信できることを確認します。ping <host-name-or-IP-address>
# ping <host-name-or-IP-address>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.9. nmstatectl で PCI アドレスを指定して動的 IP アドレスによるイーサネット接続を設定する リンクのコピーリンクがクリップボードにコピーされました!
nmstatectl
ユーティリティーを使用して、Nmstate API を介してイーサネット接続を設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
Nmstate を使用すると、DHCP サーバーおよび IPv6 ステートレスアドレス自動設定 (SLAAC) から IP アドレス、ゲートウェイ、および DNS 設定を取得するイーサネット接続を設定できます。インターフェイス名ではなく PCI アドレスに基づいてデバイスに接続プロファイルを割り当てることができます。
前提条件
- サーバーの構成に物理イーサネットデバイスが存在する。
- ネットワーク内で DHCP サーバーと SLAAC が利用できる。
- 管理対象ホストは、NetworkManager を使用してネットワークを設定します。
-
デバイスの PCI アドレスがわかっている。PCI アドレスは、
ethtool -i <interface_name> | grep bus-info
コマンドを使用して確認できます。 -
nmstate
パッケージがインストールされている。
手順
以下の内容を含む YAML ファイル (例:
~/create-ethernet-profile.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の設定により、ID
0000:00:14.3
のデバイスのイーサネット接続プロファイルが定義されます。接続では、DHCP サーバーと IPv6 ステートレスアドレス自動設定 (SLAAC) から、IPv4 アドレス、IPv6 アドレス、デフォルトゲートウェイ、ルート、DNS サーバー、および検索ドメインを取得します。設定をシステムに適用します。
nmstatectl apply ~/create-ethernet-profile.yml
# nmstatectl apply ~/create-ethernet-profile.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
現在の状態を YAML 形式で表示します。
nmstatectl show <interface_name>
# nmstatectl show <interface_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NIC の IP 設定を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4 デフォルトゲートウェイを表示します。
ip route show default
# ip route show default default via 192.0.2.254 dev <interface_name> proto static metric 102
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv6 デフォルトゲートウェイを表示します。
ip -6 route show default
# ip -6 route show default default via 2001:db8:1::fffe dev <interface_name> proto static metric 102 pref medium
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow ping
ユーティリティーを使用して、このホストがパケットを他のホストに送信できることを確認します。ping <host-name-or-IP-address>
# ping <host-name-or-IP-address>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.10. 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
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル 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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
管理対象ノードの Ansible fact をクエリーし、インターフェイスが IP アドレスと DNS 設定を受信したことを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.11. 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
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル 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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
管理対象ノードの Ansible fact をクエリーし、インターフェイスが IP アドレスと DNS 設定を受信したことを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.12. インターフェイス名による単一の接続プロファイルを使用した複数のイーサネットインターフェイスの設定 リンクのコピーリンクがクリップボードにコピーされました!
ほとんどの場合、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! Toggle word wrap Toggle overflow
検証
単一接続プロファイルのすべての設定を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 3
は、インターフェイスが特定の瞬間に複数回アクティブになる可能性があることを示します。接続プロファイルは、match.interface-name
パラメーターのパターンに一致するすべてのデバイスを使用するため、接続プロファイルには同じ Universally Unique Identifier (UUID) があります。接続のステータスを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.13. 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
検証
接続のステータスを表示します。
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! Toggle word wrap Toggle overflow 接続プロファイルのすべての設定を表示するには、次のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この接続プロファイルは、
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! Toggle word wrap Toggle overflow このコマンドは、
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! Toggle word wrap Toggle overflow ネットワークインターフェイスを表示して、ボンドに追加する予定のインターフェイス名を書き留めます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、以下のように設定されています。
-
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! Toggle word wrap Toggle overflow これらのコマンドは、
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! Toggle word wrap Toggle overflow これらのコマンドは、
bridge0
およびbridge1
という名前の既存の接続プロファイルをbond0
接続に割り当てます。接続を再度アクティブにします。
nmcli connection up bridge0 nmcli connection up bridge1
# nmcli connection up bridge0 # nmcli connection up bridge1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow - 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! Toggle word wrap Toggle overflow - ステートレスアドレス自動設定 (SLAAC) を使用する場合、アクションは必要ありません。
- このボンディングデバイスを他のデバイスのポートとして使用する予定の場合は、何もする必要はありません。
オプション: ボンディングポートにパラメーターを設定する場合は、次のコマンドを使用します。
nmcli connection modify bond0-port1 bond-port.<parameter> <value>
# nmcli connection modify bond0-port1 bond-port.<parameter> <value>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続をアクティベートします。
nmcli connection up bond0
# nmcli connection up bond0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ポートが接続されており、
CONNECTION
コラムがポートの接続名を表示していることを確認します。nmcli device
# nmcli device DEVICE TYPE STATE CONNECTION ... enp7s0 ethernet connected bond0-port1 enp8s0 ethernet connected bond0-port2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続のいずれかのポートをアクティブにすると、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! Toggle word wrap Toggle overflow ブリッジを再度アクティブにします。
nmcli connection up bond0
# nmcli connection up bond0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ネットワークデバイスの 1 つからネットワークケーブルを一時的に取り外し、ボンディング内の他のデバイスがトラフィックを処理しているかどうかを確認します。
ソフトウェアユーティリティーを使用して、リンク障害イベントを適切にテストする方法がないことに注意してください。
nmcli
などの接続を非アクティブにするツールでは、ポート設定の変更を処理するボンディングドライバーの機能のみが表示され、実際のリンク障害イベントは表示されません。ボンドのステータスを表示します。
cat /proc/net/bonding/bond0
# cat /proc/net/bonding/bond0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow nmtui
を開始します。nmtui
# nmtui
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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! Toggle word wrap Toggle overflow
3.6. nmstatectl を使用したネットワークボンディングの設定 リンクのコピーリンクがクリップボードにコピーされました!
nmstatectl
ユーティリティーを使用して、Nmstate API を介してネットワークボンディングを設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
環境に応じて、YAML ファイルを適宜調整します。たとえば、ボンディングでイーサネットアダプターとは異なるデバイスを使用するには、ボンディングで使用するポートの Base-iface
属性と type
属性を調整します。
前提条件
- サーバーに、2 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。
- イーサネットデバイスをボンディングのポートとして使用するために、物理または仮想イーサネットデバイスがサーバーにインストールされている。
-
ブリッジまたは VLAN デバイスをボンディングのポートとして使用するために、
port
リストにインターフェイス名を設定し、対応するインターフェイスを定義する。 -
nmstate
パッケージがインストールされている。
手順
以下の内容を含む YAML ファイルを作成します (例:
~/create-bond.yml
)。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの設定では、次の設定を使用してネットワークボンディングを定義します。
-
ボンドのネットワークインターフェイス:
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! Toggle word wrap Toggle overflow
検証
デバイスおよび接続の状態を表示します。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION bond0 bond connected bond0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続プロファイルのすべての設定を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続設定を YAML 形式で表示します。
nmstatectl show bond0
# nmstatectl show bond0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.7. network RHEL システムロールを使用したネットワークボンディングの設定 リンクのコピーリンクがクリップボードにコピーされました!
ネットワークインターフェイスをボンディングで組み合わせると、より高いスループットまたは冗長性を備えた論理インターフェイスを提供できます。ボンディングを設定するには、NetworkManager 接続プロファイルを作成します。Ansible と network
RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。
network
RHEL システムロールを使用してネットワークボンディングを設定できます。ボンディングの親デバイスの接続プロファイルが存在しない場合は、このロールによって作成することもできます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - サーバーに、2 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル 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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ネットワークデバイスの 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 を提供します。このモードを設定する方法の詳細は、Red Hat ナレッジベースソリューション 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 アドレスを使用する他の複数システムとの間に発生している場合 | カプセル化されたトラフィックが、ソースシステムと、複数のポート番号を使用する他のシステムとの間で発生している場合 | ボンディングが、ブリッジネットワークなどの外部ネットワークに MAC アドレスを直接公開する複数のコンテナーまたは仮想マシン (VM) からのネットワークトラフィックを伝送しており、モード 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 タグに対応するように設定されています。詳細は、スイッチのドキュメントを参照してください。
手順
ネットワークインターフェイスを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow VLAN は、
0
から4094
の範囲内に存在する必要があります。デフォルトでは、VLAN 接続は、親インターフェイスから最大伝送単位 (MTU) を継承します。必要に応じて、別の MTU 値を設定します。
nmcli connection modify vlan10 ethernet.mtu 2000
# nmcli connection modify vlan10 ethernet.mtu 2000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow - 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! Toggle word wrap Toggle overflow - ステートレスアドレス自動設定 (SLAAC) を使用する場合、アクションは必要ありません。
- この VLAN デバイスを他のデバイスのポートとして使用する予定の場合は、何もする必要はありません。
接続をアクティベートします。
nmcli connection up vlan10
# nmcli connection up vlan10
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
設定を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow ベース 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! Toggle word wrap Toggle overflow VLAN は、
0
から4094
の範囲内に存在する必要があります。デフォルトでは、VLAN 接続は、親インターフェイスから最大伝送単位 (MTU) を継承します。必要に応じて、別の MTU 値を設定します。
nmcli connection modify vlan10 ethernet.mtu 2000
# nmcli connection modify vlan10 ethernet.mtu 2000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ベース 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! Toggle word wrap Toggle overflow このコマンドは、親 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! Toggle word wrap Toggle overflow
ネストされた 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! Toggle word wrap Toggle overflow
プロファイルをアクティブ化します。
nmcli connection up vlan10.20
# nmcli connection up vlan10.20
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ネストされた VLAN インターフェイスの設定を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow nmtui
を開始します。nmtui
# nmtui
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
アプリケーションを閉じます。
検証
設定を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5. nmstatectl を使用した VLAN タグ付けの設定 リンクのコピーリンクがクリップボードにコピーされました!
nmstatectl
ユーティリティーを使用して、Nmstate API を介して仮想ローカルエリアネットワーク VLAN を設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
環境に応じて、YAML ファイルを適宜調整します。たとえば、VLAN でイーサネットアダプターとは異なるデバイスを使用するには、VLAN で使用するポートの Base-iface
属性と type
属性を調整します。
前提条件
- イーサネットデバイスを VLAN のポートとして使用するために、物理または仮想イーサネットデバイスがサーバーにインストールされている。
-
nmstate
パッケージがインストールされている。
手順
以下の内容を含む YAML ファイル (例:
~/create-vlan.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの設定では、
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! Toggle word wrap Toggle overflow
検証
デバイスおよび接続の状態を表示します。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION vlan10 vlan connected vlan10
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続プロファイルのすべての設定を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続設定を YAML 形式で表示します。
nmstatectl show vlan10
# nmstatectl show vlan10
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル 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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
VLAN 設定を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第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! Toggle word wrap Toggle overflow このコマンドにより
bridge0
という名前のブリッジが作成されます。ネットワークインターフェイスを表示し、ブリッジに追加するインターフェイスの名前を書き留めます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、以下のように設定されています。
-
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! Toggle word wrap Toggle overflow これらのコマンドにより、
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! Toggle word wrap Toggle overflow これらのコマンドは、
bond0
およびbond1
という名前の既存の接続プロファイルをbridge0
接続に割り当てます。接続を再度アクティブにします。
nmcli connection up bond0 nmcli connection up bond1
# nmcli connection up bond0 # nmcli connection up bond1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow - 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! Toggle word wrap Toggle overflow - ステートレスアドレス自動設定 (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! Toggle word wrap Toggle overflow デフォルトでは STP が有効になっています。
接続をアクティベートします。
nmcli connection up bridge0
# nmcli connection up bridge0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ポートが接続されており、
CONNECTION
コラムがポートの接続名を表示していることを確認します。nmcli device
# nmcli device DEVICE TYPE STATE CONNECTION ... enp7s0 ethernet connected bridge0-port1 enp8s0 ethernet connected bridge0-port2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続のいずれかのポートをアクティブにすると、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! Toggle word wrap Toggle overflow ブリッジを再度アクティブにします。
nmcli connection up bridge0
# nmcli connection up bridge0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
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! Toggle word wrap Toggle overflow bridge
ユーティリティーを使用して、任意のブリッジデバイスのポートであるイーサネットデバイスの状態を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 特定のイーサネットデバイスのステータスを表示するには、
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! Toggle word wrap Toggle overflow nmtui
を開始します。nmtui
# nmtui
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 特定のイーサネットデバイスのステータスを表示するには、
bridge link show dev <ethernet_device_name>
コマンドを使用します。
5.4. nmstatectl を使用したネットワークブリッジの設定 リンクのコピーリンクがクリップボードにコピーされました!
nmstatectl
ユーティリティーを使用して、Nmstate API を介してネットワークブリッジを設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
環境に応じて、YAML ファイルを適宜調整します。たとえば、ブリッジでイーサネットアダプターとは異なるデバイスを使用するには、ブリッジで使用するポートの Base-iface
属性と type
属性を調整します。
前提条件
- サーバーに、2 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。
- イーサネットデバイスをブリッジのポートとして使用するために、物理または仮想イーサネットデバイスがサーバーにインストールされている。
-
ブリッジのポートとしてボンディングまたは VLAN デバイスを使用するために、
port
リストにインターフェイス名を設定し、対応するインターフェイスを定義する。 -
nmstate
パッケージがインストールされている。
手順
以下の内容を含む YAML ファイル (例:
~/create-bridge.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの設定では、次の設定でネットワークブリッジを定義します。
-
ブリッジのネットワークインターフェイス:
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! Toggle word wrap Toggle overflow
検証
デバイスおよび接続の状態を表示します。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION bridge0 bridge connected bridge0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続プロファイルのすべての設定を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続設定を YAML 形式で表示します。
nmstatectl show bridge0
# nmstatectl show bridge0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5. network RHEL システムロールを使用したネットワークブリッジの設定 リンクのコピーリンクがクリップボードにコピーされました!
ネットワークブリッジを作成することにより、Open Systems Interconnection (OSI) モデルのレイヤー 2 で複数のネットワークを接続できます。ブリッジを設定するには、NetworkManager で接続プロファイルを作成します。Ansible と network
RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。
network
RHEL システムロールを使用してブリッジを設定できます。ブリッジの親デバイスの接続プロファイルが存在しない場合は、このロールによって作成することもできます。
IP アドレス、ゲートウェイ、DNS 設定をブリッジに割り当てる場合は、ポートではなくブリッジで設定してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - サーバーに、2 つ以上の物理ネットワークデバイスまたは仮想ネットワークデバイスがインストールされている。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル 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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
特定のブリッジのポートであるイーサネットデバイスのリンクステータスを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ブリッジデバイスのポートであるイーサネットデバイスのステータスを表示します。
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! Toggle word wrap Toggle overflow
第6章 IPsec VPN のセットアップ リンクのコピーリンクがクリップボードにコピーされました!
Libreswan は、Internet Protocol Security (IPsec) プロトコルスイートの実装です。Libreswan を使用すると、インターネットなどの信頼できないネットワーク上にセキュアで暗号化されたトンネルを確立する仮想プライベートネットワーク (VPN) を設定できます。このようなトンネルにより、転送中のデータの機密性と整合性が確保されます。一般的なユースケースとしては、支社を本社に接続したり、リモートユーザーに企業ネットワークへのセキュアなアクセスを提供したりすることが挙げられます。
RHEL では、次のようにさまざまな方法で Libreswan を設定できます。
- Libreswan 設定ファイルを手動で編集して、高度なオプションを細かく制御する
-
vpn
RHEL システムロールを使用して、Libreswan VPN 設定の作成プロセスを自動化する。 - Nmstate を使用して、宣言型 API を通じて Libreswan 接続を設定する。
Libreswan では、"クライアント" や "サーバー" などの用語は使用しません。代わりに、IPsec ではエンドポイントを "left (左)" と "right (右)" で表します。Libreswan がどちらの役割を担うかを動的に決定するため、この設計により、多くの場合、両方のホストで同じ設定を使用できるようになります。慣例として、管理者は通常、ローカルホストの場合は "left"、リモートホストの場合は "right" を使用します。
Libreswan は、RHEL でサポートされている唯一の VPN テクノロジーです。
IPsec は、Internet Key Exchange (IKE) などの標準化されたプロトコルを利用して、さまざまなシステム間の効率的な通信を実現します。ただし、実際には、ベンダーがこれらの標準を実装する方法がわずかに違うため、互換性の問題が発生する可能性があります。Libreswan をサードパーティーの IPsec ピアに接続する際に、このような相互運用性の問題が発生した場合は、Red Hat サポート にお問い合わせください。
6.1. IPsec VPN のコンポーネント リンクのコピーリンクがクリップボードにコピーされました!
IPsec VPN のセットアップには、次の主なコンポーネントが関係します。
-
Internet Key Exchange (IKE): 2 つのエンドポイントが、このプロトコルを使用して相互に認証し、使用する暗号化アルゴリズムを含む接続のルールをネゴシエートします。Libreswan は、
pluto
と呼ばれるデーモンで IKE プロトコルを実装します。 - IPsec: IKE ネゴシエーション中に合意されたポリシーに従って、実際にデータを暗号化して転送するプロトコルの部分。Linux カーネルは IPsec プロトコルスイートを実装しています。
6.2. Libreswan の認証方法 リンクのコピーリンクがクリップボードにコピーされました!
Libreswan は次の認証方法をサポートしています。
- 事前共有鍵
- 事前共有鍵 (PSK) 方式では、両方のエンドポイントが同じシークレットを使用して相互に認証します。PSK はシンプルさと幅広い互換性を備えているため、小規模なデプロイメントに適しています。ただし、鍵が再利用される場合や、頻繁にローテーションされない場合、PSK の管理は危険です。セキュリティー上、PSK は 64 文字を超えるランダムな文字で構成されている必要があり、ホストが FIPS モードで動作している場合は FIPS の強度要件を満たしている必要があります。
- raw RSA 鍵
- この方法では、相互識別のために各ピアで RSA 公開鍵と秘密鍵のペアを使用します。raw RSA 鍵は PSK よりも強力なセキュリティーを提供し、完全な証明書インフラストラクチャーが不要な環境に最適です。
- X.509 証明書
- この方法では、信頼済み認証局 (CA) によって発行された X.509 証明書が使用されます。各ピアが証明書と秘密鍵を使用して自身のアイデンティティーを証明し、相手がそれを信頼できる CA に対して検証します。この方法は、エンタープライズ向けの最高レベルのセキュリティーとスケーラビリティーを提供します。ただし、公開鍵基盤 (PKI) の導入と維持が必要となるため、より複雑です。
- NULL 認証
- この方法では、ピア間の認証を行わずに暗号化のみを行います。NULL 認証はリモートエンドポイントのアイデンティティーを検証しないため、セキュアではなく、中間者攻撃に対する保護を提供しません。
- 量子コンピューターに対する保護
- Libreswan はスタンドアロンの認証方法ではありませんが、将来の量子コンピューターによる攻撃から最新の IKEv2 接続を保護するために、Post-quantum Pre-shared Keys (PPK) を提供します。この機能が必要なのは、古い IKEv1 プロトコルも標準 IKEv2 も、それ自体では量子攻撃に対する耐性がないためです。PPK は、主要な認証方法の上にもう 1 つのセキュリティーレイヤーを追加するものです。そのセキュリティーは、外部の通信チャネルを通じてセキュアに配布された暗号的に強力な鍵の使用に依存します。
6.3. raw RSA 鍵認証を使用した IPsec ホスト間 VPN の手動設定 リンクのコピーリンクがクリップボードにコピーされました!
ホスト間 VPN は、2 つのデバイス間に直接的でセキュアな暗号化された接続を確立し、アプリケーションがインターネットなどのセキュアでないネットワーク経由でセキュアに通信できるようにします。
認証に関しては、RSA 鍵は事前共有鍵 (PSK) よりもセキュアです。非対称暗号化によって秘密情報共有のリスクが排除されるためです。また、RSA 鍵を使用すると、強力なピアツーピア認証を提供しつつも、認証局 (CA) が不要になるため、デプロイが容易になります。
両方のホストで次の手順を実行してください。
手順
Libreswan がまだインストールされていない場合は、次の手順を実行します。
libreswan
パッケージをインストールします。dnf install libreswan
# dnf install libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワークセキュリティーサービス (NSS) データベースを初期化します。
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、
/var/lib/ipsec/nss/
ディレクトリーにデータベースが作成されます。ipsec
サービスを有効にして起動します。systemctl enable --now ipsec
# systemctl enable --now ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイアウォールで IPsec ポートとプロトコルを開きます。
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
RSA 鍵ペアを作成します。
ipsec newhostkey
# ipsec newhostkey
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
ユーティリティーにより、鍵ペアが NSS データベースに保存されます。- ピアを指定します。IPsec トンネルでは、一方のホストを left に、もう一方のホストを right に指定する必要があります。これは任意に選択できます。一般的には、ローカルホストを left、リモートホストを right と呼びます。
left と right 両方のピアの Certificate Key Attribute ID (CKAID) を表示します。
ipsec showhostkey --list
# ipsec showhostkey --list < 1> RSA keyid: <key_id> ckaid: <ckaid>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以降のステップで、両方のピアの CKAID が必要になります。
公開鍵を表示します。
left ピアで次のように入力します。
ipsec showhostkey --left --ckaid <ckaid_of_left_peer>
# ipsec showhostkey --left --ckaid <ckaid_of_left_peer> # rsakey AwEAAdKCx leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow right ピアで次のように入力します。
ipsec showhostkey --right --ckaid <ckaid_of_right_peer>
# ipsec showhostkey --right --ckaid <ckaid_of_right_peer> # rsakey AwEAAcNWC rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
これらのコマンドにより、設定ファイルで使用する必要がある対応するパラメーターとともに、公開鍵が表示されます。
/etc/ipsec.d/
ディレクトリーに接続用の.conf
ファイルを作成します。たとえば、次の設定で/etc/ipsec.d/host-to-host.conf
ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記両方のホストで同じ設定ファイルを使用できます。Libreswan は内部情報を使用して、自身が left ホストで動作しているか、right ホストで動作しているかを識別します。ただし、
left*
パラメーターのすべての値が一方のピアに属し、right*
パラメーターの値がもう一方のピアに属することが重要です。この例で指定されている設定は次のとおりです。
conn <connection_name>
- 接続名を定義します。名前は任意であり、Libreswan はこれを使用して接続を識別します。この接続のパラメーターは、少なくとも 1 つのスペースまたはタブでインデントする必要があります。
auto=<type>
-
接続の開始方法を制御します。値を
start
に設定すると、Libreswan はサービスの起動時に自動的に接続をアクティブ化します。 authby=rsasig
- この接続に対して RSA 署名認証を有効にします。
left=<ip_address_or_fqdn_of_left_peer>
およびright=<ip_address_or_fqdn_of_right_peer>
- ピアの IP アドレスまたは DNS 名を定義します。
leftid=<id>
およびrightid=<id>
-
Internet Key Exchange (IKE) ネゴシエーションプロセス中に各ピアを識別する方法を定義します。これには、完全修飾ドメイン名 (FQDN)、IP アドレス、またはリテラル文字列を使用できます。後者の場合、文字列の前に
@
記号を付けます。 leftrsasigkey=<public_key>
およびrightrsasigkey=<public_key>
-
ピアの公開鍵を指定します。前のステップで
ipsec showhostkey
コマンドによって表示された値を使用します。
ipsec
サービスを再起動します。systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 設定ファイルで
auto=start
を使用すると、接続が自動的にアクティブになります。他の方法の場合、接続をアクティブ化するために追加の手順が必要です。詳細は、システム上のipsec.conf(5)
man ページを参照してください。
検証
IPsec ステータスを表示します。
ipsec status
# ipsec status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続が正常に確立されていれば、出力に次の行が含まれています。
Internet Key Exchange バージョン 2 (IKEv2) ネゴシエーションのフェーズ 1 が正常に完了しています。
000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これで、セキュリティーアソシエーション (SA) が、実際のデータ暗号化トンネル (子 SA またはフェーズ 2 SA と呼ばれる) をネゴシエートする準備が整いました。
子 SA が確立されています。
000 #2: "<connection_name>":500 STATE_V2_ESTABLISHED_CHILD_SA (established Child SA); REKEY in 27671s; REPLACE in 28610s; IKE SA #1; idle;
000 #2: "<connection_name>":500 STATE_V2_ESTABLISHED_CHILD_SA (established Child SA); REKEY in 27671s; REPLACE in 28610s; IKE SA #1; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、データトラフィックが通過する実際のトンネルです。
次のステップ
- DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策は、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
6.4. raw RSA 鍵認証を使用した IPsec サイト間 VPN の手動設定 リンクのコピーリンクがクリップボードにコピーされました!
サイト間 VPN は、2 つの異なるネットワーク間にセキュアな暗号化トンネルを確立し、インターネットなどのセキュアでないパブリックネットワークを介してそれらをシームレスにリンクします。たとえば、これにより、支社のデバイスがすべて同じローカルネットワークの一部であるかのように、企業本社のリソースにアクセスできるようになります。
ゲートウェイデバイスの認証に関しては、RSA 鍵は事前共有鍵 (PSK) よりもセキュアです。非対称暗号化によって秘密情報共有のリスクが排除されるためです。また、RSA 鍵を使用すると、強力なピアツーピア認証を提供しつつも、認証局 (CA) が不要になるため、デプロイが容易になります。
両方のゲートウェイデバイスで次の手順を実行してください。
前提条件
- 両方のネットワークのルートにより、リモートネットワークへのトラフィックがローカル VPN ゲートウェイデバイスを介して送信されるようになっている。
手順
Libreswan がまだインストールされていない場合は、次の手順を実行します。
libreswan
パッケージをインストールします。dnf install libreswan
# dnf install libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワークセキュリティーサービス (NSS) データベースを初期化します。
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、
/var/lib/ipsec/nss/
ディレクトリーにデータベースが作成されます。ipsec
サービスを有効にして起動します。systemctl enable --now ipsec
# systemctl enable --now ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイアウォールで IPsec ポートとプロトコルを開きます。
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
RSA 鍵ペアを作成します。
ipsec newhostkey
# ipsec newhostkey
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
ユーティリティーにより、鍵ペアが NSS データベースに保存されます。- ピアを指定します。IPsec トンネルでは、一方のホストを left に、もう一方のホストを right に指定する必要があります。これは任意に選択できます。一般的には、ローカルホストを left、リモートホストを right と呼びます。
left と right 両方のピアの Certificate Key Attribute ID (CKAID) を表示します。
ipsec showhostkey --list
# ipsec showhostkey --list < 1> RSA keyid: <key_id> ckaid: <ckaid>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以降のステップで、両方のピアの CKAID が必要になります。
公開鍵を表示します。
left ピアで次のように入力します。
ipsec showhostkey --left --ckaid <ckaid_of_left_peer>
# ipsec showhostkey --left --ckaid <ckaid_of_left_peer> # rsakey AwEAAdKCx leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow right ピアで次のように入力します。
ipsec showhostkey --right --ckaid <ckaid_of_right_peer>
# ipsec showhostkey --right --ckaid <ckaid_of_right_peer> # rsakey AwEAAcNWC rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
これらのコマンドにより、設定ファイルで使用する必要がある対応するパラメーターとともに、公開鍵が表示されます。
/etc/ipsec.d/
ディレクトリーに接続用の.conf
ファイルを作成します。たとえば、次の設定で/etc/ipsec.d/site-to-site.conf
ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記両方のゲートウェイデバイスで同じ設定ファイルを使用できます。Libreswan は内部情報を使用して、自身が left ホストで動作しているか、right ホストで動作しているかを識別します。ただし、
left*
パラメーターのすべての値が一方のピアに属し、right*
パラメーターの値がもう一方のピアに属することが重要です。この例で指定されている設定は次のとおりです。
conn <connection_name>
- 接続名を定義します。名前は任意であり、Libreswan はこれを使用して接続を識別します。この接続のパラメーターは、少なくとも 1 つのスペースまたはタブでインデントする必要があります。
auto=<type>
-
接続の開始方法を制御します。値を
start
に設定すると、Libreswan はサービスの起動時に自動的に接続をアクティブ化します。 authby=rsasig
- この接続に対して RSA 署名認証を有効にします。
left=<ip_address_or_fqdn_of_left_peer>
およびright=<ip_address_or_fqdn_of_right_peer>
- ピアの IP アドレスまたは DNS 名を定義します。
leftid=<id>
およびrightid=<id>
-
Internet Key Exchange (IKE) ネゴシエーションプロセス中に各ピアを識別する方法を定義します。これには、完全修飾ドメイン名 (FQDN)、IP アドレス、またはリテラル文字列を使用できます。後者の場合、文字列の前に
@
記号を付けます。 leftrsasigkey=<public_key>
およびrightrsasigkey=<public_key>
-
ピアの公開鍵を指定します。前のステップで
ipsec showhostkey
コマンドによって表示された値を使用します。 leftsubnet=<subnet>
およびrightsubnet=<subnet>
- トンネルを介して接続されるサブネットを Classless Inter-Domain Routing (CIDR) 形式で定義します。片側で複数のサブネットをトンネリングする場合は、それらを中括弧で囲み、コンマで区切って指定します。
パケット転送を有効にします。
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! Toggle word wrap Toggle overflow ipsec
サービスを再起動します。systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 設定ファイルで
auto=start
を使用すると、接続が自動的にアクティブになります。他の方法の場合、接続をアクティブ化するために追加の手順が必要です。詳細は、システム上のipsec.conf(5)
man ページを参照してください。
検証
IPsec ステータスを表示します。
ipsec status
# ipsec status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続が正常に確立されていれば、出力に次の行が含まれています。
Internet Key Exchange バージョン 2 (IKEv2) ネゴシエーションのフェーズ 1 が正常に完了しています。
#2: "<connection_name>":500 ESTABLISHED_IKE_SA (established IKE SA); REKEY in 28523s; REPLACE in 28793s; newest; idle;
#2: "<connection_name>":500 ESTABLISHED_IKE_SA (established IKE SA); REKEY in 28523s; REPLACE in 28793s; newest; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これで、セキュリティーアソシエーション (SA) が、実際のデータ暗号化トンネル (子 SA またはフェーズ 2 SA と呼ばれる) をネゴシエートする準備が整いました。
子 SA が確立されています。
#3: "<connection_name>":500 ESTABLISHED_CHILD_SA (established Child SA); REKEY in 28523s; REPLACE in 28793s; newest; eroute owner; IKE SA #2; idle;
#3: "<connection_name>":500 ESTABLISHED_CHILD_SA (established Child SA); REKEY in 28523s; REPLACE in 28793s; newest; eroute owner; IKE SA #2; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、データトラフィックが通過する実際のトンネルです。
- ローカルサブネット内のクライアントから、リモートサブネット内のクライアントに ping を実行します。
次のステップ
- DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策は、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
6.5. 証明書ベースの認証を使用した IPsec ホスト/サイト間 VPN の手動設定 リンクのコピーリンクがクリップボードにコピーされました!
ホスト/サイト間 VPN は、個々のリモートコンピューターとプライベートネットワークの間にセキュアで暗号化された接続を確立し、インターネットなどのセキュアでないパブリックネットワークを介してそれらをシームレスにリンクできるようにします。これは、物理的にオフィスにいるかのように、自分のコンピューターから会社の内部ネットワーク上のリソースにアクセスする必要があるリモート従業員に最適です。
認証のために、認証局 (CA) によって管理されるデジタル証明書を使用すると、非常にセキュアでスケーラブルなソリューションが実現します。接続元ホストとゲートウェイが、それぞれ信頼できる CA によって署名された証明書を提示します。この方法により、強力で検証可能な認証が実現し、ユーザー管理が簡素化されます。アクセス権の付与または失効は、CA で一元的に行うことができます。Libreswan は、各証明書を証明書失効リスト (CRL) と照合し、証明書がリストに掲載されていればアクセスを拒否することで、付与や失効を強制します。
6.5.1. IPsec ゲートウェイの手動設定 リンクのコピーリンクがクリップボードにコピーされました!
セキュアなリモートアクセスを可能にするには、Libreswan IPsec ゲートウェイを適切に設定する必要があります。Libreswan は、ネットワークセキュリティーサービス (NSS) データベースからサーバー証明書、秘密鍵、および CA 証明書を読み取ります。
次の例では、認証されたクライアントが内部 192.0.2.0/24 サブネットにアクセスすることを許可し、仮想 IP プールから各クライアントに IP アドレスを動的に割り当てます。セキュリティーを維持するために、ゲートウェイはクライアント証明書が同じ信頼できる CA によって発行されていることを確認し、失効した証明書へのアクセスが拒否されるように、証明書失効リスト (CRL) を自動的に使用します。
前提条件
ゲートウェイに、次の内容を含む公開鍵暗号化標準 #12 (PKCS #12) ファイル
~/file.p12
が存在する。- サーバーの秘密鍵
- サーバー証明書
- CA 証明書
- 中間証明書 (必要な場合)
秘密鍵および証明書署名要求 (CSR) の作成や、CA からの証明書要求に関する詳細は、CA のドキュメントを参照してください。
サーバー証明書には次のフィールドを含めます。
-
Extended Key Usage (EKU) を
TLS Web Server Authentication
に設定します。 - コモンネーム (CN) またはサブジェクト代替名 (SAN) を、ゲートウェイの完全修飾ドメイン名 (FQDN) に設定します。
- X509v3 CRL 配布ポイントに、証明書失効リスト (CRL) への URL を含めます。
-
Extended Key Usage (EKU) を
- VPN クライアントトラフィックの戻りのルートが、VPN ゲートウェイを指すように内部ネットワーク上に設定されている。
手順
Libreswan がまだインストールされていない場合は、以下を実行します。
libreswan
パッケージをインストールします。dnf install libreswan
# dnf install libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワークセキュリティーサービス (NSS) データベースを初期化します。
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、
/var/lib/ipsec/nss/
ディレクトリーにデータベースが作成されます。ipsec
サービスを有効にして起動します。systemctl enable --now ipsec
# systemctl enable --now ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイアウォールで IPsec ポートとプロトコルを開きます。
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
PKCS #12 ファイルを NSS データベースにインポートします。
ipsec import ~/file.p12
# ipsec import ~/file.p12 Enter password for PKCS12 file: <password> pk12util: PKCS12 IMPORT SUCCESSFUL correcting trust bits for Example-CA
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーと CA 証明書のニックネームを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この情報は設定ファイルに必要です。
/etc/ipsec.d/
ディレクトリーに接続用の.conf
ファイルを作成します。たとえば、次の設定で/etc/ipsec.d/host-to-site.conf
ファイルを作成します。CRL チェックを有効にするために、
config setup
セクションを追加します。config setup crl-strict=yes crlcheckinterval=1h
config setup crl-strict=yes crlcheckinterval=1h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例で指定されている設定は次のとおりです。
crl-strict=yes
- CRL チェックを有効にします。NSS データベース内で CRL が利用できない場合、認証中のクライアントが拒否されます。
crlcheckinterval=1h
- 指定期間後に、サーバーの証明書に指定された URL から CRL を再取得します。
ゲートウェイのセクションを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例で指定されている設定は次のとおりです。
ikev2=insist
- 最新の IKEv2 プロトコルを、IKEv1 へのフォールバックなしで、唯一許可されるプロトコルとして定義します。
left=%defaultroute
-
ipsec
サービスの起動時に、デフォルトルートインターフェイスの IP アドレスを動的に設定します。left
パラメーターは、ホストの IP アドレスまたは FQDN に設定することもできます。 leftid=%fromcert
およびrightid=%fromcert
- 証明書の識別名 (DN) フィールドからアイデンティティーを取得するように Libreswan を設定します。
leftcert="<server_certificate_nickname>"
- NSS データベースで使用されるサーバーの証明書のニックネームを設定します。
leftrsasigkey=%cert
およびrightrsasigkey=%cert
- 証明書に埋め込まれた RSA 公開鍵を使用するように Libreswan を設定します。
leftsendcert=always
- クライアントが CA 証明書に照らして証明書を検証できるように、ゲートウェイに証明書を常に送信するように指示します。
leftsubnet=<subnets>
- クライアントがトンネル経由でアクセスできるゲートウェイに接続されているサブネットを指定します。
mobike=yes
- クライアントがネットワーク間をシームレスにローミングできるようにします。
rightaddresspool=<ip_range>
- ゲートウェイがクライアントに IP アドレスを割り当てることができる範囲を指定します。
modecfgclient=yes
-
クライアントが
modecfgdns
パラメーターで設定された DNS サーバー IP とmodecfgdomains
で設定された DNS 検索ドメインを受信できるようにします。
例で使用されているすべてのパラメーターの詳細は、システム上の
ipsec.conf(5)
man ページを参照してください。パケット転送を有効にします。
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! Toggle word wrap Toggle overflow ipsec
サービスを再起動します。systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 設定ファイルで
auto=start
を使用すると、接続が自動的にアクティブになります。他の方法の場合、接続をアクティブ化するために追加の手順が必要です。詳細は、システム上のipsec.conf(5)
man ページを参照してください。
検証
- クライアントを設定し、VPN ゲートウェイに接続します。
サービスが CRL をロードし、エントリーを NSS データベースに追加したかどうかを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のステップ:
- クライアントが必要なリソースとのみ通信できるようにファイアウォールルールを設定します。ファイアウォールの詳細は、ファイアウォールおよびパケットフィルターの設定 を参照してください。
6.5.2. GNOME Settings を使用してクライアントを IPsec VPN ゲートウェイに接続するように設定する リンクのコピーリンクがクリップボードにコピーされました!
リモートのプライベートネットワーク上のリソースにアクセスするには、ユーザーはまず IPsec VPN 接続を設定する必要があります。GNOME Settings アプリケーションは、NetworkManager で IPsec VPN 接続プロファイルを作成し、トンネルを確立するためのグラフィカルなソリューションです。
前提条件
- IPsec VPN ゲートウェイが設定されている。
-
NetworkManager-libreswan-gnome
パッケージがインストールされている。 クライアントに、次の内容を含む PKCS #12 ファイル
~/file.p12
が存在する。- ユーザーの秘密鍵
- ユーザー証明書
- CA 証明書
- 中間証明書 (必要な場合)
秘密鍵および証明書署名要求 (CSR) の作成や、CA からの証明書要求に関する詳細は、CA のドキュメントを参照してください。
-
証明書の Extended Key Usage (EKU) が
TLS Web Client Authentication
に設定されている。
手順
ネットワークセキュリティーサービス (NSS) データベースを初期化します。
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、
/var/lib/ipsec/nss/
ディレクトリーにデータベースが作成されます。PKCS #12 ファイルを NSS データベースにインポートします。
ipsec import ~/file.p12
# ipsec import ~/file.p12 Enter password for PKCS12 file: <password> pk12util: PKCS12 IMPORT SUCCESSFUL correcting trust bits for Example-CA
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザーのニックネームと CA 証明書を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この情報は設定ファイルに必要です。
- Super キーを押して Settings と入力し、Enter キーを押して GNOME Settings アプリケーションを開きます。
- VPN エントリーの横にある ボタンをクリックします。
- リストから IPsec based VPN を選択します。
Identity タブで、次のようにフィールドに入力します。
Expand 表6.1 Identity タブの設定 フィールド名 値 ipsec.conf
の対応するパラメーターName
<networkmanager_profile_name>
該当なし
Gateway
<ip_address_or_fqdn_of_the_gateway>
right
Type
IKEv2 (certificate)
authby
Group name
%fromcert
leftid
Certificate name
<user_certificate_nickname>
leftcert
Remote ID
%fromcert
rightid
- Advanced をクリックします。
Advanced properties ウィンドウで、Connectivity タブのフィールドに次のように入力します。
Expand 表6.2 Connectivity タブの設定 フィールド名 値 ipsec.conf
の対応するパラメーターRemote Network
192.0.2.0/24
rightsubnet
Narrowing
選択済み
narrowing
Enable MOBIKE
yes
mobike
Delay
30
dpddelay
Timeout
120
dpdtimeout
Action
Clear
dpdaction
- をクリックして接続設定に戻ります。
- をクリックして接続を保存します。
- Settings アプリケーションの Network タブで、VPN プロファイルの横にあるスイッチを切り替えて接続を有効にします。
検証
- リモートネットワーク内のホストへの接続を確立するか、ping を実行します。
次のステップ
- DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策は、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
6.6. 証明書ベースの認証を使用した IPsec メッシュ VPN の手動設定 リンクのコピーリンクがクリップボードにコピーされました!
IPsec メッシュは、すべてのサーバーが他のすべてのサーバーとセキュアに直接通信できる、完全に相互接続されたネットワークを形成するものです。これは、複数のデータセンターやクラウドプロバイダーにまたがる分散データベースクラスターや高可用性環境に最適です。各サーバーペア間に暗号化されたトンネルを直接確立することで、通信の集中によるボトルネックを避けつつ、セキュアな通信を実現できます。
認証のために、認証局 (CA) によって管理されるデジタル証明書を使用すると、非常にセキュアでスケーラブルなソリューションが実現します。メッシュ内のホストが、それぞれ信頼できる CA によって署名された証明書を提示します。この方法により、強力で検証可能な認証が実現し、ユーザー管理が簡素化されます。アクセス権の付与または失効は、CA で一元的に行うことができます。Libreswan は、各証明書を証明書失効リスト (CRL) と照合し、証明書がリストに掲載されていればアクセスを拒否することで、付与や失効を強制します。
前提条件
メッシュ内の各ピアに、次の内容を含む公開鍵暗号化標準 #12 (PKCS #12) ファイルが存在する。
- サーバーの秘密鍵
- サーバー証明書
- CA 証明書
- 中間証明書 (必要な場合)
秘密鍵および証明書署名要求 (CSR) の作成や、CA からの証明書要求に関する詳細は、CA のドキュメントを参照してください。
サーバー証明書には次のフィールドを含めます。
-
Extended Key Usage (EKU) を
TLS Web Server Authentication
に設定します。 - コモンネーム (CN) またはサブジェクト代替名 (SAN) を、ホストの完全修飾ドメイン名 (FQDN) に設定します。
- X509v3 CRL 配布ポイントに、証明書失効リスト (CRL) への URL を含めます。
-
Extended Key Usage (EKU) を
手順
Libreswan がまだインストールされていない場合は、次の手順を実行します。
libreswan
パッケージをインストールします。dnf install libreswan
# dnf install libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワークセキュリティーサービス (NSS) データベースを初期化します。
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、
/var/lib/ipsec/nss/
ディレクトリーにデータベースが作成されます。ipsec
サービスを有効にして起動します。systemctl enable --now ipsec
# systemctl enable --now ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイアウォールで IPsec ポートとプロトコルを開きます。
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
PKCS #12 ファイルを NSS データベースにインポートします。
ipsec import <file>.p12
# ipsec import <file>.p12 Enter password for PKCS12 file: <password> pk12util: PKCS12 IMPORT SUCCESSFUL correcting trust bits for Example-CA
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーと CA 証明書のニックネームを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この情報は設定ファイルに必要です。
/etc/ipsec.d/
ディレクトリーに接続用の.conf
ファイルを作成します。たとえば、次の設定で/etc/ipsec.d/mesh.conf
ファイルを作成します。CRL チェックを有効にするために、
config setup
セクションを追加します。config setup crl-strict=yes crlcheckinterval=1h
config setup crl-strict=yes crlcheckinterval=1h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例で指定されている設定は次のとおりです。
crl-strict=yes
- CRL チェックを有効にします。NSS データベース内で CRL が利用できない場合、認証中のピアが拒否されます。
crlcheckinterval=1h
- 指定期間後に、サーバーの証明書に指定された URL から CRL を再取得します。
メッシュ内のメンバー間のトラフィックを強制的に制御するセクションを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例で指定されている設定は次のとおりです。
left=%defaultroute
-
ipsec
サービスの起動時に、デフォルトルートインターフェイスの IP アドレスを動的に設定します。left
パラメーターは、ホストの IP アドレスまたは FQDN に設定することもできます。 leftid=%fromcert
およびrightid=%fromcert
- 証明書の識別名 (DN) フィールドからアイデンティティーを取得するように Libreswan を設定します。
leftcert="<server_certificate_nickname>"
- NSS データベースで使用されるサーバーの証明書のニックネームを設定します。
leftrsasigkey=%cert
- 証明書に埋め込まれた RSA 公開鍵を使用するように Libreswan を設定します。
leftsendcert=always
- ピアが CA 証明書に照らして証明書を検証できるように、ピアに証明書を常に送信するように指示します。
failureshunt=drop
- 暗号化を強制し、IPsec ネゴシエーションが失敗した場合はトラフィックを破棄します。これはメッシュのセキュリティーにとって重要です。
right=%opportunisticgroup
- ポリシーファイルで定義されているリモートピアの動的グループに接続を適用することを指定します。これにより、Libreswan は、そのグループにリストされている各 IP またはサブネットに対して、必要に応じて IPsec トンネルをインスタンス化できるようになります。
例で使用されているすべてのパラメーターの詳細は、システム上の
ipsec.conf(5)
man ページを参照してください。Classless Inter-Domain Routing (CIDR) 形式でピアまたはサブネットを指定する
/etc/ipsec.d/policies/server-mesh
ポリシーファイルを作成します。192.0.2.0/24 198.51.100.0/24
192.0.2.0/24 198.51.100.0/24
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの設定により、これらのサブネット内のホスト間トラフィックが
ipsec
サービスによって暗号化されます。ホストが IPsec メッシュのメンバーとして設定されていない場合、このホストとメッシュメンバー間の通信が失敗します。ipsec
サービスを再起動します。systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ポリシーファイルで指定したサブネット内のすべてのホストでこの手順を繰り返します。
検証
メッシュ内のホストにトラフィックを送信してトンネルを確立します。たとえば、ホストに ping を実行します。
ping -c3 <peer_in_mesh>
# ping -c3 <peer_in_mesh>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPsec ステータスを表示します。
ipsec status
# ipsec status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続が正常に確立されていれば、ピアに関する次の行が出力に含まれています。
Internet Key Exchange バージョン 2 (IKEv2) ネゴシエーションのフェーズ 1 が正常に完了しています。
#1: "<connection_name>#192.0.2.0/24"[1] ...192.0.2.2:500 ESTABLISHED_IKE_SA (established IKE SA); REKEY in 12822s; REPLACE in 13875s; newest; idle;
#1: "<connection_name>#192.0.2.0/24"[1] ...192.0.2.2:500 ESTABLISHED_IKE_SA (established IKE SA); REKEY in 12822s; REPLACE in 13875s; newest; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これで、セキュリティーアソシエーション (SA) が、実際のデータ暗号化トンネル (子 SA またはフェーズ 2 SA と呼ばれる) をネゴシエートする準備が整いました。
子 SA が確立されています。
#2: "<connection_name>#192.0.2.0/24"[1] ...192.0.2.2:500 ESTABLISHED_CHILD_SA (established Child SA); REKEY in 13071s; REPLACE in 13875s; newest; eroute owner; IKE SA #1; idle;
#2: "<connection_name>#192.0.2.0/24"[1] ...192.0.2.2:500 ESTABLISHED_CHILD_SA (established Child SA); REKEY in 13071s; REPLACE in 13875s; newest; eroute owner; IKE SA #1; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、データトラフィックが通過する実際のトンネルです。
サービスが CRL をロードし、エントリーを NSS データベースに追加したかどうかを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のステップ
- DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策は、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
6.7. パスワードによる IPsec NSS データベースの保護 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、/var/lib/ipsec/nss/
ディレクトリー内の IPsec ネットワークセキュリティーサービス (NSS) データベースにアクセスできるのは root ユーザーのみです。必要に応じこのデータベースをパスワードでさらに保護することもできます。たとえば、これは RHEL を Federal Information Processing Standards (FIPS) モードで実行する場合に必要です。
前提条件
-
/var/lib/ipsec/nss/
ディレクトリーに NSS データベースが含まれている。
手順
Libreswan NSS データベースのパスワード保護を有効にします。
certutil -W -d /var/lib/ipsec/nss/
# certutil -W -d /var/lib/ipsec/nss/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 現在のパスワードを入力します。
Enter Password or Pin for "NSS Certificate DB": <password>
Enter Password or Pin for "NSS Certificate DB": <password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 現在データベースがパスワードで保護されていない場合は、Enter を押します。
新しいパスワードを入力します。
Enter new password: <new_password> Re-enter password: <new_password>
Enter new password: <new_password> Re-enter password: <new_password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow データベースのロックを解除するために、
ipsec
サービスに/etc/ipsec.d/nsspassword
ファイルが必要です。次の内容のファイルを作成します。ホストが FIPS モードで実行されていない場合:
NSS Certificate DB:<password>
NSS Certificate DB:<password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストが FIPS モードで実行されている場合:
NSS FIPS 140-2 Certificate DB:<password>
NSS FIPS 140-2 Certificate DB:<password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
/etc/ipsec.d/nsspassword
ファイルにセキュアな権限を設定します。chmod 600 /etc/ipsec.d/nsspassword chown root:root /etc/ipsec.d/nsspassword
# chmod 600 /etc/ipsec.d/nsspassword # chown root:root /etc/ipsec.d/nsspassword
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
サービスを再起動します。systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ipsec
サービスが実行されていることを確認します。systemctl is-active ipsec
# systemctl is-active ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドで
active
が返された場合、サービスはパスワードファイルを使用して NSS データベースのロックを正常に解除します。NSS データベースでパスワードを必要とするアクションを実行します。たとえば、秘密鍵を表示します。
certutil -K -d /var/lib/ipsec/nss/
# certutil -K -d /var/lib/ipsec/nss/ certutil: Checking token "NSS Certificate DB" in slot "NSS User Private Key and Certificate Services" Enter Password or Pin for "NSS Certificate DB":
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドによってパスワードが要求されることを確認します。
6.8. FIPS モードが有効なシステムでの IPsec の使用 リンクのコピーリンクがクリップボードにコピーされました!
Federal Information Processing Standards (FIPS) モードの RHEL は、FIPS 140-2 または FIPS 140-3 で検証された暗号化モジュールのみを使用し、レガシーのプロトコルと暗号を自動的に無効にします。FIPS モードの有効化は、多くの場合、連邦政府のコンプライアンス要件として求められ、有効にすることでシステムのセキュリティーが強化されます。
RHEL が提供する Libreswan の IPsec 実装は、完全に FIPS に準拠しています。システムが FIPS モードの場合、Libreswan は追加の設定を必要とせずに、認定済みの暗号化モジュールを自動的に使用します。これは、新しい FIPS 対応システムに Libreswan をインストールする場合でも、既存の Libreswan VPN があるシステムで FIPS モードを有効にする場合でも同様です。
FIPS モードが有効な場合は、Libreswan が FIPS モードで実行されていることを確認できます。
ipsec whack --fipsstatus
# ipsec whack --fipsstatus
FIPS mode enabled
FIPS モードの Libreswan で許可されているアルゴリズムと暗号をリスト表示するには、次のように入力します。
6.9. IPsec VPN 接続の TCP フォールバックの設定 リンクのコピーリンクがクリップボードにコピーされました!
標準の IPsec VPN は、UDP および Encapsulating Security Payload (ESP) プロトコルをブロックする制限付きネットワークでは、失敗する場合があります。このような環境での接続性を確保するために、Libreswan は RFC 8229 で説明されている方法を使用して、すべての VPN トラフィックを TCP 接続内にカプセル化できます。
VPN パケットを TCP 内にカプセル化すると、スループットが低下し、レイテンシーが増加する可能性があります。このため、TCP カプセル化はフォールバックオプションとして使用するか、UDP ベースの接続が環境内で一貫してブロックされている場合にのみ使用してください。
前提条件
- IPsec 接続が設定されている。
手順
/etc/ipsec.conf
ファイルを編集し、config setup
セクションで次の変更を加えます。TCP ポートをリッスンするように Libreswan を設定します。
listen-tcp=yes
listen-tcp=yes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、Libreswan はポート 4500 をリッスンします。別のポートを使用する場合は、次のように入力します。
tcp-remoteport=<port_number>
tcp-remoteport=<port_number>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow UDP が利用できない場合に TCP をフォールバックオプションとして使用するか、TCP を永続的に使用するかを決定します。
フォールバックオプションとして使用するには、次のように入力します。
enable-tcp=fallback retransmit-timeout=5s
enable-tcp=fallback retransmit-timeout=5s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、Libreswan は UDP を使用した接続の試行が失敗した後、TCP 経由の接続を再試行するまで 60 秒間待機します。
retransmit-timeout
値を下げると遅延が短縮され、フォールバックプロトコルをより迅速に開始できるようになります。UDP の代わりに永続的に使用するには、次のように入力します。
enable-tcp=yes
enable-tcp=yes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ipsec
サービスを再起動します。systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトの 4500 以外の TCP ポートを設定した場合は、ファイアウォールでそのポートを開きます。
firewall-cmd --permanent --add-port=<tcp_port>/tcp firewall-cmd --reload
# firewall-cmd --permanent --add-port=<tcp_port>/tcp # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - このゲートウェイを使用する各ピアでこの手順を繰り返します。
6.10. Libreswan でのレガシー暗号およびアルゴリズムの有効化 リンクのコピーリンクがクリップボードにコピーされました!
RHEL はシステム全体の暗号化ポリシーを使用して、Libreswan を含むすべてのアプリケーションに対して一貫性のあるセキュアなベースラインを適用します。このポリシーにより、IPsec と Internet Key Exchange (IKE) で、強力で最新の暗号化暗号とアルゴリズムのみがデフォルトで使用されるようになります。しかし、場合によっては、他の IPsec ピアとの下位互換性を保つために、セキュリティーを意図的に下げる必要があります。
RHEL のシステム全体の暗号化ポリシーでは、%default
と呼ばれる特別な接続が作成されます。この接続により、keyexchange
、esp
、および ike
パラメーターのデフォルト値が設定されます。
前提条件
- Libreswan がインストールされている。
手順
RHEL システム全体の暗号化ポリシーによって設定されたデフォルトをオーバーライドするには、接続設定に
keyexchange
、esp
、およびike
パラメーターを追加し、必要な値に設定します。以下に例を示します。conn <connection_name> keyexchange=ikev1 ike=aes-sha2,aes-sha1;modp2048 esp=aes-sha2,aes-sha1 ...
conn <connection_name> keyexchange=ikev1 ike=aes-sha2,aes-sha1;modp2048 esp=aes-sha2,aes-sha1 ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
サービスを再起動します。systemctl restart ipsec
# systemctl restart ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.11. 接続がトンネルを回避しないように 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! Toggle word wrap Toggle overflow 上記のコマンドで使用したテーブルに低い優先度値を設定します。
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! Toggle word wrap Toggle overflow 優先度の値は 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! Toggle word wrap Toggle overflow
検証
テーブル 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! Toggle word wrap Toggle overflow この出力から、リモートネットワークへのルートとデフォルトゲートウェイの両方がルーティングテーブル 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! Toggle word wrap Toggle overflow この出力から、リモートネットワークへのルートとデフォルトゲートウェイの両方がルーティングテーブル 75 に割り当てられており、すべてのトラフィックがトンネルを介してルーティングされることを確認できます。VPN 接続プロファイルで
ipv6.never-default true
を設定すると、デフォルトルートが作成されず、この出力には表示されません。
6.12. RHEL システムロールを使用した IPsec VPN 接続の設定 リンクのコピーリンクがクリップボードにコピーされました!
仮想プライベートネットワーク (VPN) を使用すると、インターネットなどの信頼できないネットワーク上で、セキュアで暗号化されたトンネルを確立できます。このようなトンネルにより、転送中のデータの機密性と整合性が確保されます。一般的なユースケースとしては、支社と本社を接続することなどが挙げられます。
vpn
RHEL システムロールを使用すると、Libreswan IPsec VPN 設定の作成プロセスを自動化できます。
vpn
RHEL システムロールで作成できるのは、事前共有鍵 (PSK) または証明書を使用してピアを相互に認証する VPN 設定だけです。
6.12.1. vpn RHEL システムロールを使用して PSK 認証による IPsec ホスト間 VPN を設定する リンクのコピーリンクがクリップボードにコピーされました!
ホスト間 VPN は、2 つのデバイス間に直接的でセキュアな暗号化された接続を確立し、アプリケーションがインターネットなどのセキュアでないネットワーク経由でセキュアに通信できるようにします。
認証には、事前共有鍵 (PSK) というシンプルな方式が使用されます。この方式では、2 つのピア間のみで共有される 1 つの秘密情報を使用します。この方式は設定が簡単で、デプロイの容易さが優先される基本的なセットアップに最適です。ただし、この鍵は厳重に保管する必要があります。攻撃者が鍵にアクセスすると、接続が侵害されるおそれがあります。
vpn
RHEL システムロールを使用すると、PSK 認証による IPsec ホスト間接続を作成するプロセスを自動化できます。デフォルトでは、このロールはトンネルベースの VPN を作成します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル 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! Toggle word wrap Toggle overflow このロールは、各管理対象ノード上の VPN 接続を設定します。接続の名前は
<peer_A>-to-<peer_B>
です (例:managed-node-01.example.com-to-managed-node-02.example.com
)。このロールは外部 (管理対象外) ノード上で Libreswan を設定することはできないことに注意してください。そのようなピアでは手動で設定を作成する必要があります。auth_method: psk
-
ピア間の PSK 認証を有効にします。ロールはコントロールノードで
openssl
を使用して PSK を作成します。 auto: <startup_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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
接続が正常に開始されたことを確認します。次に例を示します。
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! Toggle word wrap Toggle overflow このコマンドは、VPN 接続がアクティブでないと成功しないことに注意してください。Playbook 内の
auto
変数をstart
以外の値に設定する場合は、まず管理対象ノードで接続を手動でアクティブ化する必要がある場合があります。
6.12.2. vpn RHEL システムロールを使用して、個別のデータプレーンとコントロールプレーンおよび PSK 認証による IPsec ホスト間 VPN を設定する リンクのコピーリンクがクリップボードにコピーされました!
ホスト間 VPN は、2 つのデバイス間に直接的でセキュアな暗号化された接続を確立し、アプリケーションがインターネットなどのセキュアでないネットワーク経由でセキュアに通信できるようにします。
認証には、事前共有鍵 (PSK) というシンプルな方式が使用されます。この方式では、2 つのピア間のみで共有される 1 つの秘密情報を使用します。この方式は設定が簡単で、デプロイの容易さが優先される基本的なセットアップに最適です。ただし、この鍵は厳重に保管する必要があります。攻撃者が鍵にアクセスすると、接続が侵害されるおそれがあります。
たとえば、制御メッセージの傍受や妨害のリスクを最小限に抑えてセキュリティーを強化するために、データトラフィックと制御トラフィックの両方に個別の接続を設定できます。vpn
RHEL システムロールを使用すると、個別のデータプレーンとコントロールプレーンおよび PSK 認証を使用して IPsec ホスト間接続を作成するプロセスを自動化できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル 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: <startup_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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
接続が正常に開始されたことを確認します。次に例を示します。
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! Toggle word wrap Toggle overflow このコマンドは、VPN 接続がアクティブでないと成功しないことに注意してください。Playbook 内の
auto
変数をstart
以外の値に設定する場合は、まず管理対象ノードで接続を手動でアクティブ化する必要がある場合があります。
6.12.3. vpn RHEL システムロールを使用して PSK 認証による IPsec サイト間 VPN を設定する リンクのコピーリンクがクリップボードにコピーされました!
サイト間 VPN は、2 つの異なるネットワーク間にセキュアな暗号化トンネルを確立し、インターネットなどのセキュアでないパブリックネットワークを介してそれらをシームレスにリンクします。たとえば、これにより、支社のデバイスがすべて同じローカルネットワークの一部であるかのように、企業本社のリソースにアクセスできるようになります。
認証には、事前共有鍵 (PSK) というシンプルな方式が使用されます。この方式では、2 つのピア間のみで共有される 1 つの秘密情報を使用します。この方式は設定が簡単で、デプロイの容易さが優先される基本的なセットアップに最適です。ただし、この鍵は厳重に保管する必要があります。攻撃者が鍵にアクセスすると、接続が侵害されるおそれがあります。
vpn
RHEL システムロールを使用すると、PSK 認証による IPsec サイト間接続を作成するプロセスを自動化できます。デフォルトでは、このロールはトンネルベースの VPN を作成します。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル 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! Toggle word wrap Toggle overflow このロールは、各管理対象ノード上の VPN 接続を設定します。接続の名前は
<gateway_A>-to-<gateway_B>
です (例:managed-node-01.example.com-to-managed-node-02.example.com
)。このロールは外部 (管理対象外) ノード上で Libreswan を設定することはできないことに注意してください。そのようなピアでは手動で設定を作成する必要があります。subnets: <yaml_list_of_subnets>
- トンネルを介して接続されるサブネットを Classless Inter-Domain Routing (CIDR) 形式で定義します。
auth_method: psk
-
ピア間の PSK 認証を有効にします。ロールはコントロールノードで
openssl
を使用して PSK を作成します。 auto: <startup_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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
接続が正常に開始されたことを確認します。次に例を示します。
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! Toggle word wrap Toggle overflow このコマンドは、VPN 接続がアクティブでないと成功しないことに注意してください。Playbook 内の
auto
変数をstart
以外の値に設定する場合は、まず管理対象ノードで接続を手動でアクティブ化する必要がある場合があります。
6.12.4. vpn RHEL システムロールを使用して証明書ベースの認証による IPsec メッシュ VPN を設定する リンクのコピーリンクがクリップボードにコピーされました!
IPsec メッシュは、すべてのサーバーが他のすべてのサーバーとセキュアに直接通信できる、完全に相互接続されたネットワークを形成するものです。これは、複数のデータセンターやクラウドプロバイダーにまたがる分散データベースクラスターや高可用性環境に最適です。各サーバーペア間に暗号化されたトンネルを直接確立することで、通信の集中によるボトルネックを避けつつ、セキュアな通信を実現できます。
認証のために、認証局 (CA) によって管理されるデジタル証明書を使用すると、非常にセキュアでスケーラブルなソリューションが実現します。メッシュ内のホストが、それぞれ信頼できる CA によって署名された証明書を提示します。この方法により、強力で検証可能な認証が実現し、ユーザー管理が簡素化されます。アクセス権の付与または失効は、CA で一元的に行うことができます。Libreswan は、各証明書を証明書失効リスト (CRL) と照合し、証明書がリストに掲載されていればアクセスを拒否することで、付与や失効を強制します。
vpn
RHEL システムロールを使用すると、証明書ベースの認証による管理対象ノード間の VPN メッシュの設定を自動化できます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 各管理対象ノード用に PKCS #12 ファイルを用意した。
各ファイルには次のものを含めます。
- サーバーの秘密鍵
- サーバー証明書
- CA 証明書
- 中間証明書 (必要な場合)
-
ファイル名は
<managed_node_name_as_in_the_inventory>.p12
とします。 - ファイルは Playbook と同じディレクトリーに保存します。
サーバー証明書には次のフィールドを含めます。
-
Extended Key Usage (EKU) を
TLS Web Server Authentication
に設定します。 - コモンネーム (CN) またはサブジェクト代替名 (SAN) を、ホストの完全修飾ドメイン名 (FQDN) に設定します。
- X509v3 CRL 配布ポイントに、証明書失効リスト (CRL) への URL を含めます。
-
Extended Key Usage (EKU) を
手順
~/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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。pkcs12_pwd: <password>
pkcs12_pwd: <password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル 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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
メッシュ内のノードで、別のノードに ping を送信して接続をアクティブ化します。
ping managed-node-02.example.com
[root@managed-node-01]# ping managed-node-02.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続がアクティブであることを確認します。
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! Toggle word wrap Toggle overflow
6.13. nmstatectl を使用した IPsec VPN 接続の設定 リンクのコピーリンクがクリップボードにコピーされました!
仮想プライベートネットワーク (VPN) を使用すると、インターネットなどの信頼できないネットワーク上で、セキュアで暗号化されたトンネルを確立できます。このようなトンネルにより、転送中のデータの機密性と整合性が確保されます。一般的なユースケースとしては、支社と本社を接続することなどが挙げられます。
nmstatectl
ユーティリティーを使用すると、Nmstate API を介して Libreswan IPsec VPN 接続を設定できます。nmstatectl
ユーティリティーは、宣言型の Nmstate API を通じてホストネットワークを管理するためのコマンドラインツールです。ユーザーは複数の命令的なコマンドを実行してインターフェイスを設定するのではなく、YAML ファイルで目的の状態を定義します。Nmstate はこの定義を取得してシステムに適用します。このアプローチの主な利点は、アトミックな結果です。Nmstate は、最終的な設定を YAML 定義と正確に一致させます。設定の一部が適用に失敗した場合、すべての変更が自動的にロールバックされるため、システムで不適切なネットワーク状態や壊れたネットワーク状態が発生しません。
NetworkManager-libreswan
プラグインの設計上、nmstatectl
は一方のピアでのみ使用できます。他方のピアでは Libreswan を手動で設定する必要があります。
6.13.1. nmstatectl を使用して raw RSA 鍵認証による IPsec ホスト間 VPN を設定する リンクのコピーリンクがクリップボードにコピーされました!
ホスト間 VPN は、2 つのデバイス間に直接的でセキュアな暗号化された接続を確立し、アプリケーションがインターネットなどのセキュアでないネットワーク経由でセキュアに通信できるようにします。
認証に関しては、RSA 鍵は事前共有鍵 (PSK) よりもセキュアです。非対称暗号化によって秘密情報共有のリスクが排除されるためです。また、RSA 鍵を使用すると、強力なピアツーピア認証を提供しつつも、認証局 (CA) が不要になるため、デプロイが容易になります。
Nmstate API を使用すると、既存の Libreswan IPsec ホストとの接続を設定できます。この場合、Nmstate が最終的な設定を YAML ファイルの定義と一致させます。一致させられない場合は、システムが不適切な状態になるのを避けるために、変更を自動的にロールバックします。Nmstate は状態のみを検証し、有効だが不適切な設定から保護するものではないことに注意してください。
一般に、どちらのホストを left または right と呼ぶかは任意です。ただし、NetworkManager では、ローカルホストには常に left という用語を使用し、リモートホストには常に right という用語を使用します。
前提条件
リモートピアで Libreswan IPsec が動作しており、ホスト間 接続の準備が整っている。
NetworkManager-libreswan
プラグインの設計上、Nmstate は、同じ接続にこのプラグインを使用する他のピアと通信することはできません。
手順
Libreswan がまだインストールされていない場合は、次の手順を実行します。
必要なパッケージをインストールします。
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NetworkManager サービスを再起動します。
systemctl restart NetworkManager
# systemctl restart NetworkManager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワークセキュリティーサービス (NSS) データベースを初期化します。
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、
/var/lib/ipsec/nss/
ディレクトリーにデータベースが作成されます。ファイアウォールで IPsec ポートとプロトコルを開きます。
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
RSA 鍵ペアを作成します。
ipsec newhostkey
# ipsec newhostkey
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
ユーティリティーにより、鍵ペアが NSS データベースに保存されます。left と right 両方のピアの Certificate Key Attribute ID (CKAID) を表示します。
ipsec showhostkey --list
# ipsec showhostkey --list < 1> RSA keyid: <key_id> ckaid: <ckaid>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以降のステップで、両方のピアの CKAID が必要になります。
公開鍵を表示します。
left ピアで次のように入力します。
ipsec showhostkey --left --ckaid <ckaid_of_left_peer>
# ipsec showhostkey --left --ckaid <ckaid_of_left_peer> # rsakey AwEAAdKCx leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow right ピアで次のように入力します。
ipsec showhostkey --right --ckaid <ckaid_of_right_peer>
# ipsec showhostkey --right --ckaid <ckaid_of_right_peer> # rsakey AwEAAcNWC rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
これらのコマンドにより、設定ファイルで使用する必要がある対応するパラメーターとともに、公開鍵が表示されます。
次の内容を含む YAML ファイル (例:
~/ipsec-host-to-host-rsa-auth.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例で指定されている設定は次のとおりです。
ikev2: insist
- 最新の IKEv2 プロトコルを、IKEv1 へのフォールバックなしで、唯一許可されるプロトコルとして定義します。この設定は、Nmstate を使用したホスト間設定では必須です。
left=<ip_address_or_fqdn_of_left_peer>
およびright=<ip_address_or_fqdn_of_right_peer>
- ピアの IP アドレスまたは DNS 名を定義します。
leftid=<id>
およびrightid=<id>
-
Internet Key Exchange (IKE) ネゴシエーションプロセス中に各ピアを識別する方法を定義します。これには IP アドレスまたはリテラル文字列を指定できます。NetworkManager は、IP アドレス以外のすべての値をリテラル文字列として解釈し、内部的に先頭に
@
記号を追加することに注意してください。そのため、Libreswan ピアも ID としてリテラル文字列を使用する必要があります。そうしないと、認証が失敗します。 leftrsasigkey=<public_key>
およびrightrsasigkey=<public_key>
-
ピアの公開鍵を指定します。前のステップで
ipsec showhostkey
コマンドによって表示された値を使用します。 leftmodecfgclient: false
- このホストで動的設定を無効にします。この設定は、Nmstate を使用したホスト間設定では必須です。
rightsubnet: <ip_address_of_right_peer>/32
- ホストがこのピアにのみアクセスできるように定義します。この設定は、Nmstate を使用したホスト間設定では必須です。
設定をシステムに適用します。
nmstatectl apply ~/ipsec-host-to-host-rsa-auth.yml
# nmstatectl apply ~/ipsec-host-to-host-rsa-auth.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
IPsec ステータスを表示します。
ipsec status
# ipsec status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続が正常に確立されていれば、出力に次の行が含まれています。
Internet Key Exchange バージョン 2 (IKEv2) ネゴシエーションのフェーズ 1 が正常に完了しています。
000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これで、セキュリティーアソシエーション (SA) が、実際のデータ暗号化トンネル (子 SA またはフェーズ 2 SA と呼ばれる) をネゴシエートする準備が整いました。
子 SA が確立されています。
000 #2: "<connection_name>":500 STATE_V2_ESTABLISHED_CHILD_SA (established Child SA); REKEY in 27671s; REPLACE in 28610s; IKE SA #1; idle;
000 #2: "<connection_name>":500 STATE_V2_ESTABLISHED_CHILD_SA (established Child SA); REKEY in 27671s; REPLACE in 28610s; IKE SA #1; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、データトラフィックが通過する実際のトンネルです。
トラブルシューティング
NetworkManager が Libreswan に渡す実際の設定を表示するには、次のように入力します。
nmcli connection export <connection_name>
# nmcli connection export <connection_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力は、リモートホスト上の Libreswan 設定と比較する際に、ID や鍵などの設定の違いを特定するのに役立ちます。
次のステップ
- DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策は、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
6.13.2. nmstatectl を使用して raw RSA 鍵認証による IPsec サイト間 VPN を設定する リンクのコピーリンクがクリップボードにコピーされました!
サイト間 VPN は、2 つの異なるネットワーク間にセキュアな暗号化トンネルを確立し、インターネットなどのセキュアでないパブリックネットワークを介してそれらをシームレスにリンクします。たとえば、これにより、支社のデバイスがすべて同じローカルネットワークの一部であるかのように、企業本社のリソースにアクセスできるようになります。
ゲートウェイデバイスの認証に関しては、RSA 鍵は事前共有鍵 (PSK) よりもセキュアです。非対称暗号化によって秘密情報共有のリスクが排除されるためです。また、RSA 鍵を使用すると、強力なピアツーピア認証を提供しつつも、認証局 (CA) が不要になるため、デプロイが容易になります。
Nmstate API を使用すると、既存の Libreswan IPsec ゲートウェイとの接続を設定できます。この場合、Nmstate が最終的な設定を YAML ファイルの定義と一致させます。一致させられない場合は、システムが不適切な状態になるのを避けるために、変更を自動的にロールバックします。Nmstate は状態のみを検証し、有効だが不適切な設定から保護するものではないことに注意してください。
一般に、どちらのホストを left または right と呼ぶかは任意です。ただし、NetworkManager では、ローカルホストには常に left という用語を使用し、リモートホストには常に right という用語を使用します。
前提条件
リモートゲートウェイで Libreswan IPsec が動作しており、サイト間 接続の準備が整っている。
NetworkManager-libreswan
プラグインの設計上、Nmstate は、同じ接続にこのプラグインを使用する他のピアと通信することはできません。
手順
Libreswan がまだインストールされていない場合は、次の手順を実行します。
必要なパッケージをインストールします。
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NetworkManager サービスを再起動します。
systemctl restart NetworkManager
# systemctl restart NetworkManager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワークセキュリティーサービス (NSS) データベースを初期化します。
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、
/var/lib/ipsec/nss/
ディレクトリーにデータベースが作成されます。ファイアウォールで IPsec ポートとプロトコルを開きます。
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
RSA 鍵ペアを作成します。
ipsec newhostkey
# ipsec newhostkey
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec
ユーティリティーにより、鍵ペアが NSS データベースに保存されます。left と right 両方のピアの Certificate Key Attribute ID (CKAID) を表示します。
ipsec showhostkey --list
# ipsec showhostkey --list < 1> RSA keyid: <key_id> ckaid: <ckaid>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以降のステップで、両方のピアの CKAID が必要になります。
公開鍵を表示します。
left ピアで次のように入力します。
ipsec showhostkey --left --ckaid <ckaid_of_left_peer>
# ipsec showhostkey --left --ckaid <ckaid_of_left_peer> # rsakey AwEAAdKCx leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow right ピアで次のように入力します。
ipsec showhostkey --right --ckaid <ckaid_of_right_peer>
# ipsec showhostkey --right --ckaid <ckaid_of_right_peer> # rsakey AwEAAcNWC rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
これらのコマンドにより、設定ファイルで使用する必要がある対応するパラメーターとともに、公開鍵が表示されます。
次の内容を含む YAML ファイル (例:
~/ipsec-site-to-site-rsa-auth.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例で指定されている設定は次のとおりです。
ikev2: insist
- 最新の IKEv2 プロトコルを、IKEv1 へのフォールバックなしで、唯一許可されるプロトコルとして定義します。この設定は、Nmstate を使用したサイト間設定では必須です。
left=<ip_address_or_fqdn_of_left_peer>
およびright=<ip_address_or_fqdn_of_right_peer>
- ピアの IP アドレスまたは DNS 名を定義します。
leftid=<id>
およびrightid=<id>
-
Internet Key Exchange (IKE) ネゴシエーションプロセス中に各ピアを識別する方法を定義します。これには IP アドレスまたはリテラル文字列を指定できます。NetworkManager は、IP アドレス以外のすべての値をリテラル文字列として解釈し、内部的に先頭に
@
記号を追加することに注意してください。そのため、Libreswan ピアも ID としてリテラル文字列を使用する必要があります。そうしないと、認証が失敗します。 leftrsasigkey=<public_key>
およびrightrsasigkey=<public_key>
-
ピアの公開鍵を指定します。前のステップで
ipsec showhostkey
コマンドによって表示された値を使用します。 leftmodecfgclient: false
- このホストで動的設定を無効にします。この設定は、Nmstate を使用したサイト間設定では必須です。
leftsubnet=<subnet>
およびrightsubnet=<subnet>
- トンネルを介して接続されるサブネットを Classless Inter-Domain Routing (CIDR) 形式で定義します。
パケット転送を有効にします。
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! Toggle word wrap Toggle overflow 設定をシステムに適用します。
nmstatectl apply ~/ipsec-site-to-site-rsa-auth.yml
# nmstatectl apply ~/ipsec-site-to-site-rsa-auth.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
IPsec ステータスを表示します。
ipsec status
# ipsec status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続が正常に確立されていれば、出力に次の行が含まれています。
Internet Key Exchange バージョン 2 (IKEv2) ネゴシエーションのフェーズ 1 が正常に完了しています。
000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
000 #1: "<connection_name>":500 STATE_V2_ESTABLISHED_IKE_SA (established IKE SA); REKEY in 27935s; REPLACE in 28610s; newest; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これで、セキュリティーアソシエーション (SA) が、実際のデータ暗号化トンネル (子 SA またはフェーズ 2 SA と呼ばれる) をネゴシエートする準備が整いました。
子 SA が確立されています。
000 #2: "<connection_name>":500 STATE_V2_ESTABLISHED_CHILD_SA (established Child SA); REKEY in 27671s; REPLACE in 28610s; IKE SA #1; idle;
000 #2: "<connection_name>":500 STATE_V2_ESTABLISHED_CHILD_SA (established Child SA); REKEY in 27671s; REPLACE in 28610s; IKE SA #1; idle;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これは、データトラフィックが通過する実際のトンネルです。
- ローカルサブネット内のクライアントから、リモートサブネット内のクライアントに ping を実行します。
トラブルシューティング
NetworkManager が Libreswan に渡す実際の設定を表示するには、次のように入力します。
nmcli connection export <connection_name>
# nmcli connection export <connection_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力は、リモートホスト上の Libreswan 設定と比較する際に、ID や鍵などの設定の違いを特定するのに役立ちます。
次のステップ
- DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策は、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
6.13.3. nmstatectl を使用してクライアントを IPsec VPN ゲートウェイに接続するように設定する リンクのコピーリンクがクリップボードにコピーされました!
リモートのプライベートネットワーク上のリソースにアクセスするには、ユーザーはまず IPsec VPN 接続を設定する必要があります。Nmstate API を使用すると、既存の Libreswan IPsec ゲートウェイとの接続を設定できます。この場合、Nmstate が最終的な設定を YAML ファイルの定義と一致させます。一致させられない場合は、システムが不適切な状態になるのを避けるために、変更を自動的にロールバックします。Nmstate は状態のみを検証し、有効だが不適切な設定から保護するものではないことに注意してください。
一般に、どちらのホストを left または right と呼ぶかは任意です。ただし、NetworkManager では、ローカルホストには常に left という用語を使用し、リモートホストには常に right という用語を使用します。
前提条件
リモートゲートウェイで Libreswan IPsec が動作しており、証明書ベースの認証による ホスト/サイト間 接続の準備が整っている。
NetworkManager-libreswan
プラグインの設計上、Nmstate は、同じ接続にこのプラグインを使用する他のピアと通信することはできません。クライアントに、次の内容を含む PKCS#12 ファイル
~/file.p12
が存在する。- ユーザーの秘密鍵
- ユーザー証明書
- CA 証明書
- 中間証明書 (必要な場合)
秘密鍵および証明書署名要求 (CSR) の作成や、CA からの証明書要求に関する詳細は、CA のドキュメントを参照してください。
-
証明書の Extended Key Usage (EKU) が
TLS Web Client Authentication
に設定されている。
手順
Libreswan がまだインストールされていない場合は、以下を実行します。
必要なパッケージをインストールします。
dnf install nmstate libreswan NetworkManager-libreswan
# dnf install nmstate libreswan NetworkManager-libreswan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NetworkManager サービスを再起動します。
systemctl restart NetworkManager
# systemctl restart NetworkManager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワークセキュリティーサービス (NSS) データベースを初期化します。
ipsec initnss
# ipsec initnss
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、
/var/lib/ipsec/nss/
ディレクトリーにデータベースが作成されます。ファイアウォールで IPsec ポートとプロトコルを開きます。
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
PKCS #12 ファイルを NSS データベースにインポートします。
ipsec import ~/file.p12
# ipsec import ~/file.p12 Enter password for PKCS12 file: <password> pk12util: PKCS12 IMPORT SUCCESSFUL correcting trust bits for Example-CA
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザーのニックネームと CA 証明書を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この情報は Nmstate の YAML ファイルに必要です。
次の内容を含む YAML ファイル (例:
~/ipsec-host-to-site-cert-auth.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例で指定されている設定は次のとおりです。
ikev2: insist
- 最新の IKEv2 プロトコルを、IKEv1 へのフォールバックなしで、唯一許可されるプロトコルとして定義します。この設定は、Nmstate を使用したホスト/サイト設定では必須です。
left=<ip_address_or_fqdn_of_left_peer>
およびright=<ip_address_or_fqdn_of_right_peer>
- ピアの IP アドレスまたは DNS 名を定義します。
leftid=%fromcert
およびrightid=%fromcert
- 証明書の識別名 (DN) フィールドからアイデンティティーを取得するように Libreswan を設定します。
leftcert="<server_certificate_nickname>"
- NSS データベースで使用されるサーバーの証明書のニックネームを設定します。
rightsubnet: <subnet>
- ゲートウェイに接続されているサブネットを Classless Inter-Domain Routing (CIDR) 形式で定義します。
設定をシステムに適用します。
nmstatectl apply ~/ipsec-host-to-site-cert-auth.yml
# nmstatectl apply ~/ipsec-host-to-site-cert-auth.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
- リモートネットワーク内のホストへの接続を確立するか、ping を実行します。
トラブルシューティング
NetworkManager が Libreswan に渡す実際の設定を表示するには、次のように入力します。
nmcli connection export <connection_name>
# nmcli connection export <connection_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この出力は、リモートホスト上の Libreswan 設定と比較する際に、ID や鍵などの設定の違いを特定するのに役立ちます。
次のステップ
- DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策は、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
6.14. IPsec 設定のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
IPsec 設定の失敗の診断は困難な場合があります。設定の不一致、ファイアウォールルール、カーネルレベルのエラーによって問題が発生することがあるためです。以下では、IPsec VPN 接続に関する一般的な問題を解決するための体系的な方法を説明します。
6.14.1. 基本的な接続の問題 リンクのコピーリンクがクリップボードにコピーされました!
VPN 接続の問題は、エンドポイント間の設定の不一致が原因で発生することがよくあります。
IPsec 接続が確立されていることを確認するには、次のように入力します。
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=198.51.100.1/32
接続が正常な場合、このコマンドで、接続の名前と詳細を含むエントリーが表示されます。出力が空の場合、トンネルが確立されていません。
6.14.3. 設定の不一致 リンクのコピーリンクがクリップボードにコピーされました!
各エンドポイントが、同じ Internet Key Exchange (IKE) バージョン、アルゴリズム、IP アドレス範囲、または事前共有鍵 (PSK) で設定されていない場合、VPN 接続は失敗します。不一致が見つかった場合は、両方のエンドポイントの設定を調整して問題を解決する必要があります。
- リモートピアが 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! Toggle word wrap Toggle overflow - IKE アルゴリズムの不一致
初期セットアップ中に
NO_PROPOSAL_CHOSEN
通知が表示され、接続が失敗します。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! Toggle word wrap Toggle overflow - IPsec アルゴリズムの不一致
最初の交換後、
NO_PROPOSAL_CHOSEN
エラーで接続が失敗します。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! Toggle word wrap Toggle overflow - IP アドレス範囲の不一致 (IKEv2)
リモートピアが
TS_UNACCEPTABLE
エラーで応答します。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! Toggle word wrap Toggle overflow - IP アドレス範囲の不一致 (IKEv1)
クイックモード中に接続がタイムアウトし、ピアがプロポーザルを受け入れなかったことを示すメッセージが表示されます。
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! Toggle word wrap Toggle overflow - PSK の不一致 (IKEv2)
ピアが接続を拒否し、
AUTHENTICATION_FAILED
エラーが発生します。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! Toggle word wrap Toggle overflow - PSK の不一致 (IKEv1)
ハッシュペイロードが一致しないため、IKE メッセージが読み取り不能になり、
INVALID_HASH_INFORMATION
エラーが発生します。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! Toggle word wrap Toggle overflow
6.14.4. MTU の問題 リンクのコピーリンクがクリップボードにコピーされました!
パケットのサイズは、暗号化およびカプセル化のプロセスにより増加します。パケットがネットワークの最大転送単位 (MTU) (通常は 1500 バイト) を超えると、パケットは断片化されます。これにより、断続的な接続障害が発生し、断片が失われ、元のパケットを再構成できなくなることがあります。一般的な症状としては、ping などの小さなパケットでは正常に動作するが、SSH セッションなどの大きなパケットではログイン後にフリーズすることなどが挙げられます。
この問題を解決するには、設定ファイルに mtu=1400
オプションを追加して、トンネルの MTU を下げます。
6.14.5. NAT の競合 リンクのコピーリンクがクリップボードにコピーされました!
IPsec ホストが NAT ルーターとしても機能する場合、IPsec トンネル宛のパケットに誤って NAT が適用されることがあります。たとえば、IPsec 暗号化が適用される前に、パケットの送信元 IP アドレスがマスカレードルールによって変換されると、そのパケットの送信元が IPsec ポリシーと一致しなくなり、Libreswan がそのパケットを暗号化せずにネットワーク経由で送信してしまいます。
この問題を解決するには、IPsec サブネット間のトラフィックを NAT から除外するファイアウォールルールを追加します。このルールは、一般的な NAT ルールの前に処理されるように、POSTROUTING
チェーンの先頭に挿入する必要があります。
例6.1 nftables
フレームワークを使用した解決策
次の例では、nftables
を使用して、192.0.2.0/24 サブネットと 198.51.100.0/24 サブネット間のトラフィックをアドレス変換から除外する基本的な NAT 環境を設定します。
nft add table ip nat nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; } nft add rule ip nat postrouting ip saddr 192.0.2.0/24 ip daddr 198.51.100.0/24 return
# nft add table ip nat
# nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; }
# nft add rule ip nat postrouting ip saddr 192.0.2.0/24 ip daddr 198.51.100.0/24 return
6.14.6. カーネルレベルの IPsec の問題 リンクのコピーリンクがクリップボードにコピーされました!
よくある問題として、VPN トンネルが正常に確立されたように見えても、トラフィックが通過しないことがあります。このような場合は、カーネルの IPsec の状態を調べて、トンネルポリシーと暗号鍵が正しくインストールされているかどうかを確認できます。
このプロセスでは、次の 2 つのコンポーネントをチェックします。
- Security Policy Database (SPD): 暗号化するトラフィックをカーネルに指示するルール。
- Security Association Database (SAD): そのトラフィックを暗号化する方法をカーネルに指示する鍵。
まず、SPD に正しいポリシーが存在するかどうかを確認します。
ip xfrm policy
# ip xfrm policy
src 192.0.2.1/32 dst 10.0.0.0/8
dir out priority 666 ptype main
tmpl src 198.51.100.13 dst 203.0.113.22
proto esp reqid 16417 mode tunnel
出力に、leftsubnet
および rightsubnet
パラメーターに一致するポリシーが、in 方向と out 方向の両方で含まれているはずです。トラフィックのポリシーが表示されない場合は、Libreswan がカーネルルールの作成に失敗しており、トラフィックは暗号化されていません。
ポリシーが存在する場合は、SAD 内に対応する鍵セットがあるかどうかを確認します。
ip xfrm state
# ip xfrm state
src 203.0.113.22 dst 198.51.100.13
proto esp spi 0xa78b3fdb reqid 16417 mode tunnel
auth-trunc hmac(sha1) 0x3763cd3b... 96
enc cbc(aes) 0xd9dba399...
このコマンドにより、秘密の暗号鍵が表示されます。この出力を共有しないでください。攻撃者がこの出力を使用して VPN トラフィックを復号するおそれがあります。
ポリシーが存在するにもかかわらず、同じ reqid
を持つ対応する状態が表示されない場合は、通常、Internet Key Exchange (IKE) ネゴシエーションが失敗しています。2 つの VPN エンドポイントが、鍵セットについて合意できなかったということです。
より詳細な診断を行うには、いずれかのコマンドで -s
オプションを使用します。このオプションはトラフィックカウンターを追加します。これは、カーネルが特定のルールに従ってパケットを処理しているかどうかを確認するのに役立ちます。
6.14.7. カーネル IPsec サブシステムのバグ リンクのコピーリンクがクリップボードにコピーされました!
まれに、カーネルの IPsec サブシステムの不具合により、Internet Key Exchange (IKE) ユーザー空間デーモンとの同期が失われる場合があります。この同期のずれにより、ネゴシエートされたセキュリティーアソシエーションと、カーネル内における IPsec ポリシーの実際の適用との間にずれが生じ、セキュアなネットワーク通信が中断される場合があります。カーネルレベルのエラーを確認するには、変換 (XFRM) の統計情報を表示します。
cat /proc/net/xfrm_stat
# cat /proc/net/xfrm_stat
出力内のいずれかのカウンター (XfrmInError
など) がゼロ以外の値を示している場合、カーネルサブシステムに問題があります。このような場合は、サポートケース を作成し、コマンドの出力と対応する IKE ログを添付してください。
6.14.8. Libreswan ログの表示 リンクのコピーリンクがクリップボードにコピーされました!
Libreswan はイベントをジャーナルに記録します。ipsec
サービスのジャーナルを表示するには、次のように入力します。
journalctl -xeu ipsec
# journalctl -xeu ipsec
デフォルトのロギングレベルでは十分な詳細情報が得られない場合は、/etc/ipsec.conf
ファイルの config setup
セクションに次の設定を追加して、包括的なデバッグロギングを有効にします。
plutodebug=all logfile=/var/log/pluto.log
plutodebug=all
logfile=/var/log/pluto.log
デバッグロギングでは多数のエントリーが生成されることがあります。そのため、メッセージを専用のログファイルにリダイレクトすると、journald
および systemd
サービスによるメッセージのレート制限を防ぐことができます。
第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! Toggle word wrap Toggle overflow ホストの秘密鍵と、対応する公開鍵を作成します。
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! Toggle word wrap Toggle overflow キーファイルの内容は必要ですが、ファイル自体は必要ありません。ただし、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! Toggle word wrap Toggle overflow 秘密鍵を表示します。
cat /etc/wireguard/$HOSTNAME.private.key YFAnE0psgIdiAF7XR4abxiwVRnlMfeltxu10s/c4JXg=
# cat /etc/wireguard/$HOSTNAME.private.key YFAnE0psgIdiAF7XR4abxiwVRnlMfeltxu10s/c4JXg=
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ローカルホストで WireGuard 接続を設定するには、秘密鍵が必要です。秘密鍵を共有しないでください。
公開鍵を表示します。
cat /etc/wireguard/$HOSTNAME.public.key UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=
# cat /etc/wireguard/$HOSTNAME.public.key UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=
Copy to Clipboard Copied! Toggle word wrap Toggle overflow リモートホストで 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! Toggle word wrap Toggle overflow このコマンドは、
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! Toggle word wrap Toggle overflow サーバーのトンネル 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! Toggle word wrap Toggle overflow サーバーの秘密鍵を接続プロファイルに追加します。
nmcli connection modify server-wg0 wireguard.private-key "YFAnE0psgIdiAF7XR4abxiwVRnlMfeltxu10s/c4JXg="
# nmcli connection modify server-wg0 wireguard.private-key "YFAnE0psgIdiAF7XR4abxiwVRnlMfeltxu10s/c4JXg="
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 着信 WireGuard 接続のポートを設定します。
nmcli connection modify server-wg0 wireguard.listen-port 51820
# nmcli connection modify server-wg0 wireguard.listen-port 51820
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 着信 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! Toggle word wrap Toggle overflow -
[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! Toggle word wrap Toggle overflow
必要に応じて、自動的に起動するように接続を設定し、次のコマンドを実行します。
nmcli connection modify server-wg0 autoconnect yes
# nmcli connection modify server-wg0 autoconnect yes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow server-wg0
接続を再アクティブ化します。nmcli connection up server-wg0
# nmcli connection up server-wg0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - DHCP またはステートレスアドレス自動設定 (SLAAC) が設定されたネットワークでこのホストを使用すると、接続がリダイレクトされる危険性があります。詳細と軽減策は、接続がトンネルを回避しないように VPN 接続を専用ルーティングテーブルに割り当てる を参照してください。
検証
wg0
デバイスのインターフェイス設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力に秘密鍵を表示するには、
WG_HIDE_KEYS=never wg show wg0
コマンドを使用します。wg0
デバイスの IP 設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow - 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
デバイスのインターフェイス設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力に秘密鍵を表示するには、
WG_HIDE_KEYS=never wg show wg0
コマンドを使用します。wg0
デバイスの IP 設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
デバイスのインターフェイス設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力に秘密鍵を表示するには、
WG_HIDE_KEYS=never wg show wg0
コマンドを使用します。wg0
デバイスの IP 設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow クライアントがすべてのトラフィックをトンネル経由でルーティングし、WireGuard サーバーをデフォルトゲートウェイとして使用する場合は、
public
ゾーンのマスカレードを有効にします。firewall-cmd --permanent --zone=public --add-masquerade
# firewall-cmd --permanent --zone=public --add-masquerade
Copy to Clipboard Copied! Toggle word wrap Toggle overflow firewalld
ルールをリロードします。firewall-cmd --reload
# firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
public
ゾーンの設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow Web コンソールでは
Firewalld
ゾーンのマスカレードを有効にすることはできないことに注意してください。
検証
- 画面左側のナビゲーションで Networking タブを選択します。
- Firewall セクションで Edit rules and zones をクリックします。
-
リストに
wireguard
サービスのエントリーが含まれており、WireGuard 接続プロファイルで設定した UDP ポートが表示されます。 firewalld
のpublic
ゾーンでマスカレードが有効になっていることを確認するために、次のように入力します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow client-wg0
という名前のプロファイルを作成し、そのプロファイルに仮想インターフェイスwg0
を割り当てます。オプション: NetworkManager が
client-wg
接続を自動的に起動しないように設定します。nmcli connection modify client-wg0 autoconnect no
# nmcli connection modify client-wg0 autoconnect no
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クライアントのトンネル 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! Toggle word wrap Toggle overflow クライアントのトンネル 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! Toggle word wrap Toggle overflow すべてのトラフィックをトンネル経由でルーティングする場合は、サーバーのトンネル 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! Toggle word wrap Toggle overflow すべてのトラフィックをトンネル経由でルーティングするには、後の手順で、このクライアントの
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! Toggle word wrap Toggle overflow このクライアントとの通信を許可するサーバーごとにピア設定を追加します。これらの設定は手動で追加する必要があります。
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! Toggle word wrap Toggle overflow -
[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! Toggle word wrap Toggle overflow
client-wg0
接続を再アクティブ化します。nmcli connection up client-wg0
# nmcli connection up client-wg0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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! Toggle word wrap Toggle overflow wg0
デバイスのインターフェイス設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力に秘密鍵を表示するには、
WG_HIDE_KEYS=never wg show wg0
コマンドを使用します。VPN トンネルを介してトラフィックを送信している場合は、
latest handshake
エントリーとtransfer
エントリーのみが含まれることに注意してください。wg0
デバイスの IP 設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow - 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! Toggle word wrap Toggle overflow wg0
デバイスのインターフェイス設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力に秘密鍵を表示するには、
WG_HIDE_KEYS=never wg show wg0
コマンドを使用します。VPN トンネルを介してトラフィックをすでに送信している場合は、
latest handshake
エントリーとtransfer
エントリーのみが出力に含まれることに注意してください。wg0
デバイスの IP 設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow トンネル経由でトラフィックを送信しようとすると、WireGuard が接続を確立します。
wg0
デバイスのインターフェイス設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力に秘密鍵を表示するには、
WG_HIDE_KEYS=never wg show wg0
コマンドを使用します。VPN トンネルを介してトラフィックを送信している場合は、
latest handshake
エントリーとtransfer
エントリーのみが含まれることに注意してください。wg0
デバイスの IP 設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow 上記のコマンドで使用したテーブルに低い優先度値を設定します。
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! Toggle word wrap Toggle overflow 優先度の値は 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! Toggle word wrap Toggle overflow
検証
テーブル 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! Toggle word wrap Toggle overflow この出力から、リモートネットワークへのルートとデフォルトゲートウェイの両方がルーティングテーブル 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! Toggle word wrap Toggle overflow この出力から、リモートネットワークへのルートとデフォルトゲートウェイの両方がルーティングテーブル 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow トンネルには、2 つの使用可能な IP アドレスを持つ
/30
サブネットで十分であることに注意してください。IPv4 設定を使用するように手動で
tun0
接続を設定します。nmcli connection modify tun0 ipv4.method manual
# nmcli connection modify tun0 ipv4.method manual
Copy to Clipboard Copied! Toggle word wrap Toggle overflow トラフィックを
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! Toggle word wrap Toggle overflow tun0
接続を有効にします。nmcli connection up tun0
# nmcli connection up tun0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow パケット転送を有効にします。
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! Toggle word wrap Toggle overflow
ネットワーク 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow IPv4 設定を使用するように手動で
tun0
接続を設定します。nmcli connection modify tun0 ipv4.method manual
# nmcli connection modify tun0 ipv4.method manual
Copy to Clipboard Copied! Toggle word wrap Toggle overflow トラフィックを
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! Toggle word wrap Toggle overflow tun0
接続を有効にします。nmcli connection up tun0
# nmcli connection up tun0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow パケット転送を有効にします。
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! Toggle word wrap Toggle overflow
検証
各 RHEL ルーターから、他のルーターの内部インターフェイスの IP アドレスに ping します。
ルーター A で
172.16.0.1
に ping します。ping 172.16.0.1
# ping 172.16.0.1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ルーター B で
192.0.2.1
に ping します。ping 192.0.2.1
# ping 192.0.2.1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow トンネルには、2 つの使用可能な IP アドレスを持つ
/30
サブネットで十分であることに注意してください。手動の IPv4 設定を使用するように
gre1
接続を設定します。nmcli connection modify gre1 ipv4.method manual
# nmcli connection modify gre1 ipv4.method manual
Copy to Clipboard Copied! Toggle word wrap Toggle overflow トラフィックを
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! Toggle word wrap Toggle overflow gre1
コネクションを有効にします。nmcli connection up gre1
# nmcli connection up gre1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow パケット転送を有効にします。
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! Toggle word wrap Toggle overflow
ネットワーク 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 手動の IPv4 設定を使用するように
gre1
接続を設定します。nmcli connection modify gre1 ipv4.method manual
# nmcli connection modify gre1 ipv4.method manual
Copy to Clipboard Copied! Toggle word wrap Toggle overflow トラフィックを
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! Toggle word wrap Toggle overflow gre1
コネクションを有効にします。nmcli connection up gre1
# nmcli connection up gre1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow パケット転送を有効にします。
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! Toggle word wrap Toggle overflow
検証
各 RHEL ルーターから、他のルーターの内部インターフェイスの IP アドレスに ping します。
ルーター A で
172.16.0.1
に ping します。ping 172.16.0.1
# ping 172.16.0.1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ルーター B で
192.0.2.1
に ping します。ping 192.0.2.1
# ping 192.0.2.1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow ブリッジの 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! Toggle word wrap Toggle overflow ローカルネットワークに接続されたインターフェイス用の新しい接続プロファイルをブリッジに追加します。
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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow デフォルトでは、STP は有効になり、接続を使用する前に遅延が生じます。
bridge0
接続がアクティベートするように、ブリッジのポートが自動的にアクティブになるようにします。nmcli connection modify bridge0 connection.autoconnect-ports 1
# nmcli connection modify bridge0 connection.autoconnect-ports 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow bridge0
接続をアクティブにします。nmcli connection up bridge0
# nmcli connection up bridge0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ネットワーク 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! Toggle word wrap Toggle overflow ブリッジの 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! Toggle word wrap Toggle overflow ローカルネットワークに接続されたインターフェイス用の新しい接続プロファイルをブリッジに追加します。
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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow bridge0
接続がアクティベートするように、ブリッジのポートが自動的にアクティブになるようにします。nmcli connection modify bridge0 connection.autoconnect-ports 1
# nmcli connection modify bridge0 connection.autoconnect-ports 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow bridge0
接続をアクティブにします。nmcli connection up bridge0
# nmcli connection up bridge0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
両方のルーターで、
enp1s0
接続およびgretap1
接続が接続され、CONNECTION
列にポートの接続名が表示されていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各 RHEL ルーターから、他のルーターの内部インターフェイスの IP アドレスに ping します。
ルーター A で
192.0.2.2
に ping します。ping 192.0.2.2
# ping 192.0.2.2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ルーター B で
192.0.2.1
に ping します。ping 192.0.2.1
# ping 192.0.2.1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第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! Toggle word wrap Toggle overflow オプション: 利用可能な 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! Toggle word wrap Toggle overflow サービスセット識別子 (
SSID
) 列には、ネットワークの名前が含まれています。列に--
が表示されている場合、このネットワークのアクセスポイントは SSID をブロードキャストしていません。Wi-Fi ネットワークに接続します。
nmcli device wifi connect Office --ask
# nmcli device wifi connect Office --ask Password: wifi-password
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 対話的に入力するのではなく、コマンドでパスワードを設定する場合は、コマンドで
--ask
の代わりにpassword <wifi_password>
オプションを使用します。nmcli device wifi connect Office password <wifi_password>
# nmcli device wifi connect Office password <wifi_password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワークが静的 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
接続を再度有効にします。
nmcli connection up Office
# nmcli connection up Office
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
アクティブな接続を表示します。
nmcli connection show --active
# nmcli connection show --active NAME ID TYPE DEVICE Office 2501eb7e-7b16-4dc6-97ef-7cc460139a58 wifi wlp0s20f3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作成した Wi-Fi 接続が出力にリストされている場合、その接続はアクティブです。
ホスト名または IP アドレスに ping を実行します。
ping -c 3 example.com
# ping -c 3 example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3. GNOME Settings を使用した Wi-Fi ネットワークへの接続 リンクのコピーリンクがクリップボードにコピーされました!
GNOME Settings アプリケーション (gnome-control-center
とも呼ばれます) を使用して、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! Toggle word wrap Toggle overflow
9.4. nmtui を使用した Wi-Fi 接続の設定 リンクのコピーリンクがクリップボードにコピーされました!
nmtui
アプリケーションは、NetworkManager 用のテキストベースのユーザーインターフェイスを提供します。nmtui
を使用して Wi-Fi ネットワークに接続できます。
nmtui
で以下を行います。
- カーソルキーを使用してナビゲートします。
- ボタンを選択して Enter を押します。
- Space を使用してチェックボックスをオンまたはオフにします。
- 前の画面に戻るには、ESC を使用します。
手順
nmtui
を開始します。nmtui
# nmtui
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
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! Toggle word wrap Toggle overflow 作成した Wi-Fi 接続が出力にリストされている場合、その接続はアクティブです。
ホスト名または IP アドレスに ping を実行します。
ping -c 3 example.com
# ping -c 3 example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 重要デフォルトでは、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! Toggle word wrap Toggle overflow 注記セキュリティー上の理由から、クライアントでオーセンティケーターの証明書を検証することを推奨します。
接続プロファイルをアクティベートします。
nmcli connection up wlp1s0
# nmcli connection up wlp1s0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
- ネットワーク認証が必要なネットワーク上のリソースにアクセスします。
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! Toggle word wrap Toggle overflow ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。pwd: <password>
pwd: <password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル 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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow 次の内容で
/etc/sysconfig/regdomain
ファイルを作成します。COUNTRY=<country_code>
COUNTRY=<country_code>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow COUNTRY
変数を ISO 3166-1 alpha2 国コード (ドイツの場合はDE
、アメリカ合衆国の場合はUS
など) に設定します。規制ドメインを設定します。
setregdomain
# setregdomain
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
規制ドメインの設定を表示します。
iw reg get
# iw reg get global country DE: DFS-ETSI ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
- 両方のホストで、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! Toggle word wrap Toggle overflow 前の手順で生成された 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
接続をアクティベートします。
nmcli connection up macsec0
# nmcli connection up macsec0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
トラフィックが暗号化されていることを確認します。
tcpdump -nn -i enp1s0
# tcpdump -nn -i enp1s0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 暗号化されていないトラフィックを表示します。
tcpdump -nn -i macsec0
# tcpdump -nn -i macsec0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow MACsec の統計を表示します。
ip macsec show
# ip macsec show
Copy to Clipboard Copied! Toggle word wrap Toggle overflow integrity-only (encrypt off) および encryption (encrypt on) の各タイプの保護に対して個々のカウンターを表示します。
ip -s macsec show
# ip -s macsec show
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
MACsec 接続を介して接続するホストの両方で、次の手順を実行します。
次の設定を含む YAML ファイル (例:
create-macsec-connection.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
前の手順で生成された 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! Toggle word wrap Toggle overflow
検証
現在の状態を YAML 形式で表示します。
nmstatectl show macsec0
# nmstatectl show macsec0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow トラフィックが暗号化されていることを確認します。
tcpdump -nn -i enp0s1
# tcpdump -nn -i enp0s1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 暗号化されていないトラフィックを表示します。
tcpdump -nn -i macsec0
# tcpdump -nn -i macsec0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow MACsec の統計を表示します。
ip macsec show
# ip macsec show
Copy to Clipboard Copied! Toggle word wrap Toggle overflow integrity-only (encrypt off) および encryption (encrypt on) の各タイプの保護に対して個々のカウンターを表示します。
ip -s macsec show
# ip -s macsec show
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第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! Toggle word wrap Toggle overflow -
/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! Toggle word wrap Toggle overflow 特定の 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! Toggle word wrap Toggle overflow 特定のタイプのすべてのデバイスを管理対象外として設定するには、以下を追加します。
[device-ethernet-unmanaged] match-device=type:ethernet managed=0
[device-ethernet-unmanaged] match-device=type:ethernet managed=0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 複数のデバイスを管理対象外に設定するには、
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! Toggle word wrap Toggle overflow または、このファイルにデバイスごとに個別のセクションを追加したり、
/etc/NetworkManager/conf.d/
ディレクトリーに追加の*.conf
ファイルを作成したりすることもできます。
ホストシステムを再起動します。
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
デバイスのリストを表示します。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet unmanaged -- ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow enp1s0
デバイスの横のunmanaged
状態は、NetworkManager がこのデバイスを管理していないことを示しています。
トラブルシューティング
nmcli device status
コマンドの出力にデバイスがunmanaged
としてリストされていない場合は、NetworkManager 設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定した設定と出力が一致しない場合は、より優先度が高い設定ファイルによって設定がオーバーライドされていないことを確認してください。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! Toggle word wrap Toggle overflow enp1s0
デバイスをunmanaged
の状態に設定します。nmcli device set enp1s0 managed no
# nmcli device set enp1s0 managed no
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
デバイスのリストを表示します。
nmcli device status
# nmcli device status DEVICE TYPE STATE CONNECTION enp1s0 ethernet unmanaged -- ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow コマンドにデバイス名を渡すと、指定したデバイスの出力のみを表示できます。
出力例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記このコマンドは、管理対象か管理対象外かに関係なく、すべてのデバイスのステータスを返すことに注意してください。
第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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow ネットワーク接続を再起動して、変更を有効にします。
nmcli connection up <connection_name>
# nmcli connection up <connection_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告このネットワーク接続を現在使用しているすべての接続が、再起動時に一時的に中断されます。
検証
ルートがアクティブであることを確認します。
IPv4 デフォルトゲートウェイを表示するには、次のように実行します。
ip -4 route
# ip -4 route default via 192.0.2.1 dev example proto static metric 100
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
12.2. nmstatectl を使用して既存の接続にデフォルトゲートウェイを設定する リンクのコピーリンクがクリップボードにコピーされました!
ほとんどの場合、管理者は接続を作成するときにデフォルトゲートウェイを設定します。ただし、nmstatectl
ユーティリティーを使用して、以前に作成した接続のデフォルトゲートウェイ設定を設定または更新することもできます。
nmstatectl
ユーティリティーを使用して、Nmstate API を介してデフォルトゲートウェイを設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
前提条件
- デフォルトゲートウェイが設定されている接続で、静的 IP アドレスを少なくとも 1 つ設定している。
-
enp1s0
インターフェイスが設定され、デフォルトゲートウェイの IP アドレスがこのインターフェイスの IP 設定のサブネット内にある。 -
nmstate
パッケージがインストールされている。
手順
以下の内容を含む YAML ファイル (例:
~/set-default-gateway.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの設定では、
192.0.2.1
をデフォルトゲートウェイとして定義します。デフォルトゲートウェイはenp1s0
インターフェイス経由で到達可能です。設定をシステムに適用します。
nmstatectl apply ~/set-default-gateway.yml
# nmstatectl apply ~/set-default-gateway.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.3. network RHEL システムロールを使用して既存の接続にデフォルトゲートウェイを設定する リンクのコピーリンクがクリップボードにコピーされました!
パケットの宛先に、直接接続されたネットワーク経由でも、ホストに設定されたルート経由でも到達できない場合、ホストはネットワークパケットをデフォルトゲートウェイに転送します。ホストのデフォルトゲートウェイを設定するには、デフォルトゲートウェイと同じネットワークに接続されているインターフェイスの NetworkManager 接続プロファイルで、そのゲートウェイを設定します。Ansible と network
RHEL システムロールを使用すると、このプロセスを自動化し、Playbook で定義されたホスト上の接続プロファイルをリモートで設定できます。
ほとんどの場合、管理者は接続を作成するときにデフォルトゲートウェイを設定します。ただし、以前に作成した接続でデフォルトゲートウェイ設定を設定または更新することもできます。
network
RHEL システムロールを使用して、既存接続プロファイル内の特定の値だけを更新することはできません。このロールは、接続プロファイルが Playbook の設定と正確に一致するようにします。同じ名前の接続プロファイルがすでに存在する場合、このロールは Playbook の設定を適用し、プロファイル内の他のすべての設定をデフォルトにリセットします。値がリセットされないようにするには、変更しない設定も含め、ネットワーク接続プロファイルの設定全体を Playbook に常に指定してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
管理対象ノードの Ansible fact をクエリーし、アクティブなネットワーク設定を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow ipv4.never-default
およびipv6.never-default
をyes
に設定すると、対応するプロトコルのデフォルトのゲートウェイ IP アドレスが、接続プロファイルから削除されることに注意してください。接続をアクティベートします。
nmcli connection up <connection_name>
# nmcli connection up <connection_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
-
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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
default
で開始するエントリーはデフォルトのルートを示します。dev
の横に表示されるこれらのエントリーのインターフェイス名を書き留めます。以下のコマンドを使用して、前の手順で特定したインターフェイスを使用する NetworkManager 接続を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、
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! Toggle word wrap Toggle overflow ipv4.never-default
およびipv6.never-default
をyes
に設定すると、対応するプロトコルのデフォルトのゲートウェイ IP アドレスが、接続プロファイルから削除されることに注意してください。Corporate-LAN
接続をアクティブにします。nmcli connection up Corporate-LAN
# nmcli connection up Corporate-LAN
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
第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! Toggle word wrap Toggle overflow 特定のルートを削除するには、次のように実行します。
nmcli connection modify connection_name -ipv4.routes "<route>"
$ nmcli connection modify connection_name -ipv4.routes "<route>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow 一度に複数のルートを設定するには、個々のルートをコンマで区切ってコマンドに渡します。
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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 接続を再度有効にします。
nmcli connection up LAN
# nmcli connection up LAN
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
IPv4 ルートを表示します。
ip -4 route
# ip -4 route ... 198.51.100.0/24 via 192.0.2.10 dev enp1s0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow - 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! Toggle word wrap Toggle overflow
13.5. nmstatectl を使用した静的ルートの設定 リンクのコピーリンクがクリップボードにコピーされました!
nmstatectl
ユーティリティーを使用して、Nmstate API を介して静的ルートを設定します。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
前提条件
-
enp1s0
ネットワークインターフェイスが設定され、ゲートウェイと同じ IP サブネット内にあります。 -
nmstate
パッケージがインストールされている。
手順
以下の内容を含む YAML ファイルを作成します (例:
~/add-static-route-to-enp1s0.yml
)。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの設定では、次の静的ルートを定義します。
-
リモート
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! Toggle word wrap Toggle overflow
検証
IPv4 ルートを表示します。
ip -4 route
# ip -4 route ... 198.51.100.0/24 via 192.0.2.10 dev enp1s0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
13.6. network RHEL システムロールを使用した静的ルートの設定 リンクのコピーリンクがクリップボードにコピーされました!
network
RHEL システムロールを使用して、静的ルートを設定できます。
network
RHEL システムロールを使用するプレイの実行時に、プレイで指定した値と設定値が一致しない場合、当該ロールは同じ名前の既存の接続プロファイルをオーバーライドします。これらの値がデフォルトにリセットされないようにするには、IP 設定などの設定がすでに存在する場合でも、ネットワーク接続プロファイルの設定全体をプレイで必ず指定してください。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この手順では、すでに存在するかどうかに応じて、以下の設定で
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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
管理対象ノードで以下を行います。
IPv4 ルートを表示します。
ip -4 route
# ip -4 route ... 198.51.100.0/24 via 192.0.2.10 dev enp7s0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
第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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow このコマンドは、デフォルトゲートウェイを設定する
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! Toggle word wrap Toggle overflow このコマンドは、
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! Toggle word wrap Toggle overflow
検証
内部ワークステーションサブネットの RHEL ホストで、以下を行います。
traceroute
パッケージをインストールします。dnf install traceroute
# dnf install traceroute
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow コマンドの出力には、ルーターがプロバイダー B のネットワークである
192.0.2.1
経由でパケットを送信することが表示されます。
サーバーのサブネットの RHEL ホストで、以下を行います。
traceroute
パッケージをインストールします。dnf install traceroute
# dnf install traceroute
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow コマンドの出力には、ルーターがプロバイダー 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! Toggle word wrap Toggle overflow デフォルトでは、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! Toggle word wrap Toggle overflow インターフェイスとファイアウォールゾーンを表示します。
firewall-cmd --get-active-zones
# firewall-cmd --get-active-zones external interfaces: enp1s0 enp7s0 trusted interfaces: enp8s0 enp9s0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow external
ゾーンでマスカレードが有効になっていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
内部ワークステーションサブネットの RHEL ホストで、以下を行います。
traceroute
パッケージをインストールします。dnf install traceroute
# dnf install traceroute
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow コマンドの出力には、ルーターがプロバイダー B のネットワークである
192.0.2.1
経由でパケットを送信することが表示されます。
サーバーのサブネットの RHEL ホストで、以下を行います。
traceroute
パッケージをインストールします。dnf install traceroute
# dnf install traceroute
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow コマンドの出力には、ルーターがプロバイダー 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! Toggle word wrap Toggle overflow デフォルトでは、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! Toggle word wrap Toggle overflow インターフェイスとファイアウォールゾーンを表示します。
firewall-cmd --get-active-zones
# firewall-cmd --get-active-zones external interfaces: enp1s0 enp7s0 trusted interfaces: enp8s0 enp9s0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow external
ゾーンでマスカレードが有効になっていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第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! Toggle word wrap Toggle overflow 新しいホスト名を設定します。
hostnamectl set-hostname new-hostname.example.com
# hostnamectl set-hostname new-hostname.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、static と transient のホスト名を新しい値に設定します。特定のタイプのみを設定するには、
--static
オプション、--pretty
オプション、または--transient
オプションをコマンドに渡します。hostnamectl
ユーティリティーは、systemd-hostnamed
を自動的に再起動して、新しい名前をアクティブにします。変更を有効にするには、ホストを再起動します。reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow あるいは、そのホスト名を使用するサービスがわかっている場合は、次のようにします。
サービスの起動時にホスト名のみを読み取るすべてのサービスを再起動します。
systemctl restart <service_name>
# systemctl restart <service_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を反映するには、アクティブなシェルユーザーを再ログインする必要があります。
検証
ホスト名を表示します。
hostnamectl status --static
# hostnamectl status --static new-hostname.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第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! Toggle word wrap Toggle overflow パラメーターを
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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
第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=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 サーバーへ転送します。
NetworkManager は、接続に以下のデフォルト値を使用します。
-
VPN 接続の場合は
50
-
他の接続の場合は
100
グローバルのデフォルトおよび接続固有の 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! Toggle word wrap Toggle overflow [connection]
セクションにカスタムのデフォルト値を追加します。たとえば、IPv4 と IPv6 の両方で新しいデフォルトを200
に設定するには、以下を追加します。ipv4.dns-priority=200 ipv6.dns-priority=200
ipv4.dns-priority=200 ipv6.dns-priority=200
Copy to Clipboard Copied! Toggle word wrap Toggle overflow パラメーターは、
-2147483647
から2147483647
までの値に設定できます。パラメーターを0
に設定すると、組み込みのデフォルト (VPN 接続の場合は50
、他の接続の場合は100
) が有効になります。
NetworkManager
サービスを再読み込みします。systemctl reload NetworkManager
# systemctl reload NetworkManager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow - 必要に応じて、他のコネクションに対しても 1 つ前の手順を繰り返します。
更新した接続を再度アクティブにします。
nmcli connection up <connection_name>
# nmcli connection up <connection_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
/etc/resolv.conf
ファイルの内容を表示して、DNS サーバーの順序が正しいことを確認します。cat /etc/resolv.conf
# cat /etc/resolv.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow 接続プロファイル 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! Toggle word wrap Toggle overflow
接続を再度有効にします。
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! Toggle word wrap Toggle overflow
検証
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! Toggle word wrap Toggle overflow このコマンドは、ネームサーバーに正しいインターフェイス経由でアクセスしているかどうかを確認し、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 サーバーと検索ドメインが設定されている。
たとえば、VPN 接続で指定された DNS サーバーが
example.com
ドメインのクエリーを確実に解決できるようにするには、次の設定が必要です。-
example.com
を解決できる DNS サーバー。DHCP サーバーによってこの情報を動的に提供することも、VPN 接続プロファイルでipv4.dns
およびipv6.dns
パラメーターを設定することもできます。 -
example.com
に設定された検索ドメイン。DHCP サーバーによってこの情報を動的に提供することも、VPN 接続プロファイルでipv4.dns-search
およびipv6.dns-search
パラメーターを設定することもできます。
-
-
dnsmasq
サービスが実行されていないか、localhost
とは異なるインターフェイスでリッスンするように設定されています。
手順
dnsmasq
パッケージをインストールします。dnf install dnsmasq
# dnf install dnsmasq
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/NetworkManager/NetworkManager.conf
ファイルを編集し、[main]
セクションに以下のエントリーを設定します。dns=dnsmasq
dns=dnsmasq
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NetworkManager
サービスを再読み込みします。systemctl reload NetworkManager
# systemctl reload NetworkManager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
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! Toggle word wrap Toggle overflow tcpdump
パケットスニファを使用して、DNS 要求の正しいルートを確認します。tcpdump
パッケージをインストールします。dnf install tcpdump
# dnf install tcpdump
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 1 つのターミナルで
tcpdump
を起動し、すべてのインターフェイスで DNS トラフィックを取得します。tcpdump -i any port 53
# tcpdump -i any port 53
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 別のターミナルで、例外が存在するドメインと別のドメインのホスト名を解決します。次に例を示します。
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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow エントリーがない場合は、
/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! Toggle word wrap Toggle overflow サービスが
127.0.0.1:53
をリッスンしていない場合は、NetworkManager
ユニットのジャーナルエントリーを確認します。journalctl -u NetworkManager
# journalctl -u NetworkManager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 証明書で使用するユーザーの 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! Toggle word wrap Toggle overflow オプション: 設定にパスワードを保存します。
nmcli connection modify enp1s0 802-1x.private-key-password password
# nmcli connection modify enp1s0 802-1x.private-key-password password
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要デフォルトでは、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! Toggle word wrap Toggle overflow
検証
- ネットワーク認証が必要なネットワーク上のリソースにアクセスします。
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
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの設定では、次の設定を使用して
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! Toggle word wrap Toggle overflow
検証
- ネットワーク認証が必要なネットワーク上のリソースにアクセスします。
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! Toggle word wrap Toggle overflow ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。pwd: <password>
pwd: <password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル 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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
- ネットワーク認証が必要なネットワーク上のリソースにアクセスします。
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! Toggle word wrap Toggle overflow ansible-vault create
コマンドでエディターが開いたら、機密データを<key>: <value>
形式で入力します。pwd: <password>
pwd: <password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を保存して、エディターを閉じます。Ansible は vault 内のデータを暗号化します。
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル 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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook --ask-vault-pass ~/playbook.yml
$ ansible-playbook --ask-vault-pass ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第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! Toggle word wrap Toggle overflow イーサネットインターフェイスをブリッジに割り当てます。
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! Toggle word wrap Toggle overflow ブリッジが拡張認証プロトコル over LAN (EAPOL) パケットを転送できるようにします。
nmcli connection modify br0 group-forward-mask 8
# nmcli connection modify br0 group-forward-mask 8
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ブリッジデバイスで Spanning Tree Protocol (STP) を無効にします。
*nmcli connection modify br0 stp off"
# *nmcli connection modify br0 stp off"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ポートを自動的にアクティブ化するように接続を設定します。
nmcli connection modify br0 connection.autoconnect-ports 1
# nmcli connection modify br0 connection.autoconnect-ports 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接続をアクティベートします。
nmcli connection up br0
# nmcli connection up br0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
特定のブリッジのポートであるイーサネットデバイスのリンクステータスを表示します。
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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow コマンドが
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! Toggle word wrap Toggle overflow certmonger
サービスが、秘密鍵を/etc/pki/tls/private/radius.key
ファイルに保存し、証明書を/etc/pki/tls/certs/radius.pem
ファイルに保存して、セキュアな権限を設定します。さらに、certmonger
は証明書を監視し、有効期限が切れる前に更新し、証明書の更新後にradiusd
サービスを再起動します。CA が証明書を正常に発行したことを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow セキュリティー上の理由から、素数が 2048 ビット未満の DH ファイルは使用しないでください。ビット数によっては、ファイルの作成に数分かかる場合があります。
/etc/raddb/mods-available/eap
ファイルを編集します。tls-config tls-common
ディレクティブで TLS 関連の設定を指定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow eap
ディレクティブのdefault_eap_type
パラメーターをttls
に設定します。eap { ... default_eap_type = ttls ... }
eap { ... default_eap_type = ttls ... }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安全でない EAP-MD5 認証方式を無効にするには、
md5
ディレクティブをコメントアウトします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトの設定ファイルでは、他の安全でない EAP 認証方法がデフォルトでコメントアウトされていることに注意してください。
/etc/raddb/sites-available/default
ファイルを編集し、eap
以外のすべての認証方法をコメントアウトします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、外部認証で EAP のみが有効になり、プレーンテキスト認証方法が無効になります。
/etc/raddb/sites-available/inner-tunnel
ファイルを編集し、次の変更を加えます。-ldap
エントリーをコメントアウトし、ldap
モジュール設定をauthorize
ディレクティブに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow authenticate
ディレクティブ内の LDAP 認証タイプのコメントを解除します。authenticate { Auth-Type LDAP { ldap } }
authenticate { Auth-Type LDAP { ldap } }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow /etc/raddb/mods-available/ldap
ファイルを編集し、次の変更を加えます。ldap
ディレクティブで、IdM LDAP サーバーの URL とベース識別名 (DN) を設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow FreeRADIUS ホストと IdM サーバー間で TLS 暗号化接続を使用するには、サーバー URL に
ldaps
プロトコルを指定します。ldap
ディレクティブで、IdM LDAP サーバーの TLS 証明書検証を有効にします。tls { ... require_cert = 'demand' ... }
tls { ... require_cert = 'demand' ... }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
/etc/raddb/clients.conf
ファイルを編集します。localhost
およびlocalhost_ipv6
クライアントディレクティブでセキュアなパスワードを設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワークオーセンティケーターのクライアントディレクティブを追加します。
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! Toggle word wrap Toggle overflow オプション: 他のホストも 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! Toggle word wrap Toggle overflow ipaddr
パラメーターは IPv4 および IPv6 アドレスを受け入れ、オプションのクラスレスドメイン間ルーティング (CIDR) 表記を使用して範囲を指定できます。ただし、このパラメーターに設定できる値は 1 つだけです。たとえば、IPv4 アドレスと IPv6 アドレスの両方へのアクセスを許可するには、2 つのクライアントディレクティブを追加する必要があります。ホスト名や IP 範囲が使用される場所を説明する単語など、クライアントディレクティブのわかりやすい名前を使用します。
設定ファイルを確認します。
radiusd -XC
# radiusd -XC ... Configuration appears to be OK
Copy to Clipboard Copied! Toggle word wrap Toggle overflow firewalld
サービスで RADIUS ポートを開きます。firewall-cmd --permanent --add-service=radius firewall-cmd --reload
# firewall-cmd --permanent --add-service=radius # firewall-cmd --reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow radiusd
サービスを有効にして開始します。systemctl enable --now radiusd
# systemctl enable --now radiusd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
トラブルシューティング
radiusd
サービスの起動に失敗した場合は、IdM サーバーのホスト名を解決できることを確認します。host -v idm_server.idm.example.com
# host -v idm_server.idm.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow その他の問題が発生した場合は、
radiusd
をデバッグモードで実行します。radiusd
サービスを停止します。systemctl stop radiusd
# systemctl stop radiusd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デバッグモードでサービスを開始します。
radiusd -X
# radiusd -X ... Ready to process requests
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Verification
セクションで参照されているように、FreeRADIUS ホストで認証テストを実行します。
次のステップ
- 不要になった認証方法や使用しないその他の機能を無効にします。
20.4. 有線ネットワークで hostapd をオーセンティケーターとして設定する リンクのコピーリンクがクリップボードにコピーされました!
ホストアクセスポイントデーモン (hostapd
) サービスは、有線ネットワークでオーセンティケーターとして機能し、802.1X 認証を提供できます。このため、hostapd
サービスには、クライアントを認証する RADIUS サーバーが必要です。
hostapd
サービスは、統合された RADIUS サーバーを提供します。ただし、統合 RADIUS サーバーはテスト目的でのみ使用してください。実稼働環境では、さまざまな認証方法やアクセス制御などの追加機能をサポートする FreeRADIUS サーバーを使用します。
hostapd
サービスはトラフィックプレーンと相互作用しません。このサービスは、オーセンティケーターとしてのみ機能します。たとえば、hostapd
制御インターフェイスを使用するスクリプトまたはサービスを使用して、認証イベントの結果に基づいてトラフィックを許可または拒否します。
前提条件
-
hostapd
パッケージをインストールしました。 - FreeRADIUS サーバーが設定され、クライアントを認証する準備が整いました。
手順
次のコンテンツで
/etc/hostapd/hostapd.conf
ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow この設定で使用されるパラメーターの詳細は、
/usr/share/doc/hostapd/hostapd.conf
サンプル設定ファイルの説明を参照してください。hostapd
サービスを有効にして開始します。systemctl enable --now hostapd
# systemctl enable --now hostapd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
トラブルシューティング
hostapd
サービスの起動に失敗した場合は、/etc/hostapd/hostapd.conf
ファイルで使用するブリッジインターフェイスがシステム上に存在することを確認します。ip link show br0
# ip link show br0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow その他の問題が発生した場合は、
hostapd
をデバッグモードで実行します。hostapd
サービスを停止します。systemctl stop hostapd
# systemctl stop hostapd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デバッグモードでサービスを開始します。
hostapd -d /etc/hostapd/hostapd.conf
# hostapd -d /etc/hostapd/hostapd.conf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
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! Toggle word wrap Toggle overflow 次のコンテンツで
/etc/wpa_supplicant/wpa_supplicant-TTLS.conf
ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 認証するには:
FreeRADIUS サーバーには、次のように実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -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! Toggle word wrap Toggle overflow -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
ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコンテンツで
/etc/systemd/system/802-1x-tr-mgmt@.service
サービスファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemd を再ロードします。
systemctl daemon-reload
# systemctl daemon-reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
検証
- ネットワークに対してクライアントで認証します。FreeRADIUS サーバーまたはオーセンティケーターに対する EAP-TTLS 認証のテスト を参照してください。
第21章 キーファイル形式の NetworkManager 接続プロファイル リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Enterprise Linux (RHEL) の NetworkManager は、接続プロファイルをキーファイル形式で保存します。この形式は、NetworkManager が提供するすべての接続設定をサポートします。
ifcfg
形式の接続プロファイルは RHEL 10 ではサポートされていません。NetworkManager はこの形式のファイルを無視します。また、RHEL 10 でキーファイル形式に変換することもできません。
21.1. NetworkManager プロファイルのキーファイル形式 リンクのコピーリンクがクリップボードにコピーされました!
キーファイルの形式は INI 形式に似ています。たとえば、次はキーファイル形式のイーサネット接続プロファイルです。
パラメーターの入力や配置を誤ると、予期しない動作が発生する可能性があります。したがって、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! Toggle word wrap Toggle overflow 注記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! Toggle word wrap Toggle overflow NetworkManager 接続をリロードします。
nmcli connection reload
# nmcli connection reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow プロファイルの
autoconnect
変数をfalse
に設定した場合は、コネクションをアクティブにします。nmcli connection up Example-Connection
# nmcli connection up Example-Connection
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 新しく作成された接続が出力に表示されない場合は、使用したキーファイルのパーミッションと構文が正しいことを確認してください。
接続プロファイルを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
21.3. キーファイル形式での NetworkManager プロファイルの手動作成 リンクのコピーリンクがクリップボードにコピーされました!
NetworkManager 接続プロファイルは、キーファイル形式で手動で作成できます。
設定ファイルを手動で作成または更新すると、予期しないネットワーク設定や、機能しないネットワーク設定が発生する可能性があります。代わりに、オフラインモードで nmcli
を使用できます。nmcli
を使用したオフラインモードでのキーファイル接続プロファイルの作成 を参照してください。
手順
接続プロファイルを作成します。たとえば、DHCP を使用する
enp1s0
イーサネットデバイスの接続プロファイルを作成する場合は、次の内容の/etc/NetworkManager/system-connections/example.nmconnection
ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ファイル名には、
.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! Toggle word wrap Toggle overflow 接続プロファイルを再読み込みします。
nmcli connection reload
# nmcli connection reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow このコマンドで、新しく追加した接続が表示されない場合は、ファイルの権限と、ファイルで使用した構文が正しいことを確認します。
プロファイルの
autoconnect
変数をfalse
に設定した場合は、コネクションをアクティブにします。nmcli connection up Example-Connection
# nmcli connection up Example-Connection
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
接続プロファイルを表示します。
nmcli connection show Example-Connection
# nmcli connection show Example-Connection
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第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
: NetworkManager が IPv4 ゲートウェイから ping 応答を受信するまで、ネットワークのアクティブ化を遅延します。システムは、次の処理に進む前に、最大で指定された秒数だけ待機します。 -
ip-ping-timeout
およびip-ping-addresses
: NetworkManager がip-ping-addresses
で定義されたホストから ping 応答を受信するまで、ネットワークのアクティブ化を遅延します。システムは、次の処理に進む前に、最大で指定された秒数だけ待機します。
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! Toggle word wrap Toggle overflow 以下を入力し、変更を保存します。
[Unit] After=network-online.target
[Unit] After=network-online.target
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemd
サービスを再度読み込みます。systemctl daemon-reload
# systemctl daemon-reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow 注記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! Toggle word wrap Toggle overflow ipv4.may-fail
属性をno
に設定すると、確実に IPv4 設定が正常に完了します。接続を再度有効にします。
nmcli connection up enp1s0
# nmcli connection up enp1s0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第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
ライブラリーをインポートし、利用可能なネットワークインターフェイスとその状態を表示します。
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! Toggle word wrap Toggle overflow このコマンドにより、
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! Toggle word wrap Toggle overflow 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 |
|
|
たとえば、上記のように作成した動的 IP アドレス設定の接続ステータスのみを変更するには、Playbook で次の vars
ブロックを使用します。
状態設定を含む Playbook | 通常の Playbook |
|
|
第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! Toggle word wrap Toggle overflow オプション: RHEL カーネルのサブフロー制限のデフォルトは 2 です。不足する場合、以下を実行します。
次の内容で
/etc/systemd/system/set_mptcp_limit.service
ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ワンショット ユニットは、各ブートプロセス中にネットワーク (
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! Toggle word wrap Toggle overflow
接続のアグリゲーションに使用するすべての接続プロファイルで 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow デフォルトでは不足する場合に備えて、サブフロー制限を適切に設定していることを確認します。
ip mptcp limit show
# ip mptcp limit show add_addr_accepted 2 subflows 3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow アドレスごとの MPTCP 設定が正しく設定されていることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow mptcpd
サービスを有効にして起動します。systemctl enable --now mptcp.service
# systemctl enable --now mptcp.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mptcpd
サービスを手動で設定するには、/etc/mptcpd/mptcpd.conf
設定ファイルを変更します。mptcpd サービスが作成するエンドポイントは、ホストがシャットダウンするまで続くことに注意してください。
検証
エンドポイントの作成を確認します。
ip mptcp endpoint
# ip mptcp endpoint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第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! Toggle word wrap Toggle overflow 現在の
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! Toggle word wrap Toggle overflow -
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! Toggle word wrap Toggle overflow 現在のイーサネット接続の
qdisc
を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 既存の
qdisc
を更新します。sysctl -w net.core.default_qdisc=pfifo_fast
# sysctl -w net.core.default_qdisc=pfifo_fast
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を適用するには、ネットワークドライバーを再読み込みします。
modprobe -r NETWORKDRIVERNAME modprobe NETWORKDRIVERNAME
# modprobe -r NETWORKDRIVERNAME # modprobe NETWORKDRIVERNAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ネットワークインターフェイスを起動します。
ip link set enp0s1 up
# ip link set enp0s1 up
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
イーサネット接続の
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! Toggle word wrap Toggle overflow
25.4. tc ユーティリティーを使用してネットワークインターフェイスの現在の qdisc を一時的に設定する手順 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトの qdisc を変更せずに、現在の qdisc
を更新できます。
手順
オプション: 現在の
qdisc
を表示します。tc -s qdisc show dev enp0s1
# tc -s qdisc show dev enp0s1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 現在の
qdisc
を更新します。tc qdisc replace dev enp0s1 root htb
# tc qdisc replace dev enp0s1 root htb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
更新された現在の
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! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow 現在の
qdisc
を更新します。nmcli connection modify enp0s1 tc.qdiscs 'root pfifo_fast'
# nmcli connection modify enp0s1 tc.qdiscs 'root pfifo_fast'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 必要に応じて、既存の
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! Toggle word wrap Toggle overflow 変更を有効にします。
nmcli connection up enp0s1
# nmcli connection up enp0s1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ネットワークインターフェイスの現在の
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! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow このコマンドには次のパラメーターがあります。
name ifb4eth0
- 新しい仮想デバイスインターフェイスを設定します。
numtxqueues 48
- 送信キューの数を設定します。
numrxqueues 48
- 受信キューの数を設定します。
type ifb
- 新しいデバイスのタイプを設定します。
インターフェイスの状態を変更します。
ip link set dev ifb4eth0 up
# ip link set dev ifb4eth0 up
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 物理ネットワークインターフェイスに
qdisc
属性を追加し、それを受信トラフィックに適用します。tc qdisc add dev enp1s0 handle ffff: ingress
# tc qdisc add dev enp1s0 handle ffff: ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow このコマンドには次の属性があります。
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! Toggle word wrap Toggle overflow このコマンドは、メジャー番号
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! Toggle word wrap Toggle overflow このコマンドには次のパラメーターがあります。
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! Toggle word wrap Toggle overflow ファイアウォールマーク (
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! Toggle word wrap Toggle overflow 接続マーク (
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! Toggle word wrap Toggle overflow このコマンドでは、
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! Toggle word wrap Toggle overflow 指定された宛先アドレス
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! Toggle word wrap Toggle overflow パケットマークを接続マークに保存します。
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! Toggle word wrap Toggle overflow -s
パラメーターを使用して、iperf3
ユーティリティーをシステム上のサーバーとして実行すると、サーバーはクライアント接続の応答を待ちます。iperf3 -s
# iperf3 -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
クライアント上で、
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! Toggle word wrap Toggle overflow 192.0.2.3
はサーバーの IP アドレスで、192.0.2.4
はクライアントの IP アドレスです。Ctrl+C を押して、サーバー上の
iperf3
ユーティリティーを終了します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ctrl+C を押して、クライアント上の
iperf3
ユーティリティーを終了します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
インターフェイス上の
htb
クラスとsfq
クラスのパケット数に関する統計情報を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow mirred
アクションとctinfo
アクションのパケット数の統計情報を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow htb
レートリミッターとその設定の統計情報を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow
検証
libibverbs-utils
およびinfiniband-diags
パッケージをインストールします。dnf install libibverbs-utils infiniband-diags
# dnf install libibverbs-utils infiniband-diags
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 利用可能な InfiniBand デバイスのリストを表示します。
ibv_devices
# ibv_devices mlx5_0 946dae0300418002 mlx5_1 946dae0300418003
Copy to Clipboard Copied! Toggle word wrap Toggle overflow mlx5_0
デバイスの情報を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow mlx5_0
デバイスのステータスを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow ホスト上でローカル識別子 (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! Toggle word wrap Toggle overflow
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
のハードウェアアドレスを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow このリンクファイルによって MAC アドレスが照合され、ネットワークインターフェイスの名前が
Name
パラメーターに設定された名前に変更されます。
検証
ホストを再起動します。
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow リンクファイルで指定した MAC アドレスを持つデバイスが
mlx5_ib0
に割り当てられていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow P_Key
を設定します。次に例を示します。nmcli connection modify mlx5_ib0 infiniband.p-key 0x8002
# nmcli connection modify mlx5_ib0 infiniband.p-key 0x8002
Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4 を設定します。
DHCP を使用するには、次のように実行します。
nmcli connection modify mlx5_ib0 ipv4.method auto
# nmcli connection modify mlx5_ib0 ipv4.method auto
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
IPv6 設定を行います。
ステートレスアドレス自動設定 (SLAAC) を使用するには、次のように実行します。
nmcli connection modify mlx5_ib0 ipv6.method auto
# nmcli connection modify mlx5_ib0 ipv6.method auto
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
プロファイルの他の設定をカスタマイズするには、次のコマンドを使用します。
nmcli connection modify mlx5_ib0 <setting> <value>
# nmcli connection modify mlx5_ib0 <setting> <value>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 値はスペースまたはセミコロンで引用符で囲みます。
プロファイルをアクティブ化します。
nmcli connection up mlx5_ib0
# nmcli connection up mlx5_ib0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ping
ユーティリティーを使用して、ICMP パケットをリモートホストの InfiniBand アダプターに送信します。次に例を示します。ping -c5 192.0.2.2
# ping -c5 192.0.2.2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプル 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! Toggle word wrap Toggle overflow このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
mlx5_ib0.8002
デバイスの IP 設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
26.3.6. nmstatectl を使用して IPoIB 接続を設定する リンクのコピーリンクがクリップボードにコピーされました!
nmstatectl
ユーティリティーを使用して、Nmstate API を介して IP over InfiniBand (IPoIB) 接続を設定できます。Nmstate API は、設定を行った後、結果が設定ファイルと一致することを確認します。何らかの障害が発生した場合には、nmstatectl
は自動的に変更をロールバックし、システムが不正な状態のままにならないようにします。
前提条件
- InfiniBand デバイスがサーバーにインストールされている。
- InfiniBand デバイスのカーネルモジュールがロードされている。
手順
次の内容を含む YAML ファイル (例:
~/create-IPoIB-profile.yml
) を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
検証
mlx5_ib0.8002
デバイスの IP 設定を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 以下のコマンドを使用します。
サーバーとして動作するシステムでテスト結果を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow クライアントとして動作するシステムでテスト結果を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow デフォルトの 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! Toggle word wrap Toggle overflow デフォルトの 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! Toggle word wrap Toggle overflow
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! Toggle word wrap Toggle overflow 詳細は、システム上の
limits.conf(5)
man ページを参照してください。
検証
/etc/security/limits.conf
ファイルの編集後、rdma
グループのメンバーとしてログインします。Red Hat Enterprise Linux は、ユーザーのログイン時に、更新された
ulimit
の設定を適用することに注意してください。ulimit -l
コマンドを使用して制限を表示します。ulimit -l
$ ulimit -l unlimited
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドが
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! Toggle word wrap Toggle overflow パッケージがすでにインストールされている場合は、
/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! Toggle word wrap Toggle overflow オプション: デフォルトでは、NFS over RDMA はポート 20049 を使用します。別のポートを使用する場合は、
/etc/nfs.conf
ファイルの[nfsd]
セクションでrdma-port
設定を指定します。rdma-port=<port>
rdma-port=<port>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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! Toggle word wrap Toggle overflow 20049 以外のポートを設定する場合は、ポート番号を変更します。
nfs-server
サービスを再起動します。systemctl restart nfs-server
# systemctl restart nfs-server
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
InfiniBand ハードウェアを搭載したクライアントで、次の手順を実行します。
以下のパッケージをインストールします。
dnf install nfs-utils rdma-core
# dnf install nfs-utils rdma-core
Copy to Clipboard Copied! Toggle word wrap Toggle overflow エクスポートされた NFS 共有を RDMA 経由でマウントします。
mount -o rdma server.example.com:/nfs/projects/ /mnt/
# mount -o rdma server.example.com:/nfs/projects/ /mnt/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルト (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! Toggle word wrap Toggle overflow rdma
オプションを使用して共有がマウントされたことを確認します。mount | grep "/mnt"
# mount | grep "/mnt" server.example.com:/nfs/projects/ on /mnt type nfs (...,proto=rdma,...)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
26.7. InfiniBand サブネットマネージャー リンクのコピーリンクがクリップボードにコピーされました!
すべての InfiniBand ネットワークでは、ネットワークが機能するために、サブネットマネージャーが実行されている必要があります。これは、2 台のマシンがスイッチなしで直接接続されている場合にも当てはまります。
複数のサブネットマネージャーを使用することもできます。その場合、1 つのサブネットマネージャーはコントローラーとして、もう 1 つはポートとして機能します。ポートは、マスターサブネットマネージャーに障害が発生した場合に引き継ぎます。
Red Hat Enterprise Linux は、InfiniBand サブネットマネージャーの実装である OpenSM
を提供します。ただし、OpenSM
は機能が限られており、アップストリームの開発が活発に行われていません。通常、InfiniBand スイッチに組み込まれているサブネットマネージャーのほうが、より多くの機能を備えており、最新の InfiniBand ハードウェアをサポートしています。詳細は、Installing and configuring the OpenSM InfiniBand subnet manager を参照してください。