Можно ли выполнить привязку к общедоступному IP-адресу в экземпляре виртуальной машины Google Compute?

Я запускаю серверное приложение в экземпляре Google Compute, которое требует использования общедоступного IP-адреса, потому что оно не поддерживает NAT / не совместимо (это MRCP, если вам интересно). Я пытаюсь понять, возможно ли такое.

У меня уже есть публичный IP-адрес, назначенный моей виртуальной машине, но я могу получать трафик только на внутренние адреса (10.x.y.z).

0
задан 24 August 2019 в 00:20
3 ответа

В итоге я использовал правила пересылки:

$ gcloud compute forwarding-rules list
NAME      REGION                   IP_ADDRESS        IP_PROTOCOL  TARGET
pf-rule1  northamerica-northeast1  www.xxx.yyy.zz1   TCP          northamerica-northeast1-a/targetInstances/target-instance-1
pf-rule2  northamerica-northeast1  www.xxx.yyy.zz2   UDP          northamerica-northeast1-a/targetInstances/target-instance-2

где www.xxx.yyy.zz1 и www.xxx. yyy.zz2 - 2 общедоступных статических IP-адреса (один для TCP, а другой для UDP).

Linux любезно предоставил мне возможность привязки к этим IP без необходимости добавлять эти адреса в мой сетевой интерфейс.

Это именно то, что я искал.

Примечание: экземпляр должен быть создан с помощью - can-ip-forward

0
ответ дан 5 December 2019 в 01:13

Если вы хотите получать трафик из Интернета, вам необходимо разрешить трафик из разрешенного вами диапазона IP-адресов. [ https://cloud.google.com/vpc / docs / firewalls] По умолчанию подразумеваемые правила брандмауэра разрешают весь внутренний трафик VPC к вашему экземпляру виртуальной машины.

А для внешнего IP-адреса, который назначил экземпляр виртуальной машины, не настроен и не привязан к какому-либо сетевого интерфейса внутри экземпляра виртуальной машины. Таким образом, вы не можете получить внешний IP-адрес, выполнив команду «IP-адрес».В платформе GCP есть таблица сопоставления IP-адресов для сопоставления внешнего IP-адреса с экземпляром виртуальной машины, поэтому при проверке таблицы сопоставления трафик на внешний IP-адрес будет перенаправлен на экземпляр виртуальной машины. Если вашему программному обеспечению необходимо получить внешний IP-адрес, вам необходимо настроить его вручную.

0
ответ дан 5 December 2019 в 01:13

Я думаю, что это возможно, если вы можете установить Listen / BindIP или Интерфейс в файле конфигурации перед запуском серверного приложения. (например, IP / interface = xxxx port = xxxx)

Может быть способ получше, у меня была аналогичная проблема, и это сработало для меня с TCP / UDP. Я не тестировал MRCP / SIP

. Чтобы проверить, возможно ли это, вы должны:

1. Создать новую виртуальную машину для тестирования: (Не уверен, какая у вас ОС, поэтому эти команды могут быть неточными)

2. Затем создайте виртуальный сетевой интерфейс, например:

ifconfig eth0: 1 publicipaddress up

3. Затем проверьте его с помощью команды: ifconfig Должно выглядеть примерно так:

eth0: 1: flags = 4163 mtu 1460 inet xxxxxxx netmask xxxxxxxxxx broadcast xxxxxxxxx

  1. Затем запустите приложение с прослушиванием / привязкой на: publicipaddress или интерфейсе eth0: 1

  2. Измените брандмауэр, чтобы разрешить все для тестирования

  3. Запустите службу брандмауэра, затем выполните:
  4. Сделайте это команда ниже:

iptables -t nat -A PREROUTING -p tcp --dport portyourapplicationislisteningon -j DNAT --to-destination yourpublicipaddress

Подтверждение связи получено по протоколу TCP, который маршрутизируется на созданный вами виртуальный интерфейс, и он будет Ответьте клиенту на правильный общедоступный IP-адрес.

Если вы настроили использование UDP после подтверждения, вам необходимо запустить ОДИН экземпляр серверного приложения с файлом конфигурации, настроенным для прослушивания нескольких IP-адресов, например: (internalIP и ExternalIP) или ( eth0 & eth0: 1) таким образом UDP будет работать правильно, когда он поступает на внутренние адреса (10.xyz)

Если вы используете UDP и имеете возможность установить только ОДИН Bind / Listen IP / Interface. Вы можете попробовать bind / listenIP как: 0.0.0.0, который может прослушивать / связывать на всех интерфейсах. В противном случае это может не сработать, для моей цели UDP работал только частично, когда я привязал только к общедоступному IP-адресу и добавил правило предварительного маршрута для UDP, но я не использовал MRCP или SIP.

Возможно, кто-то еще знает, как правильно повторно -маршрутизация UDP, если вы можете привязать только к одному IP / интерфейсу.

0
ответ дан 5 December 2019 в 01:13

Теги

Похожие вопросы