安裝虛擬網絡卡有什麼用(什麼叫網絡卡虛擬化)
01 macvlan 簡介
前面的文章講過了幾種 Linux 虛擬網路裝置:tap/tun、veth-pair、bridge,它們本質上是 Linux 系統 提供的網路虛擬化解決方案,今天要講的 macvlan 也是其中的一種,準確說這是一種網絡卡虛擬化的解決方案。因為 macvlan 這種技術能將 一塊物理網絡卡虛擬成多塊虛擬網絡卡 ,相當於物理網絡卡施展了 多重影分身之術 ,由一個變多個。
02 macvlan 的工作原理
macvlan 是 Linux kernel 支援的新特性,支援的版本有 v3.9-3.19 和 4.0 ,比較穩定的版本推薦 4.0 。它一般是以核心模組的形式存在,我們可以通過以下方法判斷當前系統是否支援:
# modprobe macvlan # lsmod | grep macvlan macvlan 24576 0
如果第一個命令報錯,或者第二個命令沒有返回,說明當前系統不支援 macvlan,需要升級核心。
macvlan 這種技術聽起來有點像 VLAN,但它們的實現機制是完全不一樣的。macvlan 子介面和原來的主介面是完全獨立的,可以單獨配置 MAC 地址和 IP 地址,而 VLAN 子介面和主介面共用相同的 MAC 地址。VLAN 用來劃分廣播域,而 macvlan 共享同一個廣播域。
通過不同的子介面,macvlan 也能做到流量的隔離。macvlan 會根據收到包的目的 MAC 地址判斷這個包需要交給哪個虛擬網絡卡,虛擬網絡卡再把包交給上層的協議棧處理。
03 四種模式
根據 macvlan 子介面之間的通訊模式,macvlan 有四種網路模式:
- private 模式
- vepa(virtual ethernet port aggregator) 模式
- bridge 模式
- passthru 模式
預設使用的是 vepa 模式。
3.1 private
這種模式下,同一主介面下的子介面之間彼此隔離,不能通訊。即使從外部的物理交換機導流,也會被無情地丟掉。
3.2 vepa
這種模式下,子介面之間的通訊流量需要導到外部支援 802.1Qbg/VPEA 功能的交換機上(可以是物理的或者虛擬的),經由外部交換機轉發,再繞回來。
注: 802.1Qbg/VPEA 功能簡單說就是交換機要支援 髮夾(hairpin) 功能,也就是資料包從一個介面上收上來之後還能再扔回去。
3.3 bridge
這種模式下,模擬的是 Linux bridge 的功能,但比 bridge 要好的一點是每個介面的 MAC 地址是已知的,不用學習。所以,這種模式下,子介面之間就是直接可以通訊的。
3.4 passthru
這種模式,只允許單個子介面連線主介面,且必須設定成混雜模式,一般用於子介面橋接和建立 VLAN 子介面的場景。
3.5 mactap
和 macvlan 相似的技術還有一種是 mactap。和 macvlan 不同的是,mactap 收到包之後不是交給協議棧,而是交給一個 tapX 檔案,然後通過這個檔案,完成和使用者態的直接通訊。
04 實踐
在 Linux 系統下,建立 macvlan 的命令形式如下:
ip link add link DEVICE name NAME type { macvlan | macvtap } mode { private | vepa | bridge | passthru [ nopromisc ] }
通常,單獨使用 macvlan 毫無意義,一般都是結合 VM 和容器來構建網路。下面我們就簡單使用 namespace 來看看 Linux 是怎麼使用 macvlan 的。
實驗拓撲如下:
在我的系統中,以介面 enp0s8 為例建立兩個 macvlan 子介面(使用 bridge 模式),配置 IP 並將其掛到兩個 namespace 中,測試連通性。
# 建立兩個 macvlan 子介面 ip link add link enp0s8 dev mac1 type macvlan mode bridge ip link add link enp0s8 dev mac2 type macvlan mode bridge # 建立兩個 namespace ip netns add ns1 ip netns add ns2 # 將兩個子介面分別掛到兩個 namespace 中 ip link set mac1 netns ns1 ip link set mac2 netns ns2 # 配置 IP 並啟用 ip netns exec ns1 ip a a 192.168.56.122/24 dev mac1 ip netns exec ns1 ip l s mac1 up ip netns exec ns1 ip a a 192.168.56.123/24 dev mac2 ip netns exec ns2 ip l s mac2 up
注: enp0s8 的 IP 是 192.168.56.110/24,配置的子介面 IP 也必須是同一網段的。
完了兩個子介面 ping 一下:
root@ubuntu:~# ip netns exec ns1 ip a show mac1 9: mac1@if3: mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1 link/ether 2e:6e:d9:08:c5:05 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 192.168.56.122/24 scope global mac1 valid_lft forever preferred_lft forever inet6 fe80::2c6e:d9ff:fe08:c505/64 scope link valid_lft forever preferred_lft forever root@ubuntu:~# ip netns exec ns1 ping 192.168.56.123 PING 192.168.56.123 (192.168.56.123) 56(84) bytes of data. 64 bytes from 192.168.56.123: icmp_seq=1 ttl=64 time=0.052 ms 64 bytes from 192.168.56.123: icmp_seq=2 ttl=64 time=0.028 ms ^C --- 192.168.56.123 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.028/0.040/0.052/0.012 ms
可以看到,能夠 ping 通,如果把上面的 mode 換成其他模式就行不通了,這個就留給大家去實驗了(預設是 vepa 模式)。
另外,在 docker 中,macvlan 是一種較為重要的跨主機網路模型,這塊的內容就留作下篇文章再做講解了。
05 總結
macvlan 是一種網絡卡虛擬化技術,能夠將一張網絡卡虛擬出多張網絡卡。
macvlan 的四種通訊模式,常用模式是 bridge。
思考一下:
- macvlan bridge 和 bridge 的異同點?
- 還有一種類似的技術,多張虛擬網絡卡共享相同 MAC 地址,但有獨立的 IP 地址,這是什麼技術?
本文轉載自微信公眾號「 Linux雲端計算網路(ID:cloud_dev)」
天下資料是國內屈指可數的擁有多處海外自建機房的新型IDC服務商,被業界公認為“中國IDC行業首選品牌”。
天下資料與全球近120多個國家頂級機房直接合作,提供包括香港、美國、韓國、日本、臺灣、新加坡、荷蘭、法國、英國、德國、埃及、南非、巴西、印度、越南等國家和地區的伺服器、雲伺服器的租用服務,需要的請聯絡天下資料客服!
除提供傳統的IDC產品外,天下資料的主要職責是為大中型企業提供更精細、安全、滿足個性需求的定製化伺服器解決方案,特別是在直銷、金融、視訊、流媒體、遊戲、電子商務、區塊鏈、快消、物聯網、大資料等諸多行業,為廣大客戶解決伺服器租用中遇到的各種問題。