Adam's "Blog"

That's all, really.

Installing OpenWRT

I have used OpenWRT for years, but it’s been a while since I last upgraded. I see there’s a new version out now, so I’ll give it a shot.

The first time you install custom firmware on a router can be difficult. On old Linksys WRT54G routers, you had to exploit a bug in the stock firmware to get it on there. But on other routers such as the Netgear WNDR3700, OpenWRT can be installed using the stock firmware’s upgrade function.

Once OpenWRT is on there (and boot_wait is enabled, if applicable), the router will start up on the IP 192.168.1.1 for a second or so while booting, and will accept a firmware update via tftp. So here’s what I do:

  • Plug LAN port 1 on the router into my network. (I haven’t tested this recently, but the boot loader tftp server used to listen only on this physical port.)
  • Add an IP in 192.168.1.0/24 to my machine
  • Run tftp2, fill in the server 192.168.1.1, and browse to the OpenWRT file (but don’t hit Upgrade yet).
  • Or to use Windows' built-in tftp client (which you may have to enable in Windows Features), type tftp 192.168.1.1 put D:\Downloads\openwrt-wrt54gs-squashfs.bin (but don’t hit Enter yet)
  • Open a command prompt and begin continuously pinging 192.168.1.1
  • Power up the router and immediately hit Upgrade (or Enter).
  • If it works, the router will go up and down a few times over the next two or three minutes as it runs its initial setup. (If it fails, power it off and try again.)

Once that’s done, you can telnet in and set the password. (This disables telnet, so future logins are done with ssh.) Or you can log in with no password via the web interface and set the password there (I haven’t done that before, so it could be new in this version). Either way, make sure ssh to the WAN interface is enabled, so we can move the plug over.

Now, customize the router’s basic settings, either via the web interface or ssh.

  • System hostname
  • IP address of the LAN interface (this also configures the IP range which the router will give out via DHCP)
  • If you will be using DHCP on the WAN interface, set its DHCP client hostname; if not, set its IP, netmask, gateway, and DNS.
  • If you want to be able to manage the router from a machine that is not behind it, modify the firewall configuration to allow access to ssh and/or the web interface. In the web interface, under Network, Firewall, Traffic Rules, add “Open ports on router” 22 and/or 80, and click Add, then Save And Apply. Or via ssh, edit /etc/config/firewall and add a section like this:

      config rule
          option target 'ACCEPT'
          option src 'wan'
          option proto 'tcp'
          option dest_port '22'
          option name 'Allow ssh'
    

If/when you connect the router directly to the internet, you may want to modify your rules to lock it down to certain source IPs.

Now move the network cable from LAN 1 over to WAN, and power-cycle. If using DHCP, check your DHCP server’s leases to find the router’s IP. Ping it and make sure it comes up. (If not, you can plug a machine into one of the LAN ports, get a DHCP IP, and fix the config from there. Or worst case, you can always tftp OpenWRT onto the router over again and start from scratch.)

Now you’re up and running. Next steps might include:

  • enabling wifi (Network, Wifi; or edit /etc/config/wireless and run wifi to make the changes take effect)
  • installing packages (System, Software, and click Update lists; or opkg update, opkg list, opkg install some-package-name)