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,
-- 
Ivan Shapovalov / intelfx /

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to