【Ubuntu】双网卡策略路由实战:构建内外网流量精准管控的办公环境

张开发
2026/4/15 2:49:24 15 分钟阅读

分享文章

【Ubuntu】双网卡策略路由实战:构建内外网流量精准管控的办公环境
1. 为什么需要双网卡策略路由在开发或运维的日常工作中我们经常遇到这样的场景办公电脑需要同时连接公司内网和互联网。内网用于访问代码仓库、内部文档系统、测试环境等资源而外网则用于查阅技术资料、下载软件包。如果简单地用默认路由配置可能会出现内网访问不稳定、外网速度受影响的情况。我曾经接手过一个项目团队成员的电脑都配置了双网卡但经常抱怨内网Git仓库克隆速度慢而外网视频会议又频繁卡顿。排查后发现所有流量都默认走了外网网关内网请求需要绕道外网再回来形成了兜圈子的路径。这就是典型的双网卡配置不当导致的网络性能问题。策略路由Policy Routing就是解决这个问题的利器。它允许我们根据目标IP地址、端口等条件智能选择不同的网络出口。比如访问10.0.0.0/8的内网资源时走内网网卡访问其他地址时走外网网卡 这样内外网流量完全隔离互不干扰。2. 环境准备与网络拓扑2.1 硬件与网络配置假设我们有一台Ubuntu 20.04工作站配备两个网卡外网网卡enp3s0连接公司办公网络自动获取IP假设为192.168.1.100内网网卡enp4s0连接公司内网静态IP为10.0.0.100/24网络拓扑示意图[互联网] | [外网网关 192.168.1.1] | [Ubuntu工作站] |-- enp3s0 (192.168.1.100) - 外网 |-- enp4s0 (10.0.0.100) - 内网 | [内网网关 10.0.0.1] | [内网服务器/10.0.0.0/8]2.2 必要工具检查在开始配置前确保系统已安装以下工具iproute2 - # 现代Linux网络管理工具集 net-tools - # 传统网络工具可选用于兼容旧命令检查安装sudo apt update sudo apt install iproute2 net-tools3. 基础网络配置3.1 网卡IP地址配置对于外网网卡通常DHCP自动获取即可。内网网卡需要手动配置静态IP编辑/etc/netplan/01-netcfg.yamlnetwork: version: 2 renderer: networkd ethernets: enp3s0: dhcp4: true enp4s0: addresses: [10.0.0.100/24] routes: - to: 10.0.0.0/8 via: 10.0.0.1 metric: 100 nameservers: addresses: [10.0.0.2] # 内网DNS服务器应用配置sudo netplan apply3.2 验证基础连通性检查网卡状态ip addr show测试内外网连通性# 测试内网 ping -c 3 10.0.0.1 # 测试外网 ping -c 3 8.8.8.8此时如果两个ping都能通说明物理连接正常但路由可能还不完善。4. 高级策略路由配置4.1 理解Linux路由表Linux支持多张路由表最多255张默认使用main表ID 254。我们可以创建自定义表# 查看所有路由表 ip rule list # 查看main路由表 ip route show table main4.2 创建自定义路由表首先编辑/etc/iproute2/rt_tables添加两个新表100 internal 200 external然后为每个表配置默认路由# 内网路由表 ip route add 10.0.0.0/8 via 10.0.0.1 dev enp4s0 table internal ip route add default via 10.0.0.1 dev enp4s0 table internal # 外网路由表 ip route add default via 192.168.1.1 dev enp3s0 table external4.3 设置路由规则创建基于源地址的路由规则# 来自内网IP的流量使用internal表 ip rule add from 10.0.0.100 lookup internal # 其他流量使用external表 ip rule add from all lookup external验证规则ip rule list4.4 持久化配置为了让配置重启后依然有效创建/etc/network/if-up.d/policy-routing#!/bin/sh ip route add 10.0.0.0/8 via 10.0.0.1 dev enp4s0 table internal ip route add default via 10.0.0.1 dev enp4s0 table internal ip route add default via 192.168.1.1 dev enp3s0 table external ip rule add from 10.0.0.100 lookup internal ip rule add from all lookup external设置可执行权限sudo chmod x /etc/network/if-up.d/policy-routing5. 高级优化与排错5.1 多网卡DNS配置编辑/etc/systemd/resolved.conf[Resolve] DNS10.0.0.2 192.168.1.1 Domains~internal.company ~company重启服务sudo systemctl restart systemd-resolved5.2 防火墙策略优化确保防火墙不会阻断关键流量sudo ufw allow in on enp4s0 from 10.0.0.0/8 sudo ufw allow out on enp4s0 to 10.0.0.0/85.3 常见问题排查问题1内网访问时断时续# 检查路由规则是否生效 ip route get 10.0.0.1 # 检查ARP缓存 ip neigh show问题2外网访问走错接口# 查看连接跟踪 conntrack -L # 清除错误连接 conntrack -D6. 实际应用场景扩展6.1 多租户网络隔离在开发测试环境中可以为不同项目组创建独立的路由表# 为测试环境A创建路由表 ip route add 172.16.1.0/24 via 172.16.1.1 dev enp5s0 table test_a ip rule add from 172.16.1.100 lookup test_a6.2 基于应用的路由选择使用cgroup实现特定应用走指定网络# 创建cgroup mkdir /sys/fs/cgroup/net_cls/vpnapp echo 0x00100001 /sys/fs/cgroup/net_cls/vpnapp/net_cls.classid # 添加路由规则 ip rule add fwmark 0x00100001 lookup external然后启动应用时加入cgroupcgexec -g net_cls:vpnapp /path/to/application7. 性能监控与调优7.1 网络流量监控安装并配置nloadsudo apt install nload nload enp3s0 enp4s07.2 路由缓存分析查看路由缓存命中率cat /proc/net/stat/rt_cache7.3 网络延迟优化调整TCP参数echo net.ipv4.tcp_slow_start_after_idle 0 /etc/sysctl.conf sysctl -p8. 安全加固建议8.1 防止路由泄露确保内网路由不会泄露到外网iptables -t mangle -A POSTROUTING -o enp3s0 -d 10.0.0.0/8 -j DROP8.2 网络命名空间隔离对敏感应用使用网络命名空间# 创建独立网络命名空间 ip netns add securens # 将虚拟网卡移入命名空间 ip link set veth1 netns securens8.3 定期审计配置创建配置检查脚本#!/bin/bash diff (ip rule list) /etc/network/rule-backup diff (ip route show table internal) /etc/network/internal-route-backup

更多文章