当前位置: 首页 > news >正文

【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-tools

3. 基础网络配置

3.1 网卡IP地址配置

对于外网网卡,通常DHCP自动获取即可。内网网卡需要手动配置静态IP,编辑/etc/netplan/01-netcfg.yaml

network: 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 apply

3.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 main

4.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 external

4.3 设置路由规则

创建基于源地址的路由规则:

# 来自内网IP的流量使用internal表 ip rule add from 10.0.0.100 lookup internal # 其他流量使用external表 ip rule add from all lookup external

验证规则:

ip rule list

4.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-routing

5. 高级优化与排错

5.1 多网卡DNS配置

编辑/etc/systemd/resolved.conf

[Resolve] DNS=10.0.0.2 192.168.1.1 Domains=~internal.company ~company

重启服务:

sudo systemctl restart systemd-resolved

5.2 防火墙策略优化

确保防火墙不会阻断关键流量:

sudo ufw allow in on enp4s0 from 10.0.0.0/8 sudo ufw allow out on enp4s0 to 10.0.0.0/8

5.3 常见问题排查

问题1:内网访问时断时续

# 检查路由规则是否生效 ip route get 10.0.0.1 # 检查ARP缓存 ip neigh show

问题2:外网访问走错接口

# 查看连接跟踪 conntrack -L # 清除错误连接 conntrack -D

6. 实际应用场景扩展

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_a

6.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

然后启动应用时加入cgroup:

cgexec -g net_cls:vpnapp /path/to/application

7. 性能监控与调优

7.1 网络流量监控

安装并配置nload:

sudo apt install nload nload enp3s0 enp4s0

7.2 路由缓存分析

查看路由缓存命中率:

cat /proc/net/stat/rt_cache

7.3 网络延迟优化

调整TCP参数:

echo "net.ipv4.tcp_slow_start_after_idle = 0" >> /etc/sysctl.conf sysctl -p

8. 安全加固建议

8.1 防止路由泄露

确保内网路由不会泄露到外网:

iptables -t mangle -A POSTROUTING -o enp3s0 -d 10.0.0.0/8 -j DROP

8.2 网络命名空间隔离

对敏感应用使用网络命名空间:

# 创建独立网络命名空间 ip netns add securens # 将虚拟网卡移入命名空间 ip link set veth1 netns securens

8.3 定期审计配置

创建配置检查脚本:

#!/bin/bash diff <(ip rule list) /etc/network/rule-backup diff <(ip route show table internal) /etc/network/internal-route-backup
http://www.jsqmd.com/news/642581/

相关文章:

  • 芯片胶制造企业有哪些
  • NVIDIA Profile Inspector完全指南:解锁NVIDIA显卡隐藏性能的终极工具
  • Golang怎么实现RBAC权限控制_Golang如何用casbin实现基于角色的访问控制系统【教程】
  • 半导体展哪家好?2026年半导体展帮您快速锁定心仪选择 - 品牌2026
  • Vue+PDF.js实现高性能本地PDF预览与文本复制(带分页滚动优化)
  • QMCDecode:macOS上最简单的QQ音乐加密格式转换终极指南
  • 程序员进阶:基于 Playwright MCP 构建企业级 UI 自动化测试框架
  • 从Karate Club到社交网络:用NetworkX和graspologic玩转Leiden社区发现
  • 从架构到实战:FastDFS与MinIO在微服务场景下的选型指南(附SpringBoot集成对比)
  • mT5中文-base零样本增强模型应用场景:中文OCR识别后文本纠错与语义补全
  • 从实战出发:掌握 dense_rank() 在 MySQL 与 Hive 中的高效应用
  • 学习自动驾驶第二期:ROS与Gazebo联合仿真环境实战
  • 深入Rust枚举与模式匹配:从Option到if let的实战解析
  • 描述性统计分析在企业AI应用调查中的实战指南
  • 2026年3月废水处理设备源头厂家推荐,废水处理设备/水处理设备,废水处理设备工厂口碑推荐分析 - 品牌推荐师
  • FPGA以太网调试笔记:避开SGMII+GTX配置里的两个‘坑’(MDIO与多端口时钟)
  • Apifox实战:手把手教你构建黑马点评接口测试集(图解+源码)
  • 在x86_64架构下构建申威Alpha平台交叉编译工具链实战
  • 汽车紧固件最新技术趋势解析:2026上海紧固件专业展有哪些看点
  • JDK-11 | 我为什么越来越喜欢用 Java 的 String/Collection 新 API
  • 告别网盘下载烦恼:这款开源助手让你轻松获取八大平台直链
  • 告别“单点突围”:为什么你的数字化转型总是“只见树木,不见森林”?
  • Unity HDRP 2022.3水系统实战:从泳池到海洋,用Shader Graph调出电影级水体效果
  • 阿里系bx-ua补环境实战:从零到一构建可用的Node.js执行环境
  • BGP路由反射器实战解析:从反射簇设计到防环机制的部署与验证
  • 企业专属Agent开发从入门到精通(非常详细),看这篇就够了!
  • 英飞凌Aurix2G TC3XX时钟树配置实战:从20MHz晶振到300MHz主频的MCAL保姆级教程
  • HTTP3 QUIC快速重传机制解析:从丢包检测到高效恢复
  • 清华教授:笑不出来怎么办?五个老祖宗留下的“开心法”,随时都能用
  • # BERT在中文文本分类中的实战优化:从基础模型到高效部署BERT(Bi