[OpenWrt-Devel] Port forwarding strangely broken w/ multi-uplink setup + flow offloading (mt7621)
Ivan Shapovalov
intelfx at intelfx.name
Wed Dec 26 23:45:39 EST 2018
On 2018-12-21 at 05:07 +0300, Ivan Shapovalov wrote:
> Hey,
>
> (I'm sorry if I'm writing to a wrong list but I don't see any other
> channels apart from #openwrt which is likely not watched by anyone.)
>
> I have a multi-uplink setup on a mt7621-based router (Xiaomi R3G).
> This setup uses two routing tables and connmark rules in mangle:
>
> == 8< ==
>
> # cat /etc/iproute2/rt_tables
> <...>
> 1 onl
> 2 rtk
>
> # cat /etc/config/network
> <...>
> config interface 'onl'
> <...>
> option ip4table 'onl'
>
> config interface 'rtk'
> <...>
> option ip4table 'rtk'
>
> config rule
> option priority '40000'
> option mark '1'
> option lookup 'onl'
>
> config rule
> option priority '40001'
> option mark '2'
> option lookup 'rtk'
>
> config rule
> option priority '40002'
> option mark '0'
> option lookup 'rtk'
>
> # cat /etc/firewall.user
> iptables -t mangle -F
> iptables -t mangle -X
> iptables -t mangle -N PREROUTING-NEW
>
> iptables -t mangle -A PREROUTING -m conntrack --ctstate NEW -j
> PREROUTING-NEW
> iptables -t mangle -A PREROUTING-NEW -i eth0.2 -j CONNMARK --set-mark
> 1 # onl
> iptables -t mangle -A PREROUTING-NEW -i eth0.3 -j CONNMARK --set-mark
> 2 # rtk
> iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
>
> == 8< ==
>
> ("onl" and "rtk" are ISP names)
>
> Then, let's suppose we have two port forwarding rules:
>
> == 8< ==
>
> # cat /etc/config/firewall
> <...>
> config redirect
> option target 'DNAT'
> option src 'wan'
> option dest 'lan'
> option src_dport '12345'
> option dest_ip '10.196.254.2'
> option dest_port '12345'
> option name 'test'
> option proto 'tcp'
>
> config redirect
> option target 'DNAT'
> option src 'wan'
>
> option dest 'lan'
> option src_dport '80'
> option
> dest_ip '10.196.254.2'
> option dest_port '80'
> option name
> 'test'
> option proto 'tcp'
>
> == 8< ==
>
> Port 80 is handled by Nginx, port 12345 is handled by `python3 -m
> http.server 12345` (this is significant).
>
> The problem is: requests on port 12345 on both uplinks are correctly
> handled, but requests on port 80 are only responded on "rtk" uplink
> and
> time-out on "onl" uplink.
>
> Observations:
>
> If I change the catch-all routing rule (priority 40002) to point to
> "onl" table, the situation reverses.
>
> If I kill the Nginx worker (e. g. issue a reload), the response goes
> through.
>
> Everything works fine when offloading is completely disabled. (The
> problem manifests with either software or hardware offloading.)
>
> Any clues?
>
> Thanks,
Anyone?
Thanks,
--
Ivan Shapovalov / intelfx /
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part
URL: <http://lists.infradead.org/pipermail/openwrt-devel/attachments/20181227/bbcbbcb1/attachment.sig>
-------------- next part --------------
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list