一段时间以来,我一直在努力解决这个不容易重现的问题。我使用的是 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) 我试图在我们的内部网络上找到一台具有特定 IP 地址的计算机。我已经从 DNS 中识别出计算机名称,但在这种情况下它对我没有帮助。
只是想知道我是否能以某种方式将 IP 绑定到交换机端口,并从那里跟踪它?如果是这样,如何?
我刚刚开始学习协议。在研究wireshark中的数据包时,我遇到了我的机器向我自己的IP发送的ARP请求。这是数据包的详细信息:
No. Time Source Destination Protocol Info
15 1.463563 IntelCor_aa:aa:aa Broadcast ARP Who has 192.168.1.34? Tell 0.0.0.0
Frame 15: 42 bytes on wire (336 bits), 42 bytes captured (336 bits)
Arrival Time: Jan 7, 2011 18:51:43.886089000 India Standard Time
Epoch Time: 1294406503.886089000 seconds
[Time delta from previous captured frame: 0.123389000 seconds]
[Time delta from previous displayed frame: 0.123389000 seconds]
[Time since reference or first frame: 1.463563000 seconds]
Frame Number: 15
Frame Length: 42 bytes (336 bits)
Capture Length: 42 bytes …Run Code Online (Sandbox Code Playgroud) 在以下两种情况下,从 router1 向 router2 发送 ARP Request 包会发生什么?会生成 ARP 回复还是丢弃 ARP 请求数据包?
上面的拓扑在路由器“router1”上的端口“Intf1”通过直接链路(例如,1 Gbps 电缆)连接到另一个路由器“router2”上的端口“Intf2”。
root@openwrt:~# ip -s -s -4 neigh show dev lan
10.64.42.121 lladdr b8:20:00:00:00:00 used 6387/6341/6313 probes 1 STALE
10.64.42.157 lladdr b8:20:00:00:00:00 used 24/813/19 probes 1 STALE
10.64.42.12 used 29066/30229/29063 probes 6 FAILED
10.64.42.1 lladdr e8:00:00:00:00:00 ref 1 used 10/5/5 probes 1 REACHABLE
root@openwrt:~# cat /proc/sys/net/ipv4/neigh/default/gc_interval
30
root@openwrt:~# cat /proc/sys/net/ipv4/neigh/default/gc_stale_time
60
root@openwrt:~# cat /proc/sys/net/ipv4/neigh/lan/gc_stale_time
60
Run Code Online (Sandbox Code Playgroud)
局域网中的主机 (b8:20:00:00:00:00) 的 IP 地址为 10.64.42.121。此 IP 现在无效,该主机的 IP 现在为 10.64.42.157(新的 DHCP 租用)。
我试图弄清楚旧的 arp 缓存条目何时将状态更改为 FAILED(假设没有人尝试联系 IP)。
最后一次确认条目是在 6341 秒前(1 小时 45 前)。这大于 60 …
我有一个连接到 Linux 路由器的 WiFi 接入点。路由器本身连接到 Internet。出于多种原因(主要是为了控制安全性和服务质量),我想强制所有用户的流量都经过 Linux 路由器,甚至是用户之间的流量。
为此,我禁用了 AP 中的站对站通信(我使用 D-Link DWL-7200 AP)。以下是我配置 AP 的方法:
ssh admin@accesspoint1
D-Link Access Point wlan1 -> set sta2sta disable
D-Link Access Point wlan1 -> reboot
Run Code Online (Sandbox Code Playgroud)
这工作正常:无线用户无法再相互通信。至少不是直接的。我的目标是强制流量到达路由器并返回。
要做到这,我能在Linux的路由器代理ARP:
echo 1 > /proc/sys/net/ipv4/conf/eth1/proxy_arp
Run Code Online (Sandbox Code Playgroud)
这是大图。
10.0.0.0/8 subnet
____________________|______________________
/ \
| |
(sta2sta disabled)
UserA----------------AP---------------------Router-------------------Internet
10.0.0.55 / eth1 eth0
/ 10.0.0.1 203.0.113.15
/ proxy-arp enabled
UserB____________/
10.0.0.66
Run Code Online (Sandbox Code Playgroud)
如果 UserA ping UserB,我希望会发生以下情况:
我有一个由 3 个主机组成的 HyperV 集群。每台主机都连接到我在以太通道中运行的两台 Nexus 5548 交换机。交换机上的 LACP 和服务器端使用 Broadcom 802.3ad 的 NIC 组合。这为我提供了 2GB 的带宽并提供了容错能力。
我在执行实时迁移时遇到的问题。在实时迁移之前,两个 Nexus 交换机都会在 ARP 表中显示 VM 的 MAC。迁移后,一台交换机显示 VM 的 MAC,另一台显示它移动到的 HyperV 主机的 MAC。
我运行了一个数据包捕获,看到 HyperV 主机发送了一个免费的 ARP,其中包含 VM 的 IP 和主机的 MAC,而不是 VM 的 MAC。发生这种情况时,我会失去第 3 层连接。我必须手动清除交换机中的 ARP 条目或等待大约 7 分钟以使其自行更正。
我环顾四周,人们在使用 Broadcom 处理 NIC 组合时遇到了类似的问题。有没有人看到这个?有什么建议吗?
-------- 编辑在下面添加
我只在使用 Link Aggregation 802.3ad 进行组队时遇到这个问题。Broadcom 团队选项是...
我切换到 Smart Load Balancing 和 VM Live …
我有一个wireshark 捕获,指示从源到目标的单播 ARP 请求。

