![为 OpenVZ 容器分配 IP](https://linux22.com/image/620293/%E4%B8%BA%20OpenVZ%20%E5%AE%B9%E5%99%A8%E5%88%86%E9%85%8D%20IP.png)
我最近给自己买了一台物理服务器,并正在尝试创建具有其 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,我真的不知道 :/