大约一个月前,我问过这超级用户的问题。那里给出的答案当然有效,但我遇到了一个我以前没有想到的问题。
我正在运行的设置(基于前面提到的答案)是
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-route
和network-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