Обработка запросов к и от нестандартного сетевого интерфейса - PullRequest
0 голосов
/ 10 июля 2020

Я работаю над проектом, который требует от меня наличия нескольких сетевых интерфейсов. Я следил за документацией и создал три интерфейса. Я также изменил правила брандмауэра. Но даже после изменения правил брандмауэра я не получаю ответа на запрос ICMP на внешний IP-адрес второго интерфейса. Как видно на скриншоте, я разрешил все протоколы из любого места в любой экземпляр в моей сети введите описание изображения здесь

1 Ответ

0 голосов
/ 11 июля 2020

Если вы посмотрите на таблицу маршрутизации вашего экземпляра виртуальной машины, вы увидите, что маршрут по умолчанию настроен на основном сетевом интерфейсе eth0:

vm-instance:$ ip route
default via 10.156.0.1 dev eth0
...

Будь то эфемерный или статический c Внешний IP-адрес настроен, этот внешний IP-адрес неизвестен операционной системе экземпляра виртуальной машины. Внешний IP-адрес прозрачно отображается на внутренний адрес виртуальной машины с помощью VP C. Вы можете проверить это с помощью команды

vm-instance:$ ip -4 address show

. Вы увидите, что внешние IP-адреса не привязаны. Кроме того, пересылка IP-пакетов отключена как между сетевыми картами экземпляра виртуальной машины, так и сетевыми интерфейсами предоставленного Google Linux. Приведенные ниже команды могут проверить, что:

CloudShell:$ gcloud compute instances describe vm-instance --zone=your-zone | grep canIpForward
vm-instance:$ sudo sysctl net.ipv4.ip_forward

Следовательно, когда пакет ping получен вторичным интерфейсом, он не может ответить.

Чтобы немного изучить это поведение, вы можете запустить tcpdump на экземпляре виртуальной машины, чтобы прослушивать вторичный интерфейс, например eth1:

vm-instance:$ sudo apt-get install tcpdump
vm-instance:$ sudo tcpdump -i eth1

, затем узнать внешний IP-адрес вашего устройства Cloud Shell и проверить связь с вторичным внешним IP-адресом вашего экземпляра виртуальной машины. из Cloud Shell:

CloudShell:$ curl ifconfig.me/ip
CloudShell:$ ping [secondary_ip_of_vm_instance]

В выводе tcpdump на консоли вашего экземпляра виртуальной машины вы увидите, как ICMP-пакеты поступают на интерфейс eth1 с внешнего IP-адреса вашей рабочей станции. Но на них не отвечают.

Google предоставляет объяснение этого поведения в разделе «Устранение неполадок» документации VP C и предлагает возможные обходные пути:

Virtual Private Cloud> Do c> Создание экземпляров с несколькими сетевыми интерфейсами> Устранение неполадок> Я не могу подключиться к дополнительному интерфейсу с помощью внешнего IP-адреса :

DHCP-сервер программирует маршрут по умолчанию только на основном сетевом интерфейсе ВМ. Если вы хотите подключиться к вторичному интерфейсу с помощью внешнего IP-адреса, есть два варианта. Если вам нужно подключиться за пределами сети только через дополнительный сетевой интерфейс, вы можете установить маршрут по умолчанию для этого сетевого интерфейса. В противном случае вы можете использовать Configuring Policy Routing для настройки отдельной таблицы маршрутизации с использованием маршрутизации политики на основе источника в вашей виртуальной машине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...