什么是虚拟网络设备呢?
OpenStack虛擬化網絡實現中大量應用了多種虛擬網絡設備,了解這些設備是理解OpenStack虛擬網絡實現的基礎,本文來簡單介紹這些虛擬網絡設備。
TUN/TAP設備
TUN/TAP設備是linux內核中實現的虛擬網卡。物理網卡是從物理線路上收發數據包,而TUN/TAP設備是從用戶態應用程序上收發以太網幀或IP包。用戶態進程對 /dev/net/tun 文件調用 open() 獲取一個文件描述符,并調用 ioctl() 掛接到該設備上,接著通過讀寫該文件描述符從TUN/TAP設備的收發數據包。收發的數據包由用戶態進程構造好。TUN和TAP設備的區別在于TUN設備收發的是IP包,而TAP設備收發的是以太網幀。
在進程中創建及使用TUN/TAP設備可以參考官方文檔: https://www.kernel.org/doc/Documentation/networking/tuntap.txt
可以使用iproute2工具包中的ip命令創建TUN/TAP設備, 如:
ip tuntap add dev tap0 mode tap ip tuntap add dev tun0 mode tun
通過 ip link 命令可以看到設備已經創建:
[root@compute1 ~]# ip link show tap0 23: tap0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 500 link/ether a6:73:4e:90:f9:3e brd ff:ff:ff:ff:ff:ff [root@compute1 ~]# ip link show tun0 24: tun0: <POINTOPOINT,MULTICAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 500 link/none
設備創建完成后可以和物理設備一樣對TAP進行配置IP地址等操作,如:
[root@compute1 ~]# ip addr add 192.168.1.2/24 dev tap0 [root@compute1 ~]# ip link set dev tap0 up [root@compute1 ~]# ip addr list dev tap0 23: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 500 link/ether 36:f2:68:6a:fd:6d brd ff:ff:ff:ff:ff:ff inet 192.168.1.2/24 scope global tap0 valid_lft forever preferred_lft forever
刪除已創建的設備:
ip tuntap del dev tap0 mode tap ip tuntap del dev tun0 mode tun
Linux bridge
Linux bridge是虛擬二層交換設備, 它基于MAC地址對數據包在bridge的port間進行轉發。物理網卡和TAP等虛擬網絡設備都可以連接到Linux bridge上。
可以使用 brctl 工具或 iproute2 工具包中的ip命令操作Linux bridge
創建bridge
brctl addbr br0
添加設備到bridge
brctl addif br0 eth0
顯示bridge
brctl show
啟動bridge
ip link set dev br0 up
停止bridge
ip link set dev br0 down
刪除bridge
brctl delbr br0
使用IP命令操作bridge:
創建bridge并啟動
ip link add name br0 type bridge ip link set dev br0 up
先將該端口設置為混雜模式并啟動該接口
ip link set dev eth0 promisc on ip link set dev eth0 up
將接口添加到bridge
ip link set dev eth0 master br0
若要刪除網橋,應首先移除它所關聯的所有接口,同時關閉接口的混雜模式并關閉接口以將其恢復至原始狀態。
ip link set dev eth0 promisc off ip link set dev eth0 down ip link set dev eth0 nomaster
刪除bridge
ip link delete br0 type bridge
OVS: Open vSwitch
官網: http://openvswitch.org
OVS是一個產品級別的開源虛擬交換機。相較于Linux bridge, 它提供了各多的功能特性和自動化的編程支持。OVS使用OPENFLOW協議的流表來控制轉發邏輯。
一些簡單的操作:
創建bridge
ovs-vsctl add-br ovsbr0
查看bridge
ovs-vsctl show
添加Port, 并設置VLAN ID為2:
ovs-vsctl add-port ovsbr0 tap1 tag=2
刪除Port
ovs-vsctl del-port ovsbr0 tap1
刪除bridge
ovs-vsctl del-br ovsbr0
network namespace
一般情況下,Linux的網絡接口,路由表、協議棧、iptables規則等資源由操作系統的全部進程共享。通過使用netowrk namespace, 可以將這些網絡資源隔離開,只由namespace內的進程共享。
namespace示例:
創建namespace
ip netns add ns1
查看namespace
ip netns list
將設備添加進namespace,這樣在全局的環境下,該設備不再可見
ip link set dev tap1 netns ns1
查看namespace內設備
ip netns exec ns1 ip link list
可以直接在namespace中執行bash, 再統一對namespace內的設備進行處理
ip netns exec ns1 bash
刪除namespace
ip netns del ns1
veth pair
Virtual Ethernet Pair簡稱veth pair, 是一對邏輯相連的端口或網絡接口。從其中一個端口進入的數據包將從另一端口流出??梢允褂胿eth pair設備來連接Linux bridge或者OVS的bridge,也可以通過veth pair將兩個network namespace連接起來。
創建veth pair:
ip link add dev veth0 type veth peer name veth1
查看創建的veth pair:
[root@compute1 ~]# ip link list ... 29:veth1@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 link/ether f6:eb:23:3b:f1:5b brd ff:ff:ff:ff:ff:ff 30:veth0@veth1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000 link/ether ba:8d:1c:cf:04:a0 brd ff:ff:ff:ff:ff:ff
從輸出可以看到對應的接口設備的名稱。
以下示例將veth pair的兩個接口分別添加到兩個namespace中,從而將兩個namespace連接起來。
ip netns add ns1 ip netns add ns2 ip link set veth0 netns ns1 ip link set veth1 netns ns2 ip netns exec ns1 ip link set dev veth0 up ip netns exec ns2 ip likn set dev veth1 up
總結
以上是生活随笔為你收集整理的什么是虚拟网络设备呢?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Microsoft Teams 集成 (
- 下一篇: shell中的readonly