配置Debian 12双IP网络优先级和故障转移
在这篇文章中,我们将介绍如何在Debian 12系统上配置双IP网络优先级,并实现故障转移功能。假设您有一台VPS,绑定了两个IP地址:123.123.123.1(主IP)和123.123.123.3(备用IP)。我们的目标是默认使用主IP,只有在主IP不可用时才切换到备用IP。
前提条件
- 一台运行Debian 12的VPS
- 两个已配置的IP地址
- SSH访问权限
步骤概览
- 确认网络接口名称
- 临时设置路由优先级
- 修改网络配置文件
- 创建故障转移脚本
- 设置定时任务
1. 确认网络接口名称
首先,我们需要确认系统上的网络接口名称和IP地址配置情况:
ip addr show
输出示例:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
inet 123.123.123.1/24 brd 123.123.123.255 scope global eth0
valid_lft forever preferred_lft forever
3: eth0:1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
inet 123.123.123.3/24 brd 123.123.123.255 scope global eth0:1
valid_lft forever preferred_lft forever
通过输出结果,我们可以确认主IP 123.123.123.1 绑定在接口 eth0
上,而备用IP 123.123.123.3 绑定在接口 eth0:1
上。
2. 临时设置路由优先级
在正式修改配置文件前,我们可以通过命令临时设置路由优先级来测试效果:
# 设置主IP的路由优先级更高(较低的metric值)
sudo ip route add default via 123.123.123.1 dev eth0 metric 100
# 设置备用IP的路由优先级较低(较高的metric值)
sudo ip route add default via 123.123.123.3 dev eth0:1 metric 200
您可以通过以下命令检查路由表,确认更改已生效:
ip route show
这些更改在系统重启后将会丢失,下面我们会通过修改配置文件使其永久生效。
3. 修改网络配置文件
编辑网络接口配置文件:
sudo nano /etc/network/interfaces
将内容修改为:
# 回环接口
auto lo
iface lo inet loopback
# 主网络接口
auto eth0
iface eth0 inet static
address 123.123.123.1
netmask 255.255.255.0 # 请根据您的实际子网掩码调整
gateway 123.123.123.1 # 请根据您的实际网关调整
metric 100 # 较低的度量值,优先级更高
# 备用网络接口
auto eth0:1
iface eth0:1 inet static
address 123.123.123.3
netmask 255.255.255.0 # 请根据您的实际子网掩码调整
metric 200 # 较高的度量值,优先级较低
4. 创建故障转移脚本
创建一个监控脚本,检查主IP连接状态,在需要时进行切换:
sudo nano /usr/local/bin/ip-failover.sh
写入以下内容:
#!/bin/bash
PRIMARY_IP="123.123.123.1"
SECONDARY_IP="123.123.123.3"
GATEWAY="123.123.123.1" # 请根据您的实际网关调整
CHECK_HOST="8.8.8.8" # 用Google DNS服务器测试连接
# 检查主IP连接
check_primary() {
ping -c 3 -I $PRIMARY_IP $CHECK_HOST > /dev/null 2>&1
return $?
}
# 激活主IP路由
activate_primary() {
if ! ip route | grep -q "default via $GATEWAY dev eth0 metric 100"; then
ip route del default via $GATEWAY dev eth0:1 metric 200 2>/dev/null
ip route add default via $GATEWAY dev eth0 metric 100
logger "IP故障转移: 激活主IP $PRIMARY_IP"
echo "$(date): 激活主IP $PRIMARY_IP" >> /var/log/ip-failover.log
fi
}
# 激活备用IP路由
activate_secondary() {
if ! ip route | grep -q "default via $GATEWAY dev eth0:1 metric 200"; then
ip route del default via $GATEWAY dev eth0 metric 100 2>/dev/null
ip route add default via $GATEWAY dev eth0:1 metric 200
logger "IP故障转移: 激活备用IP $SECONDARY_IP"
echo "$(date): 激活备用IP $SECONDARY_IP" >> /var/log/ip-failover.log
fi
}
# 主功能逻辑
if check_primary; then
activate_primary
else
# 如果主IP连接失败,使用备用IP
activate_secondary
# 等待30秒后再次尝试主IP
sleep 30
if check_primary; then
activate_primary
fi
fi
设置脚本权限:
sudo chmod +x /usr/local/bin/ip-failover.sh
5. 设置定时任务
添加cron任务每分钟运行一次故障转移脚本:
sudo crontab -e
选择编辑器时,建议选择nano
(输入1并按回车):
Choose 1-2 [1]: 1
在crontab文件中添加以下行:
* * * * * /usr/local/bin/ip-failover.sh
保存并退出编辑器(在nano中按Ctrl+X
,然后按Y
确认保存)。
6. 重启网络服务
sudo systemctl restart networking
注意事项
- 请根据您的实际网络配置调整上述脚本和配置中的子网掩码和网关。
- 故障转移脚本使用Google DNS (8.8.8.8) 来测试连接,您可以根据需要更改为其他可靠的测试目标。
- 脚本每分钟运行一次,会在主IP不可用时切换到备用IP,在主IP恢复时切回。
- 日志会记录在系统日志和
/var/log/ip-failover.log
文件中。 - 配置后,可以通过
ip route show
命令查看当前路由表状态,确认主IP路由是否激活。
评论区