我在我的机器上运行了几个 LXC 容器,其中一些容器在与主机共享的网络之外有自己的 IP 地址。此 IP 地址以及相应的网络掩码和网关由我的 ISP 提供给我。我使用 systemd 238 并尝试了以下配置 [1]:
[Match]
Name=enpXsY
[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1
IPForward=yes
[Route]
Destination=10.0.0.64/29
Gateway=10.0.0.65
在systemd-networkd
日志中我看到以下错误:Could not set route: Network is unreachable
,但我无法真正解释这一点。如果我不指定网关,内核可以很好地路由到该网络。因此,我假设它也能够通过同一接口将流量路由到网关。如果我在Destination=10.0.0.65/32
路由到之前指定了路由10.0.0.64/29
,以便亲自指导内核并解释如何到达该网络,这甚至不起作用。
更新:与此同时,我对主机的网络配置进行了重大更改,但这些是它配置的 IPv4 地址和路由 [1]:
# ip -4 address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: enpXsY: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
inet 192.168.0.2/24 brd 192.168.0.255 scope global enpXsY
valid_lft forever preferred_lft forever
4: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
inet 10.10.10.1/24 brd 10.10.10.255 scope global lxcbr0
valid_lft forever preferred_lft forever
# ip -4 route
default via 192.168.0.1 dev enpXsY proto static
192.168.0.0/24 dev enpXsY proto kernel scope link src 192.168.0.2
10.10.10.0/24 dev lxcbr0 proto kernel scope link src 10.10.10.1
[1]:出于隐私原因,我将实际 IP 地址转换为非路由网络中的类似地址。
答案1
在 systemd-networkd 日志中我看到以下错误:
Could not set route: Network is unreachable
,但我无法真正解释这一点。
这告诉你实际问题是什么。你需要将路由器置于分配给任意一个网络接口的 IP 地址的子网内。
您的 IP 地址为 ,192.168.0.2
子网掩码为24
。网关位于 ,192.168.0.1
应该位于 ,因为它位于子网内。
问题发生在此部分:
[Route]
Destination=10.0.0.64/29
Gateway=10.0.0.65
如果您没有其他 systemd-networkd 配置文件来指定具有 IP 地址的接口,则10.0.0.64/29
systemd-networkd 不知道如何到达 的网关10.0.0.65
。请注意,文件名会控制文件的处理顺序,因为它们在执行之前按词汇顺序排序。正如我上面所述,网关必须是下一跳这意味着它位于主机已知的特定子网内。