A while back I started on a quest to make cake 'nat' aware as the lack
of host fairness in a typical home router environment was the only thing
that prevented cake from being the ultimate qdisc in my opinion. This
involves dealing with conntrack which on egress is easy (the kernel
fills in a data structure for us), ingress is less clear. I hacked
something together but wasn't really happy with it.
Another github user 'tegularius' presented some beautifully crafted code
that did the lookups in a much neater way. Originally it too had an
'ingress' lookup problem. This was worked on and I hacked some
conditional 'denat' options into cake & tc.
For your 'delight' a denat cake
https://github.com/kdarbyshirebryant/sch_cake/tree/natoptions along with
a matching tc https://github.com/kdarbyshirebryant/tc-adv/tree/denat
Typically I use 'dual-srchost srcnat' options on the egress interface,
with 'dual-dsthost dstnat' in the ingress ifb interface. In *brief*
testing, bandwidth is shared fairly between hosts, and fairly by flow
within each host. And it's not crashed yet.
Cake mailing list