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

通过 Linux 网络命名空间实现路由器的方案与案例

在这里插入图片描述

案例目标
  • 模拟一个路由器,连接两个子网(192.168.1.0/2410.0.0.0/24),实现以下功能:
    1. 子网间互通。
    2. 子网通过路由器访问外部网络(需配置 NAT)。
    3. 路由器支持基础防火墙规则(如禁止 ICMP 流量)。

实现步骤

一、网络拓扑设计
                  +---------------------+
                  |     Router (ns0)    |
                  |                     |
                  |  veth0: 192.168.1.1 |
                  |  veth1: 10.0.0.1    |
                  +----------+----------+
                             |
                             |
           +-----------------+-----------------+
           |                                   |
   +-------+-----------+             +---------+---------+
   |  Subnet A (ns1)   |             |  Subnet B (ns2)   |
   |  vethA:192.168.1.2|             |  vethB:10.0.0.2   |
   +-------------------+             +-------------------+

二、具体实现步骤
1. 创建网络命名空间
# 创建路由器命名空间
sudo ip netns add ns0

# 创建子网命名空间
sudo ip netns add ns1   # 子网 A (192.168.1.0/24)
sudo ip netns add ns2   # 子网 B (10.0.0.0/24)
2. 创建虚拟设备并连接命名空间
# 创建 veth pair:veth0(路由器端) <-> vethA(子网 A)
sudo ip link add veth0 type veth peer name vethA

# 创建 veth pair:veth1(路由器端) <-> vethB(子网 B)
sudo ip link add veth1 type veth peer name vethB

# 将设备分配到命名空间
sudo ip link set veth0 netns ns0
sudo ip link set veth1 netns ns0
sudo ip link set vethA netns ns1
sudo ip link set vethB netns ns2
3. 配置 IP 地址并启用设备
# 配置路由器(ns0)
sudo ip netns exec ns0 ip addr add 192.168.1.1/24 dev veth0
sudo ip netns exec ns0 ip addr add 10.0.0.1/24 dev veth1
sudo ip netns exec ns0 ip link set veth0 up
sudo ip netns exec ns0 ip link set veth1 up

# 配置子网 A(ns1)
sudo ip netns exec ns1 ip addr add 192.168.1.2/24 dev vethA
sudo ip netns exec ns1 ip link set vethA up
sudo ip netns exec ns1 ip route add default via 192.168.1.1  # 默认网关指向路由器

# 配置子网 B(ns2)
sudo ip netns exec ns2 ip addr add 10.0.0.2/24 dev vethB
sudo ip netns exec ns2 ip link set vethB up
sudo ip netns exec ns2 ip route add default via 10.0.0.1     # 默认网关指向路由器
4. 启用路由器的 IP 转发
# 在路由器命名空间启用 IP 转发
sudo ip netns exec ns0 sysctl -w net.ipv4.ip_forward=1
5. 配置子网间路由
# 路由器已自动添加直连路由,无需额外配置
# 查看路由表
sudo ip netns exec ns0 ip route
6. 验证子网间通信
# 从子网 A ping 子网 B
sudo ip netns exec ns1 ping -c 3 10.0.0.2

# 从子网 B ping 子网 A
sudo ip netns exec ns2 ping -c 3 192.168.1.2

三、扩展功能:配置 NAT 访问外部网络
1. 连接路由器到宿主机物理网络
# 创建一对 veth 连接路由器和宿主机
sudo ip link add veth-out type veth peer name veth-out-router
sudo ip link set veth-out-router netns ns0

# 配置路由器端
sudo ip netns exec ns0 ip addr add 172.16.0.2/24 dev veth-out-router
sudo ip netns exec ns0 ip link set veth-out-router up
sudo ip netns exec ns0 ip route add default via 172.16.0.1  # 假设宿主机网关为 172.16.0.1

# 配置宿主机端
sudo ip addr add 172.16.0.1/24 dev veth-out
sudo ip link set veth-out up
2. 配置 NAT 规则
# 在路由器命名空间添加 NAT 规则(假设物理接口为 eth0)
sudo ip netns exec ns0 iptables -t nat -A POSTROUTING -o veth-out-router -j MASQUERADE
3. 验证外部网络访问
# 在子网 A 中测试访问外网(如 8.8.8.8)
sudo ip netns exec ns1 ping -c 3 8.8.8.8

四、配置防火墙规则(可选)
1. 禁止子网 A 到子网 B 的 ICMP 流量
# 在路由器命名空间添加 iptables 规则
sudo ip netns exec ns0 iptables -A FORWARD -s 192.168.1.0/24 -d 10.0.0.0/24 -p icmp -j DROP
2. 验证防火墙规则
# 子网 A ping 子网 B 应失败
sudo ip netns exec ns1 ping -c 3 10.0.0.2

总结

实现的核心逻辑
  1. 网络隔离:通过命名空间隔离子网和路由器。
  2. 虚拟设备互联:使用 veth pair 连接不同命名空间。
  3. 路由配置:在路由器启用 IP 转发并设置默认网关。
  4. NAT 与防火墙:通过 iptables 实现地址转换和流量控制。
应用场景
  • 网络实验:模拟企业内网、多租户隔离环境。
  • 开发测试:验证路由协议或防火墙策略。
  • 教育演示:理解路由器工作原理和 Linux 网络栈。
验证要点
  • 连通性:子网间、子网与外网的通信。
  • 隔离性:宿主机无法直接访问子网 IP。
  • 防火墙:规则是否按预期阻断流量。

通过本案例,您已掌握如何利用 Linux 网络命名空间构建一个功能完整的虚拟路由器!

相关文章:

  • PaddleX上线小目标检测模型产线,支持遥感分析、智能监控、智慧交通等领域高效应用
  • 今日八股——C++
  • 天气预报数据分析管理网站基于Spring Boot SSM原创
  • 青少年编程与数学 02-014 高中数学知识点 05课题、概率与统计
  • Docker的备份与恢复
  • 【PostgreSQL】【第3章】PostgreSQL的对象操作
  • C# ini文件全自动界面配置:打开界面时读ini配置到界面各控件,界面上的控件根据ini文件内容自动生成,点保存时把界面各控件的值写到ini里。
  • 建筑物自动化监测解决方案
  • Docker Api开启TLS认证流程
  • HTTP代理:网页加速的隐形引擎
  • 表单的前端数据流向
  • MATLAB之数据分析图系列:从二维到三维(直接套用)
  • 测试团队UI自动化实施方案
  • 【轻松学C:编程小白的大冒险】— 12.2 瑞士军刀出鞘:switch-case 的多分支江湖
  • 有序数组的归并算法思路
  • 如何实现局域网内无痛访问Jupyter Notebook?
  • Linux中常用服务器监测命令(性能测试监控服务器实用指令)
  • oracle数据泵操作
  • 从零实现Json-Rpc框架】- 项目实现 - 服务端registrydiscovery实现
  • Spring boot 中QPS(Queries Per Second)与 TPS(Transactions Per Second)详细对比
  • “毛茸茸”的画,诗意、温暖又治愈
  • 上汽享道出行完成13亿元C轮融资,已启动港股IPO计划
  • 九家企业与上海静安集中签约,投资额超10亿元
  • 南方地区强降雨或致部分河流发生超警洪水,水利部部署防范
  • 科技赋能文化体验,“五一”假期“海昏侯”人气创新高
  • 探访小剧场、直播间、夜经济:五一假期多地主官调研新消费