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
這是我向谷歌提交的有關網絡連接方面的錯誤。
只是把所有這些都放在那裡,以便其他遇到此問題的人可以找到一些答案。
答案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