A User Experience & Keenetic Kernel-Level Bug: Post Soft-Reload, Conntrack/NAT Chain Locks Port Forwarding Target to a Stale/Ghost IP (Proven with ARP + NAT Table)
I have been a long-time Keenetic user. Although I am generally satisfied with the hardware and interface, a chronic kernel-level bug and the subsequent inadequate support process have led me to decide to leave the Keenetic ecosystem entirely. I present this experience as a concrete, reproducible diagnostic record for users struggling with a similar issue and for the development team.
I am not a network engineer; I am an ordinary user with limited resources. However, the data in my possession is clear enough to require no expertise: **the router ignores a valid IP in its own ARP table and routes traffic to an expired, "ghost" IP that has never existed on my network.** This is not an interpretation; it is a fact visible in the raw CLI outputs below.
---
## Evidence: ARP Is Correct, NAT Is Wrong
After a modem soft-reload (certificate renewal, scheduled task, etc.), the port forwarding rule appears "active" in the management panel, but traffic from the outside world does not reach the local network. The WAN connection silently times out — not "connection refused", the packet falls into a black hole at the kernel level.
This is a synchronization/cache bug in KeeneticOS's netfilter/nf_conntrack subsystem (explicitly visible as `nf_conntrack version 0.5.0` in the kernel boot logs). Two different CLI outputs captured simultaneously during an outage prove this:
**`show ip neighbour`** output shows two separate entries for the same MAC address (`de:ad:be:ef:fe:01`, my ESP32-W5500 device):
```
id: 10
via: de:ad:be:ef:fe:01
mac: de:ad:be:ef:fe:01
address: 192.168.1.114 ← valid IP, my registered static DHCP reservation
last-seen: 12 (seconds ago)
expired: no ← VALID and ACTIVE
id: 5
via: de:ad:be:ef:fe:01
mac: de:ad:be:ef:fe:01
address: 192.168.1.102 ← an address that has never existed on my network
last-seen: 191
expired: yes ← expired
```
**`show ip nat`** output captured at the same time shows that incoming WAN TCP/80 traffic is being forwarded not to the correct IP marked `expired: no`, but to the invalid IP marked `expired: yes`:
The port forwarding rule is defined as MAC-based (`ip static tcp PPPoE0 80 de:ad:be:ef:fe:01`). While the ARP table shows the correct IP (`.114`), the NAT/connection tracking mechanism still uses the old/invalid IP (`.102`).
> **Additional fact:** A static DHCP reservation for `192.168.1.114` is defined for this device in the modem panel. Despite this, the `192.168.1.102` address appears to have been assigned/associated with this MAC at some point — which directly contradicts the reservation rule.
**Workaround/Temporary fix:** Disabling and re-enabling the rule via CLI or panel instantly resolves the issue.
The above data points to a single conclusion: when resolving the target IP for the MAC-based forwarding rule, **the NAT/connection tracking layer continues to use a stale cached mapping instead of the current, valid entry in the ARP table.** The router itself carries conflicting information in two different layers: the ARP table says `.114` is "valid", while the NAT chain still uses `.102`. This is, by definition, a synchronization error — two internal subsystems contradict each other about the same reality.
Let me be clear: a client device cannot choose its own IP. The authority for IP assignment and addressing lies 100% with the router's DHCP server. If my device was associated with `192.168.1.102`, the entity that created and maintained that association is the router itself — and this address directly contradicts my static DHCP reservation (`.114`) defined in the panel. A DHCP server violating its own reservation rule and/or carrying this violation into the NAT chain is an error that must be sought in KeeneticOS's addressing/routing layer, not on the client side.
This is the limit of what I can detect with the tools available to me — identifying which internal function misses this synchronization is, of course, the development team's job. However, I have no doubt that the problem exists, is reproducible, and is not client-originated.
---
## Workaround
I am bypassing the issue with an external Cloudflare Worker + ESP8266 watchdog combination that sends an automated disable/enable command sequence via Telnet to the router. This works functionally but is, of course, an application-level temporary fix; the actual correction should be on the modem/firmware side.
---
## Support Process
1. I presented the issue comprehensively to the Keenetic TR technical team with syslogs, NAT tables, and a live connection.
2. Despite the technical team connecting to my computer, verifying the issue live, and recording that the device was listed as static; instead of producing a solution, I observed attempts to shift the blame onto me with technically invalid justifications that contradict network engineering principles, such as *"your device is using two IPs, it is responding to an old IP."* I subsequently requested the closure of my support ticket.
> My request to close the support ticket does not mean I accept the "client-side" explanation provided, nor does it mean I withdraw my technical objections — it is solely because of the pointlessness of continuing the process in this manner.
3. The initial corporate solution proposed (binding DHCP/ARP/port forwarding directly to a static IP) may work in practice, but it is a workaround — it leaves unanswered the question of why MAC-based dynamic forwarding behaves inconsistently in this scenario, and it proves that the MAC-based dynamic forwarding feature described in the documentation does not work under these conditions.
4. As an ordinary user, making definitive judgments with my limited data or misinterpreting the situation does not make the WAN access loss problem invisible, nor does it grant the technical support team any justification. My use of AI-assisted analysis tools to describe my problem is not "arrogance"; on the contrary, it is to describe the problem with the correct terminology, to draw attention to a chronic bug, and to find a rational solution. Distinguishing the limits of end-user analysis, correctly evaluating the data, and finding and researching the root cause is directly the responsibility of the Keenetic support team.
---
## Conclusion
The support team's approach gave me the impression that the focus was not on resolving a possible software bug, but on "rightfully closing" the support ticket at all costs, and the connection with the support team has been terminated.
As someone who previously recommended Keenetic to my circle with pride, this corporate lack of vision has deeply disappointed me.
Therefore, I have decided to move my network infrastructure entirely to another brand. This post is not a dry criticism of a company, but rather a technical reference and warning for those who are facing a similar issue and are left helpless.
---
**For Keenetic engineers who wish to examine the logs, the support ticket number is: `#656648`**
You can post now and register later.
If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.
Question
asdem
I have been a long-time Keenetic user. Although I am generally satisfied with the hardware and interface, a chronic kernel-level bug and the subsequent inadequate support process have led me to decide to leave the Keenetic ecosystem entirely. I present this experience as a concrete, reproducible diagnostic record for users struggling with a similar issue and for the development team.
I am not a network engineer; I am an ordinary user with limited resources. However, the data in my possession is clear enough to require no expertise: **the router ignores a valid IP in its own ARP table and routes traffic to an expired, "ghost" IP that has never existed on my network.** This is not an interpretation; it is a fact visible in the raw CLI outputs below.
---
## Evidence: ARP Is Correct, NAT Is Wrong
After a modem soft-reload (certificate renewal, scheduled task, etc.), the port forwarding rule appears "active" in the management panel, but traffic from the outside world does not reach the local network. The WAN connection silently times out — not "connection refused", the packet falls into a black hole at the kernel level.
This is a synchronization/cache bug in KeeneticOS's netfilter/nf_conntrack subsystem (explicitly visible as `nf_conntrack version 0.5.0` in the kernel boot logs). Two different CLI outputs captured simultaneously during an outage prove this:
**`show ip neighbour`** output shows two separate entries for the same MAC address (`de:ad:be:ef:fe:01`, my ESP32-W5500 device):
```
id: 10
via: de:ad:be:ef:fe:01
mac: de:ad:be:ef:fe:01
address: 192.168.1.114 ← valid IP, my registered static DHCP reservation
last-seen: 12 (seconds ago)
expired: no ← VALID and ACTIVE
id: 5
via: de:ad:be:ef:fe:01
mac: de:ad:be:ef:fe:01
address: 192.168.1.102 ← an address that has never existed on my network
last-seen: 191
expired: yes ← expired
```
**`show ip nat`** output captured at the same time shows that incoming WAN TCP/80 traffic is being forwarded not to the correct IP marked `expired: no`, but to the invalid IP marked `expired: yes`:
```
TCP 172.71.102.233 12410 [WAN_IP] 80 4
192.168.1.102 80 172.71.102.233 12410 4
TCP 172.71.144.9 10915 [WAN_IP] 80 4
192.168.1.102 80 172.71.144.9 10915 4
```
The port forwarding rule is defined as MAC-based (`ip static tcp PPPoE0 80 de:ad:be:ef:fe:01`). While the ARP table shows the correct IP (`.114`), the NAT/connection tracking mechanism still uses the old/invalid IP (`.102`).
> **Additional fact:** A static DHCP reservation for `192.168.1.114` is defined for this device in the modem panel. Despite this, the `192.168.1.102` address appears to have been assigned/associated with this MAC at some point — which directly contradicts the reservation rule.
**Workaround/Temporary fix:** Disabling and re-enabling the rule via CLI or panel instantly resolves the issue.
---
## Root Cause: NAT/Conntrack Layer Ignoring ARP Update
The above data points to a single conclusion: when resolving the target IP for the MAC-based forwarding rule, **the NAT/connection tracking layer continues to use a stale cached mapping instead of the current, valid entry in the ARP table.** The router itself carries conflicting information in two different layers: the ARP table says `.114` is "valid", while the NAT chain still uses `.102`. This is, by definition, a synchronization error — two internal subsystems contradict each other about the same reality.
Let me be clear: a client device cannot choose its own IP. The authority for IP assignment and addressing lies 100% with the router's DHCP server. If my device was associated with `192.168.1.102`, the entity that created and maintained that association is the router itself — and this address directly contradicts my static DHCP reservation (`.114`) defined in the panel. A DHCP server violating its own reservation rule and/or carrying this violation into the NAT chain is an error that must be sought in KeeneticOS's addressing/routing layer, not on the client side.
This is the limit of what I can detect with the tools available to me — identifying which internal function misses this synchronization is, of course, the development team's job. However, I have no doubt that the problem exists, is reproducible, and is not client-originated.
---
## Workaround
I am bypassing the issue with an external Cloudflare Worker + ESP8266 watchdog combination that sends an automated disable/enable command sequence via Telnet to the router. This works functionally but is, of course, an application-level temporary fix; the actual correction should be on the modem/firmware side.
---
## Support Process
1. I presented the issue comprehensively to the Keenetic TR technical team with syslogs, NAT tables, and a live connection.
2. Despite the technical team connecting to my computer, verifying the issue live, and recording that the device was listed as static; instead of producing a solution, I observed attempts to shift the blame onto me with technically invalid justifications that contradict network engineering principles, such as *"your device is using two IPs, it is responding to an old IP."* I subsequently requested the closure of my support ticket.
> My request to close the support ticket does not mean I accept the "client-side" explanation provided, nor does it mean I withdraw my technical objections — it is solely because of the pointlessness of continuing the process in this manner.
3. The initial corporate solution proposed (binding DHCP/ARP/port forwarding directly to a static IP) may work in practice, but it is a workaround — it leaves unanswered the question of why MAC-based dynamic forwarding behaves inconsistently in this scenario, and it proves that the MAC-based dynamic forwarding feature described in the documentation does not work under these conditions.
4. As an ordinary user, making definitive judgments with my limited data or misinterpreting the situation does not make the WAN access loss problem invisible, nor does it grant the technical support team any justification. My use of AI-assisted analysis tools to describe my problem is not "arrogance"; on the contrary, it is to describe the problem with the correct terminology, to draw attention to a chronic bug, and to find a rational solution. Distinguishing the limits of end-user analysis, correctly evaluating the data, and finding and researching the root cause is directly the responsibility of the Keenetic support team.
---
## Conclusion
The support team's approach gave me the impression that the focus was not on resolving a possible software bug, but on "rightfully closing" the support ticket at all costs, and the connection with the support team has been terminated.
As someone who previously recommended Keenetic to my circle with pride, this corporate lack of vision has deeply disappointed me.
Therefore, I have decided to move my network infrastructure entirely to another brand. This post is not a dry criticism of a company, but rather a technical reference and warning for those who are facing a similar issue and are left helpless.
---
**For Keenetic engineers who wish to examine the logs, the support ticket number is: `#656648`**
6 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.