我在笔记本电脑上使用 libvirt 运行一些容器。
默认情况下,它使用default
libvirt 提供的网络,容器具有 192.168.122.0/24 网络。
我想要实现的目标是让容器与我的笔记本电脑位于同一网络中(即 192.168.0.1/24)。
这是我所做的:
#> ip link add type veth // create a pair of veth
#> iw dev wlan0 set 4addr on // allow WDS mode on my wifi
#> ifconfig veth0 up // up veth0 interface
#> brctl addbr br0 // create br0
#> brctl addif br0 wlan0 // insert wlan0 in the bridge
#> brctl addif br0 veth0 // insert veth0 in the bridge
#> ifconfig br0 192.168.0.4/24 // assign the bridge the approriate ip
#> ifconfig wlan0 0.0.0.0 // free wlan0 ip
当我应用该功能时,我的笔记本电脑却无法连接互联网;似乎它无法获取 IP 地址。
操作系统:Fedora 18
WiFi 卡:Intel® Centrino® Advanced-N 6235
Wifi 驱动程序:iwlwifi
modinfo iwlwifi output
是这里。
我遗漏了什么导致 wlan0 最终没有 IP 地址并因此无法连接?
答案1
我本来没有看到这个消息。有一个解决方案。
首先,我要说的是,我不想使用过时的命令:iproute2suite 包含所有这些命令,包括设置虚拟接口(我们曾经不得不使用 openvpn 或 tunctl 或 uml-utilities 来实现)和创建网桥。如果你不知道如何使用知识产权, 开始了:
ip tuntap add tap0 mode tap user root
ip link set tap0 up
ip link add br0 type bridge
ip link set tap0 master br0
ip link set eth0 master br0
ip addr add 10.173.10.1/24 dev br0
ip link set br0 up
通过这组命令,我们创建了一个名为tap0,然后一座桥叫br0,然后奴役eth0和tap0连接到网桥,我们为其分配 IP 地址 10.173.10.1,然后将其全部启动。需要三个单独的实例来启动接口(用于 tap0、eth0 和 br0)。
至于你的问题。实现此问题的诀窍是使用代理 arp,它允许你的电脑(不是您的虚拟机/Linux 容器/网络命名空间)来回答 ARP 查询他们的代替。
换句话说,通过在硬件接口和虚拟接口之间使用 IPv4 转发,您认为可以将 VM/LXC/NNS 连接到 LAN,就像它是物理接口一样,但事实并非如此:您忘记了绝对基本的 ARP 流量,而这才是真正允许 LAN 运行的。因此,问题是:如果我正确转发 IPv4 流量,我如何转发 ARP 流量,以便我的 VM/LXC/NNS 正常工作?诀窍是使用代理 arp。
完整答案在Bohdi Zazen 的博客,标题颇具启发性:桥接无线网卡。他使用了一个过时的软件包,uml 实用程序,通过命令创建虚拟接口隧道:这是他使用的唯一命令uml 实用程序,这样你就可以放心地忽略下载软件包,并使用我上面写的命令创建一个轻敲或者屯接口,无论您喜欢哪个,只需相应地修改命令即可。然后为您的 LXC 创建一个 veth 对,现在在 tap0 和 veth0 之间创建一个桥接。这个桥称为 br0,是您必须代理arp而不是 Bohdi Zazen 描述的简单的 tap0 接口。
答案2
我写过使用nat bridge
指南lxc
这是一个卓越的解决方案并且可与openvpn
&配合使用dhcp
。
我还写过带无线和lxc
. 这有点像菩提禅经s +Debian Wiki 注释. 只要您不使用 ,此主机桥就可以工作openvpn
。