我没有找到如何检查和更改 Linux 上的默认 arp 缓存超时。我在内核 3.x 中使用 debian(但我认为它与旧内核相同)
注意:我已经有了解决这个问题的方法(如下所述),所以这只是一个“想知道”的问题。
我有大约 50 台主机的高效设置,包括运行 xen 4 的刀片和提供 iSCSI 的 equallogics。所有的 xen dom0s 几乎都是纯 Debian 5。设置包括每个 dom0 上的几个网桥,以支持 xen 桥接网络。每个 dom0 上总共有 5 到 12 个网桥,每个网桥为一个 vlan 服务。所有主机都没有启用路由。
有一次,我们将其中一台机器移到了一个新的硬件上,包括一个 raid 控制器,因此我们安装了一个带有 xen 补丁的上游 3.0.22/x86_64 内核。所有其他机器运行 debian xen-dom0-kernel。
从那时起,我们在设置中的所有主机上每隔约 2 分钟就会发现以下错误:
[55888.881994] __ratelimit: 908 callbacks suppressed
[55888.882221] Neighbour table overflow.
[55888.882476] Neighbour table overflow.
[55888.882732] Neighbour table overflow.
[55888.883050] Neighbour table overflow.
[55888.883307] Neighbour table overflow.
[55888.883562] Neighbour table overflow.
[55888.883859] Neighbour table overflow.
[55888.884118] Neighbour table overflow.
[55888.884373] Neighbour table overflow. …Run Code Online (Sandbox Code Playgroud) $ sudo arp -avn
? (10.10.7.30) at 00:cc:cc:bb:dd:86 [ether] on eth0
...
$ sudo arp --delete 10.10.7.30
$ sudo arp -avn
? (10.10.7.30) at <incomplete> [ether] on eth0
Run Code Online (Sandbox Code Playgroud)
在--delete我预计没有条目之后10.10.7.30。出乎意料的是,该条目保留并标记为<incomplete>。
使用Ubuntu 10.04。
有没有办法让keepalived定期发送免费的ARP?
我们有以下情况:
因此,我们认为我们可以通过定期 GARP 来避免这种情况。这是一个好方法吗,有没有办法在keepalived中做到这一点?
还有其他建议可以避免此类问题吗?
保活配置:
global_defs {
notification_email {
email@address.com
}
notification_email_from SERVER_1
smtp_server smtp.server.local
smtp_connect_timeout 30
router_id SERVER_1
}
vrrp_instance V1 {
state BACKUP
nopreempt
interface eth0
lvs_sync_daemon_interface eth0
virtual_router_id 150
priority 120
advert_int 1
persistence_timeout 0
smtp_alert
authentication {
auth_type PASS
auth_pass xxx
}
virtual_ipaddress {
10.xxx.xxx.xxx …Run Code Online (Sandbox Code Playgroud) 当我在网关中运行 tcpdump 时,我收到了很多来自网关本身的 arp 请求。我想知道为什么会发生这种情况。如何找到导致这些 arp 请求的进程?
$ tcpdump -n arp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
16:51:03.662114 ARP, Request who-has 211.123.123.251 tell 211.123.123.242, length 28
16:51:03.954113 ARP, Request who-has 211.123.123.246 tell 211.123.123.242, length 28
16:51:04.002111 ARP, Request who-has 211.123.123.254 tell 211.123.123.242, length 28
16:51:04.518111 ARP, Request who-has 211.123.123.248 tell 211.123.123.242, length 28
16:51:04.954113 ARP, Request who-has 211.123.123.246 tell 211.123.123.242, length 28
16:51:05.002110 ARP, …Run Code Online (Sandbox Code Playgroud) 一段时间以来,我一直在努力解决这个不容易重现的问题。我使用的是 linux 内核 v3.1.0,有时路由到几个 IP 地址不起作用。似乎发生的事情是内核没有将数据包发送到网关,而是将目标地址视为本地地址,并尝试通过 ARP 获取其 MAC 地址。
比如现在我当前的IP地址是172.16.1.104/24,网关是172.16.1.254:
# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:1B:63:97:FC:DC
inet addr:172.16.1.104 Bcast:172.16.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:230772 errors:0 dropped:0 overruns:0 frame:0
TX packets:171013 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:191879370 (182.9 Mb) TX bytes:47173253 (44.9 Mb)
Interrupt:17
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.16.1.254 0.0.0.0 UG 0 0 0 eth0
172.16.1.0 0.0.0.0 255.255.255.0 U 1 …Run Code Online (Sandbox Code Playgroud) 我已经设置了一个 linux 机器(在 esxi5 上),它充当 OpenVPN 服务器。服务器配置为对客户端使用桥接,这基本上可以工作,但有一个例外。
如果客户端 ping 网络上的某些机器而不是服务器本身,则它不起作用。我排除了我所知道的一切(iptables 等)并运行 tcpdump 将其归结为以下内容:
问题:为什么br0设备不转发ARP回复给tap0设备?
我工作的小学院有一些非常奇怪的网络问题。我在这里寻找任何建议或想法。整个夏天我们都很好,但在秋季学期学生返回校园后几天,麻烦就开始了。
症状
主要症状是互联网访问可以工作,但速度非常慢......经常到超时点。例如,Speedtest.net 的典型结果将返回 0.4Mbps 的下载速度,但允许 3 到 8 Mbps 的上传速度。较轻的症状可能包括与我们的文件服务器之间传输数据的性能严重受限,甚至在某些情况下无法登录计算机(无法访问域控制器)。该问题跨越多个 vlan,并且影响了我们操作的几乎每个 vlan 上的设备。
该问题不会影响网络上的所有机器。一台未受影响的机器通常会从 speedtest.net看到至少11Mbps 的下载速度,而且可能更多,这取决于当时更大的校园流量模式。
在更大的问题上有一种变体。我们有一个 vlan,用户根本无法登录到几乎所有的机器。IT 人员将使用本地管理员帐户(或在某些情况下缓存的凭据)登录,然后发布/更新或 ping 网关将允许机器工作......一段时间。使这个问题复杂化的是,这个 vlan 覆盖了我们的计算机实验室,它使用称为 Deep Freeze 的软件在重新启动后完全重置硬盘驱动器。由于机器上的陈旧数据几周都没有永久更改低级信息,因此相同的问题可能会以不同的方式表现出来。然而,我们能够通过创建一个新的 vlan 并将实验室转移到新的 vlan 批发来解决这个问题。
教唆
最终我们注意到受影响的机器都有最近的 dhcp 租用。我们可以通过观察 dhcp 租约何时更新来预测机器何时会变得“慢”。我们尝试将测试 vlan 的租用时间设置得非常短,但这只是消除了我们预测机器何时变慢的能力。具有静态 IP 的机器几乎总是正常工作。手动释放/更新地址永远不会导致机器变慢。事实上,在某些情况下,这个过程已经修复了处于这种状态的机器。然而,大多数时候,它没有帮助。我们还注意到,像笔记本电脑这样的移动机器在跨入新的 vlan 时可能会变慢。校园内的无线网络被划分为“区域”,其中每个区域都映射到一小组建筑物。搬到新建筑可以让您进入一个区域,从而使您获得一个新地址。从睡眠模式恢复的机器也很可能很慢。
缓解措施
有时,但并非总是如此,清除受影响机器上的 arp 缓存将使其再次正常工作。如前所述,释放/更新本地机器的 IP 地址可以修复该机器,但不能保证。Ping 默认网关有时也可以帮助处理速度较慢的机器。
似乎最有助于缓解问题的是清除核心第 3 层交换机上的 arp 缓存。此交换机用于我们的 dhcp 系统作为所有 vlan 上的默认网关,并处理 vlan 间路由。型号为 3Com 4900SX。为了尝试缓解这个问题,我们在交换机上一直设置缓存超时到尽可能低的时间,但这并没有帮助。我还编写了一个脚本,每隔几分钟运行一次,以自动连接到交换机并重置缓存。不幸的是,这并不总是有效,甚至可能导致某些机器在短时间内处于缓慢状态(尽管这些似乎在几分钟后会自行纠正)。我们目前有一个每 10 分钟运行一次的预定作业,以强制核心交换机清除其 ARP 缓存,但这远非完美或可取。
再生产
我们现在有一台可以随意强制进入慢速状态的测试机。它连接到为我们的每个 vlan 设置端口的交换机。我们通过连接到不同的 vlan 使机器变慢,并且在连接一两个新连接后它会变慢。
在本节中还值得注意的是,这在先前条款开始时发生过,但在过去,问题在几天后自行消失。它在我们有机会进行大量诊断工作之前就自行解决了……这就是为什么我们这次允许它拖到术语中这么长时间;人们期望这将是一种短暂的情况。 …
我最近获得了一个客户端,该客户端在其中一台服务器上存在奇怪的 ARP 缓存问题。
我有一个服务器,它最终会开始将它的动态 ARP 条目转换为静态 ARP 条目。这会导致问题,因为当在此服务器上具有静态 ARP 条目的机器通过 DHCP 接收新 IP 时,服务器无法与客户端通信。清除 ARP 缓存解决了该问题,服务器可以正常运行大约一周,然后它开始慢慢将 ARP 条目转换为静态 ARP 条目。我没有将范围缩小到它开始执行的时间或数量,但慢慢地你开始看到 1 个静态 ARP,然后是 5,然后是 10。
有问题的服务器是 Windows Server 2003 SP2。它是一个 DC、DHCP 和 DNS 服务器。我已经检查了 DHCP 范围选项,那里没有任何内容表明与静态 ARP 条目有任何关系。此 DNS 服务器与我们的其他 DNS 服务器之间唯一不同的是,在有问题的服务器上检查了“不请求更新的 DHCP 客户端的动态更新 DNA A 和 PTR 记录”。
我对此进行了一些研究,似乎如果任何 PXE 类型的服务正在运行,可能会发生这种情况,据我所知,没有任何东西在运行 PXE 服务器。
我有点迷茫,因为我从未见过动态 ARP 条目开始变成静态 ARP 条目。现在我的解决方案是一个计划任务,它每 24 小时运行一次以清除 ARP 缓存(arp -d *)。我不想依赖这个计划任务。
有没有人以前见过这个或对如何解决这个问题有任何建议?
我有以下 Linux 网络设置:有一个 eth10 网络接口,分配的地址为 10.11.0.1/24。然后有一个分配了虚拟地址 0.0.0.1/32 的 tap0 网络接口(我分配了一个虚拟地址来启动接口),并且来自/到它的流量由最初创建 tap0 接口的用户空间程序控制。在 tap0 接口的另一侧,有一个用户空间程序通过原始套接字使用它,该程序查找 ARP 请求并构建响应。
现在,当用户空间程序构造一个请求 10.11.0.1 的 ARP 请求时,我希望另一个原始套接字用户空间程序回复它。但是,我得到了两个回复:一个来自原始套接字程序,另一个来自 Linux 内核。
显然,Linux 内核推断 10.11.0.1 是属于它的地址,因此做出了答复。但是10.11.0.1并不是tap0接口的地址。它是 eth10 接口的地址。
我的问题是:为什么 Linux 内核会这样做?有什么办法可以禁用错误接口上的 ARP 回复?
我对这个问题的临时解决方案是使用 10.11.0.1 以外的其他地址用于原始套接字/tap0 目的。但是,因为这个系统应该是一个可以在任何开发机器上运行的应用程序的系统级测试,所以我不能保证与其他接口没有 IP 地址冲突。因此,最好在错误的接口上禁用 ARP 回复。
这个问题的另一个解决方案是使用 netmap 为用户空间应用程序保留整个接口,防止内核在用户空间应用程序运行时使用它。但我希望我的测试在没有 netmap 的情况下运行。
arp ×10
linux ×5
networking ×3
bridge ×1
debian ×1
failover ×1
ip-routing ×1
ipv6 ×1
keepalived ×1
linux-kernel ×1
openvpn ×1
performance ×1
routing ×1
tap ×1
vmware-esxi ×1