如何设置 xen 桥?

如何设置 xen 桥?

我一直在阅读各种页面关于如何为 xen 设置网络。不幸的是,它们都没有完整的示例配置。它们清楚地显示了 xenbr0 部分应该是什么样子,但没有说明在提到以下内容后应如何更改 eth0:

注意!桥接设备的 IP 配置应替换底层接口的 IP 配置,即从 eth0 中删除 IP 设置并将其移动到桥接接口。eth0 将纯粹作为桥接的物理上行链路,因此它不能有任何 IP(L3)设置!

我尝试了许多配置,但都失败了(运行 /etc/init.d/networking restart 后,没有正常的网络访问,也无法 ssh 进出)。

以下是我的当前配置:

auto lo
iface lo inet loopback

auto xenbr0
iface xenbr0 inet static
    bridge_ports eth0
    address 10.0.0.3
    netmask 255.0.0.0
    broadcast 10.255.255.255
    gateway 10.0.0.1

auto eth0
iface eth0 inet manual

也许这是正确的,我只需要设置一些 iptables 转发规则?我尝试运行该命令sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT,但收到一条错误消息,提示“--physdev-is-bridged 不是可识别的选项”。

重新启动网络的调试输出给出以下输出:

Reconfiguring network interfaces...
Waiting for xenbr0 to get ready (MAXWAIT is 32 seconds).
RTNETLINK answers: No such process
Failed to bring up xenbr0
ssh stop/waiting
ssh start/running, process 3775

我已经检查 xenbr0 是否已经存在,因为当我尝试创建具有该名称的网桥时,brctl 告诉我无法创建,因为已经存在一个网桥。

答案1

最后,我最终只是创建了一个接口,并使用一些 iptables 规则通过它转发数据包,这对我来说似乎很有效。这并没有使用所有教程似乎都建议的“桥接”选项,所以我不知道是否存在致命缺陷?

auto lo
iface lo inet loopback


auto xenbr0
iface xenbr0 inet static
        bridge_ports none
        address 192.168.2.1
        netmask 255.255.255.0
        network 192.168.2.0
        broadcast 192.168.2.255
        gateway 10.0.0.3


# The primary network interface
auto eth0
iface eth0 inet static
        address 10.0.0.3
        netmask 255.0.0.0
        network 10.0.0.0
        broadcast 10.255.255.255
        gateway 10.0.0.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 8.8.8.8

您需要编辑 /etc/sysctl.conf 并取消注释以下行:

net.ipv4.ip_forward=1 

然后需要创建一个脚本来编辑 iptables 来转发数据包:

sudo /sbin/iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
sudo /sbin/iptables --append FORWARD --in-interface xenbr0 -j ACCEPT
return 0

然后需要确保该脚本被rc.local文件调用:

sudo vi /etc/rc.local

添加以下行:

/bin/sh <path-to-script-you-just-created-here>

然后重新启动以使所有设置生效。

您可能注意到,我将其设置为虚拟机使用 192.168.2.x 地址子网,而外部局域网位于 10.xxx,这可能与大多数人想要的不同,因此您必须根据自己的个人需要对其进行编辑。


更新
后来我意识到缺乏桥接意味着我无法从网络外部访问我的虚拟机(即我无法直接从家里 ssh 进入它们,或者通过它们运行网站等)

使用如下网络配置有效:

# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto xenbr0
iface xenbr0 inet static
        address 23.29.115.142
        netmask 255.255.255.248
        network 23.29.115.136
        broadcast 23.29.115.143
        gateway 23.29.115.137
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0

(从此处复制)

我猜是这些额外的桥接选项让它起作用了,或者可能是接口在文件中列出的顺序(这次是桥接之前的 eth0)

答案2

首先定义 eth0, 没有设置网关和 IP。(否则,当系统尝试为接口创建路由时,您将遇到“RTNETLINK 答案:文件存在”错误,因为网桥将尝试创建具有相同优先级和网关的路由,并且它不够智能,无法意识到它们是相同的。)

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto xenbr0
iface xenbr0 inet static
    address 192.168.1.10
    netmask 255.255.255.0
    gateway 192.168.1.1
    bridge_ports eth0
    #allow-hotplug xenbr0 #Uncomment if using vSwitches

或者,你的网桥可以使用 DHCP:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto xenbr0
iface xenbr0 inet dhcp
    bridge_ports eth0
    #allow-hotplug xenbr0 #Uncomment if using vSwitches

完成后,重新启动。否则,由于您一直在更改eth0但未设置新 IP,即使您使用命令/重新启动网络,您的网桥也可能无法正常启动ifup。这是因为eth0可能会意外保留其 IP 地址。

最后,配置客户操作系统的网络接口,就像它是您网络上的任何其他物理主机一样。(对于示例 1,您可以使用 192.168.1.11。)此时,您网络上的其他设备应该能够访问客户机。

ping 192.168.1.11 

不需要 iptables 或 IP 转发 (sysctl.conf)。需要 STP仅有的如果您的网络支持 STP 并且您需要避免第 2 层网络环路,并且您不想手动处理它。(即小型网络不需要 bridge_stp、bridge_fd 或 bridge_maxwait。)

相关内容