Зеркало сервера обновлений Syncthing. В России заблокирован release.syncthingcdn.net (проверка на cheburcheck), откуда Syncthing скачивает новые версии, поэтому автообновление перестало работать.
Как пользоваться
В веб-интерфейсе Syncthing открыть Действия → Настройки → Дополнительно → Options и указать в поле Releases URL:
https://upgrades.syncthing.gluek.info/meta.json
После этого Syncthing будет проверять и скачивать обновления через зеркало.
Это безопасно?
Да. Каждый архив релиза содержит файл release.sig, и Syncthing проверяет его ключом, встроенным в сам бинарник (lib/upgrade). Если зеркало отдаст изменённый файл, подпись не сойдётся и обновление просто не установится.
Как устроено
Syncthing сначала скачивает meta.json со списком релизов, а в нём лежат прямые ссылки на архивы в release.syncthingcdn.net. Значит, мало проксировать сам meta.json, нужно ещё переписать в нём ссылки.
- Скрипт по cron раз в час скачивает оригинальный
meta.jsonи заменяет адрес CDN на адрес зеркала:
#!/bin/sh
set -eu
dir=/path/to/folder/syncthing
mkdir -p "$dir"
tmp=$(mktemp "$dir/.meta.XXXXXX")
trap "rm -f $tmp" EXIT
curl -fsS -m 60 https://upgrades.syncthing.net/meta.json \
| sed "s#https://release.syncthingcdn.net/#https://upgrades.syncthing.gluek.info/#g" > "$tmp"
grep -q "\"tag_name\"" "$tmp"
chmod 644 "$tmp"
mv "$tmp" "$dir/meta.json"
- Caddy отдаёт этот файл как статику, а все остальные запросы проксирует на CDN:
upgrades.syncthing.gluek.info {
handle /meta.json {
root * /path/to/folder/syncthing
file_server
}
handle {
reverse_proxy https://release.syncthingcdn.net {
header_up Host release.syncthingcdn.net
}
}
}
Переписывать ссылки на лету можно было бы плагином replace-response, но его нет в стандартной сборке Caddy, и пересобирать сервер ради одного зеркала не хотелось. Скрипт по cron проще.