web-dev-qa-db-ja.com

CentOS 7 DHCPクライアント-「classless-static-routes」(「コード121」)の使用方法

この答えによると...

https://unix.stackexchange.com/a/457577/61742

...次の構成を使用して、/etc/dhclient.confまたは/etc/dhcp3/dhclient.confファイルに次の構成を配置することにより、DHCPサーバーからプッシュされたルートをDHCPクライアントで使用できます...

option classless-static-routes code 121 = array of { ip-address, ip-address };

しかし、CentOS 7ではこのファイルは存在しませんが、次のファイルは...

[root@localhost ~]# ps -eaf | grep dhcli
root       780   650  0 15:02 ?        00:00:00 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-enp0s8.pid -lf /var/lib/NetworkManager/dhclient-00cb8299-feb9-55b6-a378-3fdc720e0bc6-enp0s8.lease -cf /var/lib/NetworkManager/dhclient-enp0s8.conf enp0s8
root       783   650  0 15:02 ?        00:00:00 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-enp0s17.pid -lf /var/lib/NetworkManager/dhclient-8512e951-6012-c639-73b1-5b4d7b469f7f-enp0s17.lease -cf /var/lib/NetworkManager/dhclient-enp0s17.conf enp0s17
root      2218  1152  0 15:36 pts/0    00:00:00 grep --color=auto dhcli

注:「-cf」パラメータの値に注意してください(ファイル:/var/lib/NetworkManager/dhclient-enp0s8.confおよび/var/lib/NetworkManager/dhclient-enp0s17.conf)。

私の質問は:CentOS 7 DHCPクライアントで「classless-static-routes」(コード121)を使用する正しい方法は何ですか?

ありがとう!


PLUS:

これは私のISC KEA DHCP(DHCPv4)の設定です...

cat /usr/local/etc/kea/kea-dhcp4.conf

[...]
"option-def": [{
        "name": "rfc3442-classless-static-routes",
        "code": 121,
        "space": "dhcp4",
        "type": "record",
        "record-types": "uint8,uint8,uint8,ipv4-address"
    }
],
"option-data": [{
        "name": "rfc3442-classless-static-routes",
        "data": "10,1,4, 10.1.6.4"
}]
[...]

目標は、10.1.4.0/24への要求がDHCPクライアントのip 10.1.6.4/32にルーティングされることです。

注:DHCPクライアントごとにip route add 10.1.4.0/24 dev enp0s8 via 10.1.6.4コマンドで取得するのと同じです。

3
Eduardo Lucio

恥知らずなコピー この回答から

DHCP経由でこれを行う場合は、RedHatナレッジベースの記事 ここに に従ってDHCPクライアントを適切に設定していることを確認してください。

DHCPサーバーによって提供されるRFC3442標準のクラスレス静的ルートがNetworkManagerの使用時に正しく処理されるようにするには、次の行を/etc/dhclient.confに配置する必要があります。インターフェースごとのDHCPオプションを使用する場合は/etc/dhclient-<ifname>.conf

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8; 
option ms-classless-static-routes code 249 = array of unsigned integer 8; 
also request rfc3442-classless-static-routes;
also request ms-classless-static-routes;

これらの行により、RFC3442クラスレス静的ルートがDHCPサーバーから要求され、NetworkManagerによって適切に処理されることが保証されます。

2
Isaac

実際、この回答は@Isaacの回答を補足するものであり、提示された問題について、いくつかの落とし穴-少し明白に思えるかもしれませんが、私にはわかりません。

まず、提示されたユニバースにはパターンがいくつかありますが、DHCPサーバーで構成されているものとDHCPクライアントで期待されているものとの相関関係を理解する必要があります。実際には、「option-def」->「name」などのパラメータは、「rfc3442-classless-static-routes」と「classless-static-routes」の間で変化し、「option-def」->「record-types」の間は「 uint8、uint8、uint8、ipv4-address」および「uint8、uint8、uint8、uint8、uint8、uint8、uint8、uint8」など...つまり、DHCPクライアントが「その他」から期待するものに依存します。側」基本的に。

CentOS 7の場合、スレッドで指摘されている内容 https://unix.stackexchange.com/a/459963/61742 はデフォルトですでに構成されているため、ISCで構成するだけで済みますCentOS 7が「反対側」から待機するKEA DHCP(DHCPv4)(私の場合)。

最後に、設定は次のようになります...

cat /usr/local/etc/kea/kea-dhcp4.conf

[...]
"option-def": [{
        "name": "rfc3442-classless-static-routes",
        "code": 121,
        "space": "dhcp4",
        "type": "record",
        "array": true,
        "record-types": "uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8"
    }
],
"option-data": [{
        "name": "rfc3442-classless-static-routes",
        "data": "24,10,1,4,10,1,6,4"
}]
[...]

... CentOS 7は次のように構成されているため...

cat /var/lib/NetworkManager/dhclient-enp0s8.conf

[...]
option rfc3442-classless-static-routes code 121 = array of unsigned integer 8; 
also request rfc3442-classless-static-routes;
[...]

いくつかの明確化:

"record-types"はマスクです。つまり、CentOS 7で期待されているように、 "符号なし整数8の配列"(uint8)であることが "date"で通知される配列の各位置にあるものです。

「データ」は次の例に従って機能します。次のルーティング10.1.4.0/24 via 10.1.6.4が必要な場合は、"24,10,1,4,10,1,6,4"に通知します。 10.1.4.0/24のゼロは3オクテット(/ 24)のマスクであるため、省略してください。

ヒント:「option-data」パラメータは、「subnet4」(ファイル「/ usr/local/etc/kea/kea」の複数の場所に配置できます-dhcp4.conf ")。これは、ルーティングの構成をどのように配布するかによって異なります。

@ Isaac、@ Rui F Ribeiro、@ A.Bに特に感謝します。

1
Eduardo Lucio