问题摘要:

问题摘要:

问题摘要:

我有一个真实接口“vif10”和一个虚拟接口(使用 VRRP)“vrrp.1”,两者都具有相同的 IPv4 地址。“vif10”有一个真实的 MAC 地址,“vrrp.1”有一个虚拟 MAC(VMAC)。

我希望 VMAC 始终是 ARP 请求和 ARP 回复中的发送方 MAC 地址,但有时它不被使用而是使用真实的 MAC。

换句话说:ARP 请求 - 我希望虚拟接口回复该公共 IP 的 ARP 请求(以 VMAC 作为发送方 MAC)ARP 回复 - 我希望 VMAC 始终是 ARP 请求的发送方 MAC 地址。我想我遗漏了一些 /proc/sys/net/ipv4 设置。

细节:

  1. 我的路由器上有 3 个接口:vif10:一个真实接口,ip 是 192.168.20.1 vrrp.1:一个虚拟接口(VRRP),ip 也是 192.168.20.1。(所有权)vrrp.2:一个虚拟接口(VRRP),ip 是 192.168.20.3。

  2. 这是我的“ifconfig”的输出:

vif10 链路封装:以太网 HWaddr A4:60:32:00:D4:BA
inet 地址:192.168.20.1 Bcast:192.168.20.255 掩码:255.255.255.0 上行广播运行多播 MTU:1500 度量:1 RX 数据包:38 错误:0 丢弃:0 超限:0 帧:0 TX 数据包:3423 错误:0 丢弃:0 超限:0 载波:0 冲突:0 txqueuelen:500 RX 字节:3002(2.9 KiB) TX 字节:184494(180.1 KiB)

vrrp.1 链路封装:以太网 HWaddr 00:00:5E:00:01:01
inet addr:192.168.20.1 Bcast:192.168.20.0 掩码:255.255.255.0 上行广播运行多播 MTU:1500 度量:1 RX 数据包:19 错误:0 丢弃:0 超限:0 帧:0 TX 数据包:31 错误:0 丢弃:0 超限:0 载波:0 冲突:0 txqueuelen:0 RX 字节:1216(1.1 KiB) TX 字节:1302(1.2 KiB)

vrrp.2 链路封装:以太网 HWaddr 00:00:5E:00:01:02
inet addr:192.168.20.3 Bcast:192.168.20.0 掩码:255.255.255.0 上行广播运行多播 MTU:1500 度量:1 RX 数据包:19 错误:0 丢弃:0 超限:0 帧:0 TX 数据包:48 错误:0 丢弃:0 超限:0 载波:0 冲突:0 txqueuelen:0 RX 字节:1216(1.1 KiB) TX 字节:2016(1.9 KiB)

  1. Linux 网络标志包括:

    cd /proc/sys/net/ipv4/conf/all

    对于./*中的f;执行echo -n“$f”;cat $f;完成

    ./accept_local 0 ./accept_redirects 0 ./accept_source_route 0 ./arp_accept 0 ./arp_announce 0 ./arp_filter 0 ./arp_ignore 0 ./arp_notify 0 ./bootp_relay 0 ./disable_policy 0 ./disable_xfrm 0 ./force_igmp_version 0 ./forwarding 1 ./log_martians 0 ./mc_forwarding 0 ./medium_id 0 ./promote_secondaries 0 ./proxy_arp 0 ./proxy_arp_pvlan 0 ./route_localnet 0 ./rp_filter 0 ./secure_redirects 1 ./send_redirects 0 ./shared_media 1 ./src_valid_mark 0 ./tag 0

    cd../vif10

    对于./*中的f;执行echo -n“$f”;cat $f;完成

    ./accept_local 0 ./accept_redirects 1 ./accept_source_route 1 ./arp_accept 0 ./arp_announce 2 ./arp_filter 1 ./arp_ignore 1 ./arp_notify 0 ./bootp_relay 0 ./disable_policy 0 ./disable_xfrm 0 ./force_igmp_version 0 ./forwarding 0 ./log_martians 0 ./mc_forwarding 0 ./medium_id 0 ./promote_secondaries 0 ./proxy_arp 0 ./proxy_arp_pvlan 0 ./route_localnet 0 ./rp_filter 0 ./secure_redirects 1 ./send_redirects 1 ./shared_media 1 ./src_valid_mark 0 ./tag 0

    cd../vrrp.1 复制代码

    对于./*中的f;执行echo -n“$f”;cat $f;完成

    ./accept_local 1 ./accept_redirects 1 ./accept_source_route 1 ./arp_accept 0 ./arp_announce 2 ./arp_filter 0 ./arp_ignore 1 ./arp_notify 0 ./bootp_relay 0 ./disable_policy 0 ./disable_xfrm 0 ./force_igmp_version 0 ./forwarding 1 ./log_martians 0 ./mc_forwarding 0 ./medium_id 0 ./promote_secondaries 1 ./proxy_arp 0 ./proxy_arp_pvlan 0 ./route_localnet 0 ./rp_filter 0 ./secure_redirects 1 ./send_redirects 1 ./shared_media 1 ./src_valid_mark 0 ./tag 0

    cd../vrrp.2 复制代码

    对于./*中的f;执行echo -n“$f”;cat $f;完成

    ./accept_local 1 ./accept_redirects 1 ./accept_source_route 1 ./arp_accept 0 ./arp_announce 2 ./arp_filter 0 ./arp_ignore 1 ./arp_notify 0 ./bootp_relay 0 ./disable_policy 0 ./disable_xfrm 0 ./force_igmp_version 0 ./forwarding 1 ./log_martians 0 ./mc_forwarding 0 ./medium_id 0 ./promote_secondaries 1 ./proxy_arp 0 ./proxy_arp_pvlan 0 ./route_localnet 0 ./rp_filter 0 ./secure_redirects 1 ./send_redirects 1 ./shared_media 1 ./src_valid_mark 0 ./tag 0

4.这是我的系统信息:

Linux kernel:
# uname -a
Linux Router_A 3.10.70 #2 SMP PREEMPT Mon Apr 24 17:59:38 IDT 2017 armv7l unknown

我正在使用“keepalived”进行 VRRP。

保持活跃:

# keepalived --version
Keepalived v1.3.2 (04/24,2017), git commit build-12076-11-gef48e87+

Alexandre 对 VMAC 做出的所有说明均包括:

  1. 我熟悉以下 Stack Overflow 文章

为什么 Linux 在错误的接口上应答 ARP?

谢谢!

答案1

“两者都有相同的 IPv4 地址”这就是您的问题所在。您需要 vrrp 数据包在接口之间传递,因此您确实存在 IP 冲突,并且您的 mac 可能会出现故障,因为流量将使用其物理 mac 流向主路由器。这是否重要似乎取决于与 vrrp 路由器通信的机器。虚拟和物理 mac 流向同一个地方,因此这可能有效,尽管我遇到过 tcp 连接在每次故障时冻结数秒的情况。

如果您希望解决此问题,请为每个物理接口更改一个 IP,并为浮动虚拟接口更改第三个 IP。

这肯定不是针对 Linux 的答案,相对于其他一些操作系统而言,Linux 实际上在这种配置下运行得相当好

相关内容