DD-WRT: Cannot see client when using wired ethernet

A bit of a frustrating problem I've been facing - I just don't know what's wrong.

I have a Netgear WNR2000v3 router with DD-WRT v24-sp2 (03/19/12) std installed. Everything works perfectly apart from one issue.

I have a fileserver that's plugged into one of the ethernet ports on the back of the router. The fileserver can see all network devices fine (can ping fine). The fileserver - and all over devices - can access the Internet via the eth0 interface (configured to be WAN). DD-WRT gets a WAN IP via DHCP - all fine.

Here's the interesting part. When my laptop is connected via wifi (device ath0 on the router), the laptop can see the fileserver - I can ping it fine. However, when I then plug the laptop into another ethernet port on the back of the router, it can no longer reach the fileserver! Whenever I ping, I get "No route to host" and "Host is down" messages interchangeably - even though it's actually still running fine.

I thought it might be an issue regarding the br0 interface created by default - but as far as I can see, the ethernet ports (eth1) and the wifi (ath0) are bridged as I would expect them to be. You can see the settings page showing this here:

enter image description here

I'm confident the subnets are the same. I should also note that when I SSH into the router (which I can do on both wifi and wired ethernet), the router can ping the fileserver fine at all times. I just can't figure out what is wrong, and am hoping someone can shed some light on this strange issue.


Solution 1:

I found the solution, you need to run the following two commands to allow clients hooked up to the switch to talk to each other:

swconfig dev eth1 set enable_vlan 1
swconfig dev eth1 set apply 

Commands courtesy of tomshardware

I still don't understand:

  1. What these commands are doing
  2. Why they weren't enabled by default

Solution 2:

I did some googling and it appears to be a bug in the DD-WRT firmware. There is talk on the DD-WRT forum that newer version a of the firmware will fix the issue. SiegeX's fix works great, one additional thing that I would do would be to add it as a startup command in the commands window so that next time your router reboots it will "fix" itself.

Solution 3:

Note that according to the bug in the DD-WRT firmware that @Simon The Cat linked, you may need to run some additional commands as I did on my TL-WR841Nv9 when I upgraded to DD-WRT build 38240.

You can/should verify which interface to use by running "swconfig list" in an SSH session.

root@TL-WR841Nv9:~# swconfig list
Found: switch0 - eth0
root@TL-WR841Nv9:~#

You can also confirm what all ports you need to enable vlan 0 on with "swconfig dev eth0 show"... In the case below i have ports 0,1,2,3, and 4:

root@TL-WR841Nv9:~# swconfig dev eth0 show
Global attributes:
        enable_vlan: 0
        mirror_monitor_port: 15
Port 0:
        enable_mirror_rx: 0
        enable_mirror_tx: 0
        pvid: 0
        link: port:0 link:up speed:1000baseT full-duplex txflow rxflow
Port 1:
        enable_mirror_rx: 0
        enable_mirror_tx: 0
        pvid: 0
        link: port:1 link:down
Port 2:
        enable_mirror_rx: 0
        enable_mirror_tx: 0
        pvid: 0
        link: port:2 link:down
Port 3:
        enable_mirror_rx: 0
        enable_mirror_tx: 0
        pvid: 0
        link: port:3 link:up speed:100baseT full-duplex auto
Port 4:
        enable_mirror_rx: 0
        enable_mirror_tx: 0
        pvid: 0
        link: port:4 link:up speed:100baseT full-duplex auto
VLAN 0:
        vid: 0
        ports: 0 1 2 3 4
root@TL-WR841Nv9:~#

The final commands I put in the Administration -> Commands -> Command Shell [box] -> "Save Startup" were as follows. Substitute your interface name below which is for TP-Link TL-WR841Nv9:

swconfig dev eth0 set reset 1;
swconfig dev eth0 set enable_vlan 1
swconfig dev eth0 vlan 0 set ports '0 1 2 3 4'
swconfig dev eth0 set apply 1

Afterwards - no idea why, the output below from "swconfig dev eth0 show" looks identical to the same command's output after I run just these two commands on startup "swconfig dev eth0 set enable_vlan 1; swconfig dev eth0 set apply 1;" but for some reason my router needed the other two lines to get the switch ports to communicate properly between devices as documented in the bug report:

root@TL-WR841Nv9:~# swconfig dev eth0 show
Global attributes:
        enable_vlan: 1
        mirror_monitor_port: 15
Port 0:
        enable_mirror_rx: 0
        enable_mirror_tx: 0
        pvid: 0
        link: port:0 link:up speed:1000baseT full-duplex txflow rxflow
Port 1:
        enable_mirror_rx: 0
        enable_mirror_tx: 0
        pvid: 0
        link: port:1 link:down
Port 2:
        enable_mirror_rx: 0
        enable_mirror_tx: 0
        pvid: 0
        link: port:2 link:down
Port 3:
        enable_mirror_rx: 0
        enable_mirror_tx: 0
        pvid: 0
        link: port:3 link:up speed:100baseT full-duplex auto
Port 4:
        enable_mirror_rx: 0
        enable_mirror_tx: 0
        pvid: 0
        link: port:4 link:up speed:100baseT full-duplex auto
VLAN 0:
        vid: 0
        ports: 0 1 2 3 4
root@TL-WR841Nv9:~#