靜態 ipv6 路由到 lxc 容器
我想將一個 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
:介面上的問題仍然存在/64
。FORWARD
問題是,當使用從一個(虛擬)介面到另一個(物理)介面的靜態路由時,沒有數據包進入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。