![Google Cloud Compute устанавливает маску подсети /20 для внутреннего интерфейса](https://rvso.com/image/697022/Google%20Cloud%20Compute%20%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%B0%D0%B2%D0%BB%D0%B8%D0%B2%D0%B0%D0%B5%D1%82%20%D0%BC%D0%B0%D1%81%D0%BA%D1%83%20%D0%BF%D0%BE%D0%B4%D1%81%D0%B5%D1%82%D0%B8%20%2F20%20%D0%B4%D0%BB%D1%8F%20%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D0%B5%D0%B3%D0%BE%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%B0.png)
Google Cloud использует DHCP для назначения IP-адресов экземпляру. По какой-то причине они назначают адрес с маской сети /32, даже если вы находитесь в своей собственной сети /20. Я обнаружил, что если я устанавливаю статический публичный IP-адрес экземпляра, то могу перейти в /etc/syconfig/network-scripts/ifcfg-eth0, изменить BOOTPROTO с DHCP на STATIC, затем вручную задать настройки IP и использовать подсеть /20 или /24, и он переживет перезагрузки. Однако после этого я теряю возможность общаться с этим хостом во внутренней сети. Если экземпляр использует параметры DHCP, я могу общаться между хостами в локальной сети без проблем.
Почитав в интернете, я нашел эту статьюhttps://cloud.google.com/compute/docs/networkingесть раздел, в котором говорится о внесении изменений в DNS и resolv.conf и об использовании конфигурации dhcp.lease для этого. Когда я смотрю в этот файл, я вижу, что в нем есть настройка 'option subnet-mask 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
Затем я вручную добавил различные маршруты к 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, и при этом иметь возможность взаимодействовать с другими экземплярами в локальной сети?
Операционная система — 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