使 LXC 容器可以通过 ipv6 直接访问

har*_*arm 5 ubuntu routing ipv6 bridge lxc

首先,我有一个特殊的 IPv6 地址分配给我的专用服务器,只有 1。一个 ::1/128 一个。我可以为 eth0 分配地址(例如:::2/128、::3/128 等)。

现在我想在该服务器上运行 LXC 容器,但我希望它们成为一等公民,我希望它们拥有自己的 IPv6 地址。

带有 IPv4 的 LXC 工作正常。我可以启动一个容器,并从中 ping 世界。我有一个名为lxcbr0.

老实说,我不知道如何继续。在我的特定 LXC 配置中(“前缀”代表我分配的前缀):

lxc.network.ipv6 = prefix::3/128
lxc.network.ipv6.gateway = prefix::2 # iffy, not sure this is correct
Run Code Online (Sandbox Code Playgroud)

在主机上,我已将 sysctl 配置为使用转发:

net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.eth0.forwarding = 1
Run Code Online (Sandbox Code Playgroud)

现在我迷失了方向。我我需要为网桥分配一个 IP。我已经为它分配了前缀::2/128,这是我在上面的 LXC 配置中使用的。在“界面”中:

iface lxcbr0 inet6 static
        address prefix::2
        netmask 128
        # use arp proxy? Read that somewhere. 
        post-up /sbin/ip -6 neigh add proxy prefix::3 dev eth0 #container 1
        post-up /sbin/ip -6 neigh add proxy prefix::4 dev eth0 #container 2
Run Code Online (Sandbox Code Playgroud)

不用说这行不通。我可以启动容器并登录,但不能 ping6 任何东西。我也不能从主机 ping 容器。我知道有一些与路由有关的业务......?

当前状态的一些输出: Host 'ip -6 a':

4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2607:5300:60:714::1/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::ea40:f2ff:feed:106f/64 scope link 
       valid_lft forever preferred_lft forever
8: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 
    inet6 2607:5300:60:714::2/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::b07b:e3ff:fe33:22e7/64 scope link 
       valid_lft forever preferred_lft forever
18: vethPVJQ6M: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 fe80::fcb7:57ff:fe3c:bcd1/64 scope link 
       valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)

容器“ip -6 a”:

20: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2607:5300:60:714::3/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fe59:679f/64 scope link 
       valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)

主机'ip -6 r':

2607:5300:60:714::1 dev eth0  proto kernel  metric 256 
2607:5300:60:714::2 dev lxcbr0  proto kernel  metric 256 
2607:5300:60:7ff:ff:ff:ff:ff dev eth0  metric 1024 
fe80::/64 dev eth0  proto kernel  metric 256 
fe80::/64 dev lxcbr0  proto kernel  metric 256 
fe80::/64 dev vethPVJQ6M  proto kernel  metric 256 
fe80::/64 dev vethWT7OPQ  proto kernel  metric 256 
default via 2607:5300:60:7ff:ff:ff:ff:ff dev eth0  metric 1024 
Run Code Online (Sandbox Code Playgroud)

容器“ip -6 r”:

2607:5300:60:714::2 dev eth0  metric 1024 
2607:5300:60:714::3 dev eth0  proto kernel  metric 256 
fe80::/64 dev eth0  proto kernel  metric 256 
default via 2607:5300:60:714::2 dev eth0  metric 1024 
Run Code Online (Sandbox Code Playgroud)

主机运行 Ubuntu 15.04,LXC 版本 1.1.2。

我将不胜感激一些指点!

小智 2

在我看来,你在这里混淆了许多不同的事情。首先,我怀疑您服务器以太网端口上的网络掩码实际上是/128。我怀疑是其他原因(也许是 /64),并且您与其他一些客户处于共享网段。

从“ip -6 a”命令的输出来看:

4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2607:5300:60:714::1/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::ea40:f2ff:feed:106f/64 scope link 
       valid_lft forever preferred_lft forever
8: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 
    inet6 2607:5300:60:714::2/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::b07b:e3ff:fe33:22e7/64 scope link 
       valid_lft forever preferred_lft forever
18: vethPVJQ6M: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 fe80::fcb7:57ff:fe3c:bcd1/64 scope link 
       valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)

我想说接口上的 /128 是一个错误。您的前缀似乎是 2607:5300:60:714::/64 (最有可能)。

假设这是正确的,那么您需要按如下所示设置您的接口文件(根据需要添加您的 IPv4):

auto lxcbr0
iface lxcbr0 inet6 static
  bridge_ports eth0
  bridge_fd 0
  address 2607:5300:60:714::1
  net mask 64
  gateway 2607:5300:60:7ff:ff:ff:ff:ff
Run Code Online (Sandbox Code Playgroud)

注意:目前尚不清楚如何访问 2607:5300:60:7ff::/64 来访问默认网关。了解您的提供商希望您如何配置网络或直接查看他们提供的任何文档将非常有用。从这里得出的最佳猜测是 2607:5300:60:714::/64 网络与 2607:5300:60:7ff::/64 位于同一链路上。2607:5300:60:7ff::/64 用于提供商的基础设施。目前尚不清楚您是否获得了整个 2607:5300:60:714:/64 或者是否与同一链接上的其他客户共享。

假设您可以自由地分配该范围内的地址,那么您真正需要做的就是将容器连接到同一个 lxcbr0 接口,并将每个容器的地址分配给该桥接口。

同样,这只是根据您提供的数据的最佳猜测。如果不知道提供商的实际配置,就无法确定。