DigitalOcean Floating IP绑定Droplet非eth0网卡配置及回滚方案咨询
实现方案(基于策略路由+SNAT,无原生功能依赖,通用所有公有云场景)
前置准备
- 先在云厂商控制台为实例新增第二块私有网卡(对应eth1),重启实例确认系统可识别到eth1
- 控制台侧将Floating IP绑定到当前实例即可,无需指定绑定网卡
临时配置(先调试生效,确认没问题再持久化)
- 先获取三个关键参数备用:
- 执行
ip a查询eth1的私有IP,示例值:10.10.0.5/20 - eth1对应私有网段网关,一般为网段首地址,示例值:
10.10.0.1 - 你申请的Floating IP地址,示例值:
146.190.123.123
- 执行
- 新增自定义路由表
编辑/etc/iproute2/rt_tables,末尾添加一行:1 rt1 - 配置策略路由规则
执行以下命令,替换为你自己的参数:# 为自定义路由表添加默认路由,走eth1网关 ip route add default via 10.10.0.1 dev eth1 table rt1 # 所有源为eth1私有IP的流量,走自定义路由表转发 ip rule add from 10.10.0.5/32 table rt1 # 配置SNAT规则,将eth1出口流量的源IP替换为Floating IP iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 146.190.123.123
效果验证
执行两条测试命令,会分别返回不同的公网IP:
curl --interface eth0 https://icanhazip.com # 返回实例原有eth0公网IP curl --interface eth1 https://icanhazip.com # 返回绑定的Floating IP
配置持久化(避免重启后失效)
Debian/Ubuntu系统编辑/etc/network/interfaces.d/50-cloud-init.cfg,在eth1配置块末尾添加如下内容:
post-up ip route add default via 10.10.0.1 dev eth1 table rt1 post-up ip rule add from 10.10.0.5/32 table rt1 post-up iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 146.190.123.123 pre-down iptables -t nat -D POSTROUTING -o eth1 -j SNAT --to-source 146.190.123.123 pre-down ip rule del from 10.10.0.5/32 table rt1 pre-down ip route del default via 10.10.0.1 dev eth1 table rt1
CentOS/RHEL系统编辑/etc/sysconfig/network-scripts/ifcfg-eth1,添加相同的post-up/pre-down规则即可。
回滚方案(释放Floating IP后恢复初始状态)
- 执行以下命令删除临时配置:
iptables -t nat -D POSTROUTING -o eth1 -j SNAT --to-source 146.190.123.123 ip rule del from 10.10.0.5/32 table rt1 ip route del default via 10.10.0.1 dev eth1 table rt1 - 编辑
/etc/iproute2/rt_tables删除之前添加的1 rt1行 - 删除网卡配置文件中新增的post-up/pre-down规则
- 云控制台侧删除额外添加的eth1网卡,即可完全恢复初始状态
注意:操作前建议备份原有网卡配置和iptables规则,避免配置错误导致网络中断
内容的提问来源于stack exchange,提问作者Melardev
相关产品推荐
相关产品推荐

