Configuring DD-WRT
I have decent notes and backups of my Linksys WRT54GL DD-WRT configuration. I also have a check list of sorts.
When I started configuring my Asus RT-AC66U from scratch I realized my documentation was insufficient. DD-WRT is a complex firmware. DD-WRT for the RT-AC66U contains additional features I have seen never before with the WRT54GL. I hadn’t configured DD-WRT from scratch in many years. I was rusty with configuring some of the features. Enabling and configuring various features often requires modifying options in more than one location in the web interface.
One thing is for certain. The DD-WRT wiki and forum is filled with old and obsolete information. Confusing information. Conflicting information. Even finding the correct firmware version for a router is an uphill exercise. The web interface built-in help leaves much to be desired. Finding correct information is a frustrating effort.
Time to update my documentation by rewriting them as a “DD-WRT From Scratch” exercise.
On the WRT54GL I have DD-WRT configured with the following:
- JFFS
- LAN wireless
- Guest wireless
- DNS
- DHCP
- VLANs
- Traffic monitoring
- SSH
- Custom scripts
A feature I did not use on the WRT54GL is a VPN because only PPTP is available. DD-WRT on the RT-AC66U supports OpenVPN, which I want to use.
I use static IP addresses in my LAN. I have both NFS and Samba configured on my LAN server to allow connections only from within a specific range of the subnet. I configure DD-WRT not to provide DHCP addresses. When testing and enabling DHCP, DD-WRT assigns addresses outside the preconfigured range. This design prevents curious house guests from trying to snoop the server and private files. My network laser printer is assigned an IP address within the approved subnet range and is therefore unavailable to house guests.
I use dnsmasq on my LAN server to provide DNS lookups and name caching. I use dnsmasq for blocking undesirable URLs. I configure DD-WRT to use the LAN server for DNS. That means if the LAN server is unavailable then most devices connected to the router will stall. The LAN server is scheduled to power down at night when no client systems are running.
While the RT-AC66U has more memory than the WRT54GL, I am not going to move the dnsmasq URL blocking scheme to the new router. On the LAN server I run a weekly cron job to update the block list. I would need to move and test that script on the new router. Or scp the final file to the router. While the new router probably can handle the overhead, I prefer not to fix things that are not broken.
I have a static public IP address assigned from the ISP.
The point to this exercise is to create documentation that helps me configure various DD-WRT options but in an efficient and methodical manner. Along the way I will create backup snapshots.
My approach looks something like the following:
- Configure admin information and management.
- Enable JFFS.
- Enable SSH and copy public keys.
- Configure the ISP information.
- Configure the wired interface.
- Configure the wireless.
- Configure guest wireless.
- Configure VLANs.
- Copy and enable custom scripts.
- Configure remaining tweaks.
Preliminary Settings
I wanted to bench configure as much as possible before finally replacing the WRT54GL. To retain an Internet connection while configuring the RT-AC66U, I used my Lenovo T400 laptop to connect to the new RT-AC66U router. I used my office desktop already connected to the existing WRT54GL router. In this manner I compared configuration settings.
Administration
Management
Router Management
Router Username: xxxxxxxxxx
Router Password: xxxxxxxxxx
Web Access
Enable Info site: Disable
Remote Access
Web GUI Management: Disable
SSH Management: Disable
Telnet Management: Disable
Allow Any Remote IP: Enable
Boot Wait
Boot Wait: Enable
Cron
Cron: Enable
802.1x
802.1x: Enable
Reset Button
Reset Button: Enable
Routing
Routing: Enable
JFFS2 Support
JFFS2 Support: Enable
Clean JFFS2: Disable
Language Selection
Language: English
CIFS Automount
Common Internet File System: Disable
Apply Settings
Save
Keep Alive
Disable all.
Schedule Reboot
At a set Time: 02:34 Everyday
WOL
Wake-On-LAN daemon
WOL daemon: Disable
Apply Settings
Save
Security
Firewall
SPI Firewall: Enable
Additional Filters
Filter Proxy: Disable
Filter Cookies: Disable
Filter Java Applets: Disable
Filter ActiveX: Disable
Block WAN Requests
Block Anonymous WAN Requests (ping): Enable
Filter Multicast: Enable
Filter WAN NAT Redirection: Disable
Filter IDENT (Port 113): Enable
Block WAN SNMP access: Disable
Impede WAN DoS/Bruteforce
Limit SSH Access: Enable
Limit Telnet Access: Enable
Limit PPTP Access: Enable
Limit FTP Access: Enable
Connection Warning Notifier
Warning Notifier: Disable
Log
Log: Disable
Apply Settings
Save
Services
Services Management
DNSMasq
DNSMasq: Enable
Local DNS: Enable
No DNS Rebind: Enable
Query DNS in Strict Order: Enable
Add Requestor MAC to DNS Query: Disable
IP over DNS Tunneling
nxtx Daemon: Disable
PPPoE Relay
Relay: Disable
SES / AOSS /EZ-SETUP / WPS Button
Turning off radio: Disable
RFlow / MACupd
RFlow: Disable
MACupd: Disable
SNMP
SNMP: Disable
Secure Shell
SSHd: Enable
SSH TCP Forwarding: Disable
Password Login: Disable
Port: 22
Authorized Keys: (copied and pasted)
System Log
Syslogd: Disable
Telnet
Telnet: Disable
The Onion Router Project
TOR: Disable
WAN Traffic Counter
ttraff Daemon: Enable
Zabbix
Client: Disable
Apply Settings
Save
I enabled strict query order to ensure the router always first checked the LAN server, which is running DNSMasq and my blocking strategy.
I rebooted the router to ensure none of the configurations caused boot problems.
ISP/WAN/LAN Settings
The router was not yet connected to the ISP. I was still configured using default IP addresses. I needed to configure DD-WRT for the ISP and LAN.
Setup
Basic Setup
WAN Connection Type
Connection Type: Static IP
WAN IP Address: 192.168.100.100
Subnet Mask: 255.255.255.0
Gateway: 192.168.100.1
Static DNS 1: LAN server IP address
Static DNS 2: LAN server IP address
Static DNS 3: LAN server IP address
Optional Settings
Router Name: xxxxxxxxxx
Host Name: xxxxxxxxxx
STP: Enable
Router IP
Local IP Address: xxx.xxx.xxx.xxx
Subnet Mask: 255.255.255.0
Gateway: xxx.xxx.xxx.xxx
Local DNS: LAN server IP address
Network Address Server Settings (DHCP)
DHCP Type: DHCP Server
DHCP Server: Disable
Start IP Address: xxx.xxx.xxx.129
Maximum DHCP Users: 50
Client Lease Time: 1440 minutes
WINS: 0.0.0.0
Use DNSMasq for DHCP: Enable
Use DNSMasq for DNS: Enable
DHCP-Authoritative: Disable
Forced DNS Redirection: Disable
Time Settings
NTP Client: Enable
Time Zone: A local time zone
Server IP/Name: An NTP pool address:
Apply Settings
Save
Except for testing I do not use DHCP at the router. Configuring the Start IP Address requires temporarily enabling DHCP, applying the settings, then disabling DHCP.
Using the LAN server IP address as the sole DNS server ensures all connections use my LAN server and blocking scheme.
As I was not yet connected to the ISP, the router time remained incorrect.
This was a good time for a backup snapshot. I rebooted as a test. Next I cycled the power to the router as another test.
LAN Wireless Settings
I use the same subnet as my wired LAN.
Configuring the LAN wireless was kind of a go-no-go point. After configuring I would need to connect to the ISP and disable the WRT54GL. Otherwise the two routers would conflict. I could have created new SSID names, but I wanted to retain the old names.
Wireless
Basic Settings
Physical Interface wl0
Wireless Mode: AP
Wireless Network Mode: Mixed
Wireless Network Name (SSID): xxxxxxxxx
Wireless Channel: 11
Wireless SSID Broadcast: Enabled
Network Configuration: Bridged
Physical Interface wl1
Wireless Network Mode: Disabled
Apply Settings
Save
Wireless Security
Physical Interface wl0 SSID
Security Mode: WPA2 Personal
WPA Algorithms: AES
WPA Shared Key: A pass phrase
Apply Settings
Save
As I am unfamiliar with dual band wireless, I initially disabled the Physical Interface wl1 wireless interface.
This was another good time for a backup snapshot. I rebooted as another test.
I powered off and swapped the two routers. After booting the RT-AC66U I confirmed I could connect using wired with both my office desktop and laptop.
I could not connect the laptop using wireless. The existing NetworkManager configurations were set to the old router, such as BSSID/MAC addresses. A few adjustments in the NetworkManager dialogs and I could connect with wireless. I rebooted the laptop to ensure wireless remained functional.
I could browse the web using wired or wireless, but running an iperf wireless test was discouraging. I run hourly cron jobs to record iperf results with respect to my LAN. A nominal monitoring tool only and not meant to test actual throughput. The laptop has an Intel 5100 AGN wireless controller and should be able to use 802.11n. In addition to the device name, the iwconfig command showed IEEE 802.11abgn.
With the WRT54GL only supporting 802.11abg, my average wireless speeds have been about 21 Mbps. That speed is typical with 802.11g. With the RT-AC66U I was seeing iperf results of half that speed. The RT-AC66U supports up to 802.11ac. With the RT-AC66U I expected no slower than the previous average and hopefully something faster.
Lots of tinkering and surfing the web revealed little. I installed an older Build 25697 v24 SP2. No change. I updated the DD-WRT firmware to the latest beta release. No change.
My WAN/ISP connection speeds with the RT-AC66U were about the same as with the WRT54GL. My iperf tests using wired were a tad faster with the RT-AC66U. Only wireless was problematic.
In the end the best I accomplished was configuring the wl0 2.4 GHz radio for G-Only and the wl1 5 GHz radio for N-Only. With that configuration I saw wireless 2.4 GHz connection speeds at about the same as with the WRT54GL.
Using the 5 GHz band always resulted in poor speeds barely bumping 10 Mbps. Reading around the web indicates that running both 802.11g and 802.11n on the same router might reduce overall throughput. Living rurally I do not have to worry about neighborhood interference. I again disabled the 5 GHz radio (Wireless Network Mode: Disabled). Tinkering with 802.11n would have to wait until another day.
Guest Wireless Settings
For house guests with wireless devices I use a different subnet from the LAN, 192.168.3.1. An isolated guest wireless network requires 1) a virtual interface, 2) a bridge, 3) a separate DHCP server, and 4) some iptables firewall rules. With a dual band router, a new virtual device may be added to either physical interface. In my case, I wanted to use wl0. For me the virtual interface is wl0.1.
Thanks to Alex Laird for providing this information.
Wireless
Basic Settings
Wireless Physical Interface wl0
Virtual Interfaces: Add button
Wireless Network Name (SSID): xxxxxxxxxx
Wireless SSID Broadcast: Enable
AP Isolation: Disable
Optimize Multicast Traffic: Disable
Network Configuration: Bridged
Apply Settings
Save
Wireless Security
Virtual Interfaces wl0.1
Security Mode: WPA2 Personal
WPA Algorithms: AES
WPA Shared Key: A pass phrase
Apply Settings
Save
Setup
Networking
Create Bridge: Add button
Name: br1
Apply Settings
Assign to Bridge br1: Interface wl0.1
Apply Settings
Network Configuration br1
Label: Guest Wireless
Multicast forwarding: Disable
Masquerade / NAT: Enable
Net Isolation: Disable
Forced DNS Redirection: Disable
IP Address: 192.168.3.1
Subnet Mask: 255.255.255.0
Apply Settings
Multiple DHCP Server
Add button
DHCP 0: br1 - Guest Wireless
Apply Settings
Save
Administration
Commands
# Enable NAT on the WAN port to correct a bug in builds over 17000.
iptables -t nat -I POSTROUTING -o `get_wanface` -j SNAT --to `nvram get wan_ipaddr`
# Allow guest bridge access to Internet.
iptables -I FORWARD -i br1 -m state --state NEW -j ACCEPT
# Block access from br0 to br1.
iptables -I FORWARD -i br1 -o br0 -m state --state NEW -j DROP
# Block access from br1 to br0.
iptables -I FORWARD -i br0 -o br1 -m state --state NEW -j DROP
# Deny guest network access to router services.
iptables -I INPUT -i br1 -p tcp --dport telnet -j REJECT --reject-with tcp-reset
iptables -I INPUT -i br1 -p tcp --dport ssh -j REJECT --reject-with tcp-reset
iptables -I INPUT -i br1 -p tcp --dport www -j REJECT --reject-with tcp-reset
iptables -I INPUT -i br1 -p tcp --dport https -j REJECT --reject-with tcp-reset
Save Firewall
I added some DNSMasq options to support the guest wireless network.
Services
Services Management
DNSMasq
Additional DNSMasq Options:
# Enables DHCP on br1
interface=br1
# Set the default gateway for br1 clients
dhcp-option=br1,3,192.168.3.1
# Set the DHCP range and default lease time of 24 hours for br1 clients
dhcp-range=br1,192.168.3.102,192.168.3.150,255.255.255.0,24h
This is another good moment for a backup snapshot and rebooting the router.
I now had the LAN wired and wireless networks configured as well as a guest wireless network.
VLAN Settings
I wanted two VLAN ports. I use one VLAN port to isolate my Windows box. I use the other VLAN for temporary systems, such as when I work on another person’s computer. On the WRT54GL I was using the built-in hardware switch ports 3 and 4.
Setup
VLANs
VLAN
vlan0: No ports, no bridge assignment
vlan1: Ports 1,2 enabled, Bridge: LAN
vlan2: Port W(AN), Bridge: None
vlan3: Port 3, Unbridged LAN
vlan4: Port 4, Unbridged LAN
Link Aggregation on Ports 3 and 4: No
Apply Settings
Save
Setup
Networking
Network Configuration vlan3
Label: VLAN-Windows Computer
Bridge Assignment: Unbridged
Masquerade / NAT: Enable
IP Address: 192.168.40.1
Subnet Mask: 255.255.255.0
Network Configuration vlan4
Label: VLAN-Spare
Bridge Assignment: Unbridged
Masquerade / NAT: Enable
IP Address: 192.168.50.1
Subnet Mask: 255.255.255.0
Apply Settings
Multiple DHCP Server
Add button
DHCP 1: vlan3 - VLAN-Windows Computer
Apply Settings
Add button
DHCP 2: vlan4 - VLAN-Spare
Apply Settings
Save
Administration
Commands
# Allow VLAN traffic.
iptables -I INPUT -i vlan3 -j ACCEPT
iptables -I FORWARD -i vlan3 -o br0 -m state --state NEW -j ACCEPT
iptables -I FORWARD -i vlan3 -m state --state NEW -j ACCEPT
iptables -I INPUT -i vlan4 -j ACCEPT
iptables -I FORWARD -i vlan4 -o br0 -m state --state NEW -j ACCEPT
iptables -I FORWARD -i vlan4 -m state --state NEW -j ACCEPT
Save Firewall
I added some DNSMasq options to support the VLAN networks.
Services
Services Management
DNSMasq
Additional DNSMasq Options:
# Enables DHCP on vlan3
interface=vlan3
# Set the default gateway for vlan3 clients
dhcp-option=vlan3,3,192.168.40.1
# Set the DHCP range and default lease time of 24 hours for vlan3 clients
dhcp-range=vlan3,192.168.40.102,192.168.40.150,255.255.255.0,24h
# Enables DHCP on vlan4
interface=vlan4
# Set the default gateway for vlan4 clients
dhcp-option=vlan4,3,192.168.50.1
# Set the DHCP range and default lease time of 24 hours for vlan4 clients
dhcp-range=vlan4,192.168.50.102,192.168.50.150,255.255.255.0,24h
Connecting to one of the VLANs showed the default route and Primary DNS as 192.168.40.1 and an assigned IP address in the same subnet. No sign of my LAN DNS server IP address, which is what I wanted.
Loose Ends and Tweaks
I use some custom scripts that I wrote myself or downloaded from the web.
Administration
Management
Cron
Additional Cron Jobs
*/1 * * * * root sh /jffs/etc/config/traffic.sh
I used scp to copy files to the router:
/jffs/etc/profile
/tmp/root/.profile/profile
/jffs/etc/config/rc_startup.startup
/jffs/etc/config/rc_startup.wanup
/jffs/etc/config/traffic-repair.sh
/jffs/etc/config/traffic.sh
/jffs/etc/authorized_keys
/tmp/root/.ssh/authorized_keys
/jffs/etc/hosts
/tmp/hosts
/jffs/etc/dnsmasq.conf
/tmp/dnsmasq.conf
I remain dissatisfied with the external RT-AC66U indicators. I much prefer the front-view indicators of the WRT54GL. Seems the Asus engineers chose style over function. Or perhaps they were overruled by the marketing wonks, who usually have no clue about function.
On my to-do list are configuring a VPN and fixing the 802.11n problems.
Posted: Category: Tutorial, Usability Tagged: DD-WRT
Next: Using Unique SSIDs
Previous: Installing CentOS 7
