Ipv6

靜態 ipv6 路由到 lxc 容器

  • February 20, 2015

我想將一個 ipv6 ip 路由到一個 lxc 容器,但數據包沒有被轉發。我不想將 lxc 容器橋接到 eth0,也不想使用自動配置。此外,我只有一個/64主機,所以我需要為虛擬機使用一個較小的網路。我現在選擇了一個/112,如果需要的話我可以使用更大的網路。

我想問題是路由,而不是容器。這是我的設置:

主持人:

# the host already has working ipv6, empty ip6tables FORWARD table with policy ACCEPT
ip -6 addr add prefix::1/112 dev lxcbr
ip -6 route show|grep prefix
# prefix::/112 dev lxcbr  proto kernel  metric 256
sysctl net.ipv6.conf.eth0.forwarding
# net.ipv6.conf.eth0.forwarding = 1
sysctl net.ipv6.conf.lxcbr.forwarding
# net.ipv6.conf.lxcbr.forwarding = 1

虛擬機:

ip -6 addr add prefix::2/112 dev eth0
ip -6 route add default via fe80:: dev eth0 # routing via prefix::1 does not work either
ip -6 route show
# prefix::/112 dev eth0  proto kernel  metric 256 
# fe80::/64 dev eth0  proto kernel  metric 256 
# default via fe80:: dev eth0  metric 1024

工作(虛擬機):

ping6 prefix::1 # host

工作(主持人):

ping6 prefix::2 # vm

不工作(虛擬機):

ping6 google.com
# PING google.com (2a00:1450:4001:805::1007): 48 data bytes
# --- google.com ping statistics ---
# 7 packets transmitted, 0 packets received, 100% packet los

主機上的 tcpdump:

tcpdump -i lxcbr icmp6
# 13:20:44.088814 IP6 prefix::1 > fra07s32-in-x07.1e100.net: ICMP6, echo request, seq 0, length 56
# 13:20:45.089268 IP6 prefix::1 > fra07s32-in-x07.1e100.net: ICMP6, echo request, seq 1, length 56
# [...]
tcpdump -i eth0 icmp6
# [no output]

ip6tables-A FORWARD -j LOG也不會記錄任何數據包。

編輯:因為每個人都抱怨網路小於/64:介面上的問題仍然存在/64FORWARD問題是,當使用從一個(虛擬)介面到另一個(物理)介面的靜態路由時,沒有數據包進入iptables 隊列。

具有較小網路的設置是在其工作時希望擁有的,因為我的提供商希望為更多網路支付相當大的費用(接近伺服器租金的 50%)。但是對於測試,如果它有助於測試,我可以使用整個/64或大網。fd/8

我讓它工作了……但它仍然很奇怪。

為“全部”設置轉發,然後為每個單獨的介面禁用它:

cd /proc/sys/net/ipv6/conf/
echo 1 >all/forwarding;for i in */forwarding;do test $i = all/forwarding || echo 0 > $i;done

相反(將所有/轉發設置為 0 並將每個介面的轉發設置為 1)不起作用。

另一個有趣的問題:有時您需要在將介面添加到網橋後添加路由以使其工作,與此處相同的問題: https ://www.rivy.org/2013/02/ipv6-ping-sendmsg-network-關閉/

感謝 jeff-loughridge 提供的 docker 連結,本方法的第一部分讓我得到了這個解決方案。

在我結束問題之前,我仍在調查這裡到底發生了什麼(以及它是否繼續工作)。

我不會在生產環境中使用您的設置。正如其他人所提到的,拆分 /64 將產生意想不到的影響。如果您無法從提供商處獲得更多地址,我建議您使用 NDP 代理來允許 /112 中的容器訪問 IPv6 網際網路。您可以使用 NDP 代理守護程序或在命令行創建靜態條目。

我在此處詳細描述瞭如何使用 docker 執行操作。同樣的邏輯也適用於 lxc。

引用自:https://serverfault.com/questions/654981