Networking

為 OpenVZ 容器分配 IP

  • November 4, 2013

我最近給自己買了一台物理伺服器,我正在嘗試創建具有其 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,我真的不知道:/

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