使 LXC 容器可透過 ipv6 直接存取

使 LXC 容器可透過 ipv6 直接存取

首先,我為我的專用伺服器分配了一個特殊的 IPv6 位址,即 1. A ::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

在主機上,我已將 sysctl 配置為使用轉送:

net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.eth0.forwarding = 1

現在我迷失了方向。我思考我需要為網橋指派一個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

不用說,這是行不通的。我可以啟動容器並登錄,但無法 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

容器'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

主機'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 

容器'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 

主機運行Ubuntu 15.04,LXC版本1.1.2。

我將不勝感激一些指點!

答案1

在我看來,你在這裡混淆了許多不同的事情。首先,我懷疑您伺服器乙太網路連接埠上的網路遮罩實際上是/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

我想說接口上的 /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

注意:尚不清楚如何到達 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 接口,並將每個容器的位址分配給該橋接口。

同樣,這只是根據您提供的數據的最佳猜測。如果不知道提供者的實際配置,就無法確定。

相關內容