Linux network namespace

Linux network namespace, veth, birdge与路由

Network Namespace与宿主机通信

# 创建两个namespace
ip netns add ns1
ip netns add ns2

# 创建一个bridge
brctl addbr virtual-bridge

# 创建veth pair,将veth pair一端的虚拟网卡加入到namespace,再将另一端通过brctl addif命令加入到网桥上
ip link add veth-ns1 type veth peer name veth-ns1-br
ip link set veth-ns1 netns ns1
brctl addif virtual-bridge veth-ns1-br

ip link add veth-ns2 type veth peer name veth-ns2-br
ip link set veth-ns2 netns ns2
brctl addif virtual-bridge veth-ns2-br

# 如果没有brctl工具,可使用ip link set veth-ns2-br master virtual-bridge

# 设置虚拟网卡ip地址,位于同一个子网192.168.1.0/24中
ip -n ns1 addr add local 192.168.1.2/24 dev veth-ns1
ip -n ns2 addr add local 192.168.1.3/24 dev veth-ns2

# 设置网桥和虚拟网卡状态为up
ip link set virtual-bridge up
ip link set veth-ns1-br up
ip link set veth-ns2-br up
ip -n ns1 link set veth-ns1 up
ip -n ns2 link set veth-ns2 up

# 检查namespace之间是否可达
ip netns exec ns1 ping 192.168.1.2

# 通过上面实验,验证了可以使用Linux bridge来将多个namespace连接到同一个二层网络中,但此时namespace还无法访问主机网络

# namespace的默认网关为网桥ip
ip addr add local 192.168.1.1/24 dev virtual-bridge
ip -n ns1 route add default via 192.168.1.1
ip -n ns2 route add default via 192.168.1.1

# namespace可以访问网桥ip
ip netns exec ns1 ping 192.168.1.1

# 开启Linux的IP Forwarding功能
cat /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward

# namespace可以访问eth0 ip
ip netns exec ns1 ping {eth0_ip}
route: default gw 192.168.1   
+------------------+     +------------------+  
|                  |     |                  | 
|                  |     |                  |
|                  |     |                  | 
|       ns1        |     |       ns2        | 
|                  |     |                  | 
|                  |     |                  |                  
|                  |     |                  |                 
|  192.168.1.2/24  |     |  192.168.1.3/24  |                
+---+(veth+ns1)+---+     +---+(veth+ns2)+---+               
         +                          +                      
         |                          |                     
         |                          |                    
         +                          +                   
+-+(veth+ns1+br)+-----------+(veth+ns2+br)+-+          
|                                           |         
|               Linux bridge                |                  
|                                           |                 
+-------------(virtual-bridge---------------+                
                    |                                       
                    |                                      
                    |                                     
+-------------(virtual-bridge)--------------+            
|            192.168.1.1/24                 |           
|        default network namespace          |          
|       (Linux Kernel IP Forwarding)        |         
|                                           |                
|              10.0.2.15/24                 |               
+---------------(eth0)--------------------+   
posted @   hunter-w  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
历史上的今天:
2019-11-23 双指针法
点击右上角即可分享
微信分享提示