1. 准备与前提
步骤小分段:
- 向台湾云服务商申请额外公网IP(通常以弹性IP或附加IP形式提供),记录网关与子网信息。
- 确认云服务控制台是否需要在实例上绑定这些IP(有时需要在控制台先绑定)。
- 准备一台Linux服务器(以Ubuntu 20.04/CentOS 7+为例),可使用root或具sudo权限的账户进行操作。
2. 在操作系统上添加多IP(IP别名)
步骤小分段:
- 临时添加(立即生效,重启失效):sudo ip addr add 203.0.113.11/32 dev eth0 label eth0:1(将IP和网卡名替换为你的信息)。
- 永久添加(Debian/Ubuntu使用netplan或ifupdown,CentOS使用ifcfg或NetworkManager):例如Ubuntu netplan YAML示例:/etc/netplan/01-netcfg.yaml 中新增额外addresses,然后 sudo netplan apply。
- 验证:ip addr show dev eth0 或 ip a | grep 203.0.113。
3. 处理云平台的ARP和rp_filter问题
步骤小分段:
- 若云平台做了路由代理(多个IP需由同一MAC响应),需要关闭严格反向路径过滤:echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter,并写入 /etc/sysctl.d/99-sysctl.conf:net.ipv4.conf.all.rp_filter=0,net.ipv4.conf.default.rp_filter=0。
- 若发生ARP问题,可启用arp_announce/arp_ignore策略:net.ipv4.conf.all.arp_announce=2 和 net.ipv4.conf.all.arp_ignore=1,写入sysctl并生效。
4. 入站多IP对应服务绑定(Nginx/HAProxy示例)
步骤小分段:
- Nginx按IP绑定虚拟主机:server { listen 203.0.113.11:80; server_name example1.com; ... }。为每个公网IP建立独立server块。重载:sudo nginx -t && sudo systemctl reload nginx。
- HAProxy用于按IP/端口分发:frontend http_in bind 203.0.113.11:80 bind 203.0.113.12:80 use_backend bk_app1 if { hdr(host) -i example1.com }。配置完成后 systemctl restart haproxy。
5. 出站流量分发:策略路由和SNAT
步骤小分段:
- 若要保证从不同来源或不同虚拟主机出网使用对应源IP,推荐用策略路由:为每个源IP建立路由表(/etc/iproute2/rt_tables 添加100 rt1等)。范例命令:ip rule add from 203.0.113.11/32 table rt1; ip route add default via 203.0.113.1 dev eth0 table rt1。
- 结合iptables做SNAT(在无法做策略路由时):iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 203.0.113.11。注意云平台是否允许自定义SNAT。
- 验证出站IP:curl --interface 203.0.113.11 https://ifconfig.co 或使用 tcpdump -i eth0 host 1.2.3.4 观察源IP。
6. 负载均衡与流量分发策略(本机多IP流量分配)
步骤小分段:
- 使用HAProxy作七层路由:根据Host、URI、Header将流量导到不同后端或本机不同端口,从而间接实现“按IP/域名分流”。
- 若需按源IP做流量限速,可在iptables+nftables或tc上设定规则:tc qdisc add dev eth0 root handle 1: htb ... 然后按filter匹配源IP。
- 为高可用与跨服务器分发,建议配合Keepalived(VRRP)和LVS或外部负载均衡器,实现故障切换与多节点均衡。
7. 防火墙与安全注意事项
步骤小分段:
- 确认cloud security group或防火墙规则允许这些额外IP的入站/出站流量。
- 限制SSH只允许管理IP访问,使用fail2ban和防爆破策略。
- 记录变更并在维护窗口执行,先在测试环境验证策略路由和SNAT行为。
8. 故障排查与验证清单
步骤小分段:
- 验证IP是否在主机上:ip addr;验证云平台控制台是否已绑定。
- 使用tcpdump抓包验证ARP与流量:sudo tcpdump -i eth0 host 203.0.113.11。
- 测试外网查看源IP:curl --interface 203.0.113.11 https://ifconfig.co;检查日志、iptables -t nat -L -n、ip rule show、ip route show table rt1。
9. 实际示例:把域名A走IP1,域名B走IP2并做出站固定源IP
步骤小分段:
- 绑定IP:ip addr add 203.0.113.11/32 dev eth0; ip addr add 203.0.113.12/32 dev eth0。
- Nginx前端:server{ listen 203.0.113.11:80; server_name a.example; } server{ listen 203.0.113.12:80; server_name b.example; }。
- 出站策略路由:在 /etc/iproute2/rt_tables 添加“101 rt_a”和“102 rt_b”;然后 ip rule add from 203.0.113.11/32 table rt_a; ip route add default via 203.0.113.1 dev eth0 table rt_a(为203.0.113.12同理)。测试并保存到启动脚本。
10. Q1:在台湾云上绑定额外IP后为什么外网看不到新IP?
- 回答:最常见原因是云平台没有在控制台完成“绑定到实例”操作或没有在操作系统里添加该IP;还可能因为rp_filter/ARP策略导致云平台网关丢弃包。检查云控制台绑定、使用ip addr show确认、并关闭/调整rp_filter与arp_announce/arp_ignore。
11. Q2:如何保证出站包使用与入站对应的公网IP?
- 回答:推荐使用策略路由(ip rule + ip route table)为每个公网IP建立专属路由表,并基于来源IP或用户/进程选择源地址。若不能使用策略路由,可使用iptables的SNAT在nat表POSTROUTING中强制改写源IP,但注意云平台NAT限制。
12. Q3:多IP绑定常见的高可用/故障切换建议是什么?
- 回答:使用Keepalived做VRRP将虚拟IP浮动到存活节点,或由云平台的弹性扩展与负载均衡器(如云LB)接入。结合健康检查、HAProxy做流量转发、并在路由层配置冗余路由表与监控,能实现平滑切换与流量分流。
来源:如何在台湾服务器显示ip 云空间下实现多IP绑定与流量分发策略