Rather than waiting for Ruida to fix their IP Stack, I purchased a tiny $70 Router to sit between the machine and my network. It works great. This effectively puts the Ruida controller on its own isolated Class-C network (192.168.2.0/24) underneath my own Class-B network (172.20.0.0/16).
https://www.amazon.com/dp/B0BNPTW2L2
I was going to try this with a Raspberry Pi, but Pi’s only have a single ethernet port and this device is smaller and cheaper anyway. It appears to be the perfect solution for what I wanted to do. (Its actually a Pi under the covers anyway…)
The router has an IP in my network (172.20.8.1) and it processes/accepts traffic from any host as it should. It then passes it into the private “Ruida” Network (192.168.2.0/24) where there is only one host (the Ruida Controller) at 192.168.2.2.
It only took a few minutes to load the latest router firmware (FriendlyWrt which is a port of OpenWrt). It then only required two additional firewall rules from the default config:
- Port forwarding of all UDP traffic on port 50200 from the outside IP of the router (172.20.8.1) directly to the Ruida controller inside (192.168.2.2)
- masquerading (NAT) all traffic back in to the “real” network so it all appears to come directly from the router.
As far as my network is concerned, the address of the Ruida is simply the address of the Router (172.20.8.1) and the IP traffic is properly handled regardless of the size of the network. (Ruida traffic can even flow through an upstream Internet Router). No more messing around with artificial addressing rules (or network size limitations) imposed by a broken Ruida network stack.
Lightburn appears quite happy with the arrangement!
I’m still using UDP (which I’m OK with) and entirely on a wired network (which I prefer). This router will accept a WiFi module and similar models already have it built in WiFi (which I wasn’t interested in).
If you have a larger network and would like ALL the machines on your network (even outside you network) to be able to talk to your Ruida controller, this is a pretty simple solution I think.