Can firewall rules be applied to internal GCLB?

tl;dr We're experiencing issues with services behind internal Google Cloud Load Balancer not being able to reply when response is over a certain size. Upon some tcpdump'ing and wireshark'ing, it looks like our site-to-site ipsec VPN instance cannot send a ICMP "fragmentation needed" packet back to GCLB, causing the response to be stuck in a TCP retransmission loop.

Details

We have a site-to-site IPSec tunnel setup for a GCP VPC and our onsite gateway. We have some vm instances in that VPC and we created internal GCLB (Google Cloud Load Balancer) to lb those services. However, we noticed that when the response of the service goes over a certain size, the curl request to the GCLB (from our internal network) gets stuck and eventually timeout.

I did a tcpdump at our VPN instance (the instance that runs ipsec) in GCP, and captured the trace when the response is "big". It turns out that the VPN tries to send a ICMP fragmentation needed packet back to the internal GCLB but got "no route to host". I verified that there is a route to GCLB from the VPN instance and I can even curl the GCLB instance at the VPN instance. That made me suspect that the firewall is blocking the ICMP packet.

See the wireshark screenshot here

However, playing around with GCP's firewall rules, I haven't been able to make firewall rules apply to GCLB in the network. It seems that all firewall rules apply to VM instances.

Could someone shed some light on how to get around this?

0
задан 17 October 2018 в 00:44
1 ответ

Судя по теме, ваш вопрос: «Может правила брандмауэра применяются к внутреннему GCLB? » ответ - нет. Правила брандмауэра применяются непосредственно к виртуальным машинам, а не к балансировщикам нагрузки. Внутренний балансировщик нагрузки - это балансировщик сквозной нагрузки. Для управления трафиком вы можете применить правила брандмауэра к самим виртуальным машинам, но вы не можете применить их к балансировщику нагрузки."Вы можете проверить эту документацию для получения дополнительной информации.

После ознакомления с вашими данными кажется, что вы могли настроить виртуальную машину для запуска программного обеспечения IPSec, как вы упомянули« Я сделал tcpdump в нашем экземпляре VPN. (экземпляр, который запускает ipsec) в GCP ». Я бы порекомендовал вместо этого использовать Cloud VPN, чтобы вы могли убедиться, что такие параметры, как MTU, установлены правильно. Существует так много мест, где в экземпляре могут быть неверно настроены такие параметры, как MTU.

Обратите внимание, что максимальный MTU в GCP составляет 1460 байтов, но MTU для трафика VPN должен быть меньше, чем учитывается инкапсуляция пакетов. Вы можете ознакомиться с рекомендациями для локальных шлюзов при использовании Cloud VPN.

Другое дело, что они должны Это предварительная фрагментация трафика перед его отправкой по туннелю. Перед инкапсуляцией трафик должен быть предварительно фрагментирован. Это конфигурация, которая требуется для однорангового устройства, подключенного к Cloud VPN. Вот ссылка на документацию для этого. Поскольку кажется, что вы используете VPN на основе виртуальной машины, вам необходимо выполнить предварительную фрагментацию на их виртуальных машинах и их одноранговом шлюзе.

Я хотел бы упомянуть здесь, что Cloud VPN выполняет предварительную фрагментацию за вас, так что единственное внимание здесь e - одноранговое устройство.

0
ответ дан 5 December 2019 в 05:12

Теги

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