From 0e03de0178060d6c9672f36e6c3fd77387d04183 Mon Sep 17 00:00:00 2001 From: Kirill Kodanev Date: Tue, 9 Sep 2025 21:21:38 +0300 Subject: [PATCH] First commit to bbrkn project --- .forgejo/workflows/deploy.yaml | 37 +++++ domains.txt | 278 +++++++++++++++++++++++++++++++++ scripts/deploy-to-gateway.sh | 40 +++++ scripts/generate-configs.sh | 28 ++++ 4 files changed, 383 insertions(+) create mode 100644 .forgejo/workflows/deploy.yaml create mode 100644 domains.txt create mode 100644 scripts/deploy-to-gateway.sh create mode 100644 scripts/generate-configs.sh diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml new file mode 100644 index 0000000..656db3f --- /dev/null +++ b/.forgejo/workflows/deploy.yaml @@ -0,0 +1,37 @@ +name: Deploy DNS Configuration + +on: + push: + branches: [ main ] + paths: [ 'domains.txt' ] + +jobs: + deploy: + runs-on: self-hosted # Используем self-hosted runner на шлюзе + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Validate domains file + run: | + if [ ! -f domains.txt ]; then + echo "Error: domains.txt not found" + exit 1 + fi + # Проверка синтаксиса доменов + grep -v '^#' domains.txt | grep -v '^$' | while read domain; do + if ! echo "$domain" | grep -qE '^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'; then + echo "Error: Invalid domain format: $domain" + exit 1 + fi + done + + - name: Generate dnsmasq configuration files + run: | + chmod +x scripts/generate-configs.sh + ./scripts/generate-configs.sh + + - name: Deploy to gateway + run: | + chmod +x scripts/deploy-to-gateway.sh + ./scripts/deploy-to-gateway.sh diff --git a/domains.txt b/domains.txt new file mode 100644 index 0000000..a97a08b --- /dev/null +++ b/domains.txt @@ -0,0 +1,278 @@ +auth.openai.com +cdn.oaistatic.com +*oaistatic.com +ab.chatgpt.com +realtime.chatgpt.com +ws.chatgpt.com +*chatgpt.com +chatgpt.com +*byspotify.com +*pscdn.co +*scdn.co +*spoti.fi +*spotify-everywhere.com +*spotify.com +*spotify.design +*spotifycdn.com +*spotifycdn.net +*spotifycharts.com +*spotifycodes.com +*spotifyforbrands.com +*spotifyjobs.com +*spotify.link +*audio-ak-spotify-com.akamaized.net +*audio4-ak-spotify-com.akamaized.net +*cdn-spotify-experiments.conductrics.com +*heads-ak-spotify-com.akamaized.net +*heads4-ak-spotify-com.akamaized.net +*spotify.com.edgesuite.net +*spotify.map.fastly.net +*spotify.map.fastlylb.net +*netify.ai +public-family.api.account.microsoft.com +*.family.microsoft.com +*router-switch.com +*fast.com +*.fast.com +*hetzner.com +*.ntc.party +*ntc.party +*spotify.com +*scdn.co +*spotifycdn.com +*spotilocal.com +*spotifycdn.net +*pscdn.co +*tospotify.com +googlevideo.com +youtubei.googleapis.com +ytimg.com +yt3.ggpht.com +yt4.ggpht.com +youtube.com +youtubeembeddedplayer.googleapis.com +ytimg.l.google.com +jnn-pa.googleapis.com +youtube-nocookie.com +youtube-ui.l.google.com +yt-video-upload.l.google.com +wide-youtube.l.google.com +1337x.to +admin.telegram.org +akamai.steamstatic.com +api.telegram.org +api.themoviedb.org +api.twitter.com +app.telegram.org +artifacts.elastic.co +a.telegram.org +aurora-1.web.telegram.org +aurora.web.telegram.org +autoconfig.telegram.org +.autodesk.com +.autodesk.ru +autodiscover.telegram.org +bbs.telegram.org +beta.telegram.org +blog.telegram.org +booktracker.org +bt1.t-ru.org +bt2.rutracker.cc +bt2.t-ru.org +bt3.rutracker.cc +bt3.t-ru.org +bt4.rutracker.cc +bt4.t-ru.org +b.telegram.org +bt.rutracker.cc +bt.t-ru.org +.canva.com +cdn-client.medium.com +cdn.cookielaw.org +cdn.telegram.org +cloud.ibm.com +cloud.telegram.org +cname.telegram.org +core.telegram.org +cpanel.telegram.org +cp.telegram.org +c.telegram.org +currenttime.tv +.dellcdn.com +.dell.com +demo.telegram.org +desktop.telegram.org +de.telegram.org +dnm.telegram.org +_domainkey.desktop.telegram.org +download.dell.com +download.freebsd.org +download.telegram.org +doxajournal.ru +duckduckgo.com +dw.com +dyn.telegram.org +echo.msk.ru +e-lactancia.org +email.telegram.org +en.telegram.org +flibusta.is +flora-1.web.telegram.org +forum.telegram.org +forum.xda-developers.com +git.FreeBSD.org +googleapis.com +.googlevideo.com +googlevideo.com +go.telegram.org +graph.instagram.com +gvt1.com +hdclub.org +help.telegram.org +hide.me +home.telegram.org +i.dell.com +id.trimble.com +images.telegram.org +image.tmdb.org +img.telegram.org +inbound.telegram.org +info.telegram.org +infra-cdn.elastic.co +ipic.su +ip.telegram.org +ipv6.telegram.org +i.ytimg.com +kinogo.by +kinozal.me +kinozal.tv +linkedin.com +.linuxserver.io +linuxserver.io +liveupdate.telegram.org +login.sketchup.co +login.telegram.org +lostfilm.tv +mdm.telegram.org +media.telegram.org +medium.com +meduza.io +miped.ru +ml.telegram.org +mobile.telegram.org +mods.linuxserver.io +mongo.telegram.org +m.telegram.org +mysql.telegram.org +newstudio.tv +nnm-club.me +nnmclub.to +nyaa.si +office.telegram.org +old.telegram.org +.openvswitch.org +outlook.telegram.org +pbs.twimg.com +pluto-1.web.telegram.org +pluto.web.telegram.org +poligon.media +pop3.telegram.org +pornhub.com +portal.telegram.org +rarbg.to +remote.telegram.org +ru.linkedin.com +rutor.info +rutor.rg +.rutracker.cc +rutracker.cc +rutracker.org +rutrk.org +scontent-hel3-1.cdninstagram.com +seasonvar.ru +secure.telegram.org +server1.telegram.org +server.telegram.org +shop.telegram.org +sip.telegram.org +.sketchup.com +snap.licdn.com +sonic-net.github.io +ssl.telegram.org +sslvpn.telegram.org +stage.telegram.org +static.cdninstagram.com +static.rutracker.cc +static.telegram.org +static.t-ru.org +.steamstatic.com +store.akamai.steamstatic.com +store.telegram.org +support.dell.com +tayga.info +tfile1.cc +thepiratebay.se +ton.local.twitter.com +torrent4me.com +tr2.tor2me.info +tr2.tor4me.info +tr2.torrent4me.com +tracker.coppersurfer.tk +tracker.cyberia.is +tracker.internetwarriors.net +tracker.leechers-paradise.org +tracker.opentrackr.org +tracker.pirateparty.gr +t-ru.org +tvrain.ru +twitter.com +upload.telegram.org +venus-1.web.telegram.org +venus.web.telegram.org +vesta-1.web.telegram.org +vesta.web.telegram.org +video.google.com +vpn.telegram.org +wap.telegram.org +webdisk.telegram.org +webmail.telegram.org +web.telegram.org +whm.telegram.org +wiki.telegram.org +wp.telegram.org +ww1.telegram.org +www1.telegram.org +www1.thepiratebay3.to +www2.telegram.org +www.autodesk.com +www.autodesk.ru +www.bbc.com +www.bitdefender.com +www.canva.com +www.currenttime.tv +www.dellcdn.com +www.dell.com +www.desktop.telegram.org +www.dw.com +www.grepular.com +www.instagram.com +www.intel.com +www.linkedin.com +www.me.telegram.org +www.openvswitch.org +www.sketchup.com +www.svoboda.org +www.torproject.org +www.youtube.com +.xda-developers.com +youtu.be +.youtube.com +youtubeeducation.com +youtubekids.com +youtube-nocookie.com +youtube-ui.l.google.com +yt3.ggpht.com +yt.be +.ytimg.com +ytimg.com +zona.media \ No newline at end of file diff --git a/scripts/deploy-to-gateway.sh b/scripts/deploy-to-gateway.sh new file mode 100644 index 0000000..c5e67db --- /dev/null +++ b/scripts/deploy-to-gateway.sh @@ -0,0 +1,40 @@ +#!/bin/bash +set -e + +# Пути к конфигурационным файлам +TARGET_DIR="/opt/appdata/pihole/etc/dnsmasq.d" +IPSET_CONF="91-ipset-bbrkn.conf" +RESOLVE_CONF="92-resolve-bbrkn.conf" + +echo "Deploying configuration files to $TARGET_DIR" + +# Создаем резервные копии существующих файлов +if [ -f "$TARGET_DIR/$IPSET_CONF" ]; then + cp "$TARGET_DIR/$IPSET_CONF" "$TARGET_DIR/$IPSET_CONF.backup.$(date +%Y%m%d-%H%M%S)" +fi + +if [ -f "$TARGET_DIR/$RESOLVE_CONF" ]; then + cp "$TARGET_DIR/$RESOLVE_CONF" "$TARGET_DIR/$RESOLVE_CONF.backup.$(date +%Y%m%d-%H%M%S)" +fi + +# Копируем новые файлы +cp "/tmp/$IPSET_CONF" "$TARGET_DIR/$IPSET_CONF" +cp "/tmp/$RESOLVE_CONF" "$TARGET_DIR/$RESOLVE_CONF" + + +# Перезапускаем dnsmasq через Pi-hole контейнер +echo "Restarting Pi-hole container..." +docker restart pihole + +# Проверяем успешность перезапуска +sleep 5 +if ! docker ps | grep -q pihole; then + echo "Error: Pi-hole container failed to start" + exit 1 +fi + +echo "Deployment completed successfully" + +# Уведомляем о количестве обработанных доменов +DOMAIN_COUNT=$(grep -c '^ipset=' "$TARGET_DIR/$IPSET_CONF" || echo "0") +echo "Applied configuration for $DOMAIN_COUNT domains" diff --git a/scripts/generate-configs.sh b/scripts/generate-configs.sh new file mode 100644 index 0000000..f9b8ae7 --- /dev/null +++ b/scripts/generate-configs.sh @@ -0,0 +1,28 @@ +#!/bin/bash +set -e + +# Читаем домены из файла, исключая комментарии и пустые строки +DOMAINS=$(grep -v '^#' domains.txt | grep -v '^$') + +# Создаем временные файлы +IPSET_CONF="/tmp/91-ipset-bbrkn.conf" +RESOLVE_CONF="/tmp/92-resolve-bbrkn.conf" + +# Очищаем файлы +> "$IPSET_CONF" +> "$RESOLVE_CONF" + +echo "Generating configuration files..." + +# Генерируем конфигурации для каждого домена +while read -r domain; do + # Добавляем в ipset конфигурацию + echo "ipset=/$domain/bbrkn" >> "$IPSET_CONF" + + # Добавляем в resolve конфигурацию + echo "server=/$domain/8.8.8.8" >> "$RESOLVE_CONF" +done <<< "$DOMAINS" + +echo "Configuration files generated:" +echo "- $IPSET_CONF ($(wc -l < "$IPSET_CONF") entries)" +echo "- $RESOLVE_CONF ($(wc -l < "$RESOLVE_CONF") entries)"