Google Cloud Compute 将 /20 子网掩码设置为内部接口

Google Cloud Compute 将 /20 子网掩码设置为内部接口

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 提交的有关网络连接方面的错误。

https://code.google.com/p/google-compute-engine/issues/detail?id=522&sort=stars&colspec=ID%20Type%20Component%20Resource%20Service%20Status%20Stars%20Summary%20Log

我把这些都说出来,以便其他遇到这个问题的人都能找到答案。

答案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

相关内容