パケットメタクラスが適用されましたが、キャプチャされたVLAN優先順位が正しくありません。

パケットメタクラスが適用されましたが、キャプチャされたVLAN優先順位が正しくありません。

私のLinuxホームルーターはISP(オレンジ色)とホームネットワークの間にあります。 WAN 側では、Orange は 832 タグ付き VLAN でインターネットを提供します。

特定の制御メッセージ(ARP、DHCP、ICMPv6「ルーター検索」タイプ、DHCPv6)には、次のようにOrangeへの応答が必要です。 - VLAN優先順位= 6 - IPv4またはIPv6 DSCP = "CS6"(6ビット0x30または10進数48)

最初の問題は、ブートシーケンスDHCP v4メッセージの場合、isc-dhclientが設計上LinuxカーネルIPスタックをバイパスするネイティブイーサネットパケットソケットを使用する必要があることです。したがって、netfilterを使用してIPv4 DSCPまたはメタクラスを割り当てることはできませんが、今はそれを残しておきます。

以下は、IP DSCPとメタ優先順位の変更に関するnftables設定ダンプです。 me@debox:~$ sudo /usr/sbin/nft list ruleset

table inet fltr46 {
    chain assign-orange-prio {
        ip version 4 udp sport { bootps, bootpc} ip dscp set cs6 meta priority set 0:6 counter packets 0 bytes 0 comment "isc-dhclient LPF socket bypass netfilter"
        icmpv6 type { nd-neighbor-solicit, nd-router-solicit} ip6 dscp set cs6 meta priority set 0:6 counter packets 8 bytes 480
        udp sport { dhcpv6-client, dhcpv6-server} ip6 dscp set cs6 meta priority set 0:6 counter packets 4 bytes 1180
    }

    chain postrouting {
        type filter hook postrouting priority 0; policy accept;
        oifname vmap { "enp1s0.832" : goto assign-orange-prio}
    }

    chain output {
        type filter hook output priority 0; policy accept;
        oifname vmap { "enp1s0.832" : goto assign-orange-prio }
    }
}
table arp arp4 {
    chain output {
        type filter hook output priority 0; policy accept;
        oifname ! "enp1s0.832" accept
        meta priority set 0:6 counter packets 851 bytes 35742
    }
}

私のVLAN 832設定は次のとおりです。

me@debox:~$ sudo cat /proc/net/vlan/enp1s0.832 
enp1s0.832  VID: 832     REORDER_HDR: 1  dev->priv_flags: 1001
Device: enp1s0
INGRESS priority mappings: 0:0  1:0  2:0  3:0  4:0  5:0  6:0 7:0
 EGRESS priority mappings: 6:6

これは、送信の場合、クラス 6 パケット -> VLAN prio 6 を意味します。

DHCPv6、ICMPv6「ルータ」、およびARPのnftablesカウンタが期待どおりに増加します。しかし、Wire Sharkキャプチャ(スイッチポートミラーリングを介して行われます)で問題が検出されました。

  • DHCPv6:わかりました。 DSCP = CS6およびVLAN優先順位 = 6
  • ICMPv6:いいえ。 DSCP = CS6ですが、VLAN優先順位 = 0
  • ARP:いいえ。 VLAN優先順位= 0
  • 通常のUDPソケットを介して送信されたIPv4 DHCPリースアップデートパケットも問題ありません(DSCP + VLAN prio)。

VLAN優先順位はARPおよびICMPv6パケットに正しく適用されません。 Linuxカーネルで生成されたARPおよびICMPv6メッセージの場合、メタクラスがVLAN prioに正しく変換されない理由をさらにデバッグする方法はありますか?

答え1

ソースの問題は、VLAN インターフェイスに関連する単純な順序の問題です。私のネットワークインターフェイス永続ファイルが最初に間違って設定されました。

# WAN vlan 832 internet
auto enp1s0.832
iface enp1s0.832 inet dhcp
  up ip link set enp1s0.832 type vlan egress 0:0 1:0 2:0 3:0 4:0 5:0 6:6 7:0
iface enp1s0.832 inet6 dhcp
  up ip link set enp1s0.832 type vlan egress 0:0 1:0 2:0 3:0 4:0 5:0 6:6 7:0
  request_prefix 1
  accept_ra 2

悪い部分は「up」コマンドです。初期ARP / DHCP / NDPがすでに発生している場合、送信マッピングは遅すぎます。修正はとても簡単です。事前準備を使用してください。

# WAN vlan 832 internet
auto enp1s0.832
iface enp1s0.832 inet dhcp
  pre-up ip link set enp1s0.832 type vlan egress 0:0 1:0 2:0 3:0 4:0 5:0 6:6 7:0
iface enp1s0.832 inet6 dhcp
  pre-up ip link set enp1s0.832 type vlan egress 0:0 1:0 2:0 3:0 4:0 5:0 6:6 7:0
  request_prefix 1
  accept_ra 2

このようにして、初期ARP / DHCP / NDPハンドシェイクは正しいQoS優先順位で完了します。

関連情報