bugzilla-daemon at netfilter.org
2023-Aug-22 17:03 UTC
[Bug 1700] New: Flowtable - Bug on devices deinition
https://bugzilla.netfilter.org/show_bug.cgi?id=1700
Bug ID: 1700
Summary: Flowtable - Bug on devices deinition
Product: nftables
Version: 1.0.x
Hardware: x86_64
OS: Debian GNU/Linux
Status: NEW
Severity: enhancement
Priority: P5
Component: nft
Assignee: pablo at netfilter.org
Reporter: nicolasfort1988 at gmail.com
--- Kernel and packages ---
Kernel: 6.1.45
vyos at vyos# sudo dpkg -l | grep nft
ii libnftables1:amd64 1.0.8-1 amd64
Netfilter nftables high level userspace API library
ii libnftnl11:amd64 1.2.6-1 amd64
Netfilter nftables userspace API library
ii miniupnpd-nftables 2.3.1-1 amd64
UPnP and NAT-PMP daemon for gateway routers - nftables backend
ii nftables 1.0.8-1 amd64
Program to control packet filtering rules by Netfilter project
--- Scenario ---
* Traffic passing through the router through eth3 and eth4
* interfaces eth1 and eth2 are not in use (unplugged)
* While defining flowtable for interfaces eth1 and eth2, I would expect no
OFFLOAD flag in conntrack.
* However, I see OFFLOAD for all udp sessions (1k).
* Also, while defining no interfaces/devices in the flowtable definition, I
still get OFFLOAD (example exposed above).
--- Interface configuration ---
* eth3 and eth4 used for routing
* eth1 and eth2 unpluged:
vyos at picopc# ip a
3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN
group
default qlen 1000
link/ether 00:f0:cb:ef:dd:f8 brd ff:ff:ff:ff:ff:ff
inet6 fe80::2f0:cbff:feef:ddf8/64 scope link tentative
valid_lft forever preferred_lft forever
4: eth2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN
group
default qlen 1000
link/ether 00:f0:cb:ef:dd:f9 brd ff:ff:ff:ff:ff:ff
inet6 fe80::2f0:cbff:feef:ddf9/64 scope link tentative
valid_lft forever preferred_lft forever
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP
group
default qlen 1000
link/ether 00:02:c9:cd:86:7c brd ff:ff:ff:ff:ff:ff
inet 16.0.0.1/8 brd 16.255.255.255 scope global eth3
valid_lft forever preferred_lft forever
inet6 fe80::202:c9ff:fecd:867c/64 scope link
valid_lft forever preferred_lft forever
6: eth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP
group
default qlen 1000
link/ether 00:02:c9:cd:86:7d brd ff:ff:ff:ff:ff:ff
inet 15.0.0.1/8 brd 15.255.255.255 scope global eth4
valid_lft forever preferred_lft forever
inet6 fe80::202:c9ff:fecd:867d/64 scope link
valid_lft forever preferred_lft forever
--- ip filter table ---
vyos at vyos# sudo nft list table ip vyos_filter
table ip vyos_filter {
flowtable ft_test03 {
hook ingress priority filter
}
chain VYOS_FORWARD_filter {
type filter hook forward priority filter; policy accept;
ip protocol udp counter packets 1385097903 bytes 2077646854500 flow add
@ft_test03
meta l4proto { tcp, udp } counter packets 2076678808 bytes
3115018212000 accept comment "FWD-filter-10"
}
chain VYOS_INPUT_filter {
type filter hook input priority filter; policy accept;
}
chain VYOS_OUTPUT_filter {
type filter hook output priority filter; policy accept;
}
chain VYOS_FRAG_MARK {
type filter hook prerouting priority -450; policy accept;
ip frag-off & 16383 != 0 meta mark set 0x000ffff1 return
}
}
[edit]
--- Contrack output while traffic passing through eth3-eth4 ---
vyos at vyos# sudo conntrack -L | grep -c OFFLOAD
conntrack v1.4.6 (conntrack-tools): 1011 flow entries have been shown.
1000
[edit]
vyos at vyos#
--
You are receiving this mail because:
You are watching all bug changes.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230822/26d4b0ea/attachment.html>
bugzilla-daemon at netfilter.org
2023-Aug-22 17:09 UTC
[Bug 1700] Flowtable - Bug on devices deinition
https://bugzilla.netfilter.org/show_bug.cgi?id=1700 --- Comment #1 from nicolasfort1988 at gmail.com --- So, it seems that defining flowtable and appropriate rule in forward-filter, it's enough to OFFLOAD all connections that goes through the router, no matter if *devices* are define properly, or interfaces involved are bit included in the flowtable definition -- You are receiving this mail because: You are watching all bug changes. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230822/14c62072/attachment.html>
bugzilla-daemon at netfilter.org
2023-Aug-22 17:15 UTC
[Bug 1700] Flowtable - Bug on devices deinition
https://bugzilla.netfilter.org/show_bug.cgi?id=1700
--- Comment #2 from Pablo Neira Ayuso <pablo at netfilter.org> ---
You have to narrow down this rule to what flows get into the flowtable:
iifname { eth1, eth2 } ip protocol udp counter packets 1385097903 bytes
2077646854500 flow add @ft_test03
in case you want flowtable coming from from eth1 and eth2.
*Your ruleset determines what flows get added to the flowtable*.
This flowtable in the example below specify no devices:
table ip vyos_filter {
flowtable ft_test03 {
hook ingress priority filter
}
The devices you specify in the flowtable declaration determine from what device
the flowtable look up is done.
--
You are receiving this mail because:
You are watching all bug changes.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230822/36e7b605/attachment.html>
bugzilla-daemon at netfilter.org
2023-Aug-22 17:43 UTC
[Bug 1700] Flowtable - Bug on devices deinition
https://bugzilla.netfilter.org/show_bug.cgi?id=1700
--- Comment #3 from nicolasfort1988 at gmail.com ---
So there's no correlation between 'devices' definition in flowtable,
and
'iifname' in ruleset?
For example:
vyos at picopc# sudo nft list table ip vyos_filter
table ip vyos_filter {
flowtable ft_test {
hook ingress priority filter
devices = { eth1, eth2 }
}
chain VYOS_FORWARD_filter {
type filter hook forward priority filter; policy accept;
iifname { "eth3", "eth4" } ip protocol udp counter
packets 34409310
bytes 51613965000 flow add @ft_test
meta l4proto { tcp, udp } counter packets 2111088123 bytes
3166632184500 accept comment "FWD-filter-10"
}
chain VYOS_INPUT_filter {
type filter hook input priority filter; policy accept;
}
chain VYOS_OUTPUT_filter {
type filter hook output priority filter; policy accept;
}
chain VYOS_FRAG_MARK {
type filter hook prerouting priority -450; policy accept;
ip frag-off & 16383 != 0 meta mark set 0x000ffff1 return
}
}
[edit]
vyos at picopc# sudo conntrack -L | grep -c OFFLOAD
conntrack v1.4.6 (conntrack-tools): 1016 flow entries have been shown.
Seems like 'device' deifnition in flowtables is unnecessary, and what
really
matters is interace mather in the rule.
--
You are receiving this mail because:
You are watching all bug changes.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230822/6f222c8c/attachment.html>
bugzilla-daemon at netfilter.org
2023-Aug-22 17:55 UTC
[Bug 1700] Flowtable - Bug on devices deinition
https://bugzilla.netfilter.org/show_bug.cgi?id=1700
--- Comment #4 from Pablo Neira Ayuso <pablo at netfilter.org> ---
1) Your ruleset determines what flows are added to the flowtable. Below your
ruleset adds entries to the flowtable for UDP packets coming in from eth1 and
eth2.
2) The devices you specify in the flowtable declaration determine where the
flowtable hooks in the pipeline for lookups, in the example below, it registers
a hook for devices eth1 and eth2 in the ingress hook at priority 0.
The ruleset should be:
table ip vyos_filter {
flowtable ft_test {
hook ingress priority filter
devices = { eth1, eth2 }
}
chain VYOS_FORWARD_filter {
type filter hook forward priority filter; policy accept;
iifname { "eth1", "eth2" } ip protocol udp counter
flow add @ft_test
meta l4proto { tcp, udp } counter accept comment
"FWD-filter-10"
}
}
--
You are receiving this mail because:
You are watching all bug changes.
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230822/f37bf494/attachment.html>
bugzilla-daemon at netfilter.org
2023-Aug-22 18:07 UTC
[Bug 1700] Flowtable - Bug on devices deinition
https://bugzilla.netfilter.org/show_bug.cgi?id=1700 --- Comment #5 from nicolasfort1988 at gmail.com --- Yes, I do agree that config should be as you remarked: consistence information between 'devices' in flowtable declaration, and 'iifname' in rule-set What I'm trying to say is that in the end, for offloading, it seems it doesn't matter what interfaces I used in the flowtable definition. I could declare no 'devices' at al while defining the flowtable, and then in ruleset just use iffnames for flows I want to offload. If that's the case, then info in https://wiki.nftables.org/wiki-nftables/index.php/Flowtables is not clear. Since only relevant interface configuration seems to be needed in the ruleset, and not in the flowtable definition. -- You are receiving this mail because: You are watching all bug changes. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230822/8613a487/attachment-0001.html>
bugzilla-daemon at netfilter.org
2023-Aug-22 18:32 UTC
[Bug 1700] Flowtable - Bug on devices deinition
https://bugzilla.netfilter.org/show_bug.cgi?id=1700 --- Comment #6 from Pablo Neira Ayuso <pablo at netfilter.org> --- (In reply to nicolasfort1988 from comment #5)> Yes, I do agree that config should be as you remarked: consistence > information between 'devices' in flowtable declaration, and 'iifname' in > rule-set > > What I'm trying to say is that in the end, for offloading, it seems it > doesn't matter what interfaces I used in the flowtable definition. I could > declare no 'devices' at al while defining the flowtable, and then in ruleset > just use iffnames for flows I want to offload.No devices in the flowtable declaration mean that no flowtable lookups occur from the ingress path, hence, fast path is exercised. If you specify no devices in the flowtable declaration, you add entries to the flowtable, but they are never used because no flowtable lookup ever happens.> If that's the case, then info in > https://wiki.nftables.org/wiki-nftables/index.php/Flowtables is not clear. > Since only relevant interface configuration seems to be needed in the > ruleset, and not in the flowtable definition.Both interface configurations are relevant. -- You are receiving this mail because: You are watching all bug changes. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230822/425f50f5/attachment.html>
bugzilla-daemon at netfilter.org
2023-Aug-25 13:27 UTC
[Bug 1700] Flowtable - Bug on devices deinition
https://bugzilla.netfilter.org/show_bug.cgi?id=1700 --- Comment #7 from Pablo Neira Ayuso <pablo at netfilter.org> --- I take this as a feature request: You would like to have a way where flowtable devices do not need to be specified, that is, flowtable autodiscovers the devices where it has to listen for lookups. That is something I can explore. -- You are receiving this mail because: You are watching all bug changes. -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.netfilter.org/pipermail/netfilter-buglog/attachments/20230825/5caf410d/attachment.html>