Google Cloud Compute 將 /20 子網路遮罩設定為內部介面

Google Cloud Compute 將 /20 子網路遮罩設定為內部介面

Google 雲端使用 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

但這也沒有解決問題。

實例 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

實例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

我還沒有找到解決谷歌雲端上網路遮罩問題的方法,但我確實發現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

只是把所有這些都放在那裡,以便其他遇到此問題的人可以找到一些答案。

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

相關內容