为 OpenVZ 容器分配 IP

为 OpenVZ 容器分配 IP

我最近给自己买了一台物理服务器,并正在尝试创建具有其 IP 的容器。

物理机器有 IPv4 和 IPv6 地址。我可以访问另一个 IPv4 和一些其他 IPv6 地址,我想将它们分配给容器。我设法按如下方式分配地址:

# vzctl set 101 --ipadd 144.76.195.252 --save

我可以从物理机 ping 通该机器,但不能从外部 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

我需要做什么才能让容器从外部访问?我可能忘记了什么?

谢谢。

答案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 相等。你可以直接在互联网上执行此操作,因为你似乎有足够的 IP 地址。然后你可能需要在每个容器上进行额外的保护(例如,每个容器和主机上的 iptables)。

回到您的(路由)问题,如果将 ip_forward 设置为 1 没有帮助;请尝试从 HN 和 VPS 使用 arp -an(查看此时是否解析)并使用 tcpdump 来获取更多详细信息,数据包何时丢失?在第 2 层还是第 3 层?

关于 IPv6,我真的不知道 :/

相关内容