我可以避免在桥接 Xen 网络设置中每个网络丢失三个 IP 吗?

我可以避免在桥接 Xen 网络设置中每个网络丢失三个 IP 吗?

大约一个月前,我问过超级用户的问题。那里给出的答案当然有效,但我遇到了一个我以前没有想到的问题。

我正在运行的设置(基于前面提到的答案)是

auto eth0
iface eth0 inet static
    address a.b.c.d
    netmask 255.255.255.0
    network a.b.c.0
    broadcast a.b.c.255
    gateway a.b.c.254

auto xenbr0
iface xenbr0 inet static
    bridge_ports none
    address e.f.g.1
    netmask 255.255.255.0

然后,我将配置 domU 使用数据中心分配给我的范围内的地址。具体来说,该范围将是 efg24/29,为 domU 提供 8 个可用的 IP 地址。网关将是桥接 IP,数据包从这里通过 eth0 路由到外部世界。这很完美。

几天前我意识到的问题是,domU 永远无法访问诸如 efg1 之类的地址,因为那是桥本身。但是,如果其中一个 domU 实际上需要访问 efg1(实际的外部 IP),该怎么办?

因此,我开始将所有内容移到分配给我的网络内。问题是,使用 /29 块,我只能为 domU 保留 5 个可用的 IP 地址:

auto xenbr0
iface xenbr0 inet static
    bridge_ports none
    address e.f.g.25
    netmask 255.255.255.248

我的网络中总是丢失三个地址(一个用于“网络”,一个用于网桥本身,一个用于广播地址)。我实际上没有定义网络和广播地址,但ifconfig仍然显示广播地址为 31(网络中的最后一个 IP),我无法以任何有效方式将网桥放置在地址 24 上。对于 /30 网络,问题会变得更加严重,在这种情况下,我只有四个 IP 中的一个可用于 domU(是的,我也有这样的网络)。

因为我是按 IP 地址付费的,所以我想尽可能高效地使用它们。然后我开始研究 Xen 的路由。我现在想做的是使用vif-routenetwork-route/etc/xen/xend-config.sxp进行如下设置:

     +-----------------------------+        +-------------+
     |            dom0             |        |     domU    |
     |                             |        |             |
-------eth0                vif1.0--------------eth0       |
     | a.b.c.d              ????   |        |  e.f.g.24   |
     |                             |        |             |
     +-----------------------------+        +-------------+

这样,数据中心就会将我的 IP 的数据包发送到 dom0 的 eth0,dom0 会将其路由到正确的 vif,然后将其交给 domU 的 eth0。

无论我怎么尝试,似乎都无法让它工作,没有任何有意义的错误消息来开始调试。两天不停地谷歌搜索并没有帮助我,我现在有点茫然。

我是不是看错了,还是我配置错了?这样的设置可行吗?如果可行,我做错了什么?

答案1

我设法让它工作了。它没有我想要的那么干净,但至少它能用。

我的解决方案基本上是启动一个带有 /24 网络掩码且没有 IP 地址的网桥。当网桥启动时,我手动为分配给我的服务器的 /29 IP 块添加路由。在 domU 中,我启动一个带有正确 IP 和 /24 网络掩码的接口,没有网关。当接口启动时,我手动添加一个到我的 dom0 的 eth0 地址的路由,并将其设为默认网关。当然,dom0 设置为在网络之间路由 IP 数据包。

dom0 的/etc/network/interfaces

### The primary adapter ###
# These settings are provided by the dServer host
auto eth0
iface eth0 inet static
        address a.b.c.d
        netmask 255.255.255.0
        network a.b.c.0
        broadcast a.b.c.255
        gateway a.b.c.254

### Network bridges ###
auto xenbr0
iface xenbr0 inet manual
        bridge_ports none
        network e.f.g.0
        netmask 255.255.255.0
        gateway a.b.c.254

### Static routes ###
# No route for e.f.g.0/24 was automatically set
# I assume that's due to the bridge not having an IP address assigned
up ip route add e.f.g.h/29 dev xenbr0
down ip route delete e.f.g.h/29

domU 的/etc/network/interfaces

# The primary network interface
auto eth0
iface eth0 inet static
        address e.f.g.h
        netmask 255.255.255.0

# Static routing
up ip route delete e.f.g.0/24
up ip route add a.b.c.d dev eth0
up ip route add default via a.b.c.d
down ip route delete default via a.b.c.d
dow ip route delete a.b.c.d

确保已设置此项以启用数据包路由/etc/sysctl.d/xen-routing.conf(文件名任意,但必须以 .conf 结尾)

net.ipv4.ip_forward=1

完成此操作后,您可以通过重新启动来启用配置,也可以使用以下方式在线执行配置:

sysctl -w net.ipv4.ip_forward=1

相关内容