虚拟机可以配置多个网关,但Linux的main路由表里通常只能保留一个默认网关;多出口应通过策略路由、明细路由或Windows度量值来分流。 配错时最典型的后果是时通时断、SSH掉线、DNS走错出口,先把“默认路由唯一、流量按规则分流”这两件事想清楚,再动手敲命令。
为什么虚拟机多网关容易冲突?先理解默认网关和路由表
默认网关在系统里不是“网卡属性”这么简单,它最终会变成一条0.0.0/0默认路由,虚拟机有多块网卡、各配一个网关时,如果两条默认路由都进入main表,系统选路就可能受优先级、网卡顺序、连接状态影响,表现为不可预测。
虚拟机多网关配置冲突的典型表现
- 外网访问时通时断,换一个网段又正常。
- SSH或远程桌面突然断开,控制台登录后发现路由被改。
- DNS解析走错出口,内网域名解析失败。
- NAT回程不对称,请求出去却回不来。
- 监控显示网卡有流量,但业务端口不通。
- 云主机多网卡场景下,安全组和源/目的检查未放行。
这些现象不一定是网关本身坏了,更多是路由选择与回程路径不一致,业内专家指出,多网卡虚拟机的故障排查,第一步应看路由表和策略规则,而不是先重装网卡驱动。
Linux虚拟机添加第二个默认网关会冲突吗?
会,只要两条default路由都落在main表,就可能冲突,先用命令确认:
ip route show ip route show table all ip rule show
如果看到类似两条默认路由,且没有策略规则区分源地址,就属于高风险配置:
default via 192.168.10.1 dev eth0 default via 10.0.20.1 dev eth1
正确处理不是“再加一条默认路由”,而是main表只留一个默认网关,其他出口放进独立路由表。
云服务器双网卡多网关配置方法:策略路由与静态路由怎么选
多网关配置先看业务需求,只访问某个内网网段,用明细路由最省事;需要按源地址、业务网卡分流,才上策略路由,两者不是二选一的对立关系,常配合使用。
只访问特定内网网段,静态路由优先
比如eth1接的是存储网段0.30.0/24,网关为0.20.1,只需加一条明细路由:
ip route add 10.0.30.0/24 via 10.0.20.1 dev eth1
这种写法不影响原有默认网关,冲突概率低,验证时用:
ip route get 10.0.30.20 ping -I eth1 10.0.30.20
多出口按源地址分流,使用策略路由
假设eth0为管理出口,eth1为业务出口,eth0保留main表默认网关;eth1的流量走独立路由表100。
# 1. 确认地址 ip addr show eth1 # 2. 登记路由表名称 echo "100 eth1" >> /etc/iproute2/rt_tables # 3. 给表100添加直连路由和默认网关 ip route add 10.0.20.0/24 dev eth1 src 10.0.20.10 table 100 ip route add default via 10.0.20.1 dev eth1 table 100 # 4. 源地址来自eth1的流量查表100 ip rule add from 10.0.20.10/32 table 100 priority 100 # 5. 验证 ip rule show ip route show table 100 ip route get 8.8.8.8 from 10.0.20.10
关键点是不要往main表再塞第二条默认路由,策略规则只负责“哪类流量查哪张表”,默认网关仍在各自表内各管一段。
主备出口与高可用网关
多网关高可用常被误解成“配两个默认网关”,更稳妥的做法是用VRRP或云平台高可用方案,让同一网段使用一个虚拟网关IP,出口切换由网关侧完成,虚拟机内仍保持清晰的路由表,避免主备默认路由同时生效。
多网关配置最佳实践:先规划再落命令
网卡、网段和路由表先规划
| 网卡 | 用途 | 示例地址 | 网关 | 路由表 | 策略规则 |
|---|---|---|---|---|---|
| eth0 | 管理/默认出口 | 168.10.10/24 | 168.10.1 | main | 默认 |
| eth1 | 业务出口 | 0.20.10/24 | 0.20.1 | 100 | 源地址10.0.20.10查表100 |
| eth2 | 存储网段 | 0.30.10/24 | 0.30.1 | 101 | 目的网段走明细路由 |
规划时把“管理流量”和“业务流量”分开,管理网卡保留默认网关,业务网卡用策略路由,这样即使业务路由配错,也不容易把远程管理通道一起弄断。
默认网关只留一个,其他走表或明细路由
Linux上可用ip route检查默认路由数量,Windows上则看接口度量值:
route print Get-NetRoute -DestinationPrefix "0.0.0.0/0" Get-NetIPInterface Set-NetIPInterface -InterfaceAlias "Ethernet 2" -InterfaceMetric 50
Windows允许每块网卡配置网关,但多个默认网关会按度量值选路。度量值越低越优先,不要让两块网卡使用相同度量值,否则切换行为不稳定,行业共识认为,多网卡服务器应把非主出口的自动度量关闭,改为手工规划。
持久化配置与回滚方案
临时命令重启即失效,Linux可按发行版选择NetworkManager dispatcher、systemd-networkd、netplan或云主机cloud-init固化,云服务器双网卡多网关配置方法中,持久化比临时生效更容易出错。
回滚命令要提前准备:
ip rule del from 10.0.20.10/32 table 100 priority 100 ip route flush table 100
改远程机器前先开控制台或带外管理,先加明细路由测试,再动默认网关,这个顺序能减少失联风险。
北京地区云主机多网关配置价格与选型注意
北京地区云主机多网关配置价格通常不是“多配一个网关”单独收费,而是由实例规格、网卡数量、弹性公网IP带宽、NAT网关、跨可用区流量等计费项组成,不同地域和计费方式会有差异,具体以云厂商控制台为准,选型时先确认平台是否支持多网卡、是否要求关闭源/目的检查、安全组是否允许对应网段,价格敏感的业务可先用小带宽和按流量计费验证路由,再扩带宽。
冲突排查清单:从现象到命令
先看默认路由和策略规则
ip route show ip route show table all ip rule show ip route get 目标IP
ip route get能直接告诉你某个目的地址会走哪块网卡、哪个源地址,比只看ip addr更有效。
再看ARP、回程和云平台限制
ip neigh show tcpdump -i eth1 -nn arp tcpdump -i eth1 -nn host 目标IP
如果请求从eth1出去,回程却从eth0进来,NAT和状态防火墙就可能丢包,云主机还要检查VPC路由、安全组、网络ACL和源/目的检查。
| 现象 | 常见原因 | 处理方向 |
|---|---|---|
| 时通时断 | main表存在多条默认路由 | 保留一个默认网关,其余进独立表 |
| SSH断开 | 默认路由被改到业务网卡 | 控制台登录,恢复管理网卡默认路由 |
| 内网通、外网不通 | NAT或回程路径不对称 | 检查SNAT、策略规则和安全组 |
| 新加网卡不生效 | 云平台未放行或网卡未启用 | 检查网卡状态、路由表和平台配置 |
虚拟机多网关配置的核心不是“多写几条网关”,而是默认路由唯一、分流规则明确、回滚路径可用,把main表管好,把业务出口放进独立路由表,再配合验证命令,绝大多数冲突都能提前避开。
虚拟机多网关配置常见问答:冲突解决与最佳实践
问:虚拟机可以同时配置两个默认网关吗?
Linux的main表不建议同时存在两条默认路由,容易造成选路不确定,Windows可配置多个默认网关,但系统会按接口度量值选择一个优先出口,仍需手工规划度量值,需要多出口分流时,应使用策略路由或明细路由,而不是简单叠加默认网关。
问:多网卡多网关配置后SSH断连,怎么快速恢复?
通过云控制台或带外管理登录,先执行ip rule show和ip route show,删除刚加的策略规则和独立路由表,恢复管理网卡默认路由,若无法进入系统,可在控制台挂载救援模式或使用VNC登录,恢复后先加明细路由测试,再调整默认网关。
问:云服务器双网卡多网关需要额外付费吗?
多网卡本身是否收费取决于云平台规则,弹性公网IP、带宽、NAT网关和跨可用区流量通常会产生费用,北京地区云主机多网关配置价格应以具体厂商的计费项为准,配置前先确认网卡限额、路由表配额和流量计费方式。