linux中的虛擬化網路模型及使用qemu-kvm創建隔離模型

来源:http://www.cnblogs.com/linuxboke/archive/2016/05/27/5536219.html
-Advertisement-
Play Games

第一種隔離模型: Guest1和Guest2都為虛擬機。 首先要瞭解在linux中的虛擬機的網卡都包含前半段和後半段,前半段在虛擬機上,後半段在宿主機上,這裡以centos6為例,上圖 eth0為Guest1虛擬機上的網卡,對應的後半段為vnet0,在Guest1上所有發往eth0的數據就直接發往v ...


第一種隔離模型:

 

Guest1和Guest2都為虛擬機。

首先要瞭解在linux中的虛擬機的網卡都包含前半段和後半段,前半段在虛擬機上,後半段在宿主機上,這裡以centos6為例,上圖

eth0為Guest1虛擬機上的網卡,對應的後半段為vnet0,在Guest1上所有發往eth0的數據就直接發往vnet0了,也可以將vnet0看作

一塊網卡

Guest1如何跟Guest2通信?

很簡單在宿主機中做一個虛擬交換機,讓vnet0和vnet1分別為虛擬交換機的一個介面,交換機也可叫做bridge,只要兩個虛擬機網卡

的前半段的ip地址在同一個網段中,就可以相互通信了,這就是隔離模型

 

第二種路由模型:

交換機中多了virnet1網卡,將eth0和eth1的網關指向virnet1,再打開linux的核心轉發功能,虛擬機就可以和外部通信了

打開核心轉發功能的方法sysctl -w net.ipv4.ip_ipforward=1

 

第三種NAT模型:

 

 

在路由模型中雖然虛擬機的ip報文能夠發出去跟外部通信了,但外部主機可能找不到通往虛擬機的路由卻能跟宿主機通信,為了虛擬機

能得到外部主機的響應,將發出去跟外部主機通信的ip報文的源地址都轉換成宿主機物理網卡的地址,這就是NAT模型,也是使用得最

的模型

 

最後一種橋接模型:

 

在宿主機中創建一個橋設備,把宿主機的eth0放在橋上,這樣Guest1上的eth0將報文發給vnet0,再直接發給宿主機上的eth0,將源

地址改為宿主機上的eth0的地址

當響應報文到達物理機上的eth0時如何判斷此響應報文是發給虛擬機的還是物理機自己的?

物理機會先創建一個虛擬網卡,在物理機上打開混雜模式(無論mac地址是不是自己的都將接收響應報文),如果mac地址是自己的則轉

發給虛擬網卡,如果不是自己的則轉發給vnet0,這就是橋接模型,因為物理機的網卡具有橋的功能所以叫做橋接模型

 

如何在linux上創建一個橋設備?

橋設備是在內核中實現

modinfo bridge查看內核是否安裝此模塊

 

創建橋的命令為brctl,使用brctl -h查看命令幫助,使用brctl addbr br0就創建了一個叫br0的網路介面

 

brctl show 顯示當前主機上的所有橋

 

ifconfig br0 up 激活br0介面

 

qemu-kvm net選項介紹

     nic、tap和user三種類型網路介面的屬性,nic就是虛擬機網卡的前半段,而tap就是對應的後半段

net nic: 創建一個新的虛擬機網卡介面,使用方法:

    -net nic[,vlan=n][,macaddr=mac][,model=type][,name=name][,addr=addr][,vectors=v]

    創建一個新的網卡設備並連接至指定的vlan中,macaddr用於為其指定MAC地址

    model指定網卡類型,qemu可以模擬多個類型的網卡設備,如virtio,PC架構上預設的NIC為e1000,可以使用“qemu-

    kvm -net nic,model=?”來獲取當前平臺支持的類      

    name用於指定一個在監控時顯示的網卡設備名稱

 

    -net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][,downscript=dfile]

    通過物理機的TAP網路介面連接至指定vlan中,ifname指定網卡後半段的名字

    虛擬機啟動時,網卡的後半段不會自動添加,需要一個腳本來添加,使用script=file指定的腳本(預設為/etc/qemu-ifup)來

    配置當前網路介面,並使用downscript=file指定的腳本(預設為/etc/qemu-ifdown)來撤消介面配置,使用script=no和  

    downscript=no可分別用來禁止執行腳本

 

qemu-kvm -m 128 -cpu host -smp 2 -name "first" -drive file=/root/cirros-no_cloud-0.3.0-x86_64-disk.img,if=virtio,media=disk,format=qcow2,cache=writeback -nographic -net nic -net tap,ifname=vnet0.0,script=no

啟動一個虛擬機,不指定tap腳本

 

回到物理機上執行ifconfig -a

 

虛擬機網卡後半段被自動添加了,但因為沒有指定腳本而沒有生效

