问题摘要:
我有一个真实接口“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 设置。
细节:
我的路由器上有 3 个接口:vif10:一个真实接口,ip 是 192.168.20.1 vrrp.1:一个虚拟接口(VRRP),ip 也是 192.168.20.1。(所有权)vrrp.2:一个虚拟接口(VRRP),ip 是 192.168.20.3。
这是我的“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)
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 做出的所有说明均包括:
- 我熟悉以下 Stack Overflow 文章
谢谢!
答案1
“两者都有相同的 IPv4 地址”这就是您的问题所在。您需要 vrrp 数据包在接口之间传递,因此您确实存在 IP 冲突,并且您的 mac 可能会出现故障,因为流量将使用其物理 mac 流向主路由器。这是否重要似乎取决于与 vrrp 路由器通信的机器。虚拟和物理 mac 流向同一个地方,因此这可能有效,尽管我遇到过 tcp 连接在每次故障时冻结数秒的情况。
如果您希望解决此问题,请为每个物理接口更改一个 IP,并为浮动虚拟接口更改第三个 IP。
这肯定不是针对 Linux 的答案,相对于其他一些操作系统而言,Linux 实际上在这种配置下运行得相当好