Skip to content

naem53/ubnt-update

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Настройка обновления устройств Ubiquiti / Unifi при проблемах доступа к серверам обновлений

UniFi Docker Docker Compose License Platform Maintenance Stars Forks Watchers Last Commit


📑 Оглавление


📘 Введение

⬆️ к оглавлению

Описание процесса настройки обновления для устройств Ubiquiti/Unifi, для тех, у кого есть проблемы доступа к серверам обновлений Ubiquiti, размещённых на Amazon.

Суть всех настроек сводится к достижению одной цели — по нажатию кнопки Update все обновления устанавливаются, а в случае нажатия на Install, инсталлируются.


⚙️ Варианты настройки

⬆️ к оглавлению

Настроить получение обновлений можно несколькими способами:

  1. Для обновления собственной сети
  2. Для обновления нескольких сетей
  3. Аналогичное пункту 2, но с использованием docker

🧰 Что необходимо

⬆️ к оглавлению

  • Способ 1: нужен рабочий туннель, с публичным ip адресом, до VPN-сервера, который размещён в стране вне подсанкционного геоблока, и до которого настроен, поднят и работает туннель.

⚠️ Примечание: Данный способ подойдёт тем, у кого нет своего VPS, но есть возможность организации туннеля.

  • Способ 2: нужна рабочая VPS, находящаяся вне подсанкционного геоблока, и до которой настроен, поднят и работает туннель, и так же к ней есть доступ по ssh.

⚠️ Примечание: Данный способ подойдёт тем, у кого есть VPS, и к ней есть доступ по SSH.

  • Способ 3: то же самое, что и 2 способ, только используется docker (docker compose).

⚠️ Примечание: Данный способ подойдёт тем, у кого есть VPS, и к ней есть доступ по SSH.


🏠 Способ 1 — Без VPS, с туннелем

⬆️ к оглавлению

Caution

Будьте осторожны!
Если Вы не знаете владельца VPN-сервера, существует риск подмены пакетов обновлений — они могут быть модифицированы и содержать вредоносный код.
Если Вы знаете владельца сервера и доверяете ему, этот способ можно использовать.
Безопасные сценарии обновления описаны в способах 2 и 3.

  1. В собственной сети необходимо развернуть виртуальную машину (Linux).
  2. Преднастраиваем DNS на виртуальной машине, как написано тут.
  3. Устанавливаем nginx на виртуальной машине, как написано тут.
  4. Подготавливаем конфигурацию stream для nginx на виртуальной машине, как написано тут.
  5. Выбираем конфигурационный файла для stream, как написано тут.
  6. Настраиваем туннель через Policy Engine, как написано тут.
  7. Добавляем DNS записи в Unifi, для доменов, которые будут заворачиваться в туннель, как написано тут.
  8. Проверяем работу, как написано тут.

Настройка завершена.

Схема type 1


☁️ Способ 2 — С VPS

⬆️ к оглавлению

⚠️ Примечание:
Будем считать, что туннель поднят и настроены следующие адреса:

  • Ваш IP в туннеле: 10.1.1.2
  • IP сервера в туннеле: 10.1.1.1
  1. Подключаемся по ssh к VPS. Если nginx не установлен — ставим, и настраиваем поочередно, как написано тут, тут и тут.
  2. Выбираем конфигурационный файла для stream, как написано тут.
  3. Добавляем DNS записи в Unifi, для доменов, которые будут заворачиваться в туннель, как написано тут.

⚠️ Примечание:
В поле IP Address указываем IP сервера в туннеле

  1. Добавляем статический маршрут до обратной стороны туннеля, как написано тут.
  2. Проверяем работу, как написано тут.

Настройка завершена.

Схема type 2


Способ 3 - С VPS и docker

⬆️ к оглавлению

⚠️ Примечание:
Будем считать, что туннель поднят и настроены следующие адреса:

  • Ваш IP в туннеле: 10.1.1.2
  • IP сервера в туннеле: 10.1.1.1
  1. Подключаемся по ssh к VPS. Устанавливаем docker (если ещё не установлен) по инструкции.
  2. Устанвливаем git.
sudo apt update && sudo apt install git
  1. Клонируем репозиторий, и переходим в склонированный каталог.
git clone https://github.com/naem53/ubnt-update.git && cd ubnt-update
  1. Запускаем стрим командой:
sudo docker compose up -d
  1. Добавляем DNS записи в Unifi, для доменов, которые будут заворачиваться в туннель, как написано тут.

⚠️ Примечание:
В поле IP Address указываем IP сервера в туннеле

  1. Добавляем статический маршрут до обратной стороны туннеля, как написано тут.
  2. Проверяем работу, как написано тут.

Настройка завершена.


🛠️ Настройки

🌍 Настройка DNS

⬆️ к оглавлению

Обновляем список доступных пакетов:

sudo apt update

Меняем DNS сервер:

sudo echo "nameserver 9.9.9.9" > /etc/resolv.conf

🧱 Установка Nginx

⬆️ к оглавлению

Устанавливаем nginx (либо haproxy, traefik, пример приведён на nginx и Debian):

sudo apt install nginx -y

Проверяем наличие модуля ngx_stream_module:

sudo nginx -V 2>&1 | grep --color stream

Если в выводе есть что-то вроде:

--with-stream=dynamic 

или

--with-stream 

значит поддержка stream есть.

Если модуль динамический (--with-stream=dynamic), его нужно явно загрузить в конфиге:

