谷歌云使用 DHCP 为实例分配 IP。出于某种原因,即使您在自己的 /20 网络上,他们也会使用 /32 网络掩码分配地址。我发现如果我将实例公共 IP 设置为静态,我可以进入 /etc/syconfig/network-scripts/ifcfg-eth0,将 BOOTPROTO 从 DHCP 更改为 STATIC,然后手动设置 IP 设置并使用 /20 或 / 24 子网,它将在重新启动后继续存在。但是,在这样做之后,我失去了与内部网络上的该主机通信的能力。如果实例使用 DHCP 参数,我可以毫无问题地在 LAN 上的主机之间进行通信。
在线阅读后,我发现这篇文章https://cloud.google.com/compute/docs/networking有一节讨论对 DNS 和 resolv.conf 进行更改以及使用 dhcp.lease 配置来执行此操作。当我查看这个文件时,我看到它有“选项子网掩码 255.255.255.255;” 环境。如果我更改网络掩码并重新启动网络,则更改将恢复。
仅供参考:
instance-2 is using default DHCP and has the IP 10.128.0.5
instance-4 is using my custom static config and has the IP 10.128.0.6
我还比较了具有默认 DHCP 地址的实例和具有我的静态 IP 设置的实例之间的路由表。
实例 2(DHCP):
[root@instance-2 network-scripts]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.128.0.1 0.0.0.0 UG 100 0 0 eth0
10.128.0.1 0.0.0.0 255.255.255.255 UH 100 0 0 eth0
10.128.0.5 0.0.0.0 255.255.255.255 UH 100 0 0 eth0
169.254.169.254 10.128.0.1 255.255.255.255 UGH 100 0 0 eth0
instance-4(自定义静态):
[root@instance-4 NetworkManager]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.128.0.1 0.0.0.0 UG 100 0 0 eth0
10.128.0.0 0.0.0.0 255.255.240.0 U 100 0 0 eth0
然后我手动将不同的路由添加到 instance-4:
[root@instance-4 NetworkManager]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.128.0.1 0.0.0.0 UG 100 0 0 eth0
10.128.0.0 0.0.0.0 255.255.240.0 U 100 0 0 eth0
10.128.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
10.128.0.6 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
169.254.169.254 10.128.0.1 255.255.255.255 UGH 0 0 0 eth0
但这也没有解决问题。
instance-4 网络脚本:
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=eth0
UUID=cde7258f-6857-4015-86de-6bb520fcd550
ONBOOT=yes
PEERDNS=yes
PEERROUTES=yes
MTU=1460
PERSISTENT_DHCLIENT="y"
NETMASK=255.255.240.0
IPADDR=10.128.0.6
DNS1=169.254.169.254
GATEWAY=10.128.0.1
instance-2 网络脚本
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=eth0
UUID=cde7258f-6857-4015-86de-6bb520fcd550
ONBOOT=yes
PEERDNS=yes
PEERROUTES=yes
MTU=1460
PERSISTENT_DHCLIENT="y"
如何正确获取接口以使用 /32 以外的网络掩码,并且仍然能够与 LAN 上的其他实例通信?
操作系统是 CentOS 7
我需要 /32 以外的网络掩码,以便我可以安装 FreeIPA。如果网络掩码是 /32,它将不会安装。
我还没有找到解决谷歌云网络掩码问题的方法,但我确实发现 IPA 项目已经解决了这个问题并发布了一个更新,只是为了使其与 GCloud 兼容。ipa 4.4.2 及更高版本不会有这个问题。但是,到目前为止,该版本还没有向后移植到 centos。
这是要手动解决的补丁信息。
https://git.fedorahosted.org/cgit/freeipa.git/commit/?id=dee950d88ec969b36c1271a3ef9fe4e4f5b48b01
这是 ipa 项目网站上的实际错误报告。
https://fedorahosted.org/freeipa/ticket/5814
这是我向谷歌提交的关于网络连接方面的错误。
https://code.google.com/p/google-compute-engine/issues/detail?id=522&sort=stars&colspec=ID%20Type%20Component%20Resource%20Service%20Status%20Stars%20Summary%20Log
只需将所有这些都放在那里,以便其他遇到此问题的人可以找到一些答案。
对于从 Google 搜索到这里的任何人,这是我在 GCE 文档中找到的内容。逐字引用:
要使用 /32 以外的网络掩码配置接口,您应该使用标志 --guest-os-features MULTI_IP_SUBNET 创建一个映像并使用它来创建您的实例。例如,如果您使用的是基于 debian-9 的映像,则可以使用以下命令创建映像: