# Работа tuna в корпоративной сети

Чаще всего с этим не должно быть проблем, так как корпоративные фаерволы разрешают исходящие соединения, однако могут быть ограничения по портам подключения, которые могут помешать работе tuna.

Если у вас появляются ошибки при создании туннеля, выполните команду `tuna diagnose` для получения диагностической информации, отчет поможет лучше понять, где именно проблема.

```shell
Please wait, testing connectivity...

TLS connectivity:
  Google.com: ok [1.46189625s]
  Yandex.ru: ok [1.246520375s]
  tuna API: ok [1.484186875s]
DNS:
  api.tuna.am: alt-lb.tuna.am. → eu-lb.tuna.am. [147.45.149.16, 194.31.173.118]
  a.2na.am: edge-eu-a.2na.am. [2.28.136.177, 89.19.217.251]
TCP connectivity:
  tuna edge a 2.28.136.177:443: ok [41.53925ms]
  tuna edge a 89.19.217.251:443: ok [38.112708ms]
  tuna node DE node-1-de.2na.am:443: ok [52.81425ms]
  tuna node RU node-1-ru.2na.am:443: ok [34.079541ms]

```

Как правило, tuna использует порт `443` для подключения к нодам при создании туннеля. Если проверки `TCP connectivity` не проходят, обратитесь к своим сетевым администраторам для решения проблемы.

## Какие адреса разрешить в фаерволе

tuna CLI подключается к API и к нодам на порт `443`. Если фаервол пропускает только разрешённые адреса, откройте доступ:

* к `api.tuna.am` и `my.tuna.am` — API и личному кабинету, CLI обращается к API при каждом запуске;
* к нодам — к ним CLI подключается, когда поднимает туннель;
* к ячейкам, если адреса туннелей открывают из этой же сети, — на ячейки приходит трафик к туннелям и [своим доменам](https://tuna.am/docs/tunnels/guides/connect-self-domain.md).

Адреса нод и ячеек собраны в таблице, адресов `api.tuna.am` и `my.tuna.am` в ней нет.

Актуальный список адресов в формате JSON: <https://api.tuna.am/v1/system/ips>

Разрешайте все адреса из списка, а не только те, что резолвятся из вашего офиса. Имена `api.tuna.am`, `my.tuna.am` и зоны ячеек обслуживает GeoDNS: для России и остальных регионов он отдаёт разные балансировщики. Куда GeoDNS направил вашу сеть, видно в секции `DNS` вывода `tuna diagnose`: регион показывает последнее имя в цепочке CNAME. Например, `edge-ru-a.2na.am.` — Россия, `edge-eu-a.2na.am.` — другие регионы.

Сейчас адреса зафиксированы. Если они изменятся, мы постараемся заранее предупредить об этом по почте. Актуальный список в любом случае отдаёт [метод API](#ips-api): по нему можно самим проверять, не поменялись ли адреса.

Если фаервол умеет правила по FQDN, разрешайте доступ по именам — тогда при смене адресов правила не придётся обновлять.

### Автоматическая выгрузка адресов

Список отдаёт открытый метод API, авторизация не нужна:

```shell
curl -fsS https://api.tuna.am/v1/system/ips | jq -r '.ingress_cells[].ips[], (.nodes[].ip // empty)' | sort -u

```

В ответе два массива:

* `ingress_cells` — ячейки. В `ips` — адреса, на которые приходит трафик к туннелям, в `zone` — основная зона ячейки: на неё ведут CNAME своих доменов. Берите адреса всех ячеек независимо от `status`: трафик идёт и в ячейки в статусе `draining`.
* `nodes` — ноды. В `address` — хост и порт для подключения CLI, в `ip` — адрес ноды, в `region` — страна ноды в формате ISO 3166-1 alpha-2, например `DE`. Полей `ip` и `region` может не быть. Без `ip` разрешайте доступ по имени из `address`.

Сервер обновляет ответ раз в 5 минут, поэтому опрашивать метод чаще нет смысла. Метод поддерживает `ETag`: с заголовком `If-None-Match` он вернёт `304`, если список не изменился, — так удобно проверять изменения по расписанию. С одного IP-адреса — не больше одного запроса в секунду, сверх лимита сервер отвечает `429`. Описание метода — в [Swagger](https://my.tuna.am/swagger/), тег `SystemIPs`.
