為 OpenVZ 容器分配 IP
我最近給自己買了一台物理伺服器,我正在嘗試創建具有其 IP 的容器。
物理機同時具有 IPv4 和 IPv6 地址。我可以訪問另一個 IPv4 和一些我想分配給容器的其他 IPv6 地址。我設法分配地址如下:
# vzctl set 101 --ipadd 144.76.195.252 --save
我可以從物理機 ping 到機器,但不能從外部世界。這也適用於我分配的 IPv6。
這是物理機的 ifconfig:
eth0 Link encap:Ethernet HWaddr d4:3d:7e:ec:e0:04 inet addr:144.76.195.232 Bcast:144.76.195.255 Mask:255.255.255.224 inet6 addr: 2a01:4f8:200:71e7::2/64 Scope:Global inet6 addr: fe80::d63d:7eff:feec:e004/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:217895 errors:0 dropped:0 overruns:0 frame:0 TX packets:16779 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:322481419 (307.5 MiB) TX bytes:1672628 (1.5 MiB) venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet6 addr: fe80::1/128 Scope:Link UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1 RX packets:12 errors:0 dropped:0 overruns:0 frame:0 TX packets:12 errors:0 dropped:3 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1108 (1.0 KiB) TX bytes:1108 (1.0 KiB)
這是 OpenVZ 容器的 ifconfig:
# ifconfig venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:127.0.0.2 P-t-P:127.0.0.2 Bcast:0.0.0.0 Mask:255.255.255.255 inet6 addr: 2a01:4f8:200:71e7::3/64 Scope:Global UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1 RX packets:12 errors:0 dropped:0 overruns:0 frame:0 TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1108 (1.0 KiB) TX bytes:1108 (1.0 KiB) venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:144.76.195.252 P-t-P:144.76.195.252 Bcast:144.76.195.252 Mask:255.255.255.255 UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
我需要做什麼才能從外部訪問容器?我能忘記什麼?
謝謝。
關於路由或橋接的決定是功能性的,而不是技術性的;有利有弊,也是一種選擇。如果我只有一個介面,我更喜歡路由,因為這種方式讓我擁有一個控制點(HN),並且在它上面,我可以為容器放置一些 iptables 或額外保護,這些容器預設情況下無法從 Internet 訪問。如果您更喜歡路由,則需要確保 net.ipv4.conf.all.forwarding = 1 的值(執行命令 sysctl -a | grep forward)。如果不是,則 echo 1 > /proc/sys/net/ipv4/ip_forward; (但不會在重新啟動後存活)或添加該行
net.ipv4.conf.all.forwarding = 1
在 /etc/sysctl.conf 之後執行 sysctl -P 。通常,一個路由而不是橋接,因為它允許 NAT,這在缺少 IP4 地址時會有所幫助,但這不是您的情況,您至少有兩個。
另一方面,橋接使您的 HN 和您的 VPS 相等。您可以直接在 Internet 上執行此操作,因為您似乎有足夠的 IP 地址。然後,您可能需要對每個容器進行額外保護(例如,每個容器和主機上的 iptables)。
回到您的(路由)問題,如果將 ip_forward 設置為 1 沒有幫助;當封包遺失時,嘗試從 HN 和 VPS 和 tcpdump 獲取更多詳細資訊的 arp -an (查看此時是否解決)?在第 2 層或第 3 層?
關於 IPv6,我真的不知道:/