題 KVM虛擬機上的無線網橋


我有一個連接到無線路由器的VM主機(KVM)。我希望虛擬客戶與主機位於同一個廣播域;即,從路由器的DHCP接收他們的IP。 (=第2層橋接)

根據 KVM文檔 不可能: Important Note: Unfortunately, wireless interfaces cannot be attached to a Linux host bridge, so if your connection to the external network is via a wireless interface ("wlanX"), you will not be able to use this mode of networking for your guests.  (無論如何我試過了,事實上,它不起作用:))

互聯網上有一些資源建議如何建立路由界面,它對我有用。但它是第3層,並且客戶駐留在不同的IP子網中。

但是,我過去使用VirtualBox - 而且 無線橋接工程 那裡。

我發現了 超級用戶的問題 關於VirtualBox,這解釋了: Many virtual machine programs come with a special "bridge" or "filter" driver which attaches to existing network interfaces and allows the program to send and receive packets (Ethernet frames) directly

這正是我想要的結果 - 採用以太網橋接的KVM虛擬化(第2層)。 可悲的是,似乎libvirt / KVM不包括諸如驅動程序。但我認為它可以用其他一些Unix工具實現。


4
2017-12-30 17:33


起源




答案:


官方文件過於悲觀。和往常一樣,聰明的人已經弄清楚了:你找到(冗長的)指令來做到這一點 這裡。我試過了,這很簡單。

編輯:

我不確定為什麼在上面提到的上面提到的第一個解決方案對你不起作用,它對我有用而你沒有提供額外的信息。不過,您可能希望考慮另一種解決方案, 這裡,由Bohdi Zazen提供,它使用proxy-arp。我從來沒有嘗試過這個(sol.n.1為我工作,所以重點是什麼),但你可以給它一個機會。


2
2017-12-30 18:06



我也看過那篇文章。的確,他很聰明。但是,第一種方法(brctl)拒絕使用我的wlan0接口。該 Alternative setup 適用於我,但它是第3層 - 即,它創建了2個連接在一起的不同網絡,但虛擬客戶網絡與主機< - >路由器網絡不同。最後,我不明白是怎麼回事 very dirty hack 使用相同的IP子網應該工作;如果連接到路由器網絡的設備嘗試聯繫到其中一個客戶端,它會將流量發送到路由器;但路由器不知道盜版VM子網...... - Zvika
@Zvika編輯我的回答回复你的評論。 - MariusMatutiae
請注意,在他的文章的最後他顯示了來自Windows7物理機的ping(ip .103) pinging the virtual adapter with .161 address - 但是他 沒有 顯示對虛擬客戶機的ping(ip .168) - 因為它是 無法訪問 到Windows機器。 - Zvika
實際上,第一個解決方案與官方文檔對eth0橋接的建議非常相似。 Dedoimedo自己說 For instance, on some laptops, Wireless adapters do not really support this mode of work. 我認為這是被認為是官方不支持的原因。我現在不在那台機器附近,我不記得確切的錯誤信息,但是 brctl addif br0 wlan0 失敗。感謝Bodhi Zazen參考,我會嘗試並更新 - Zvika
謝謝。你給我的Bodhi Zazen的鏈接非常有幫助。雖然我沒有按原樣使用他的解決方案,但代理ARP的想法就是我所尋求的。希望我能寫一篇文章來解釋我使用的方法--Dedoimedo和Bodhi Zazen解決方案的混合物。 - Zvika


我和Zvika的要求完全相同。順便說一下,他關於這個主題的帖子很棒。 我找到的替代方案是:在KVM中配置一個路由網絡,範圍為192.168.1.160/28(所以,dedoimedo第三個解決方案,“臟黑客”)然後,而不是創建一個ARP代理Zvika的方式,我使用parprouted ,在Ubuntu / Mint中作為具有相同名稱的包提供。使用parprouted,您只需輸入:

sudo parprouted virbr1 wlan0

etvoilà,如果該網絡位於NAT後面,則流量以往/來自客戶VM和192.168.1.0/24網絡中的其他設備以及來自/來自外部系統(例如,因特網站點)的方式工作。

這很難,無論如何,我花了幾天時間搜索這個主題,沒有任何消息來源像Zvika的博客條目那樣清晰!


2
2018-06-27 13:35



值得注意的是,此解決方案支持 只有單播 和 parprouted 非常過時了。 - Daniel B


它不是“無線適配器”不支持橋接。它是接入點和WiFi主機到ap協議。建立連接時,您需要驗證適配器的MAC。該協議有三個MAC的空間:立即認證的參與者和第三個 - 用於AP後面的任何終點。因此,WiFi移動台可以將數據包發送到任何MAC,但只使用自己的MAC作為源地址。您無法使用經過身份驗證的其他源MAC發送任何數據包 - AP將拒絕該數據包。

還有能夠真正橋接的WiFi協議,稱為WDS。這是通過允許分組中的四個MAC地址來完成的:兩個 - 立即認證的參與者,即橋接AP,以及其分組正由WiFi橋傳輸的兩個端點(源和目的地)。

在這裡閱讀 http://wiki.mikrotik.com/wiki/Manual:Wireless_Station_Modes#802.11_limitations_for_L2_bridging 對這個。

很可惜WDS沒有很好的標準化,每個供應商都以不可比的方式自行評估它。只有當WiFi聯盟更加......以用戶為導向的組織時,他們才能更好地完成規範,我們將能夠在任意供應商解決方案之間,甚至客戶機和無線網絡之間進行無線網絡橋接!

代理ARP不是L2解決方案,它是ROUTING解決方案,即L3。它欺騙雙方所以你可以在這里和那裡擁有相同的子網,但這仍然是路由,順便說一下,這有點混亂網絡。請參閱任何計算機上的MAC表以查看其中的內容:“那一側”的所有MAC都是我們的proxy-arp路由器的MAC。

對於真正的L2解決方案,您可以嘗試使用ebtables實用程序配置的linux“MAC NAT”功能。由於這是我所知道的唯一真正的L2解決方案,我傾向於認為VirtualBox使用它。但是,它基本上看起來像proxy-arp。您當然應該能夠使用KVM和libvirt實現這一點。


1
2017-12-06 18:46