Значительная задержка при доступе в Интернет через облачный NAT Google

в нашей настройке у нас есть виртуальная машина без внешних IP-адресов, обращающихся к внешнему миру через Google Cloud NAT.

Наблюдаем странное поведение:

  • каждый 10-15-й запрос значительно задерживается (15-135 секунд)
  ~$ for i in {1..50}; do echo $i;  time curl -s 'https://stackoverflow.com/' > 
  /dev/null; done
  .
  .
  .
  15

  real  2m10.830s
  user  0m0.049s
  sys   0m0.029s
  • Я вижу в журналах драйвера стека, что соответствующие соединения были УДАЛЕНЫ:
    {
    .
    .
    .
      jsonPayload: {
        allocation_status: "DROPPED"
      }
      timestamp: "2019-09-20T11:41:05.904608023Z"  
    }

Любые идеи/предложения по решению проблемы будут высоко оценены. :)

Спасибо,

Борис


person Boris    schedule 20.09.2019    source источник
comment
Это происходит на других сайтах? Умный брандмауэр может определить, что вы снова и снова открываете одну и ту же страницу, и предположить, что происходит атака. DROPPED означает, что другая сторона отклонила вашу попытку подключения. Если это так, ваше решение состоит в том, чтобы не делать этого.   -  person John Hanley    schedule 20.09.2019
comment
Проблема не связана с конкретным сайтом. Это происходит даже с сайтами, которые находятся под нашим контролем, и мы знаем, что правила брандмауэра не применяются.   -  person Boris    schedule 23.09.2019


Ответы (2)


Возможно, вашим виртуальным машинам не хватает доступных портов NAT. Например, если вы выделяете 4096 портов для каждой виртуальной машины, вам потребуется IP-адрес NAT для каждых 15 виртуальных машин. Во время работы в режиме реального времени, если виртуальные машины + NAT исчерпали доступные порты из-за открытых подключений (наиболее долгоживущий TCP), вы можете начать видеть отброшенный трафик. Вы можете уменьшить время ожидания TCP или выделить больше портов для каждой виртуальной машины.

Вы можете увидеть текущее состояние сопоставления NAT (например, количество портов на IP/VM), используя эту команду в облачной консоли:

Вычислительные маршрутизаторы gcloud get-nat-mapping-info [ИМЯ МАРШРУТИЗАТОРА]

person TheRovinRogue    schedule 23.09.2019

Вы также можете изучить независимое от конечных точек сопоставление:https://cloud.google.com/nat/docs/ports-and-addresses#conflicts-eim

Частые повторяющиеся потоки к общедоступным конечным точкам ограничены количеством портов/VM, а также конфигурацией независимого от конечных точек сопоставления. Было бы полезно, если бы GCP позволял изменять таймер задержки NAT: https://cloud.google.com/nat/docs/overview#nat_timeouts

При 256 портах на виртуальную машину и 32 общедоступных IP-адресах на NAT-GW мы подсчитали, что можем сделать 2,1 запроса в секунду для одного и того же кортежа (IP-адрес назначения, порт, протокол).

person hj5708    schedule 15.06.2021