ubuntu 16.04 環境下實踐 VLAN

01 準備環境

環境:ubuntu 16.04 環境(物理 or 虛擬)css

確認 CPU 是否支持虛擬化:ubuntu

# egrep -o '(vmx|svm)' /proc/cpuinfo # vmx

若是不支持,開啓 KVM 嵌套虛擬化以後再重啓。bash

1.1 安裝 KVM 環境

sudo apt-get install -y qemu-kvm qemu-system libvirt-bin virt-manager bridge-utils vlan 

1.2 安裝 Ubuntu 圖形化界面

sudo apt-get install -y xinit gdm kubuntu-desktop 

02 建立 KVM 虛擬機

使用 virt-manager 建立 KVM 虛擬機,方法比較簡單,因爲篇幅有限,你們能夠查閱相關資料自行了解。網絡

建立完以後用 virsh list --all 查看建立的 VM:dom

Id Name State ---------------------------------------------------- - kvm1 shut off - kvm2 shut off - kvm3 shut off

咱們的實驗拓撲以下:ui

 
image

圖中建立了 2 個 Linux Bridge:brvlan1 和 brvlan2,宿主機的物理網卡 eth0 抽象出兩個虛擬設備 eth0.1 和 eth0.2,也就是兩個 VLAN 設備,它們分別定義了兩個 VLAN:VLAN1 和 VLAN2。掛接到兩個 Bridge 上的網絡設備自動加入到相應的 VLAN 中。VLAN1 接兩個 VM,VLAN 接一個 VM。url

實驗的目的是要驗證屬於同一個 VLAN1 中 VM1 和 VM2 能 ping 通,而屬於不一樣 VLAN 中的 VM ping 不通。spa

03 實驗開始

3.1 配置 VLAN

編輯 /etc/network/interfaces,加入兩個 Bridge 和兩個 VLAN 設備的配置,以下:.net

# The primary network interface auto ens33 iface ens33 inet dhcp auto ens33.1 iface ens33.1 inet manual vlan-raw-device ens33 auto brvlan1 iface brvlan1 inet manual bridge_stp off bridge_waitport 0 bridge_fd 0 bridge_ports ens33.1 auto ens33.2 iface ens33.2 inet manual vlan-raw-device ens33 auto brvlan2 iface brvlan2 inet manual bridge_stp off bridge_waitport 0 bridge_fd 0 bridge_ports ens33.2

注意,這裏務必和本身電腦的接口名稱統一,好比我這裏叫 ens33,就配 ens33.1 和 ens33.2 的 VLAN 設備,固然你也能夠改爲 eth0 的形式。code

重啓宿主機,ifconfig 查看網絡接口:

 
image

brctl show 查看當前 Linux Bridge 的配置,ens33.1 和 ens33.2 分別掛載 brvlan1 和 brvlan2 上了。

# brctl show bridge name bridge id STP enabled interfaces brvlan1 8000.000c298c57e8 no ens33.1 brvlan2 8000.000c298c57e8 no ens33.2 virbr0 8000.000000000000 yes

3.2 配置 VM

咱們先配置 VM1,啓動 virt-manager,在圖形界面中將 VM1 的虛擬網卡掛到 brvlan1 上:

 
image

一樣的方式配置 VM2 和 VM3,VM2 也配到 brvlan1 上,VM3 配到 brvlan2 上。

3.3 查看 VM 配置

virsh start xxx 啓動 3 個 VM:

# virsh start kvm1 # virsh start kvm2 # virsh start kvm3

再經過 brctl show 查看 Bridge,這時發現 brvlan1 下接了 vnet0 和 vnet1,brvlan2 下接了 vnet2:

# brctl show bridge name bridge id STP enabled interfaces brvlan1 8000.000c298c57e8 no ens33.1 vnet0 vnet1 brvlan2 8000.000c298c57e8 no ens33.2 vnet2 virbr0 8000.000000000000 yes

經過 virsh domiflist xxx 確認這就是 VM 的虛擬網卡:

# virsh domiflist kvm1 Interface Type Source Model MAC ------------------------------------------------------- vnet0 bridge brvlan1 rtl8139 52:54:00:b3:dd:3a # virsh domiflist kvm2 Interface Type Source Model MAC ------------------------------------------------------- vnet1 bridge brvlan1 rtl8139 52:54:00:b7:4f:ef # virsh domiflist kvm3 Interface Type Source Model MAC ------------------------------------------------------- vnet2 bridge brvlan2 rtl8139 52:54:00:d8:b8:2a 

04 驗證

爲了驗證相同 VLAN 之間的連通性和不一樣 VLAN 之間的隔離性,咱們爲 3 個 VM 都配置同一網段的 IP。

使用 virt-manager 進入 VM console 控制面。

配置 VM1 的 IP:

ifconfig eth0 192.168.100.10 netmask 255.255.255.0

配置 VM2 的 IP:

ifconfig eth0 192.168.100.20 netmask 255.255.255.0

配置 VM3 的 IP:

ifconfig eth0 192.168.100.30 netmask 255.255.255.0

使用 VM1 ping VM2 能 ping 通,VM2 ping VM3 不能 ping 通。

 
image

驗證完畢。

你們若是有興趣,能夠抓個包看看,在發送 ping 包以前,須要知道對方的 MAC 地址,因此會先在網絡中廣播 ARP 包。ARP 是二層協議,VLAN 的做用就是隔離二層的廣播域,ARP 包天然就不能在不一樣 VLAN 中流通,因此在相同 VLAN 中,通訊雙方可以拿到對方的 MAC 地址,也就能 ping 通,不一樣 VLAN 反之。


轉自: https://www.jianshu.com/p/afe119456c60
相關文章
相關標籤/搜索