啟動腳本示例:vim /etc/qemu-ifup

    #!/bin/bash
    #
    bridge=br0

    if [ -n "$1" ]; then
        ip link set $1 up
        sleep 1
        brctl addif $bridge $1
    [ $? -eq 0 ] && exit 0 || exit 1
        else
        echo "Error: no interface specified."
    exit 1
    fi

qemu-kvm會在創建啟動虛擬機時自動把虛擬機網卡的後半段的名字當作參數傳遞給此腳本

 

關閉腳本示例:vim /etc/qemu-ifdown

    #!/bin/bash
    #
    bridge=br0

    if [ -n "$1" ];then
        brctl delif $bridge $1
        ip link set $1 down
        exit 0
    else
        echo "Error: no interface specified."
        exit 1
    fi

qemu-kvm -m 128 -cpu host -smp 2 -name "first" -drive file=/root/cirros-no_cloud-0.3.0-x86_64-disk.img,if=virtio,media=disk,format=qcow2,cache=writeback -nographic -net nic -net tap,ifname=vnet0.0,script=/etc/qemu-ifup

驗證:

 

vnet0.0已經被添加到物理機的橋上了    

 

再啟動一個虛擬機,兩個虛擬機中將網卡地址配置到同一網段,兩台虛擬機就可以通信了,不過記得創建虛擬機時,指定MAC地址因

為不指定的話兩台虛擬機的MAC地址是相同的,導致無法通信,配置MAC時前三位不要動固定:52:54:00後三位自己更改

例如:    

qemu-kvm -m 128 -cpu host -smp 2 -name "second" -drive file=/root/cirros-no_cloud-0.3.0-x86_64-disk.img,if=virtio,media=disk,format=qcow2,cache=writeback -nographic -net nic,macaddr=52:54:00:11:22:33 -net tap,ifname=vnet0.1,script=/etc/qemu-ifup    

到此一個隔離模型的虛擬網路就創建完成了


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 現在很多用戶被資料庫的慢的問題所困擾,又苦於花錢請一個專業的DBA成本太高。軟體維護人員對資料庫的瞭解又不是那麼深入,所以導致問題遲遲不能解決,或只能暫時解決不能得到根治。開發人員解決數據問題基本又是搜遍百度各種方法嘗試個遍,可能錯過診斷問題的最佳時機又可能嘗試一堆方法最後無奈放棄。 怎麼樣讓瑣事纏 ...
  • 1。 改表法。 可能是你的帳號不允許從遠程登陸,只能在localhost。這個時候只要在localhost的那臺電腦,登入mysql後,更改 "mysql" 資料庫里的 "user" 表裡的 "host" 項,從"localhost"改成"%" Sql代碼 1. mysql -u root -pvm ...
  • 最近發現網站不能訪問,原因資料庫伺服器磁碟剩餘空間沒了。再細查發現日誌文件占用了70%,收縮日誌文件失敗。 在網上查找原因,是沒有備份不能收縮日誌文件。 臨時解決的方式: 備份事務日誌,再收縮日誌文件。(完整資料庫備份後,也可以收縮日誌文件) 長久的解決方案: 制定維護計劃,定期備份資料庫,收縮日誌 ...
  • 正常情況下的分表,都是直接創建多個相同結構的表,比如table_1、table_2...最近碰到一個特殊需求,需要創建一個主表,所有分表的數據增刪改查,全部自動實時更新到主表,這個時候可以使用MRG_MyISAM引擎了。 首先創建主表`mygame_message_log`。然後創建分表: 然後將主 ...
  • 在前面的部分介紹了PL/SQL塊的基本編寫方法。 在SQL*plus 中編寫PL/SQL程式,併在SQL*plus 中執行它, PL/SQL塊的代碼就存放在SQL*plus的緩衝區中。如果在SQL*plus 中執行了其他的SQL語句或PL/SQL塊,緩衝區中就會存放新的代碼,原來的PL/SQL塊就會 ...
  • 說明:轉自,http://www.cnblogs.com/ycsfwhh/archive/2012/08/07/2626597.html 本人親測方法1有效,方法2待驗證 下載GPL版本安裝 MySQL Community Edition(GPL) Community (GPL) Downloads ...
  • oracle要直接對文件進行讀寫必須先創建一個DIRECTORY。 語法如下: 可以通過如下SQL查看已經創建的DIRECTORY 創建後如果要對該路徑下文件進行讀寫,必須授權。 代碼如下: 查詢DIRECTORY的讀寫許可權,SQL如下: 刪除DIRECTORY。 代碼如下 ...
  • 我們使用DDL的"CREATE USER"語句創建用戶,新的SQL用戶不允許訪問屬於其他SQL用戶的表,也不能立即創建自己的表,它必須被授權。可以授予的許可權包括以下幾組: 1.列許可權:和表中的一個具體列相關 2.表許可權:和一個具體數據表中所有數據相關 3.資料庫許可權:和一個具體資料庫中所有數據表相關 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...