一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Linux|Centos|Ubuntu|系統進程|Fedora|注冊表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務器之家 - 服務器系統 - Linux - linux虛擬網絡設備之vlan配置詳解

linux虛擬網絡設備之vlan配置詳解

2022-02-23 16:53phpor Linux

這篇文章主要給大家介紹了關于linux虛擬網絡設備之vlan配置的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。

簡介

VLAN是網絡棧的一個附加功能,且位于下兩層。首先來學習Linux中網絡棧下兩層的實現,再去看如何把VLAN這個功能附加上去。下兩層涉及到具體的硬件設備,日趨完善的Linux內核已經做到了很好的代碼隔離,對網絡設備驅動也是如此,如下圖所示:

linux虛擬網絡設備之vlan配置詳解

這里要注意的是,Linux下的網絡設備net_dev并不一定都對應實際的硬件設備,只要注冊一個struct net_device{}結構體(netdevice.h)到內核中,那么這個網絡設備就存在了。該結構體很龐大,其中包含設備的協議地址(對于IP即IP地址),這樣它就能被網絡層識別,并參與路由系統,最有名的當數loopback設備。不同的設備(包括硬件和非硬件)的ops操作方法各不相同,由驅動自己實現。一些通用性的、與設備無關的操作流程(如設備鎖定等)則被Linux提煉出來,我們稱為驅動框架。

linux虛擬網絡設備之vlan配置

我們通過一個網橋兩個設備對,來連接兩個網絡名字空間,每個名字空間中創建兩個vlan

linux虛擬網絡設備之vlan配置詳解

借助vconfig來配置vlan:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#創建網橋
brctl addbr br-test-vlan
#創建veth對兒
ip link add veth01 type veth peer name veth10
ip link add veth02 type veth peer name veth20
#將veth對兒的一段添加到網橋
brctl addif br-test-vlan veth01
brctl addif br-test-vlan veth02
#啟動設備
ip link set dev br-test-vlan up
ip link set dev veth01 up
ip link set dev veth02 up
ip link set dev veth10 up
ip link set dev veth20 up
#創建網絡名字空間
ip netns add test-vlan-vm01
ip netns add test-vlan-vm02
#將設備對兒的另一端添加到另個名字空間(其實在一個名字空間也能玩,只是兩個名字空間更加形象)
ip link set veth10 netns test-vlan-vm01
ip link set veth20 netns test-vlan-vm02
#分別進入兩個名字空間創建vlan和配置ip
#配置名字空間test-vlan-vm01
ip netns exec test-vlan-vm01 bash
#配置vlan 3001 和 vlan 3002
vconfig add veth10 3001
vconfig add veth10 3002
#啟動兩個vlan的設備
ip link set veth10.3001 up
ip link set veth10.3002 up
#分別在兩個vlan上配置ip (這里簡單起見,使用了同一個網段了IP,缺點是,需要了解一點兒路由的知識)
ip a add 172.16.30.1/24 dev veth10.3001
ip a add 172.16.30.2/24 dev veth10.3002
#添加路由
route add 172.16.30.21 dev veth10.3001
route add 172.16.30.22 dev veth10.3002
#配置名字空間test-vlan-vm02
ip netns exec test-vlan-vm02 bash
#配置vlan 3001 和 vlan 3002
vconfig add veth20 3001
vconfig add veth20 3002
#啟動兩個vlan的設備
ip link set veth20.3001 up
ip link set veth20.3002 up
#分別在兩個vlan上配置ip (這里簡單起見,使用了同一個網段了IP,缺點是,需要了解一點兒路由的知識)
ip a add 172.16.30.21/24 dev veth20.3001
ip a add 172.16.30.22/24 dev veth20.3002
#添加路由
route add 172.16.30.1 dev veth20.3001
route add 172.16.30.2 dev veth20.3002

查看一下vlan配置:

?
1
2
3
4
5
# cat /proc/net/vlan/config
VLAN Dev name | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
veth10.3001 | 3001 | veth10
veth10.3002 | 3002 | veth10

現在,我們可以分別在兩個名字空間來ping另外一個名字空間的兩個IP,雖然兩個IP都能ping通,但是使用的源IP是不同的,走的vlan也是不同的,我們可以在veth01/veth10/veth02/veth20/br-test-vlan 任意一個上抓包,會看到vlan信息:

