qemu/KVM/libvirt 使用者模式網路:VM 作為非 root 使用者,無 root 網路需要什麼?
我已經使用 libvirt 在 KVM/qemu 中執行了幾個虛擬機,並且在大多數情況下,網路都可以正常工作。
現在,當虛擬機以非 root 使用者身份執行時,網路已經停止工作。我在 libvirt 和類似的文件頁面中幾乎沒有找到有用的資訊——大多數人似乎認為我希望以系統使用者身份執行 VM,但事實並非如此。
那麼:以非 root 身份執行具有網路(例如在來賓中進行 web 瀏覽)的 VM 的先決條件到底是什麼?
我有,在
myvm.xml
:94 <interface type='user'> 95 <mac address='52:54:00:82:f1:27'/> 96 <model type='virtio'/> 97 <link state='up'/> 98 <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> 99 </interface>
從訪客內部可以看到該介面,啟用 DHCP 客戶端會提供地址 10.0.2.5。預設路由是 10.0.2.2,我可以從網路內 ping 通。除此之外的任何事情都失敗了。
我的主機沒有網橋(或 libvirtd 的任何設備),但對於 user-libvirtd 中的使用者模式 NAT,我不需要它,對吧?從技術上講,網路訪問來自 user-libvirtd?
執行 libvirtd 的使用者位於組
kvm
和libvirt
. 我需要哪一個來做什麼? 後者對於執行 VM 不是必需的,對我的問題沒有任何影響。我已
libvirtd
在主機上啟用並以 root 身份啟動。這提供了一個網橋virbr0
,但似乎我的非 root 使用者無法訪問它,所以這沒有任何區別。 我需要libvirtd
嗎?請注意,此 VM 可能無法以 root 身份執行,因此這對我來說不是解決方案。使用者可能沒有提升的權限或訪問同一主機上其他人的 VM。
哇!我們來了第三輪!讓我們看看我們能否最終實現它。開始。
首先,我的虛擬機實際上在qemu:///system 中,而不是在 qemu:///session 中。因此,即使我不必輸入我的 root 密碼,VM 也必須以 root 身份執行(?!他們為什麼這樣做?!)。所以,在這裡嘗試在 qemu:///session 中創建一個虛擬機。(我在執行這些步驟時正在輸入此內容,以查看是否可以重現您的問題並修復它,所以如果在我去的時候它看起來有點計劃外,那是因為它是。)
所以,首先我進入 virt-manager,並開始建立與 QEMU/KVM 的新連接,而不是預設連接 - 這次我使用“QEMU/KVM 使用者會話”。當我在 virt-manager 中選擇它時,它告訴我“網路選項非常有限”。所以這看起來像問題開始的地方。讓我們看看我能不能繞過它。
建立連接後,現在我將在其中創建一個新的 KolibriOS 虛擬機,看看會發生什麼。
因此,在 VM 創建期間,virt-manager 不再看到包含我的 VM 安裝程序的 ISO 文件目錄。因此,我將添加一個指向我的 ISO 文件的新儲存池,以便我可以實際製作 VM。(目錄:/home/user/ISO 文件)
好的,現在我可以訪問我的 ISO。現在,我將使用我的“kolibri.iso”文件製作新的 KolibriiOS VM。(作業系統類型:通用預設值,CPU 數量:1,記憶體:256 MB。Kolibri 是一個微型作業系統。)
我不會給虛擬機任何磁碟儲存,因為 KolibriOS 被設計為直接從 ISO 中使用。
現在,我終於到了最後,我注意到一件有趣的事情。我可以選擇使用使用者模式網路或共享設備名稱。我將從使用者模式網路開始,如果這不起作用,我們將再次嘗試使用共享設備“virbr0”,看看會發生什麼。
我點擊了完成按鈕。現在我的虛擬機應該會在短時間內啟動。
好的,它啟動了,我得到“您現在已連接到網路”。似乎很有希望。
現在我打開了 WebView,我要去“Kolibri Stuff”看看會發生什麼。如果可行,我將看看我是否可以訪問 Google。
“Kolibri Stuff”按鈕起作用了——現在我看到了“http://store.kolibri-n.org/en.html”頁面。現在讓我們試試Google。
果然,有Google,還有它的隱私政策連結。讓我們看看如果我點擊它會發生什麼。
好吧,很明顯,WebView 不明白這個頁面到底在說什麼,但我確實在我的螢幕上看到了一大堆令人費解的 JavaScript,所以很明顯它下載了一些東西。讓我們試試 NSInstall。
好的,它必須下載 NetSurf 應用程序。如果它可以下載,我認為網路正在工作。
下載完畢。現在讓我們再次嘗試Google。
好吧,NetSurf 不喜歡 Google。讓我們試試 Dedoimedo。這基本上是一堆 Linux 評論和類似的東西。
最終結論 - NetSurf 很臭!我要回到 WebView。(http://www.dedoimedo.com/index.html)。最後!它開了!
因此,由於我可以在我的使用者模式 VM 中成功瀏覽,我認為這是可行的。“virsh -c qemu:///session list”現在顯示我的“UserKolibriOS”VM 正在執行。這是它顯示的內容:
Id Name State ------------------------------- 1 UserKolibriOS running
“virsh -c qemu:///system list”現在顯示:
Id Name State --------------------
因此,我有一個使用者模式 VM 可以正常訪問 Internet。現在,讓我們再試一次,做同樣的事情,但這次使用 Lubuntu 18.04,以便我們獲得 virtio 網路適配器。(我正在做這一系列測試,因為我想在將大量配置文件轉儲給你之前確保一切正常。)
這是我的 Lubuntu 18.04 VM 配置:2 個 CPU,1024 MB RAM,使用者模式網路,沒有虛擬硬碟。
好的,VM 正在啟動。讓我們看看發生了什麼。
虛擬機已啟動。它似乎認為它已連接到網路。我要打開Google搜尋“藍屏當機”,看看會發生什麼。
哇!我的 VM 中的 Internet 似乎比我的物理系統上的 Internet 執行得更快。我可以通過搜尋在維基百科上找到“藍屏當機”,然後打開它。我現在正盯著我的 VM 視窗上皺著眉頭的 Windows 10 的相對嚴峻的畫面。因此,我得出的結論是,使用者模式網路對於 VM 中的 Web 瀏覽來說工作得很好。現在,讓我們看看我的配置在做什麼。
首先,我注意到當我啟動 KolibriOS VM 和啟動 Lubuntu 18.04 VM 時,我的螢幕上沒有出現“connected to tun vnet0”。
現在,這是網路適配器配置,首先是 KolibriOS:
<interface type="user"> <mac address="52:54:00:6f:ab:33"/> <model type="e1000"/> <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x0"/> </interface>
現在,這是 Lubuntu 18.04 的樣子:
<interface type="user"> <mac address="52:54:00:7d:63:ba"/> <model type="virtio"/> <address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/> </interface>
所以現在我的配置看起來和你的一樣,除了我的配置缺少關於“link state=“up””的部分。然而,我的網路有效,而你的無效。唔…
我現在能想到的就是你的虛擬機作業系統中的網路設置一定不能正常工作,你的虛擬機本身必須配置得很好。
最後,我將使用共享設備“virbr0”執行最後一項測試 - Lubuntu 18.04。讓我們看看它是否適用於網橋,即使它是使用者模式 VM。
徹底失敗!當我嘗試它時,我的螢幕上出現了這個混亂:
Unable to complete install: 'internal error: /usr/lib/qemu/qemu-bridge/helper --br=virbr0 --fd=29: failed to communicate with bridge helper: Transport endpoint is not connectedH001F007F stderr=failed to parse default acl file`/ -etc/qemu/bridge.conf''
什麼?!顯然它不想連接到我的網橋。我認為你是對的,橋接網路根本不適用於使用者模式 VM。但是使用者模式網路確實有效,因此沒有必要。
我確實注意到你給我的關於使用者模式網路資訊的連結上的一些東西。它有一個指向關於 QEMU 網路的頁面的連結,該頁面以使用者模式網路結束。它最後說“這個選項確實提供了一個非常有用的預設設置,因為來賓作業系統將具有基本上透明的網路訪問,幾乎就像在主機上執行的任何其他應用程序一樣。” (這是在“https://people.gnome.org/~markmc/qemu-networking.html”。) QEMU 真的允許連接到網際網路嗎?還是以某種方式被阻止了?不確定是否可以在 Linux 中阻止單個程序訪問 Internet,但也許可以。如果 QEMU 無法連接,VM 將無法連接。
所以,最後的結論 - 我認為這是虛擬作業系統的問題,而不是虛擬機的配置問題。試試 Lubuntu 18.04 - 它立即生效,開箱即用。你可以從這裡下載它:“https://lubuntu.me/downloads/”。看看網路是否在那里工作。除此之外,看起來你做的一切都是正確的。
編輯 - 這個問題最終通過在虛擬作業系統的“/etc/resolv.conf”中編輯一些東西來解決。這適用於 Ubuntu 和 Arch Linux。使用者模式網路現在可以工作。謝謝內德64!(有關詳細資訊,請參閱下面 Ned64 的評論。)
希望這可以幫助!