什么是 veth

2011-07-03 21:32

什么是 veth

by 王 聪

at 2011-07-03 13:32:52

original http://wangcong.org/blog/archives/1704

Linux container 中用到一个叫做veth的东西,这是一种新的设备,专门为 container 所建。

veth 从名字上来看是 Virtual ETHernet 的缩写,它的作用很简单,就是要把从一个 network namespace 发出的数据包转发到另一个 namespace。veth 设备是成对的,一个是 container 之中,另一个在 container 之外,即在真实机器上能看到的。

建立 veth 类型的设备可以用下面的命令:

ip link add name n1.0.1 type veth peer name n1.0

这里建立了一对veth设备,名字分别是 n1.0.1 和 n1.0。注意,这两个设备是完全对称的,也就是说,除了名字不一样,它们的作用是完全相同的,从其中一个发出就会从另一个收到。从代码(drivers/net/veth.c::veth_newlink())我们也可以看得出来:

PLAIN TEXT
C:
  1. priv = netdev_priv(dev);
  2.         priv->peer = peer;
  3.  
  4.         priv = netdev_priv(peer);
  5.         priv->peer = dev;

然后我们可以用下面的命令设置它们的 namespace:

ip link set n1.0 netns `pidof lxc`

通常 veth 会和 bridge 搭配使用(我们在lxc的配置文件中也可以看出),这样一来,从外面进来的包(比如 eth0)就可以转发到 container 之中了。