FSM: Inline Protection NFQUEUE Enhancement
Design
This feature enhances the FSM using multiple Netfilter nfqueues in router mode. De-multiplexing the traffic helps prioritize specific traffic types, such as DNS.
Controller Involvement
Step 1: Configuring the FSM to make it aware of the existence of multiple queues.
Step 2: The core_dpi_dispatch plugin needs to be instructed to use multiple nfqueues to tap traffic. It can be configured as:
$ ovsh -j s Flow_Service_Manager_Config -w handler==core_dpi_dispatch
[
{
"if_name": "br-home.dpi",
"_version": [
"uuid",
"XXXXX9f7-d05f-4bf3-8431-fd4b04d145bd"
],
"other_config": [
"map",
[
[
"excluded_devices",
"${all_gateways}"
],
[
"tap_type",
"fsm_tap_nfqueues"
],
[
"queue_num",
"M-N"
]
]
],
"type": "dpi_dispatcher",
"plugin": "",
"_uuid": [
"uuid",
"XXXXX6ad-b3de-4f8f-bc5c-35f92f949e3d"
],
"pkt_capt_filter": "",
"handler": "core_dpi_dispatch"
}
]
]
In the above schema, the other_config "queue_num" parameter is used to configure multiple nfqueues where:
M(0) → first queue number (lower queue number)
N(1) → last queue number (higher queue number)
If queue_num is not specified as part of other_config, a single queue with queue number 0 is created.
DNS traffic queue number → 1
Rest of the traffic queue number → 0 (the same as for single queue implementation)
Step 3: Configure the OVSDB Netfilter entries.
These are the four extra iptables rules to be added to support multiple NFQUEUES. Here DNS traffic is redirected to queue 1.
iptables -t mangle -I FORWARD -p udp --dport 53 -m connmark --mark 0x1 -j NFQUEUE --queue-num 1 --queue-bypass;
iptables -t mangle -I FORWARD -p udp --sport 53 -m connmark --mark 0x1 -j NFQUEUE --queue-num 1 --queue-bypass;
iptables -t mangle -I INPUT -p udp --dport 53 -m connmark --mark 0x1 -j NFQUEUE --queue-num 1 --queue-bypass;
iptables -t mangle -I OUTPUT -p udp --dport 53 -m connmark --mark 0x1 -j NFQUEUE --queue-num 1 --queue-bypass;
Equivalent Netfilter rules:
ovsh i Netfilter name:="dev_dpi.nfqueue_dns_out" priority:=0 protocol:="ipv4" rule:="-p udp --dport 53 -m connmark --mark 0x1 --queue-num 1 --queue-bypass" status:="enabled" table:="mangle" target:="NFQUEUE" chain:="DPI_NFQUEUE" enable:="true";
ovsh i Netfilter name:="dev_dpi.nfqueue_dns_in" priority:=0 protocol:="ipv4" rule:="-p udp --sport 53 -m connmark --mark 0x1 --queue-num 1 --queue-bypass" status:="enabled" table:="mangle" target:="NFQUEUE" chain:="DPI_NFQUEUE" enable:="true";
OpenFlow rules and iptables rules for a single NFQUEUE implementation remain unaltered. These additional rules configure multiple nfqueues support.
Published Content
https://www.opensync.io/s/EDE-021-030-501_FSM_Plugins.pdf
https://www.opensync.io/s/ERE-021-061-701_FSM_Plugin_Requirements.pdf