双网卡服务器校园网访问故障排查与解决
一、问题背景
某服务器部署双网卡:
- 网卡 1(eno1):配置校园网管理员分配的固定 IP(如 172.18.101.107/24),直连校园网光猫,用于校园内网通信;
- 网卡 2(enp2s0):连接拨号上网路由器,获取路由器分配的私网 IP(如 192.168.31.100/24),用于公网访问,路由器支持 WiFi 功能。
异常现象:
- 外部 PC 通过 WiFi 连接服务器所在路由器时,既能访问服务器内网 IP(172.18.101.107),也能访问公网 IP(192.168.31.100),tracert 内网 IP 显示路由路径为 “PC→路由器(192.168.31.1)→校园网网关(10.97.0.1)→服务器”;
- 外部 PC 通过网线直连校园网(不经过路由器)时,无法访问服务器内网 IP(172.18.101.107);
- 禁用服务器公网 IP 网卡(enp2s0)后,内网 IP(172.18.101.107)仍无法被校园网直连设备访问;
- 已排除服务器防火墙干扰,校园网整体处于 10.0.0.0/8 子网下。
二、故障排查过程
1. 先查网络配置文件(Netplan)
校园网环境下服务器网络配置常因多次调整出现冗余,首先检查/etc/netplan/
目录下的配置文件(如 01-network-manager-all.yaml),确认:
- 网卡 1(eno1)的固定 IP、子网掩码、网关(校园网光猫对应网段网关,如 172.18.101.1)配置正确,无多余无效配置;
- 网卡 2(enp2s0)的 DHCP 获取方式正常,与路由器网段匹配;
- 无配置冲突(如同一网段重复 IP、网关指向错误)。
本次排查中,Netplan 配置无明显异常,排除配置文件混乱导致的基础网络问题。
2. 关键:分析路由表(ip route show)
通过ip route show
命令查看服务器路由表,输出核心信息如下(简化后):
default via 192.168.31.1 dev enp2s0 proto dhcp metric 103;
172.18.101.0/24 dev eno1 proto kernel scope link src 172.18.101.107 metric 102;
192.168.31.0/24 dev enp2s0 proto kernel scope link src 192.168.31.100 metric 103
路由表问题定位:
- 服务器默认路由(default)指向公网网卡(enp2s0)的网关 192.168.31.1(路由器), metric 值 103(优先级低于内网网卡的 102,但默认路由优先级最高);
- 当校园网直连 PC 访问服务器内网 IP(172.18.101.107)时,PC 的请求包能正常到达服务器(因 172.18.101.0/24 网段路由指向 eno1 网卡),但服务器回包时,会优先匹配默认路由,将回包通过公网网卡(enp2s0)发给路由器(192.168.31.1);
- 路由器无法识别校园网 PC 的 IP(10.0.0.0/8 网段),导致回包被丢弃,最终出现 “能发请求,收不到响应” 的访问失败现象。
3. 验证故障原因
禁用公网网卡(enp2s0)后,默认路由失效,但此时服务器仍未配置内网网段的回包路由,导致校园网 PC 的请求包到达服务器后,无对应路由转发回包,因此内网 IP 仍无法访问 —— 进一步验证 “路由表回包策略缺失”
是核心问题。
三、解决方案:配置策略路由
策略路由可根据 “流量来源网段” 指定不同路由表,实现 “校园网流量走内网网卡回包,公网流量走公网网卡回包”,具体步骤如下:
1. 基础准备
确认校园网光猫对应内网网段(172.18.101.0/24)的网关 IP(假设为 172.18.101.1,可通过校园网管理员获取或用arp -a
查看光猫 MAC 对应的 IP)。
2. 创建自定义路由表
Linux 系统默认有 3 个路由表(local、main、default),需新建一个专门用于校园网流量的路由表(命名为 campus,表号可自定义,如 200):
# 编辑路由表配置文件,添加自定义表
sudo vim /etc/iproute2/rt_tables
# 在文件中添加一行(表号200,表名campus)
200 campus
3. 添加策略路由规则与路由
# 1. 向campus表添加路由:172.18.101.0/24网段走eno1网卡,网关为光猫内网网关
sudo ip route add 172.18.101.0/24 dev eno1 via 172.18.101.1 table campus
# 2. 向campus表添加默认路由:来自校园网(10.0.0.0/8)的流量,默认走eno1网卡回包
sudo ip route add default dev eno1 via 172.18.101.1 table campus
# 3. 添加策略规则:来自10.0.0.0/8网段的流量,使用campus路由表
sudo ip rule add from 10.0.0.0/8 table campus priority 100
4. 测试验证
- 外部 PC 通过网线直连校园网,ping 服务器内网 IP(172.18.101.107),查看是否通断;
- 用
traceroute ``172.18.101.107
(Linux)或tracert ``172.18.101.107
(Windows)查看路由路径,确认回包是否走校园网网关; - 验证服务器公网访问功能(如访问外网网站),确保双网卡功能正常。
5. 持久化配置(避免重启失效)
通过 Netplan 将策略路由配置写入配置文件,确保服务器重启后仍生效:
# 编辑Netplan配置文件
sudo vim /etc/netplan/01-network-manager-all.yaml
network:version: 2ethernets:eno1: # 内网网卡addresses: [172.18.101.107/24]routes:- to: 10.0.0.0/8via: 172.18.101.1table: 200- to: defaultvia: 172.18.101.1table: 200routing-policy:- from: 10.0.0.0/8table: 200priority: 100enp2s0: # 公网网卡dhcp4: true # 从路由器获取DHCPrenderer: NetworkManager
配置完成后,执行sudo netplan apply
使配置生效。
四、总结
双网卡服务器的网络访问问题,核心常出在 “路由转发策略”—— 默认路由可能导致不同来源的流量回包路径错误。本次故障通过 “自定义路由表 + 策略规则”,精准区分校园网(10.0.0.0/8)和公网流量,实现 “哪里来的流量,从哪里回”,既解决了校园网直连访问问题,又保留了双网卡的功能定位。
后续遇到同类 “特定网段访问异常” 问题,可优先排查路由表的回包策略,策略路由是解决多网卡、多网段流量转发的高效方案。