autumn-dduck

autumn-dduck - Компонент ОСени для работы с DDNS сервером Duck-DNS

Компонент обновляет информацию о текущем IP адресе для сервиса DDNS.
Необходимо иметь аккаунт на сайте duckdns.
Проходить скучную процедуру регистрации необязательно, можно просто авторизоваться любым удобным способом

Начало

Нужно создать домен (одновременно можно держать до 5-ти доменов).
Для работы с библиотекой нам нужно будет сохранить имя домена и выданный токен.
Все это описано в FAQ.

Как установить?

Клонировать репу, открыть cmd, дать команды

cd myPath\autumn-dduck
opm build
opm i autumn-dduck-0.1.5.ospx

Все, компонента ляжет в бибилиотеки lib оскрипта.

Самое страшное

Надо пробросить порты на вашем роутере (да-да, без этого к сожалению совсем никак).
Информацию по своему роутеру легко гуглить.

Что дальше

Дальше нам надо задать настройки.

autumn-properties.yml

DDNS: # Имя настроек, должно быть точно таким же
  Token: # Токен сюды, обязателен к заполнению
  Domain: # Домен сюды, обязателен к заполнению
  Use: # Истина, если запуск библиотеки необходим (Ложь по умолчанию)
  Delay: # Значение в милисекундах, частота обновления информации в DDNS (300000мс по умолчанию)

Как запустить?

Использовать библиотеку можно (и нужно) в связке с бибилиотекой ОСень.

#Использовать autumn
#Использовать autumn-dduck

Поделка = Новый Поделка();
Поделка.ЗапуститьПриложение();

Все готово, поделка прочтет нужную инфу из файла, и будет спамить в сервис DDNS наш текущий IP.
А ваши сервисы могут стучаться в ваш роутер из всемирной паутины.

В связке с другими компонентами ОСени

Если вы любитель Вина, то autumn-dduck нужно импортировать раньше.

#Использовать autumn
#Использовать autumn-dduck
#Использовать winow

Поделка = Новый Поделка();
Поделка.ЗапуститьПриложение();

Если вы уже прокинули порты, будьте внимательны. Вино оно такое, если его не контролировать, оно сразу побежит слушать порт 3333.
Чтобы установить свой порт, вернемся к файлу autumn-properties.yml

DDNS: # Имя настроек, должно быть точно таким же
  Token: # Токен сюды, обязателен к заполнению
  Domain: # Домен сюды, обязателен к заполнению
  Use: # Истина, если запуск библиотеки необходим (Ложь по умолчанию)
  Delay: # Значение в милисекундах, частота обновления информации в DDNS (300000мс по умолчанию)
winow:
  Порт: # Сюды необходимый порт

Ну вот и все, сервисы крутятся, лавеха мутится, сервис поднят, DDNS своевременно получает инфу о IP, можно ддосить самого себя.

Подробнее о HTTPS, как обрабатывать зашифрованные сообщения

Так как компонента пишется для домашнего сервера, примеры будут показаны для проекта на оскрипте с использованием библиотеки Вино и с использованием самоподписанных сертификатов.

1. Исходный код запускаемого приложения на “минималках” main.os

#Использовать autumn
#Использовать autumn-dduck
#Использовать winow

Поделка = Новый Поделка();
Поделка.ЗапуститьПриложение();

2. Получение сертификата

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

certbot certonly --manual --preferred-challenges dns-01 --register-unsafely-without-email -d "ВашДомен.duckdns.org" -d "*.ВашДомен.duckdns.org" --agree-tos

Результатом этого действия будет сообщения типа:

Please deploy a DNS TXT record under the name:

_acme-challenge.ВашДомен.duckdns.org.

with the following value:

ds-5lpyPEf7VUnnlAmf3ZTn_noNF1mwtyxSCsLqXEtw

3. Регистрация сертификата в DDNS

Мы должны скопировать эту строку и поместить в наш файл autumn-properties.yml

DDNS: # Имя настроек, должно быть точно таким же
  Token: # Токен сюды, обязателен к заполнению
  Domain: # Домен сюды, обязателен к заполнению
  Use: # Истина, если запуск библиотеки необходим (Ложь по умолчанию)
  Delay: # Значение в милисекундах, частота обновления информации в DDNS (300000мс по умолчанию)
  ACMEtxt: ds-5lpyPEf7VUnnlAmf3ZTn_noNF1mwtyxSCsLqXEtw # Текст, генерируемый в certbot при создании сертификатов для SSL для ACME CHALLENGE
winow:
  Порт: # Сюды необходимый порт

И запустить наш сервер. После запуска компонента зарегистрирует выданную строку в домене. Для проверки корректности регистрации можно открыть в браузере ссылку:
https://www.digwebinterface.com/?hostnames=ВашДомен.duckdns.org&type=TXT&ns=resolver&useresolver=8.8.4.4&nameservers=

В браузере вы должны увидеть вот такую строку:
ВашДомен.duckdns.org. 60 IN TXT "ds-5lpyPEf7VUnnlAmf3ZTn_noNF1mwtyxSCsLqXEtw"

Можем возвращаться в cmd и нажать на клавишу enter. Половину работы считайте что мы сделали.

4. Запуск обратного прокси сервера

Далее, поскольку вино не умеет работать с https запросами (пока что) нам нужен прокси сервер, который обработает, расшифрует и отдаст нам готовые данные на блюдечке с голубой каемочкой. Для этого используем docker образ с nginx на борту и научим его работать с нашими сертификатами. Кстати о них, после всех предыдущих телодвижений я советую вам пройти по пути C:\Certbot\live и увидеть там папку с именем вашего домена, в котором будут лежить сертификаты и ключ с разрешением .pem. Это нам понадобится для работы с nginx.

Итак, к практике. В этом репо вы можете увидеть каталог nginx-proxy. Вы можете клонировать это репо, или создать похожу структуру файлов и папок у себя руками, неважно. Главное чтобы там был файл docker-compose.yml, и 2 каталога certs и conf, в каталоге conf должен быть файл nginx.conf, в каталог cert нужно скопировать свои сертификаты с разрешением .pem. Тело файла docker-compose.yml и nginx.conf можете скопировать с этого репо, для старта этого будет достаточно. В файле nginx.conf вам надо обратить внимание на строку proxy_pass http://host.docker.internal:3333;. Строка host.docker.internal просит nginx отправлять запросы в localhost нашего компа, а порт 3333 выставлен для библиотеки вино по умолчанию. Если вы хотите кастомный порт, тогда его нужно изменить в этой строке и в файле autumn-properties.yml. Все, запускаем main.os, поднимаем докер с nginx, радуемся обработке https запросов.

5. Кстати о птичках

Да, чуть не забыл, https по стандарту работает на порту 443, nginx слушает именно этот порт, как видно в строке listen 443 http2 ssl; в nginx.conf, и строка 443:443 в docker-compose.yml, если захотите кастомизировать, я показал вам где это делается)