主IP由DHCP分配的单网卡服务器配置故障转移IP为出口IP的技术求助
嘿,我来帮你搞定这个需求!先理清楚你的场景:单网卡服务器,主IP靠DHCP自动获取,现在要加一个故障转移IP,并且让服务器的所有出站流量都走这个新IP对吧?先看看你给出的当前系统配置:
当前网络配置信息
ip a 输出:
[root@~]# ip a 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether fa:16:3e:7b:86:85 brd ff:ff:ff:ff:ff:ff inet 57.187.244.7/24 brd 57.187.244.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever
ifconfig 输出:
[root@~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 57.187.244.7 netmask 255.255.255.0 broadcast 57.187.244.255 inet6 fe80::f816:3eff:fe7b:8685 prefixlen 64 scopeid 0x20<link> ether fa:16:3e:7b:86:85 txqueuelen 1000 (Ethernet) -- packet list
ip route list 输出:
[root@~]# ip route list default via 57.187.244.1 dev eth0 proto static metric 100 57.187.244.0/24 dev eth0 proto kernel scope link src 57.187.244.7 metric...
下面是具体的配置步骤,我分临时生效(测试用)和永久生效(重启后保留)两部分来说:
第一步:临时添加故障转移IP(测试用)
假设你的故障转移IP是 X.X.X.X/24(记得替换成你实际的IP和子网掩码),执行以下命令把IP加到网卡上:
ip addr add X.X.X.X/24 dev eth0
执行完后再跑 ip a,检查eth0条目下是否出现了新的inet X.X.X.X/24,确认IP添加成功。
第二步:配置出站流量走故障转移IP
这一步是核心,我们需要通过路由策略指定出站流量的源IP。
先创建一个自定义路由表
我们给这个路由表起个好记的名字,比如failover,表号用200(只要没被系统占用就行):echo "200 failover" >> /etc/iproute2/rt_tables给这个路由表添加默认路由
用你当前默认网关(就是ip route list里的57.187.244.1),指定源IP为故障转移IP:ip route add default via 57.187.244.1 dev eth0 src X.X.X.X table failover添加路由规则,让流量匹配这个路由表
执行以下命令,确保从故障转移IP发出的流量,以及目标是这个IP的流量都走我们的自定义路由表:ip rule add from X.X.X.X table failover ip rule add to X.X.X.X table failover如果想要所有出站流量都强制走这个故障转移IP,可以再加一条优先级更高的规则:
ip rule add priority 1000 from all lookup failover验证配置是否生效
跑这个命令看看出站IP是不是故障转移IP:curl --interface X.X.X.X ifconfig.me或者用
ip route get 8.8.8.8,看输出里的src字段是不是X.X.X.X。
第三步:配置永久生效(重启后不丢失)
不同发行版的配置方式略有不同,我分两种主流情况说明:
情况1:CentOS/RHEL系
给网卡添加永久的故障转移IP
创建一个额外的网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0:0,内容如下(替换成你的实际IP):TYPE=Ethernet BOOTPROTO=none IPADDR=X.X.X.X PREFIX=24 DEVICE=eth0:0 ONBOOT=yes持久化路由和规则
创建路由配置文件/etc/sysconfig/network-scripts/route-eth0:default via 57.187.244.1 dev eth0 src X.X.X.X table failover创建规则配置文件
/etc/sysconfig/network-scripts/rule-eth0:from X.X.X.X table failover to X.X.X.X table failover最后重启网络服务:
systemctl restart network
情况2:Debian/Ubuntu系(用Netplan)
编辑Netplan配置文件(通常是/etc/netplan/00-installer-config.yaml),添加故障转移IP的配置:
network: ethernets: eth0: dhcp4: true addresses: [X.X.X.X/24]
然后应用配置:netplan apply
对于路由规则和静态路由,你可以把之前的命令加到/etc/rc.local(如果启用的话),或者创建一个简单的systemd服务来执行这些命令,确保重启后自动加载。
注意事项
- 确保你的故障转移IP和主IP在同一个子网,或者提前确认网关能正常路由这个IP
- DHCP更新主IP的时候,不会影响故障转移IP的配置,因为我们是单独添加的静态IP
- 如果配置后出现网络问题,可以先执行
ip addr del X.X.X.X/24 dev eth0和删除路由规则来临时恢复
备注:内容来源于stack exchange,提问作者Marcx




