hello,我是网工小陈。
你可能见过这样的场景:
一台服务器配了多个 IP 地址 一台防火墙接口配置了主备地址 或者你自己网卡配了多个地址,甚至跨多个网段
然后你发起访问时,源 IP 却不是你“以为的”那个。
这到底是怎么回事?多个 IP 地址并存时,到底哪个会被拿来用?
文章目录
一、先搞清楚:什么叫“一台设备多个 IP”?
常见的多 IP 配置方式有几种:
同一接口多个 IP(主地址 + 次地址 / secondary) 多个物理/虚拟接口各自配置一个 IP(如 eth0、eth1) 绑定多个 VLAN 接口,每个 Vlanif 一个地址 桥接设备或防火墙设备,不同 zone、不同逻辑接口设置多个地址
这些都属于“同设备多个 IP”。


二、出站访问时,源 IP 是怎么选出来的?
原则1:同网段优先
如果目标地址和某个 IP 在同一网段,系统倾向于选这个 IP 作为源地址。
比如:
本地有 IP 192.168.1.10
和10.0.0.10
访问目标是 192.168.1.100
那通常会选 192.168.1.10
作为源地址
原则2:路由匹配优先
如果目标不在任何本地子网,系统就查路由表,选择“最匹配的下一跳”。
然后再看哪个 IP 所属接口能到这跳,用这个接口的 IP 当源地址。
★所以你以为绑定了“一个主地址”,但只要下一跳是另一个网段,源 IP 可能就不是你预期的。
原则3:主地址不一定优先
很多人以为主地址(primary IP)一定会优先,实则不然。
举个例子:
interface GigabitEthernet0/0
ip address 192.168.10.1 255.255.255.0
ip address 192.168.10.2 255.255.255.0 secondary
访问目标是 192.168.10.254,可能两个地址都能匹配上。
此时,大多数系统(如华为、Linux)默认会选主地址 192.168.10.1,但在某些路由场景(特别是策略路由或NAT配置场景下),结果可能会变。
三、入站连接时,哪个 IP 被选中?
这个就取决于“客户端连的是哪个 IP”了。
一台设备多个 IP,只要你监听的是 0.0.0.0
或者::
,那哪个 IP 都能接入服务端收到连接时,用的就是客户端发来的目标地址
所以入站访问哪个 IP,取决于外部访问者怎么连你。
四、什么时候多个 IP 会“打架”?
不小心 NAT 配错了源地址,公网回不来
负载均衡部署多个 IP,却只注册了其中一个到 DNS
双出口策略路由没写好,出错包用错源地址,ISP 拒收
这些都和“源 IP 选择机制”有关。
五、实际工程中如何控制哪个 IP 被用?
1. 设置 source-ip 策略
在华为设备上,可以指定某些协议/业务使用指定源 IP:
snmp-agentlocal-engineid 800007DB03000000000000
snmp-agent sys-info version v2c
snmp-agent target-hosttrapaddress 10.1.1.100 params securityname public v2c
snmp-agenttrapsourceGigabitEthernet1/0/1
比如上面就指定 SNMP 的 trap 源口为 Gi1/0/1。
2. 靠策略路由控制源地址
可以写 PBR(Policy Based Routing),强制某些目标走特定接口,从而绑定源 IP。
3. NAT 源地址控制
做 NAT 时,别忘了指定 outbound IP 否则可能是默认接口地址:
ip nat insidesourcelist 10 interface GigabitEthernet0/0 overload
这里就会用 Gi0/0 的 IP 地址做 NAT。
发表回复