Linux Net Namespace 介绍

发布时间: 更新时间: 总字数:870 阅读时间:2m 作者: IP上海 分享 网址

netns(linux net namespace) 在逻辑上是网络堆栈的一个副本,它有独立的路由防火墙网络设备,用来隔离网络。在云计算中,通过 netns 使一台机器可以模拟数多台服务器以及路由器的网络环境。

特点

  • 每个网卡(如eth0)都属于某个 netns,如果不显式地指定,则eth0属于默认 netns
  • 如果进程运行在 netns 中,那么它只能看到该 netns 中的进程
  • 不同的 netns 有不同的 iptables
  • 不同的 netns 有不同的路由表,当你想让一个 destination ip 在不同场景下走不同的路由时,netns 就发挥了作用

工具包

linux net namespace 操作的工具有 iproute 提供,使用 ip netns 操作 netns。

help

ip netns help
Usage: ip netns list
       ip netns add NAME
       ip netns set NAME NETNSID
       ip [-all] netns delete [NAME]
       ip netns identify [PID]
       ip netns pids NAME
       ip [-all] netns exec [NAME] cmd ...
       ip netns monitor
       ip netns list-id
  • 创建
ip netns add ns1

可以创建一个完全隔离的新网络环境,该环境包括一个独立的网卡空间路由表ARP表ip地址iptablesebtables等。总之,与网络有关的组件都是独立的。

  • 查看
$ ip netns list
ns1

查看我们刚才创建的 netns

  • 删除
ip netns del ns1
  • 执行配置
$ ip netns exec ns1 `command`
$ ip netns exec ns1 ip link

此处执行命令,和如下两处十分相似,可供扩展:

  • docker exec -it container <command>

  • kubectl exec -it <pod-name> -- <command>

  • 进入 netns

$ ip netns exec ns1 bash
$ ip addr show
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

使用上述命令,可以在新的网络环境中打开一个shell,可以看到,新的网络环境里面只有一个lo设备,并且该lo设备与外面的lo设备是相互隔离的。

通过如下命令,可以指定命令前面的提示符:

$ ip netns exec ns1 bash -rcfile <(echo "PS1=\"ns1> \"")
  • 其他与 OpenvSwitch 配置使用见:TODO(xiexianbin)

特殊说明

netns 可以对网络设备进行隔离

  • 查看网络设备:
$ ls -lhart /sys/class/net
total 0
drwxr-xr-x  2 root root 0 Mar 18 03:37 .
lrwxrwxrwx  1 root root 0 Mar 18 03:37 ovs-system -> ../../devices/virtual/net/ovs-system
lrwxrwxrwx  1 root root 0 Mar 18 03:37 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx  1 root root 0 Mar 18 03:37 ens33 -> ../../devices/pci0000:00/0000:00:11.0/0000:02:01.0/net/ens33
lrwxrwxrwx  1 root root 0 Mar 18 03:37 docker0 -> ../../devices/virtual/net/docker0
lrwxrwxrwx  1 root root 0 Mar 18 03:37 br0 -> ../../devices/virtual/net/br0
drwxr-xr-x 54 root root 0 Mar 18 03:37 ..
  • 创建 ns1
ip netns add ns1
  • br0 分配给 ns1
ip link set br0 netns ns1
  • 查看:br0 只在 ns1 中,这也说明一个网络设备只能位于一个 netns 中。
$ ls -lhart /sys/class/net/
total 0
drwxr-xr-x  2 root root 0 Mar 18 03:37 .
lrwxrwxrwx  1 root root 0 Mar 18 03:37 ovs-system -> ../../devices/virtual/net/ovs-system
lrwxrwxrwx  1 root root 0 Mar 18 03:37 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx  1 root root 0 Mar 18 03:37 ens33 -> ../../devices/pci0000:00/0000:00:11.0/0000:02:01.0/net/ens33
lrwxrwxrwx  1 root root 0 Mar 18 03:37 docker0 -> ../../devices/virtual/net/docker0
drwxr-xr-x 54 root root 0 Mar 18 03:37 ..
$ ip netns exec ns1 ls -lhart /sys/class/net/
total 0
drwxr-xr-x  2 root root 0 Mar 18 03:37 .
lrwxrwxrwx  1 root root 0 Mar 18 03:37 br0 -> ../../devices/virtual/net/br0
drwxr-xr-x 54 root root 0 Mar 18 03:37 ..
lrwxrwxrwx  1 root root 0 Mar 18 03:41 lo -> ../../devices/virtual/net/lo
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数