我最近给自己买了一台物理服务器,我正在尝试创建具有其 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; (但不会在重新启动后存活)或添加该行
在 /etc/sysctl.conf 之后运行 sysctl -P 。通常,一个路由而不是桥接,因为它允许 NAT,这在缺少 IP4 地址时会有所帮助,但这不是您的情况,您至少有两个。
另一方面,桥接使您的 HN 和您的 VPS 相等。您可以直接在 Internet 上执行此操作,因为您似乎有足够的 IP 地址。然后,您可能需要对每个容器进行额外保护(例如,每个容器和主机上的 iptables)。
回到您的(路由)问题,如果将 ip_forward 设置为 1 没有帮助;当数据包丢失时,尝试从 HN 和 VPS 和 tcpdump 获取更多详细信息的 arp -an (查看此时是否解决)?在第 2 层或第 3 层?
关于 IPv6,我真的不知道:/