Google Cloud 使用 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
实例-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
然后我手动将不同的路由添加到实例 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,则无法安装。
答案1
我还没有找到解决 Google Cloud 上的网络掩码问题的方法,但我发现 IPA 项目已经解决了这个问题并发布了更新以使其与 GCloud 兼容。ipa 版本 4.4.2 及更高版本不会出现此问题。但是,截至目前,该版本尚未反向移植到 centos。
这是需要手动解决的补丁信息。
https://git.fedorahosted.org/cgit/freeipa.git/commit/?id=dee950d88ec969b36c1271a3ef9fe4e4f5b48b01
这是 ipa 项目网站上的实际错误报告。
https://fedorahosted.org/freeipa/ticket/5814
这是我向 Google 提交的有关网络连接方面的错误。
我把这些都说出来,以便其他遇到这个问题的人都能找到答案。
答案2
对于通过 Google 搜索到达此处的任何人,以下是我在 GCE 文档中找到的内容。逐字引用:
要配置具有 /32 以外的网络掩码的接口,您应该使用标志 --guest-os-features MULTI_IP_SUBNET 创建映像并使用它来创建您的实例。例如,如果您使用基于 debian-9 的映像,则可以使用以下命令创建映像:
gcloud compute images create debian-9-multi-ip-subnet \
--source-disk debian-9-disk \
--source-disk-zone us-west1-a \
--guest-os-features MULTI_IP_SUBNET