Linux network namespace

2019/07/02 linux network

1、创建网桥

# 新建网桥br0
brctl addbr br0

# 关闭STP(生成树协议)
brctl stp br0 off

# 为网桥设置IP地址
ifconfig br0 192.168.10.1/24 up

 

2、创建network namespace

# 创建network namespace ns1
ip netns add ns1

 

3、创建veth pair,用来连接ns1和default namespace

# 创建veth pair
ip link add veth-ns1 type veth peer name br0.1

# 把veth-ns1放进namespace ns1中
ip link set veth-ns1 netns ns1

veth pair的两端分别是veth-ns1和br0.1

 

4、配置namespace ns1内部的网络

# 启动一个属于ns1的shell
ip netns exec ns1 sh

# 查看当前的端口
ip link show

# veth-ns1改名为eth0
ip link set dev veth-ns1 name eth0

# 给eth0分配一个IP并up
ifconfig eth0 192.164.10.11/24 up

# lo up
ip link set dev lo up

# 查看IP地址配置
ip addr show

# 设置默认路由
ip route add default via 192.168.10.1 dev eth0

 

5、配置default namespace

# br0.1 up
ifconfig br0.1 up

# 把br0.1添加到网桥br0上
brctl addif br0 br0.1

现在已经可以ping通namespace ns1中的IP地址了。

如果还想让namespace ns1访问外网,还需要做如下配置:

# 开启端口转发
echo 1 > /proc/sys/net/ipv4/ip_forward

# 添加SNAT规则
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE

 

Search

    Table of Contents