根据我的理解,ARP 请求(包括免费 ARP)使用广播。在什么情况下使用单播 ARP 请求?
我遇到了一个奇怪的 Windows 2008R2 集群相关问题,困扰着我。我觉得我已经接近问题所在,但仍然不完全了解正在发生的事情。
我有一个运行在两台 2008R2 服务器上的两节点交换 2007 集群。在“主要”集群节点上运行时,交换集群应用程序工作正常。将群集资源故障转移到辅助节点时会出现此问题。
当将集群故障转移到“辅助”节点时,例如与“主要”节点在同一子网上,故障转移最初工作正常,集群资源继续在新节点上工作几分钟。这意味着接收节点确实会发送一个更新网络上的 arp 表的免费 arp 回复数据包。但是在 x 时间(通常在 5 分钟内)之后,某些东西会再次更新 arp 表,因为集群服务突然不响应 ping。
所以基本上,当它在“主节点”上运行时,我开始对交换集群地址执行 ping 操作。它工作得很好。我将集群资源组故障转移到“辅助节点”,我只丢失了一个可以接受的 ping。群集资源在故障转移后仍会响应一段时间,并且突然 ping 开始超时。
这告诉我 arp 表最初是由辅助节点更新的,但随后(我还没有发现)错误地再次更新它,可能是主节点的 MAC。
为什么会发生这种情况 - 有没有人遇到过同样的问题?
群集未运行 NLB,故障转移回没有问题的主节点后,问题会立即停止。
每个节点都将 NIC 组合 (intel) 与 ALB 结合使用。就我而言,每个节点都在同一个子网上,并且具有网关等输入正确。
编辑:
我想知道它是否可能与网络绑定顺序有关?因为我注意到从节点到节点我能看到的唯一区别是在显示本地 arp 表时。在“主”节点上,arp 表是在作为源的集群地址上生成的。而在“辅助”上,它是从节点自己的网卡生成的。
对此有任何意见吗?
编辑:
好的,这里是连接布局。
集群地址:AB6.208/25 交易所申请地址:AB6.212/25
节点 A:3 个物理网卡。两个使用 intels 组合,地址为 AB6.210/25,称为 public 最后一个用于集群流量,称为 private,地址为 10.0.0.138/24
节点 B:3 个物理网卡。两个使用 intels 绑定,地址为 AB6.211/25,称为 public 最后一个用于集群流量,称为 private,地址为 10.0.0.139/24
每个节点位于连接在一起的独立数据中心。DC1 中的终端交换机为 cisco,DC2 中为 NEXUS 5000/2000。
编辑: …
mac地址表和arp表有什么区别?是否说每个交换机只保留一个 arp 缓存,它自己学习将信息转发到另一台主机,并且网络上的每个主机都有自己的 mac 表,该表记录了它想要发送帧的主机的 mac 地址,此信息在广播后存储,这导致主机回复其 mac 地址,如果 20 分钟后未使用,则删除 mac 地址,以避免填满 mac 地址表。
我只是不知道为什么 arp 表 /cache 与 mac 表不同。
任何解释将不胜感激。