内网基于ARP实现VIP(虚拟 IP)配置方案

利用免费 ARP(Gratuitous ARP) 实现内网 VIP 漂移 / 单节点虚拟 IP,分临时测试、永久配置、主备漂移(简单 HA) 三种场景,适配 Linux 系统。
原理:手动 / 脚本在主机网卡配置虚拟 IP,发送免费 ARP 通告全网网关 / 终端更新 ARP 表,流量即可指向当前节点。

一、基础环境说明

物理网卡:eth0(根据实际网卡名修改,如 ens33、bond0)

内网网段:192.168.1.0/24
目标 VIP:192.168.1.100

系统:CentOS / Ubuntu / Debian

二、单节点临时 VIP(重启失效,测试用)

1. 配置虚拟 IP

bash
# 绑定VIP到物理网卡
ip addr add 192.168.1.100/24 dev eth0 label eth0:vip

2. 发送免费 ARP(关键!全网刷新 ARP 表)
内网所有设备才会识别 VIP 归属当前主机:
方式1:arping(推荐,通用性强)

arping -c 3 -I eth0 192.168.1.100

方式2:send_arp 工具(部分系统需安装)

send_arp eth0 本机物理IP 本机MAC 192.168.1.100 FF:FF:FF:FF:FF:FF
-c 3:发送 3 次 ARP 包,确保全网接收
-I:指定出接口

3. 验证
查看本机IP

ip a

其他内网机器 ping VIP

ping 192.168.1.100

查看ARP表,确认VIP对应本机MAC

arp -a

4. 临时删除 VIP

ip addr del 192.168.1.100/24 dev eth0

三、单节点永久 VIP(开机自启)

1. CentOS 7/8(NetworkManager)
编辑网卡配置文件:

cat /etc/sysconfig/network-scripts/ifcfg-eth0:vip
DEVICE=eth0:vip
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0

重启网络并发送 ARP

systemctl restart network
arping -c 3 -I eth0 192.168.1.100

2. Ubuntu/Debian(netplan)

cat /etc/netplan/01-network-manager-all.yaml
network:
  ethernets:
    eth0:
      addresses:
        - 192.168.1.10/24    # 本机真实IP
        - 192.168.1.100/24   # VIP
  version: 2

生效配置

netplan apply
arping -c 3 -I eth0 192.168.1.100

四、双机主备 ARP 漂移 VIP(简易 HA)

两台主机

主节点:192.168.1.10
备节点:192.168.1.11
VIP:192.168.1.100

主节点正常:持有 VIP,定时发免费 ARP
主节点宕机 → 备节点检测不通,抢占 VIP + 发送 ARP
主节点恢复(可选):手动 / 自动切回
1. 通用检测脚本(双机共用)
新建 vip_ha.sh,修改网卡、IP 参数:

#!/bin/bash
VIP="192.168.1.100"
DEV="eth0"
MAIN_IP="192.168.1.10"  # 主节点真实IP
CHECK_COUNT=3

检测主节点是否存活

ping -c $CHECK_COUNT -W 1 $MAIN_IP >/dev/null 2>&1

if [ $? -ne 0 ];then
    # 主节点失联,备节点抢占VIP
    ip addr add $VIP/24 dev $DEV label ${DEV}:vip
    arping -c 5 -I $DEV $VIP
else
    # 主节点正常,备节点释放VIP
    ip addr del $VIP/24 dev $DEV 2>/dev/null
fi

授权 + 定时任务:

chmod +x vip_ha.sh

每3秒执行一次检测(crontab 最小1分钟,高频用while循环)
后台常驻运行

nohup bash -c "while true; do /root/vip_ha.sh; sleep 3; done" > /root/vip_ha.log 2>&1 &

2. 主节点加固(保活 ARP)
主节点正常时,定时发送 ARP 防止内网 ARP 表老化:
每10秒发一次免费ARP

nohup bash -c "while true; do arping -c 2 -I eth0 192.168.1.100; sleep 10; done" >/dev/null 2>&1 &


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/1148

评论列表

0%