?
1
2
3
4
5
6
7
8
9
# tcpdump -i veth10 -nn -e
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on veth10, link-type EN10MB (Ethernet), capture size 262144 bytes
15:38:18.381010 82:f7:0e:2d:3f:62 > 9e:58:72:fa:11:15, ethertype 802.1Q (0x8100), length 102: vlan <span style="color: #ff0000;">3001</span>, p 0, ethertype IPv4, <strong><span style="color: #ff0000;">172.16.30.1 > 172.16.30.21</span></strong>: ICMP echo request, id 19466, seq 1, length 64
15:38:18.381183 9e:58:72:fa:11:15 > 82:f7:0e:2d:3f:62, ethertype 802.1Q (0x8100), length 102: vlan <span style="color: #ff0000;"><strong>3001</strong></span>, p 0, ethertype IPv4, 172.16.30.21 > 172.16.30.1: ICMP echo reply, id 19466, seq 1, length 64
15:38:19.396796 82:f7:0e:2d:3f:62 > 9e:58:72:fa:11:15, ethertype 802.1Q (0x8100), length 102: vlan 3001, p 0, ethertype IPv4, 172.16.30.1 > 172.16.30.21: ICMP echo request, id 19466, seq 2, length 64
15:38:19.396859 9e:58:72:fa:11:15 > 82:f7:0e:2d:3f:62, ethertype 802.1Q (0x8100), length 102: vlan 3001, p 0, ethertype IPv4, 172.16.30.21 > 172.16.30.1: ICMP echo reply, id 19466, seq 2, length 64
15:38:23.162052 82:f7:0e:2d:3f:62 > 9e:58:72:fa:11:15, ethertype 802.1Q (0x8100), length 102: vlan 3002, p 0, ethertype IPv4, 172.16.30.2 > <strong><span style="color: #ff0000;">172.16.30.22</span></strong>: ICMP echo request, id 19473, seq 1, length 64
15:38:23.162107 9e:58:72:fa:11:15 > 82:f7:0e:2d:3f:62, ethertype 802.1Q (0x8100), length 102: vlan 3002, p 0, ethertype IPv4, <strong><span style="color: #ff0000;">172.16.30.22 > 172.16.30.2</span></strong>: ICMP echo reply, id 19473, seq 1, length 64

如果試圖從veth10.3001 去ping 172.16.30.22 是不能通的,因為是不同的vlan呀:

?
1
2
3
4
5
# ping -I veth10.3001 172.16.30.22
PING 172.16.30.22 (172.16.30.22) from 172.16.30.1 veth10.3001: 56(84) bytes of data.
^C
--- 172.16.30.22 ping statistics ---
9 packets transmitted, 0 received, 100% packet loss, time 8231ms

不適用vconfig的解法:

?
1
ip link add link veth10 name veth10.3001 type vlan id 3001

另: vlan 一般以  設備名.vlanid 來命名,不過并非強制,如下命名為 vlan3003也是沒問題的

?
1
# ip link add link veth10 name vlan3003 type vlan id 3003

注意:一個主設備上相同vlan好的子設備最多只能有一個

?
1
2
# ip link add link veth10 name vlan3001 type vlan id 3001
 RTNETLINK answers: File exists

所以,正常來講,一般是這樣的:

linux虛擬網絡設備之vlan配置詳解

參考: http://network.51cto.com/art/201504/473419.htm

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://phpor.net/blog/post/7109

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美深夜在线 | 91久久国产露脸精品 | 91香蕉视频在线观看 | 好大好粗好爽 | 亚洲高清在线天堂精品 | 男女视频在线观看 | blackedvideos黑人| 欧美人做人爱a全程免费 | 国产网站免费在线观看 | 欧产日产国产精品专区 | 国产自产自拍 | 天堂一区二区在线观看 | yellow视频免费观看播放 | 精品日韩欧美一区二区三区 | 亚洲 欧美 国产 综合 在线 | 亚洲欧美激情日韩在线 | 风间由美在线播放 | 黑人巨茎大战欧美白妇 | 美女福利视频网站 | 我年轻漂亮的继坶2中字在线播放 | 日本68xxxxxxxxx59 日本 视频 在线 | 亚洲视屏在线观看 | 国产精品久久久久久 | 91在线 在线播放 | 国产日韩欧美在线播放 | 免费在线观看中文字幕 | 久久婷婷丁香五月色综合啪免费 | 亚洲a在线视频 | 国产成人精品视频一区 | 欧美有码 | 114级毛片免费观看 1024亚洲天堂 | 四虎国产| 欧美一区二区三区在线观看不卡 | 楚乔传第二部免费完整 | 国产一级毛片潘金莲的奶头 | 日本免费的一级绿象 | 国产伦精品一区二区三区免费迷 | 热久久最新视频 | a黄毛片 | 国产亚洲精品第一综合linode | 国产在线98福利播放视频免费 |