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

网络命名空间验证网络重叠现象

在这里插入图片描述

一、案例目标
  • 两个网络命名空间(ns1 和 ns2) 中各创建 两个模拟主机,共 4 个主机,均使用 相同 IP 网段(如 192.168.1.0/24
  • 同一命名空间内的主机可通信不同命名空间的主机 IP 重叠但隔离
  • 通过 虚拟路由器 连接两个命名空间,并提供 NAT 访问互联网 的能力。

二、网络拓扑
                  +---------------------+
                  |   Virtual Router    |
                  |                     |
                  |  eth1: 192.168.1.254|
                  |  eth2: 10.0.1.254   |
                  +----------+----------+
                             |
                             |
           +-----------------+-----------------+
           |                                   |
   +-------+-----------+             +---------+---------+
   |   Bridge br1      |             |   Bridge br2      |
   |   IP: 192.168.1.1|             |   IP: 192.168.1.1|
   +-------+-----------+             +---------+---------+
           |                                   |
           |                                   |
   +-------+-----------+             +---------+---------+
   | ns1-host1 (192.168.1.2) |       | ns2-host1 (192.168.1.2) |
   | ns1-host2 (192.168.1.3) |       | ns2-host2 (192.168.1.3) |
   +-----------------------+         +-------------------------+

三、实现步骤
1. 创建命名空间与网桥
# 创建命名空间
sudo ip netns add ns1
sudo ip netns add ns2

# 创建网桥 br1 和 br2
sudo ip link add br1 type bridge
sudo ip link add br2 type bridge
sudo ip link set br1 up
sudo ip link set br2 up
2. 配置虚拟路由器
# 创建虚拟路由器的网络命名空间
sudo ip netns add router

# 创建两对 veth 接口连接路由器和网桥
sudo ip link add veth-router1 type veth peer name veth-br1
sudo ip link add veth-router2 type veth peer name veth-br2

# 将 veth 接口分配到命名空间
sudo ip link set veth-router1 netns router
sudo ip link set veth-router2 netns router
sudo ip link set veth-br1 master br1
sudo ip link set veth-br2 master br2

# 配置路由器接口 IP
sudo ip netns exec router ip addr add 192.168.1.254/24 dev veth-router1
sudo ip netns exec router ip addr add 10.0.1.254/24 dev veth-router2
sudo ip netns exec router ip link set veth-router1 up
sudo ip netns exec router ip link set veth-router2 up

# 启用 IP 转发和 NAT
sudo ip netns exec router sysctl -w net.ipv4.ip_forward=1
sudo ip netns exec router iptables -t nat -A POSTROUTING -o veth-router2 -j MASQUERADE
3. 在 ns1 和 ns2 中创建模拟主机
# 在 ns1 中创建两个主机(使用相同网段)
sudo ip netns exec ns1 ip link add h1-eth0 type veth peer name h1-br1
sudo ip netns exec ns1 ip link add h2-eth0 type veth peer name h2-br1
sudo ip link set h1-br1 master br1
sudo ip link set h2-br1 master br1
sudo ip netns exec ns1 ip addr add 192.168.1.2/24 dev h1-eth0
sudo ip netns exec ns1 ip addr add 192.168.1.3/24 dev h2-eth0
sudo ip netns exec ns1 ip link set h1-eth0 up
sudo ip netns exec ns1 ip link set h2-eth0 up

# 在 ns2 中创建两个主机(IP 与 ns1 重叠)
sudo ip netns exec ns2 ip link add h1-eth0 type veth peer name h1-br2
sudo ip netns exec ns2 ip link add h2-eth0 type veth peer name h2-br2
sudo ip link set h1-br2 master br2
sudo ip link set h2-br2 master br2
sudo ip netns exec ns2 ip addr add 192.168.1.2/24 dev h1-eth0
sudo ip netns exec ns2 ip addr add 192.168.1.3/24 dev h2-eth0
sudo ip netns exec ns2 ip link set h1-eth0 up
sudo ip netns exec ns2 ip link set h2-eth0 up
4. 配置路由与默认网关
# ns1 中的主机设置默认网关指向路由器
sudo ip netns exec ns1 ip route add default via 192.168.1.254

# ns2 中的主机设置默认网关指向路由器
sudo ip netns exec ns2 ip route add default via 192.168.1.254

四、验证功能
1. 同一命名空间内通信
# ns1-host1 ping ns1-host2
sudo ip netns exec ns1 ping -c 3 192.168.1.3   # 成功

# ns2-host1 ping ns2-host2
sudo ip netns exec ns2 ping -c 3 192.168.1.3   # 成功
2. 不同命名空间隔离验证
# ns1-host1 ping ns2-host1(相同 IP,但隔离)
sudo ip netns exec ns1 ping -c 3 192.168.1.2   # 失败(因 IP 冲突,路由器无法正确路由)
3. 通过路由器访问互联网
# 在虚拟路由器中连接外部网络(假设 veth-router2 连接物理接口)
sudo ip link set veth-router2 netns router
sudo ip netns exec router ip route add default via 10.0.1.1   # 假设外部网关为 10.0.1.1

# 测试从 ns1-host1 访问外网
sudo ip netns exec ns1 ping -c 3 8.8.8.8       # 成功(通过 NAT)

五、关键机制说明
组件作用
网络命名空间隔离网络栈,允许相同 IP 子网独立存在
网桥连接同一命名空间内的主机,提供二层通信能力
虚拟路由器处理跨命名空间流量,实现 NAT 和路由转发
NAT将内部重叠 IP 转换为唯一公网 IP,避免外部冲突

六、注意事项
  1. ARP 表管理
    • 不同命名空间中的相同 IP 会导致 ARP 表冲突,需通过路由器隔离或 VLAN 划分避免。
  2. 防火墙规则
    • 在路由器中配置 iptables 规则,禁止不同命名空间的直接通信。
    sudo ip netns exec router iptables -A FORWARD -i veth-router1 -o veth-router1 -j DROP
    
  3. MAC 地址唯一性
    • 确保所有接口的 MAC 地址唯一,避免二层冲突。

七、扩展优化
  • VLAN 隔离
    为每个命名空间的网桥分配不同 VLAN,彻底隔离广播域。
    sudo ip link set br1 type bridge vlan_filtering 1
    sudo ip link set br2 type bridge vlan_filtering 1
    
  • 动态路由协议
    在虚拟路由器中配置 OSPF 或 BGP,模拟复杂网络环境。

总结

通过此设计,可以实现 IP 地址重叠环境下的网络隔离与互联网访问,验证以下核心特性:

  1. 同一命名空间内通信正常:依赖网桥的二层转发。
  2. 不同命名空间 IP 重叠隔离:通过命名空间和路由器隔离。
  3. NAT 互联网访问:虚拟路由器实现地址转换。

此方案适用于多租户测试、网络协议验证等场景,是理解 Linux 网络虚拟化的高级实践。

相关文章:

  • SpringBoot3.x 集成 shardingsphere-jdbc 实现读写分离
  • 26考研|数学分析:反常积分
  • JSON for Modern C++ 解析 JSON(五)
  • 【Git】5 个分区的切换方式及示例
  • idea报错:程序包不存在
  • 【android bluetooth 协议分析 13】【RFCOMM详解 1】【通俗易懂 什么是rfcomm】
  • 数理天地杂志数理天地杂志社数理天地编辑部2025年第6期目录
  • Java的比较器 Comparable 和 Comparator
  • 如何批量拆分Excel工作表或按行拆分Excel表格 - Excel拆分器使用方法
  • 通信协议与网络知识:从硬件到互联网的全面指南
  • 什么是 MCP(模型上下文协议)
  • 10乱码问题的解释(1)
  • GLPI 在企业 IT 资产全生命周期管理中的价值
  • thinkcmf搭建
  • Thinkpad t14的startup 没有 UEFI/Legacy Boot 选项,如何设为U盘启动
  • 【Easylive】MySQL中LEFT JOIN与INNER JOIN的使用场景对比
  • c# 虚函数、接口、抽象区别和应用场景
  • C语言复习--assert断言
  • 一起学习大语言模型-常用命令及模型介绍
  • 输电线路航空标志球:低空飞行的安全路标 / 恒峰智慧科技
  • 特朗普政府涉税改法案遭众议院预算委员会否决
  • 俄乌代表团抵达谈判会场
  • 中国社联成立95周年,《中国社联期刊汇编》等研究丛书出版
  • 新任国防部新闻发言人蒋斌正式亮相
  • 光明日报:家长孩子共同“息屏”,也要保证高质量陪伴
  • 陕西河南山西等地将现“干热风”灾害,小麦产区如何防范?