Meraki MR-12 basic setup NAT (to Spectrum cable modem)


This is my first flashing of any router as of a few days ago. It actually went well. I followed the directions from riptidewave93 and then upgraded within LuCI to what is recommended on this website ("OpenWrt 19.07.7 r11306-c4a6851c72" is what LuCI is showing right now). No real issues there. After this upgrade, I was also able to connect to the device via ssh (ssh wouldn't let me before because pre-upgrade the Meraki wanted to use SHA1).

Wifi seems to work well right out of the box (only needs to be enabled). Things can connect to wifi & seem to see each other.

Wifi to WAN is another matter and there I seem to be completely lost. I think I have a good grasp of what I need (almost the most basic setup) but I'm not sure what that looks like or how to get there.

I am trying to connect via a pretty locked down Arris SBG6580 cable modem from Spectrum. It seems to be picky about DHCP (maybe it needs to happen around a narrow window of time during boot) but it otherwise works. There's no NAT, as far as I can tell. Things talk to and automagically get assigned some non internal IP address & gateway.

The Meraki MR-12 has a wlan0 port, an eth0 port and presumably a eth1 port that cannot currently be accessed within openwrt (from what I have read regarding the original riptidewave93 build and from I have read in the forums here about the current builds). I assume any references to eth1 are irrelevant or incorrect.

I want a connection to eth0. I want NAT there & for DHCP to happen with incoming wlan connections.

I have been able to join wlan0 & eth0 but it was a failure because it somehow ended as a single network rather than as a route from to (it broke my network, as would be expected).

I was able to get wifi working one time but it was not doing DHCP (only one device got internet access and everything else could not see outside). I have no idea how I accomplished even that much (I reset settings since then). Other than that, I've never seen a ping go through from the MR12.

It looks like I am lost in LuCI & I am equally lost in the command line.

ifconfig gives:

br-lan    Link encap:Ethernet  HWaddr 92:D0:5F:1D:6C:E5  
          inet addr:  Bcast:  Mask:
          inet6 addr: fe80::90d0:5fff:fe1d:6ce5/64 Scope:Link
          inet6 addr: fd1a:5956:3460::1/60 Scope:Global
          RX packets:104373 errors:0 dropped:0 overruns:0 frame:0
          TX packets:72958 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:12707599 (12.1 MiB)  TX bytes:37243686 (35.5 MiB)

eth0      Link encap:Ethernet  HWaddr 92:D0:5F:1D:6C:E5  
          inet6 addr: fe80::90d0:5fff:fe1d:6ce5/64 Scope:Link
          RX packets:51928 errors:0 dropped:0 overruns:0 frame:0
          TX packets:27640 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:6055129 (5.7 MiB)  TX bytes:6599913 (6.2 MiB)

lo        Link encap:Local Loopback  
          inet addr:  Mask:
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:49080 errors:0 dropped:0 overruns:0 frame:0
          TX packets:49080 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5257157 (5.0 MiB)  TX bytes:5257157 (5.0 MiB)

wlan0     Link encap:Ethernet  HWaddr 00:03:7F:BE:EF:EC  
          inet6 addr: fe80::203:7fff:febe:efec/64 Scope:Link
          RX packets:86093 errors:0 dropped:0 overruns:0 frame:0
          TX packets:79626 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:12276915 (11.7 MiB)  TX bytes:38252449 (36.4 MiB)

cat /etc/config/network gives

config interface 'loopback'
	option ifname 'lo'
	option proto 'static'
	option ipaddr ''
	option netmask ''

config globals 'globals'
	option ula_prefix 'fd1a:5956:3460::/48'

config interface 'lan'
	option type 'bridge'
	option proto 'static'
	option ipaddr ''
	option netmask ''
	option ip6assign '60'

config interface 'modem'
	option ifname 'eth0'
	option proto 'dhcp'
	option broadcast '1'

cat /etc/config/dhcp gives:

config dnsmasq
	option domainneeded '1'
	option boguspriv '1'
	option filterwin2k '0'
	option localise_queries '1'
	option rebind_protection '1'
	option rebind_localhost '1'
	option local '/lan/'
	option domain 'lan'
	option expandhosts '1'
	option nonegcache '0'
	option authoritative '1'
	option readethers '1'
	option leasefile '/tmp/dhcp.leases'
	option resolvfile '/tmp/'
	option nonwildcard '1'
	option localservice '1'

config dhcp 'lan'
	option interface 'lan'
	option start '100'
	option limit '150'
	option leasetime '12h'
	option dhcpv6 'server'
	option ra 'server'
	option ra_management '1'

config dhcp 'wan'
	option interface 'wan'
	option ignore '1'

config odhcpd 'odhcpd'
	option maindhcp '0'
	option leasefile '/tmp/hosts/odhcpd'
	option leasetrigger '/usr/sbin/odhcpd-update'
	option loglevel '4'

You may want to migrate to my ath79 port -- see this commit.

Notably, the eth1 port works fine -- it's just that riptidewave93 wasn't aware of how to bring the port up under ag71xx. Many other boards using the same AR7242 use the same physical port from the chip (the PHY is on-chip.)

Oh, thanks!

In retrospect I see that theMR-12 page at states that "The ath79 target will soon be supported in Snapshot and as of OpenWrt 20, and it is recommended to use it over the ar71xx target which will be deprecated after OpenWrt 19."

However, I just used the firmware selector at and picked the sysupgrade for MR-12 which produced a file named 'openwrt-19.07.7-ar71xx-generic-mr12-squashfs-sysupgrade.bin'.

So if I wanted to use your port I would want to run make on the snapshot from your link & upgrade as per any other sysupgrade?

Sadly the ath79 port did not make it to 19.07.7 -- you will need to pull it from 21.02.

You should also know that you will need to follow the commit's advice for upgrading, since the storage format has changed -- the MAC address is actually stored in the old firmware in a location which gets overwritten since LEDE days, until I fixed it in the ath79 port.

Maybe I also needed to store a MAC in my original flashing & updating process to ar71xx target from the original Cisco firmware? That's definitely not a step I did.

To recap to see if I am understanding correctly, my choices, if I want full recognition of my hardware interfaces, would be to do a build based on your port & install as usual or to just pick the 'meraki_mr12-squashfs-sysupgrade.bin' from 21.02 at and install similarly? This would then have to be followed by the MAC address updating, as described?

The latter, but please follow my commit for instructions.

Specifically: please follow these instructions:


  1. Requires TFTP server at, w/ initramfs & sysupgrade .bins
  2. Open shell case
  3. Connect a USB->TTL cable to headers furthest from the RF shield
  4. Power on the router; connect to U-boot over 115200-baud connection
  5. Interrupt U-boot process to boot Openwrt by running:
       setenv bootcmd bootm 0xbf0a0000; saveenv;
       tftpboot 0c00000 <filename-of-initramfs-kernel>.bin;
       bootm 0c00000;
  6. Copy sysupgrade image to /tmp on MR12
  7. sysupgrade /tmp/<filename-of-sysupgrade>.bin

You will thus need to download the 21.02 sysupgrade and initramfs .bins.

To set the MAC address afterwards: There will be a config partition in /proc/mtd. You need to make it writable, erase it, and then write the MAC address as binary (one hex pair per byte, e.g. echo -e '\xab\xbc\xcd\xde\xef\xf0') to bytes 0x66 through 0x6B inclusive from the beginning of that partition, then sync and reboot.