Skip to content

Latest commit

 

History

History
73 lines (60 loc) · 3.82 KB

linux网络(五).md

File metadata and controls

73 lines (60 loc) · 3.82 KB

不讨论其余的,只谈网桥和设备对,因为linux网络实在是太难太恶心了。

veth-pair

如同tun/tap一般,这也是虚拟设备,但是却也不同,tun/tap的一端是协议栈,一端是用户态程序,然而veth-pair是成对出现的,一端连接着协议栈,一端连接彼此。 这个特性很抽象,那就不得不说明一下这个设备的诞生缘由与目的。

DESCRIPTION
       The veth devices are virtual Ethernet devices. They can act as tunnels be‐
       tween network namespaces to create a bridge to a physical network device in
       another namespace, but can also be used as standalone network devices.

这是man手册中的介绍,直接了当地说明了这样的设备对是用来充当不同network namesapce之间的tunnel的。 network namespace是实现网络虚拟化的功能,不同的namespace中有各自的网卡路由表ARP表iptables等网络资源,就比如在你的系统中创建一个新的network namespace后,它的网络就和你系统的网络隔离开了,成了一个独立的网络空间,而linux则提供了veth-pair将两个namespace连通起来,两个空间可以通过这样的一条管道进行网络通信。

做个实验看下,首先建立一个network namespace

sudo ip netns add net1 

然后创建出veth-pair

sudo ip link add type veth

把其中一个veth放到net1

sudo ip link set veth1 netns net1

分别给两张网卡配置IP后启用起来。

//主ns
sudo ifconfig veth0 99.1.1.1/24
sudo ifconfig veth0 up
sudo ifconfig
//ns1
sudo ip netns exec net1 ifconfig veth1 99.1.1.2/24
sudo ip netns exec net1 ifconfig veth1 up
sudo ip netns exec net1 ifconfig

net1里发个包试试

ping -c 1 99.1.1.1

但如果在net1中添加这么一条路由表后,然后ping 8.8.8.8再去抓取veth0的数据包,会发现很有意思的事。

route add -net 0.0.0.0 netmask 0.0.0.0 gw 99.1.1.2 dev veth1

倘若我们物理机上开启了转发功能的话,是否就代表着net1真的能够访问外网了呢?

Netruon 理解(11):使用 NAT 将 Linux network namespace 连接外网

linux bridge

网桥设备可以理解成是一个虚拟交换机,有若干入口,也有若干出口,而网桥的作用就是在一个口接受到报文时原样复制到其余的各个口,且发送出去,当然为了避免不必要的网络交互产生,交换机经过地址学习后能够只向特定的网口发送数据。

实际上对于veth-pair来说,就是提供了一种方法让超过两个network namespace能够通信,实现的方式就是veth的一个在namespace中,另一个在网桥上。

至于访问外网,都得开启转发。

参考文档