Обновить
0

Пользователь

Отправить сообщение

При обновлении подписки, если серверы обновились - появляется куча мусора в URL TEST. Ранее руками прожал все конфиги, чтобы они туда добавились. Возможно стоит рассмотреть вопрос чистки от мусора.

Скрытый текст

В дефолте нет, но помогает скрипт

Добавить в scheduled tasks

13 */12 * * * /root/sub2podkop.sh --url ‘https://ключ вашей подписки’ --match ‘SMART,BRIDGE’ --apply --section main --out /root/vless.txt

Использование:

Usage: /root/sub2podkop.sh --url URL [–section main|0] [–only vless] [–match a,b] [–mask ‘x’] [–out /tmp/links.txt] [–apply] [–no-restart] [–no-backup]

sub2podkop.sh

Скрытый текст
#!/bin/sh
set -eu

URL=""
SECTION="main"
KEY="urltest_proxy_links"
ONLY="vless"
MATCH=""
MASK=""
UA="podkop"
OUT=""
APPLY=0
RESTART=1
BACKUP=1

usage() {
  echo "Usage:"
  echo "  $0 --url URL [--section main|0] [--only vless] [--match a,b] [--mask '                                   *x*'] [--out /tmp/links.txt] [--apply] [--no-restart] [--no-backup]"
  exit 1
}

# --- args ---
while [ $# -gt 0 ]; do
  case "$1" in
    --url) URL="$2"; shift 2;;
    --section) SECTION="$2"; shift 2;;
    --key) KEY="$2"; shift 2;;
    --only) ONLY="$2"; shift 2;;
    --match) MATCH="$2"; shift 2;;
    --mask) MASK="$2"; shift 2;;
    --ua) UA="$2"; shift 2;;
    --out) OUT="$2"; shift 2;;
    --apply) APPLY=1; shift 1;;
    --no-restart) RESTART=0; shift 1;;
    --no-backup) BACKUP=0; shift 1;;
    -h|--help) usage;;
    *) echo "Unknown arg: $1"; usage;;
  esac
done

[ -n "$URL" ] || usage

TMPDIR="/tmp/sub2podkop.$$"
RAW="$TMPDIR/raw"
TXT="$TMPDIR/txt"
LIST="$TMPDIR/list"
mkdir -p "$TMPDIR"
trap 'rm -rf "$TMPDIR"' EXIT

# --- fetch ---
if command -v curl >/dev/null 2>&1; then
  curl -fsSL -A "$UA" "$URL" > "$RAW"
elif command -v wget >/dev/null 2>&1; then
  wget -qO- --header="User-Agent: $UA" "$URL" > "$RAW"
else
  echo "ERROR: need curl or wget" >&2
  exit 2
fi

# --- detect base64 vs plain ---
# If it contains any scheme markers, treat as plain text.
if grep -qiE '^(vless|vmess|ss|trojan|hysteria2|tuic)://' "$RAW" 2>/dev/null; th                                   en
  cp "$RAW" "$TXT"
else
  # try base64 decode (common subscription)
  # OpenWrt base64 may need -d
  if base64 -d < "$RAW" > "$TXT" 2>/dev/null; then
    :
  else
    # fallback: maybe already plain but not line-starting; use raw
    cp "$RAW" "$TXT"
  fi
fi

# --- extract links (line-based) ---
# keep only chosen scheme
SCHEME="$(printf '%s' "$ONLY" | tr 'A-Z' 'a-z')"
grep -aiE "^${SCHEME}://" "$TXT" > "$LIST" || true

# If nothing found, try "any scheme anywhere in line" extraction:
if [ ! -s "$LIST" ]; then
  # best-effort: find scheme:// in text (may contain extra chars)
  # keep whole line containing scheme://
  grep -aiE "${SCHEME}://" "$TXT" > "$LIST" || true
fi

[ -s "$LIST" ] || { echo "ERROR: no links found after decode/extract" >&2; exit                                    3; }

# --- filter: match words (OR, case-insensitive) ---
if [ -n "$MATCH" ]; then
  # build extended regex: word1|word2|...
  RE="$(printf '%s' "$MATCH" | tr ',' '|' )"
  grep -aiE "$RE" "$LIST" > "$LIST.f" || true
  mv "$LIST.f" "$LIST"
fi

# --- filter: mask (glob) ---
if [ -n "$MASK" ]; then
  : > "$LIST.f"
  # lower-case compare
  MASK_LC="$(printf '%s' "$MASK" | tr 'A-Z' 'a-z')"
  while IFS= read -r line; do
    lc="$(printf '%s' "$line" | tr 'A-Z' 'a-z')"
    case "$lc" in
      $MASK_LC) echo "$line" >> "$LIST.f" ;;
    esac
  done < "$LIST"
  mv "$LIST.f" "$LIST"
fi

# --- de-dup preserve order ---
awk 'NF && !seen[$0]++' "$LIST" > "$LIST.u"
mv "$LIST.u" "$LIST"

CNT="$(wc -l < "$LIST" | tr -d ' ')"

# --- output file ---
if [ -n "$OUT" ]; then
  cp "$LIST" "$OUT"
fi

echo "OK: links=$CNT"

# --- apply to podkop ---
if [ "$APPLY" -eq 1 ]; then
  # section allow index 0 -> @section[0]
  if printf '%s' "$SECTION" | grep -qE '^[0-9]+$'; then
    SEC="@section[$SECTION]"
  else
    SEC="$SECTION"
  fi

  UCI_KEY="podkop.${SEC}.${KEY}"

  if [ "$BACKUP" -eq 1 ]; then
    ts="$(date +%Y%m%d_%H%M%S)"
    cp -a /etc/config/podkop "/root/podkop.conf.bak.${ts}"
  fi

  uci -q delete "$UCI_KEY" || true

  while IFS= read -r url; do
    [ -n "$url" ] && uci add_list "${UCI_KEY}=${url}"
  done < "$LIST"

  uci commit podkop

  if [ "$RESTART" -eq 1 ]; then
    service podkop restart
  fi

  echo "OK: applied to ${UCI_KEY}"
fi

Вопрос очень актуальный. Я добавил подписку, где есть часть серверов для обхода белых списков. Если я добавляю подписку целиком и есть фильтр для этой подписки, крайне странно чтобы я выбирал руками для URL test. А если серверы меняются, каждый раз заходить и руками править?

Моя логика такая: Добавил подписку - установил фильтр для необходимого - получил все эти списки в Url test и всё работает автоматически.

Видимо и сюда придётся писать какой-то скрипт, чтобы перезапускал сервис правя urltest на все сервера.

Поставил себе цель детально сравнить ваш проект и podkop :)

Возможно стоит добавить эту информацию если не в шапку, то в первый абзац поста. Изначально тоже была внутренняя борьба ставить что-то на комп для настройки.

Вообще очень интересно сколько человек, которые могут только включить роутер OpenWRT и ничего не понимают, кроме этого (раз уж в статье есть картинка "Это ваш беспроводной роутер") с помощью Re:Sputnik настроили от начала до конца? Может опрос прикрутите? Стоит ли тратить столько сил на развитие графического интерфейса для Re:Homeproxy, учитывая, что в Luci можно и так настроить?

Я вот себе таких людей особо не представляю.

В чем преимущество данного решения перед podkop на OWRT?

В статье в двух местах говорится про кеширование, а имеется ввиду хеширование...

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность