[4.10.0] Changing LAN IP locks you out of the web admin UI — Block-LAN-mgmt-guest rule created with src='lan'

Device: GL-E5800 (Mudi 7) Firmware: 4.10.0 (release) — also reproduced on 4.10.0 beta2 Not affected: 4.8.5 (release)

Summary

After changing the LAN IP away from the default, the router creates a firewall rule named Block-LAN-mgmt-guest with src='lan' instead of src='guest'. This REJECTs all traffic from LAN clients to the router's own management ports, making the web admin panel and LuCI completely unreachable. SSH (port 22) still works and is the only way back in.

This happens even though the guest network is disabled and cannot be enabled.

Steps to reproduce

  1. Flash 4.10.0, do not keep settings

  2. Go to NETWORK → LAN and change the LAN IP from 192.168.8.1 to 192.168.9.1

  3. Reconnect, then try to open http://192.168.9.1

Expected: admin panel loads Actual: ERR_CONNECTION_REFUSED on 80, 443, 8080 and 8443. SSH still works.

Root cause

network.guest.ipaddr is set to the same address as the LAN:

root@GL-E5800:~# uci show network | grep -E "\.ipaddr="
network.lan.ipaddr='192.168.9.1'
network.guest.ipaddr='192.168.9.1'      <-- identical to LAN
...

root@GL-E5800:~# uci show network | grep -i "guest.disabled"
network.guest.disabled='1'

The guest network is therefore disabled (the UI shows "To avoid conflict between menu_lanip and Guest Network, guest Wi-Fi cannot be activated" — note menu_lanip is an untranslated i18n key leaking into the UI), but the firewall rule is still generated, and with the wrong zone:

root@GL-E5800:~# uci show firewall.@rule[14]
firewall.cfg2192bd=rule
firewall.cfg2192bd.name='Block-LAN-mgmt-guest'
firewall.cfg2192bd.src='lan'                      <-- should be 'guest'
firewall.cfg2192bd.dest_ip='192.168.9.1'
firewall.cfg2192bd.proto='tcp udp'
firewall.cfg2192bd.dest_port='80 443 8080 8443'
firewall.cfg2192bd.target='REJECT'

Which lands in the input_lan chain and rejects the admin's own traffic:

root@GL-E5800:~# nft list chain inet fw4 input_lan | grep Block-LAN
  ip daddr 192.168.9.1 tcp dport { 80, 443, 8080, 8443 } counter packets 14 bytes 896 \
    jump handle_reject comment "!fw4: Block-LAN-mgmt-guest"
  ip daddr 192.168.9.1 udp dport { 80, 443, 8080, 8443 } counter packets 0 bytes 0 \
    jump handle_reject comment "!fw4: Block-LAN-mgmt-guest"

(The packet counter is my own browser attempts. nginx is listening normally on 0.0.0.0:80 and :443 — this is purely a firewall issue.)

Workaround

sh

uci set firewall.@rule[14].src='guest'
uci commit firewall
/etc/init.d/firewall reload

Verified: the rule moves out of input_lan into input_guest, the admin panel becomes reachable again, and the original intent (blocking guests from the management UI) is preserved.

Suggested fixes

  1. Block-LAN-mgmt-guest should always be created with src='guest'

  2. Do not create the rule at all when network.guest.disabled='1'

  3. Changing the LAN IP should not copy that address onto network.guest.ipaddr — pick a non-overlapping subnet instead

  4. Fix the untranslated menu_lanip string in the Guest Network warning

Impact

A user who changes the LAN IP and does not know the root@ SSH trick has no path back into the router short of a factory reset or U-Boot reflash. On a travel router this can happen away from home.

Follow-up: I've narrowed down the trigger.

The guest network uses VLAN 9 and its default address is 192.168.9.1.
The lockout only happens when the LAN IP is set to that same address —
LAN and guest then hold identical IPs, guest gets auto-disabled, but the
Block-LAN-mgmt-guest rule is still generated and lands on src='lan'.

Confirmed by moving LAN to 192.168.6.1: network.guest.ipaddr immediately
reverted to 192.168.9.1 on its own, and the input_lan chain no longer
contains the reject rule.

So the precise repro is "set LAN IP == guest default IP", not "change the
LAN IP". The bug is presumably in the branch that resolves the zone for
that rule when the two subnets collide.

Hi,

Thank you for the detailed report.

However, this seems a little unusual, as we were unable to reproduce the issue locally using the steps you provided:

  1. In v4.10.0, the Admin Panel no longer has the Network → LAN page. LAN, Guest, and IoT networks are now managed under Network → Subnet .
  2. If we try to set the LAN IP address to 192.168.9.1 , which is already used by the Guest network, the interface displays an error and does not allow the configuration to be saved.

Could you provide more detailed steps to reproduce the issue? Did you change the LAN IP address using another method, such as LuCI or UCI commands over SSH?

Hi,

Is it possible that if someone altered the locations inside luci firewall rules, that the rules are no longer controlled by gl software or enabling wrong rules?

I had a few instances that double rules appeared or randomly got checked in especially the dns leak ones caused some problems, and since I do alter them by unchecking them I have had seen similar problems OP has.

Thanks for checking — and you're right that the v4.10.0 UI blocks it. That validation does work; I just never went through it.

I did not set the LAN IP on 4.10.0. Here's the actual path:

  1. On 4.8.5, Network → LAN, I set the LAN IP to 192.168.9.1. 4.8.5 accepts this without any warning or error.

  2. I then upgraded to 4.10.0 with "Keep Settings" enabled.

  3. The conflicting configuration was carried over as-is. The new validation in 4.10.0 only runs on user input in Network → Subnet — it does not re-validate configuration inherited from an upgrade.

  4. On first boot the guest network was auto-disabled (the menu_lanip warning), but Block-LAN-mgmt-guest was still generated, with src='lan' — locking me out of the admin panel.

So this is an upgrade/migration issue rather than an input-validation one. The guard was added, but nothing checks existing configs on upgrade.

Repro

  1. Flash 4.8.5, do not keep settings

  2. Network → LAN → set LAN IP to 192.168.9.1 → saves fine, no error

  3. Upgrade to 4.10.0 with Keep Settings enabled

  4. After reboot the admin panel is unreachable on 80/443/8080/8443. SSH in (ssh root@192.168.9.1) and check:

# uci show network | grep -E "\.ipaddr="
network.lan.ipaddr='192.168.9.1'
network.guest.ipaddr='192.168.9.1'      <-- identical

# uci show firewall | grep -A6 -i mgmt
...name='Block-LAN-mgmt-guest'
...src='lan'                            <-- should be 'guest'
...dest_ip='192.168.9.1'
...dest_port='80 443 8080 8443'
...target='REJECT'

# nft list chain inet fw4 input_lan | grep Block-LAN
ip daddr 192.168.9.1 tcp dport { 80, 443, 8080, 8443 } counter packets 14 \
  jump handle_reject comment "!fw4: Block-LAN-mgmt-guest"

nginx is listening normally on 0.0.0.0:80 and :443 — it is purely the firewall rule.

Extra data point

After moving LAN to 192.168.6.1 (no conflict), /etc/config/firewall was regenerated and the rule came out correctly with src='guest' — the uci section id changed from cfg2192bd to cfg1d92bd, indicating a rewrite.

Same generator, different branch depending only on whether LAN and guest resolve to the same address. That should narrow it down.

Impact

Anyone who set LAN to 192.168.9.1 on 4.8.x or earlier and upgrades to 4.10.0 with Keep Settings will be locked out of the admin panel. A user who doesn't know to SSH in as root has no way back short of a factory reset or U-Boot reflash — which on a travel router may happen away from home.

Suggested fixes

  1. Validate on upgrade/first boot, not only on user input: if network.lan.ipaddr == network.guest.ipaddr, relocate the guest subnet automatically

  2. Block-LAN-mgmt-guest should never be emitted with src='lan'

  3. Skip the rule entirely when network.guest.disabled='1'

  4. Fail safe — never REJECT the LAN zone's access to the router's own management ports

  5. Minor: the Guest Network warning shows the raw i18n key menu_lanip instead of translated text

Thank you for providing the detailed reproduction steps.

We were able to reproduce the issue using the upgrade path you described. We’ll ask our R&D team to investigate it and work on a fix.

Regarding the untranslated menu_lanip text, could you please let us know which language was selected in the Admin Panel, and on which page or screen did the message appear?

Sure — Admin Panel language: English (EN) Where it appeared: the WIRELESS page, in the Guest Network section — the yellow banner directly below the "+ Add" row. Not under Network → Subnet; that page just showed the addresses with no warning. Full text as displayed: "To avoid conflict between menu_lanip and Guest Network, guest Wi-Fi cannot be activated." The surrounding sentence is translated fine — only the `menu_lanip` placeholder renders as the raw key instead of the LAN IP value (or the "LAN IP" label) it is meant to interpolate. Firmware: 4.10.0 (release), GL-E5800. It only appears while LAN and Guest hold the same address, i.e. the same broken state as the main issue — so it should show up in the repro you just ran. First screenshot is that state. Second screenshot is after moving LAN to 192.168.6.1: Network → Subnet now shows Main 192.168.6.1 / Guest 192.168.9.1, no conflict, and the banner is gone from the Wireless page.

1 Like

Thanks. I’ll also ask the team to review it together.