sudo nano /etc/nginx/nginx.conf

Добавляем (в самом начале, до блока events):

load_module modules/ngx_stream_module.so;

Сохраняем файл и перезапускаем Nginx:

sudo systemctl restart nginx

🔧 Подготовка конфигурации stream

⬆️ к оглавлению

Создаём каталог для конфигов stream:

sudo mkdir /etc/nginx/stream.d || true

Редактируем nginx.conf и добавляем в самом конце:

sudo nano /etc/nginx/nginx.conf

Добавляем строку:

include /etc/nginx/stream.d/*.conf;

📂 Выбор конфигурационного файла для stream

⬆️ к оглавлению

Выберите один из конфигурационных файлов в зависимости от необходимости:

  1. conf/nginx/stream.d/stream-ubnt.conf — стрим только fw-download.ubnt.com и fw-download.ui.com
  2. conf/nginx/stream.d/stream-ubnt-only-dl.conf — стрим как в пункте 1 + beta, early access, release candidate
  3. conf/nginx/stream.d/stream-all.conf — стрим всего, включая fw-update.ubnt.com и fw-update.ui.com (данный вариант не рекомендуется)

Пример приведён на основе первого способаconf/nginx/stream.d/stream-ubnt.conf.

Копируем выбранный файл конфигурации в каталог stream:

sudo cp conf/nginx/stream.d/stream-ubnt.conf /etc/nginx/stream.d/

Перезапускаем Nginx:

sudo systemctl restart nginx

🖥️ Настройки в Network Application

🛰️ Настройка туннеля через Policy Engine в меню Policy Table

⬆️ к оглавлению

Теперь нужно завернуть трафик с созданной виртуальной машины в туннель.

В Network Application переходим:
Settings → Policy Table → Create Net Policy → Route

В боковой панели выбираем:

  • Type policy: Route
  • Name: любое осмысленное имя
  • Type: Policy-Based
  • Interface/VPN Tunnel: имя туннеля до VPS
  • Source: Device/Network → выбираем виртуальную машину (по IP или другому параметру)
  • Destination: Any

Нажимаем Add — готово.

Пример заполнения

🧾 Добавление DNS записей в Unifi

⬆️ к оглавлению

⚠️ Примечание:
Если Вы используете вариант 2 - С VPS или 3 - С VPS и docker то в поле IP Address нужно указывать ip сервера, обратной стороны туннеля.

В Network Application нажимаем:
Settings → Policy Table → Create Net Policy → DNS

В боковой панели выбираем:

  • Type: Host (A)
  • Domain Name: fw-download.ubnt.com
  • IP Address: локальный IP виртуальной машины

Жмём Add — готово.

Пример заполнения

Повторяем то же самое и для домена fw-download.ui.com.

⚠️ Примечание:
Если используются другие конфигурационные файлы nginx (stream-ubnt-all.conf или stream-ubnt-only-dl.conf), аналогичные действия выполняются для всех доменов, перечисленных в конфиге.

🗺️ Добавление статического маршрута

⬆️ к оглавлению

Иногда может потребоваться добавить static route для обратной стороны туннеля.

В Network Application переходим:
Settings → Policy Table → Create Net Policy → Route

В боковой панели выбираем:

  • Type policy: Route
  • Name: любое осмысленное
  • Type: Static
  • Interface/VPN Tunnel: имя туннеля до VPS
  • Device: Gateway
  • Distance: 1
  • Interface: выбираем имя туннеля

Жмём Add — готово.

Пример заполнения

✅ Проверка работы

⬆️ к оглавлению

Для проверки идём:
Settings → Control Plane → Updates
Пробуем обновиться, либо установить необходимые пакеты.


💡 Прочая полезная информация

🧩 Полный список доменов по конфигурационным файлам

⬆️ к оглавлению

example/conf/nginx/stream.d/stream-ubnt.conf

  • fw-download.ubnt.com
  • fw-download.ui.com

example/conf/nginx/stream.d/stream-ubnt-only-dl.conf

  • fw-download.ubnt.com
  • fw-download.ui.com
  • apt.artifacts.ui.com
  • apt-release-candidate.artifacts.ui.com
  • apt-beta.artifacts.ui.com

example/conf/nginx/stream.d/stream-all.conf

  • fw-download.ubnt.com
  • fw-download.ui.com
  • fw-update.ubnt.com
  • fw-update.ui.com
  • apt.artifacts.ui.com
  • apt-release-candidate.artifacts.ui.com
  • apt-beta.artifacts.ui.com

example/conf/nginx/stream.d/stream-ubnt-all-with-logging.conf

  • fw-download.ubnt.com
  • fw-download.ui.com
  • fw-update.ubnt.com
  • fw-update.ui.com
  • apt.artifacts.ui.com
  • apt-release-candidate.artifacts.ui.com
  • apt-beta.artifacts.ui.com

⚠️ Заметка к файлу конфигурации стрима stream-ubnt-all-with-logging.conf:
Стрим с включённым логированием.

⚠️ Примечание:
Заворачивать домены fw-update.ubnt.com и fw-update.ui.com в стрим можно, но не имеет смысла — эти домены не заблокированы, и Network Application получает сведения об обновлениях напрямую.

About

A solution for updating UniFi/Ubiquiti devices when official update servers are unavailable.

Topics

Resources

License

Stars

Watchers

Forks

Contributors