You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

主IP由DHCP分配的单网卡服务器配置故障转移IP为出口IP的技术求助

主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。

  1. 先创建一个自定义路由表
    我们给这个路由表起个好记的名字,比如failover,表号用200(只要没被系统占用就行):

    echo "200 failover" >> /etc/iproute2/rt_tables
    
  2. 给这个路由表添加默认路由
    用你当前默认网关(就是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
    
  3. 添加路由规则,让流量匹配这个路由表
    执行以下命令,确保从故障转移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
    
  4. 验证配置是否生效
    跑这个命令看看出站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系

  1. 给网卡添加永久的故障转移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
    
  2. 持久化路由和规则
    创建路由配置文件/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

火山引擎 最新活动