我最近设置了一个运行 DD-WRT 的 WNR2000v3 路由器,作为一种中继桥,使用“Atheros”版本的本教程(我们将其称为“路由器 2”),它重复了 Medialink Wireless-N 路由器(我们将其称为“路由器 1”)。这对于我的 Android 手机和 Windows 计算机来说非常完美,无论是通过 wifi 还是通过以太网直接连接,但当我插入我的 Raspberry pi 时,无论是运行 Raspbian(wheezy)还是 Raspbmc,我都无法在本地网络之外建立任何连接。
树莓派 可以 ping 通(并被 ping 通)本地子网上的任何其他设备,包括它直接连接到的“路由器 2”,并且它可以从路由器 1 获取 DHCP,但是当我尝试 ping 路由器 1 时,我得到“目标主机不可达”的结果,如果我尝试 ping 互联网上的任何内容,如 google.com、superuser.com,我同样会得到“目标主机不可达”的结果。
这是网络上的另一台计算机:
ping 192.168.0.100
PING 192.168.0.100 (192.168.0.100) 56(84) bytes of data.
64 bytes from 192.168.0.100: icmp_req=1 ttl=127 time=38.7 ms
64 bytes from 192.168.0.100: icmp_req=2 ttl=127 time=1.67 ms
64 bytes from 192.168.0.100: icmp_req=3 ttl=127 time=1.73 ms
64 bytes from 192.168.0.100: icmp_req=4 ttl=127 time=3.56 ms
--- 192.168.0.100 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 1.672/11.418/38.705/15.772 ms
这是路由器 1:
ping 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
From 192.168.0.107 icmp_seq=1 Destination Host Unreachable
From 192.168.0.107 icmp_seq=2 Destination Host Unreachable
From 192.168.0.107 icmp_seq=3 Destination Host Unreachable
From 192.168.0.107 icmp_seq=4 Destination Host Unreachable
From 192.168.0.107 icmp_seq=5 Destination Host Unreachable
From 192.168.0.107 icmp_seq=6 Destination Host Unreachable
--- 192.168.0.1 ping statistics ---
8 packets transmitted, 0 received, +6 errors, 100% packet loss, time 7007ms
pipe 3
192.168.0.107 是 Raspberry Pi 的地址:
ifconfig
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:db:c9
inet addr:192.168.0.107 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3753 errors:0 dropped:0 overruns:0 frame:0
TX packets:1262 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:595127 (581.1 KiB) TX bytes:112407 (109.7 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:285 errors:0 dropped:0 overruns:0 frame:0
TX packets:285 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:27703 (27.0 KiB) TX bytes:27703 (27.0 KiB)
以下是路由表:
sudo route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
以下是 DHCP 请求:
sudo dhclient -v eth0
Internet Systems Consortium DHCP Client 4.2.2
Copyright 2004-2011 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/eth0/xx:xx:xx:xx:db:c9
Sending on LPF/eth0/xx:xx:xx:xx:db:c9
Sending on Socket/fallback
DHCPREQUEST on eth0 to 255.255.255.255 port 67
DHCPACK from 192.168.0.1
RTNETLINK answers: File exists
bound to 192.168.0.107 -- renewal in 274691 seconds.
其余一切都正常,但我尝试过将这个 rapsberry pi 与两个不同的映像(Raspbmc 和 raspbian)和两个不同的 raspberry pi 一起使用,但配置均不起作用。raspbian 映像在直接连接到路由器 1 时已测试为正常工作。这个问题似乎与这个尚未解答的问题从两年前开始,除了在这种情况下,他似乎正在为无法连接的设备使用 wifi,并且他实际上获得了一些间歇性连接。此外,那里的 ping 响应来自路由器,而不是设备。什么可能导致此问题?
编辑:我还应该注意到,两个不同的树莓派有不同的 IP 地址,其中一个是 IP-MAC 绑定的,并且我在 DHCP 表中没有看到 IP 冲突,但每个都有同样的问题。
更新:我已经确定了一件可能有趣的事情,那就是当 MAC 地址克隆关闭时,中继器桥接器停止工作 - 唯一可以 ping 通 Raspberry Pi 的是路由器 2,并且仅连接到路由器 2 的任何东西(包括 Windows 计算机)都无法连接(或无法访问路由器 1)。但是,被克隆的 mac 地址与路由器 2 的接口实际使用的 mac 地址相同(根据“状态”页面)。我已经对路由器 1 和路由器 2 进行了两次电源循环,但没有任何区别。我不明白为什么 MAC 地址克隆在这里很重要。在 MAC 地址克隆关闭的情况下,当我 ssh 进入路由器本身时,路由器可以 ping 通 Raspberry pi,但不能 ping 通路由器 1。
另一件小事是,当 MAC 地址克隆打开并且我实际上可以 ping 网络上的其他计算机时,arping 会为响应 ping 的每个设备返回相同的 mac 地址。
更新 2:通过检查系统日志值,我发现有与 MAC 地址相关的错误消息:
Jan 1 00:00:08 Router 2 kern.err kernel: [ 6.770000] ath: eeprom contains invalid mac address: ff:ff:ff:ff:ff:ff
Jan 1 00:00:08 Router 2 kern.err kernel: [ 6.780000] ath: random mac address will be used: fa:55:da:33:19:a9
显然这是一个已知问题人们正在使用 MAC 地址克隆来解决这个问题。我不太清楚为什么随机 MAC 地址会成为问题,以及 MAC 地址克隆还会带来什么其他后果。
答案1
+1,获取详细的问题描述。
正如我在你打开的帖子中建议的那样树莓派,您可以检查您的主路由器是否在 RPi 的 arp 表中列出:arp -n
或者您是否安装了 iproute2 ip neigh
:。
如果需要,您可以使用以下命令将路由器添加到 arp 缓存中:arp -s <ROUTER_IP> <ROUTER_MAC>
并查看是否仍然有问题
您还可以通过嗅探所有 ARP 数据包来检查 RPi 是否按预期发送 ARP 请求。在您的 RPi 上运行:tcpdump arp
您也可以在 DD-WRT 中继器和连接到路由器 1 的任何其他主机上运行相同的命令。当 ARP 请求被广播时,您应该可以在整个局域网中看到它们。
答案2
我在安装新的 Wifi 中继器时遇到了同样的问题。折衷的解决方案是为 Raspberry Pi 设置静态 IP。
答案3
这是一个很难诊断的问题,因为您的系统配置似乎是正确的。因此,与其浏览冗长的检查选项列表,不如给您一些测试的想法。
我想要尝试的一件事是将默认网关更改为路由器 2,而不是路由器 1。
另一件事是强制 ping 绑定到接口 eth0:
ping -I 192.168.0.107 192.168.0.1
ping -I eth0 192.168.0.1
这两个命令略有不同,应该都试一下。希望它们能给出不同的输出,这可能是故障的迹象。
然后我会检查 /etc/network/interfaces:它是否包含如下几行
auto eth0
iface eth0 inet dhcp
然后我会尝试重新启动界面:
ifdown eth0
ifup eth0
然后再次运行 dhclient。
总的来说,你应该记住,这不一定是软件问题。如果你去此网页您可能会看到以下经历:
我订购了另一台树莓派,刚刚重新镜像了 SD 卡,在那个卡上启动,互联网工作正常。我取出 SD 卡并将其放入旧的树莓派中,并连接了完全相同的电缆和以太网线,但它仍然不起作用......
此外,您还应记住电缆可能存在问题。电缆不是正常工作的对象。RX 或 TX 中的问题可能会导致许多帧丢失、信号质量不佳等等。在这种情况下,TCP 等协议的表现优于 ICMP 或 UDP,因为它们会重新传输目标尚未收到的数据包,从而给您造成连接正常工作的错误印象。当然,这种错误印象会持续到您测量连接速度为止。
答案4
我之前也遇到过类似的问题。我的解决方案是
/etc/resolv.conf
通过添加 来编辑文件nameserver 8.8.4.4
,然后使用 重新启动接口/etc/init.d/networking restart
。对我来说很管用。