mirror of
https://github.com/remittor/zapret-openwrt.git
synced 2026-01-07 00:58:50 +03:00
Compare commits
36 Commits
v71.202509
...
v72.202512
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
565ef66299 | ||
|
|
1364bcbf1a | ||
|
|
57ba961b07 | ||
|
|
3a37ec9172 | ||
|
|
e0ecbf5145 | ||
|
|
cc7ae8a91c | ||
|
|
50ce130e1c | ||
|
|
ac97bfae89 | ||
|
|
058b3af2b3 | ||
|
|
029923bac7 | ||
|
|
6aa114e87f | ||
|
|
ebd13f65c3 | ||
|
|
a95c938c78 | ||
|
|
98dcd66524 | ||
|
|
1e2a9f48a2 | ||
|
|
f63ce9d1e2 | ||
|
|
3f17898289 | ||
|
|
52bd72079c | ||
|
|
6627678827 | ||
|
|
5691882d5e | ||
|
|
fee8b480b0 | ||
|
|
2fb3ac3cc1 | ||
|
|
f443195a44 | ||
|
|
5b65e2078f | ||
|
|
18b9394679 | ||
|
|
6ea3432d0c | ||
|
|
5b28626ac0 | ||
|
|
6cbf1e3c47 | ||
|
|
2b04a6f37a | ||
|
|
8ed3a6e3ae | ||
|
|
55daf2f006 | ||
|
|
c60b70a02f | ||
|
|
44ff0ec3e1 | ||
|
|
65d90d8ed3 | ||
|
|
e8dfb187e3 | ||
|
|
1b2057f00f |
15
.github/workflows/build.yml
vendored
15
.github/workflows/build.yml
vendored
@@ -137,14 +137,15 @@ jobs:
|
||||
- mipsel_24kc_24kf
|
||||
- mipsel_74kc
|
||||
- mipsel_mips32
|
||||
- riscv64_riscv64
|
||||
- x86_64
|
||||
isTestOrFake:
|
||||
- ${{ needs.check.outputs.test_build == 'true' || needs.check.outputs.fake_build == 'true' }}
|
||||
exclude:
|
||||
- branch: openwrt-24.10
|
||||
arch: riscv64_riscv64
|
||||
- branch: SNAPSHOT
|
||||
arch: arm_cortex-a9_vfpv3-d16
|
||||
- branch: SNAPSHOT
|
||||
arch: arm_cortex-a7_neon-vfpv4
|
||||
- { isTestOrFake: true }
|
||||
include:
|
||||
- branch: openwrt-24.10
|
||||
@@ -172,7 +173,8 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
# gpg --verbose --recv-keys 0x1D53D1877742E911
|
||||
gpg --verbose --import <(wget -qO- 'https://git.openwrt.org/?p=keyring.git;a=blob_plain;f=gpg/0x1D53D1877742E911.asc')
|
||||
# gpg --verbose --import <(wget -qO- 'https://git.openwrt.org/?p=keyring.git;a=blob_plain;f=gpg/0x1D53D1877742E911.asc')
|
||||
gpg --verbose --import <(wget -qO- 'https://raw.githubusercontent.com/openwrt/keyring/refs/heads/master/gpg/0x1D53D1877742E911.asc')
|
||||
# disable check signatures
|
||||
sed -i 's/gpg --/#gpg --/g' setup.sh
|
||||
# disable cleanup keys
|
||||
@@ -208,6 +210,8 @@ jobs:
|
||||
PKGDIR=$GITHUB_WORKSPACE/zapret-openwrt
|
||||
MKFN=$PKGDIR/luci-app-zapret/Makefile
|
||||
PKGVER=$( grep -s '^PKG_VERSION:=.*' $MKFN | cut -d'=' -f2 )
|
||||
PKGREL=$( grep -s '^PKG_RELEASE:=.*' $MKFN | cut -d'=' -f2 )
|
||||
[ "$PKGREL" != "1" ] && PKGVER=$PKGVER-r$PKGREL
|
||||
echo "PKG_VERSION = $PKGVER"
|
||||
cp -vr $PKGDIR ./package/zapret-openwrt/
|
||||
|
||||
@@ -339,12 +343,13 @@ jobs:
|
||||
ls -lh ./public/*.zip
|
||||
|
||||
- name: Upload assets
|
||||
uses: andelf/nightly-release@main
|
||||
uses: softprops/action-gh-release@v2
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
TAG: ${{ needs.check.outputs.tag }}
|
||||
with:
|
||||
prerelease: ${{ env.TEST_BUILD == 'true' || env.FAKE_BUILD == 'true' }}
|
||||
draft: ${{ env.TEST_BUILD == 'true' || env.FAKE_BUILD == 'true' }}
|
||||
prerelease: true
|
||||
tag_name: v${{ needs.build.outputs.pkgver }}${{ env.TAG_SUFFIX }}
|
||||
name: zapret v${{ needs.build.outputs.pkgver }}
|
||||
body: |
|
||||
|
||||
140
.github/workflows/releases.yml
vendored
Normal file
140
.github/workflows/releases.yml
vendored
Normal file
@@ -0,0 +1,140 @@
|
||||
name: Update releases.json
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["build"]
|
||||
types: [completed]
|
||||
release:
|
||||
types: [published, created, edited]
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
update-json:
|
||||
if: |
|
||||
github.event_name != 'workflow_run' ||
|
||||
github.event.workflow_run.conclusion == 'success'
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout gh-pages
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: gh-pages
|
||||
continue-on-error: true
|
||||
|
||||
- name: Save FULL releases.json
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
OWNER: ${{ github.repository_owner }}
|
||||
REPO: ${{ github.event.repository.name }}
|
||||
run: |
|
||||
curl -s \
|
||||
-H "Authorization: Bearer $GH_TOKEN" \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
https://api.github.com/repos/$OWNER/$REPO/releases \
|
||||
> releases.json
|
||||
|
||||
- name: Generate releases_BRANCH.json
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
OWNER: ${{ github.repository_owner }}
|
||||
REPO: ${{ github.event.repository.name }}
|
||||
run: |
|
||||
curl -s \
|
||||
-H "Authorization: Bearer $GH_TOKEN" \
|
||||
-H "Accept: application/vnd.github+json" \
|
||||
https://api.github.com/repos/$OWNER/$REPO/releases \
|
||||
| jq '
|
||||
def normalize_release:
|
||||
{
|
||||
id: .id,
|
||||
version: (.tag_name | sub("^v"; "")),
|
||||
tag: .tag_name,
|
||||
name: .name,
|
||||
draft: .draft,
|
||||
prerelease: .prerelease,
|
||||
created_at: .created_at,
|
||||
published_at: .published_at,
|
||||
url: .html_url,
|
||||
assets: (
|
||||
.assets | map({
|
||||
id: .id,
|
||||
name: .name,
|
||||
size: .size,
|
||||
content_type: .content_type,
|
||||
browser_download_url: .browser_download_url
|
||||
})
|
||||
)
|
||||
};
|
||||
sort_by(.created_at) | reverse
|
||||
| {
|
||||
zap1: (
|
||||
map(select(.draft == false))
|
||||
| map(select(.name | startswith("zapret ")))
|
||||
| .[0:20]
|
||||
| {
|
||||
generated_at: (now | todate),
|
||||
releases: map(normalize_release)
|
||||
}
|
||||
),
|
||||
zap2: (
|
||||
map(select(.draft == false))
|
||||
| map(select(.name | startswith("zapret2 ")))
|
||||
| .[0:20]
|
||||
| {
|
||||
generated_at: (now | todate),
|
||||
releases: map(normalize_release)
|
||||
}
|
||||
)
|
||||
}
|
||||
' \
|
||||
| tee \
|
||||
>(jq '.zap1' > releases_zap1.json) \
|
||||
>(jq '.zap2' > releases_zap2.json)
|
||||
|
||||
- name: Generate releases_BRANCH_ARCH.json
|
||||
run: |
|
||||
BRANCHES=("zap1" "zap2")
|
||||
for ARCH in $(jq -r '.[] | .assets[].name | capture("^[^_]+_[^_]+_(?<arch>.+)\\.zip$").arch' releases.json | sort -u); do
|
||||
for BRANCH in "${BRANCHES[@]}"; do
|
||||
if [ "$BRANCH" == "zap1" ]; then
|
||||
PREFIX="zapret "
|
||||
else
|
||||
PREFIX="zapret2 "
|
||||
fi
|
||||
jq --arg prefix "$PREFIX" --arg arch "$ARCH" '
|
||||
sort_by(.created_at) | reverse
|
||||
| map(select(.draft == false))
|
||||
| map(select(.name | startswith($prefix)))
|
||||
| .[0:20]
|
||||
| map(
|
||||
. as $release
|
||||
| {
|
||||
tag: $release.tag_name,
|
||||
name: $release.name,
|
||||
prerelease: $release.prerelease,
|
||||
created_at: $release.created_at,
|
||||
updated_at: $release.updated_at,
|
||||
published_at: $release.published_at,
|
||||
url: $release.html_url,
|
||||
assets: ($release.assets | map(select(.name | test("_\($arch)\\.zip$"))))
|
||||
}
|
||||
)
|
||||
| { generated_at: (now | todate), releases: . }
|
||||
' releases.json > "releases_${BRANCH}_${ARCH}.json"
|
||||
done
|
||||
done
|
||||
|
||||
- name: Commit and push ALL releases.json
|
||||
run: |
|
||||
mkdir -p releases
|
||||
mv releases*.json releases/
|
||||
git config user.name "github-actions"
|
||||
git config user.email "github-actions@github.com"
|
||||
git checkout -B gh-pages
|
||||
git add releases/*
|
||||
git commit -m "Update releases" || exit 0
|
||||
git push origin gh-pages
|
||||
@@ -5,7 +5,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-zapret
|
||||
PKG_VERSION:=71.20250918
|
||||
PKG_VERSION:=72.20251216
|
||||
PKG_RELEASE:=1
|
||||
PKG_LICENSE:=MIT
|
||||
PKG_MAINTAINER:=remittor <https://github.com/remittor>
|
||||
|
||||
|
||||
@@ -173,16 +173,16 @@ return view.extend({
|
||||
|
||||
let tab = E('div', { 'data-tab': tabname, 'data-tab-title': tabNameText }, [
|
||||
E('div', { 'id': 'content_dmnlog_' + log_num }, [
|
||||
E('div', {'style': 'padding-bottom: 20px'}, [ scrollDownButton ]),
|
||||
E('div', {'style': 'margin-bottom: 20px; '}, [ scrollDownButton ]),
|
||||
E('textarea', {
|
||||
'id': log_id,
|
||||
'name': log_name,
|
||||
'style': 'font-size:12px',
|
||||
'style': 'font-size:12px; width: 100%; max-height: 50vh;',
|
||||
'readonly': 'readonly',
|
||||
'wrap': 'off',
|
||||
'rows': logdata[log_num].rows,
|
||||
}, [ log_text ]),
|
||||
E('div', {'style': 'padding-bottom: 20px'}, [ scrollUpButton ]),
|
||||
E('div', {'style': 'margin-top: 20px'}, [ scrollUpButton ]),
|
||||
]),
|
||||
]);
|
||||
|
||||
|
||||
@@ -21,8 +21,7 @@ return view.extend({
|
||||
start : elems.btn_start || document.getElementById('btn_start'),
|
||||
restart : elems.btn_restart || document.getElementById('btn_restart'),
|
||||
stop : elems.btn_stop || document.getElementById('btn_stop'),
|
||||
update : elems.btn_update || document.getElementById('btn_update'),
|
||||
reset : elems.btn_update || document.getElementById('btn_reset'),
|
||||
reset : elems.btn_reset || document.getElementById('btn_reset'),
|
||||
};
|
||||
},
|
||||
|
||||
@@ -37,7 +36,6 @@ return view.extend({
|
||||
btn.start.disabled = flag;
|
||||
btn.restart.disabled = flag;
|
||||
btn.stop.disabled = flag;
|
||||
btn.update.disabled = true; // TODO
|
||||
btn.reset.disabled = (error_code == 0) ? flag : false;
|
||||
},
|
||||
|
||||
@@ -48,6 +46,8 @@ return view.extend({
|
||||
tools.getSvcInfo(), // svc_info
|
||||
fs.exec('/bin/busybox', [ 'ps' ]), // process list
|
||||
fs.exec(tools.packager.path, tools.packager.args), // installed packages
|
||||
tools.getStratList(), // nfqws strategy list
|
||||
fs.exec('/bin/cat', [ '/etc/openwrt_release' ]), // CPU arch
|
||||
uci.load(tools.appName), // config
|
||||
]).catch(e => {
|
||||
ui.addNotification(null, E('p', _('Unable to execute or read contents')
|
||||
@@ -61,7 +61,7 @@ return view.extend({
|
||||
let cfg = uci.get(tools.appName, 'config');
|
||||
if (!status_array || cfg == null || typeof(cfg) !== 'object') {
|
||||
let elem_status = elems.status || document.getElementById("status");
|
||||
elem_status.innerHTML = tools.makeStatusString(null);
|
||||
elem_status.innerHTML = tools.makeStatusString(null, '', '');
|
||||
ui.addNotification(null, E('p', _('Unable to read the contents') + ': setAppStatus()'));
|
||||
this.disableButtons(true, -1, elems);
|
||||
return;
|
||||
@@ -71,6 +71,11 @@ return view.extend({
|
||||
let svc_info = status_array[2]; // stdout: JSON as text
|
||||
let proc_list = status_array[3]; // stdout: multiline text
|
||||
let pkg_list = status_array[4]; // stdout: installed packages
|
||||
let stratlist = status_array[5]; // array of strat names
|
||||
let sys_info = status_array[6]; // stdout: openwrt distrib info
|
||||
|
||||
this.nfqws_strat_list = stratlist;
|
||||
this.pkg_arch = tools.getConfigPar(sys_info.stdout, 'DISTRIB_ARCH', 'unknown');
|
||||
|
||||
//console.log('svc_en: ' + svc_en.code);
|
||||
svc_en = (svc_en.code == 0) ? true : false;
|
||||
@@ -97,7 +102,6 @@ return view.extend({
|
||||
svcinfo = tools.decode_svc_info(svc_en, svc_info, proc_list, cfg);
|
||||
}
|
||||
let btn = this.get_svc_buttons(elems);
|
||||
btn.update.disabled = true; // TODO
|
||||
btn.reset.disabled = false;
|
||||
|
||||
if (Number.isInteger(svcinfo)) {
|
||||
@@ -118,7 +122,7 @@ return view.extend({
|
||||
}
|
||||
}
|
||||
let elem_status = elems.status || document.getElementById("status");
|
||||
elem_status.innerHTML = tools.makeStatusString(svcinfo, cfg.FWTYPE, 'user_only');
|
||||
elem_status.innerHTML = tools.makeStatusString(svcinfo, this.pkg_arch, '');
|
||||
|
||||
if (!poll.active()) {
|
||||
poll.start();
|
||||
@@ -147,7 +151,7 @@ return view.extend({
|
||||
});
|
||||
},
|
||||
|
||||
serviceActionEx: function(action, button, hide_modal = false) {
|
||||
serviceActionEx: function(action, button, args = [ ], hide_modal = false) {
|
||||
if (button) {
|
||||
let elem = document.getElementById(button);
|
||||
this.disableButtons(true, elem);
|
||||
@@ -164,7 +168,7 @@ return view.extend({
|
||||
}
|
||||
else if (action == 'reset') {
|
||||
exec_cmd = tools.defaultCfgPath;
|
||||
exec_arg = [ 'sync' ]; // restore config + sync configs
|
||||
exec_arg = args; // (reset_ipset)(sync) ==> restore all configs + sync config
|
||||
errmsg = _('Unable to run restore-def-cfg.sh script.');
|
||||
action = null;
|
||||
} else {
|
||||
@@ -228,6 +232,33 @@ return view.extend({
|
||||
|
||||
dialogResetCfg: function(ev) {
|
||||
ev.target.blur();
|
||||
|
||||
let reset_base = E('label', [
|
||||
E('input', { type: 'checkbox', id: 'cfg_reset_base', checked: true }),
|
||||
' ', _('Restore all base settings')
|
||||
]);
|
||||
|
||||
let reset_ipset = E('label', [
|
||||
E('input', { type: 'checkbox', id: 'cfg_reset_ipset', checked: true }),
|
||||
' ', _('Restore ipset configs')
|
||||
]);
|
||||
|
||||
let set_autohostlist = E('label', [
|
||||
E('input', { type: 'checkbox', id: 'cfg_autohostlist', checked: true }),
|
||||
' ', _('Set AutoHostList mode')
|
||||
]);
|
||||
|
||||
let strat_list = [ ];
|
||||
strat_list.push( E('option', { value: 'strat__skip__' }, [ '-' ] ) );
|
||||
for (let id = 0; id < this.nfqws_strat_list.length; id++) {
|
||||
let strat = '' + this.nfqws_strat_list[id];
|
||||
strat_list.push( E('option', { value: 'strat_' + id }, [ strat ] ) );
|
||||
}
|
||||
let nfqws_strat = E('label', [
|
||||
_('NFQWS_OPT strategy: '),
|
||||
E('select', { id: 'cfg_nfqws_strat' }, strat_list)
|
||||
]);
|
||||
|
||||
let cancel_button = E('button', {
|
||||
'class': btn_style_neutral,
|
||||
'click': ui.hideModal,
|
||||
@@ -238,12 +269,35 @@ return view.extend({
|
||||
}, _('Reset settings'));
|
||||
resetcfg_btn.onclick = ui.createHandlerFn(this, () => {
|
||||
//cancel_button.disabled = true;
|
||||
return this.serviceActionEx('reset', resetcfg_btn, true);
|
||||
let opt_flags = '';
|
||||
if (document.getElementById('cfg_reset_base').checked == false) {
|
||||
opt_flags += '(skip_base)';
|
||||
};
|
||||
if (document.getElementById('cfg_reset_ipset').checked) {
|
||||
opt_flags += '(reset_ipset)';
|
||||
};
|
||||
if (document.getElementById('cfg_autohostlist').checked) {
|
||||
opt_flags += '(set_mode_autohostlist)';
|
||||
};
|
||||
//console.log('RESET: opt_flags = ' + opt_flags);
|
||||
let sel_strat = document.getElementById('cfg_nfqws_strat');
|
||||
let opt_strat = sel_strat.options[sel_strat.selectedIndex].text;
|
||||
//console.log('RESET: strat = ' + opt_strat);
|
||||
opt_flags += '(sync)';
|
||||
let args = [ opt_flags, opt_strat ];
|
||||
return this.serviceActionEx('reset', resetcfg_btn, args, true);
|
||||
});
|
||||
|
||||
ui.showModal(_('Reset settings to default'), [
|
||||
E('div', { 'class': 'cbi-section' }, [
|
||||
E('p', _('All settings will be reset to default. Continue?')),
|
||||
reset_base,
|
||||
E('br'), E('br'),
|
||||
reset_ipset,
|
||||
E('br'), E('br'),
|
||||
set_autohostlist,
|
||||
E('br'), E('br'),
|
||||
nfqws_strat,
|
||||
E('br'), E('br')
|
||||
]),
|
||||
E('div', { 'class': 'right' }, [
|
||||
cancel_button,
|
||||
@@ -329,10 +383,6 @@ return view.extend({
|
||||
btn_stop.onclick = ui.createHandlerFn(this, this.serviceAction, 'stop', 'btn_stop');
|
||||
layout_append(_('Service daemons control'), null, [ btn_start, btn_restart, btn_stop ] );
|
||||
|
||||
let btn_update = create_btn('btn_update', btn_style_action, _('Update'));
|
||||
btn_update.onclick = ui.createHandlerFn(this, () => { this.appAction('update', 'btn_update') });
|
||||
layout_append(_('Update HostLists'), null, [ btn_update ] );
|
||||
|
||||
let btn_reset = create_btn('btn_reset', btn_style_action, _('Reset settings'));
|
||||
btn_reset.onclick = L.bind(this.dialogResetCfg, this);
|
||||
layout_append(_('Reset settings to default'), null, [ btn_reset ] );
|
||||
@@ -344,7 +394,6 @@ return view.extend({
|
||||
"btn_start": btn_start,
|
||||
"btn_restart": btn_restart,
|
||||
"btn_stop": btn_stop,
|
||||
"btn_update": btn_update,
|
||||
"btn_reset": btn_reset,
|
||||
};
|
||||
this.setAppStatus(status_array, elems);
|
||||
|
||||
@@ -90,11 +90,11 @@ return view.extend({
|
||||
o.rmempty = false;
|
||||
o.default = 1;
|
||||
|
||||
o = s.taboption(tabname, form.ListValue, 'MODE_FILTER', _('MODE_FILTER'));
|
||||
//o = s.taboption(tabname, form.ListValue, 'MODE_FILTER', _('MODE_FILTER'));
|
||||
//o.value('none', 'none');
|
||||
//o.value('ipset', 'ipset');
|
||||
o.value('hostlist', 'hostlist');
|
||||
o.value('autohostlist', 'autohostlist');
|
||||
//o.value('hostlist', 'hostlist');
|
||||
//o.value('autohostlist', 'autohostlist');
|
||||
|
||||
o = s.taboption(tabname, form.Value, 'WS_USER', _('WS_USER'));
|
||||
o.rmempty = false;
|
||||
@@ -114,7 +114,7 @@ return view.extend({
|
||||
o.rawhtml = true;
|
||||
o.default = '<hr style="width: 620px; height: 1px; margin: 1px 0 1px; border-top: 1px solid;">';
|
||||
if (url) {
|
||||
o.default += '<br/>' + _('Help') + ': <a href=%s>%s</a>'.format(url);
|
||||
o.default += '<br/>' + _('Help') + ': <a target=_blank href=%s>%s</a>'.format(url);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -149,7 +149,7 @@ return view.extend({
|
||||
};
|
||||
let desc = locname;
|
||||
if (multiline == 2) {
|
||||
desc += '<br/>' + _('Example') + ': <a href=%s>%s</a>'.format(tools.nfqws_opt_url);
|
||||
desc += '<br/>' + _('Example') + ': <a target=_blank href=%s>%s</a>'.format(tools.nfqws_opt_url);
|
||||
}
|
||||
btn.onclick = () => new tools.longstrEditDialog('config', param, param, desc, rows, multiline).show();
|
||||
};
|
||||
@@ -212,6 +212,20 @@ return view.extend({
|
||||
|
||||
tabname = 'autohostlist_tab';
|
||||
s.tab(tabname, _('AutoHostList'));
|
||||
|
||||
o = s.taboption(tabname, form.Flag, 'MODE_FILTER', _('Use AutoHostList mode'));
|
||||
o.rmempty = false;
|
||||
o.default = '0';
|
||||
o.validate = function(section_id, value) { return true; };
|
||||
o.load = function(section_id) {
|
||||
return uci.load(tools.appName).then(L.bind(function() {
|
||||
var v = uci.get(tools.appName, section_id, 'MODE_FILTER');
|
||||
return (v === 'autohostlist') ? '1' : '0';
|
||||
}, this));
|
||||
};
|
||||
o.write = function(section_id, value) {
|
||||
return uci.set(tools.appName, section_id, 'MODE_FILTER', value === '1' ? 'autohostlist' : 'hostlist');
|
||||
};
|
||||
|
||||
o = s.taboption(tabname, form.Value, 'AUTOHOSTLIST_RETRANS_THRESHOLD', _('RETRANS_THRESHOLD'));
|
||||
o.rmempty = false;
|
||||
@@ -349,9 +363,19 @@ return view.extend({
|
||||
tabname = 'custom_d_tab';
|
||||
s.tab(tabname, 'custom.d');
|
||||
|
||||
o = s.taboption(tabname, form.Flag, 'DISABLE_CUSTOM', _('DISABLE_CUSTOM'));
|
||||
o = s.taboption(tabname, form.Flag, 'DISABLE_CUSTOM', _('Use custom.d scripts'));
|
||||
o.rmempty = false;
|
||||
o.default = 0;
|
||||
o.default = '0';
|
||||
o.validate = function(section_id, value) { return true; };
|
||||
o.load = function(section_id) {
|
||||
return uci.load(tools.appName).then(L.bind(function() {
|
||||
var v = uci.get(tools.appName, section_id, 'DISABLE_CUSTOM');
|
||||
return (v === '1') ? '0' : '1';
|
||||
}, this));
|
||||
};
|
||||
o.write = function(section_id, value) {
|
||||
return uci.set(tools.appName, section_id, 'DISABLE_CUSTOM', value === '1' ? '0' : '1');
|
||||
};
|
||||
|
||||
add_delim(s);
|
||||
|
||||
@@ -363,7 +387,16 @@ return view.extend({
|
||||
o.inputtitle = _('Edit');
|
||||
o.inputstyle = 'edit btn';
|
||||
o.description = fn;
|
||||
let desc = (num == tools.discord_num) ? _('Example') + ': <a href=%s>%s</a>'.format(tools.discord_url) : '';
|
||||
let desc = '';
|
||||
if (num == tools.discord_num) {
|
||||
desc = _('Example') + ': ';
|
||||
for (let k = 0; k < tools.discord_url.length; k++) {
|
||||
let url = tools.discord_url[k];
|
||||
if (k > 0) desc += ' <br> ';
|
||||
const filename = url.substring(url.lastIndexOf("/") + 1).split("?")[0];
|
||||
desc += '<a target=_blank href=' + url + '>' + filename + '</a>';
|
||||
}
|
||||
}
|
||||
o.onclick = () => new tools.fileEditDialog(fn, name, desc, '', 15).show();
|
||||
}
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@ return baseclass.extend({
|
||||
appName : 'zapret',
|
||||
execPath : '/etc/init.d/zapret',
|
||||
syncCfgPath : '/opt/zapret/sync_config.sh',
|
||||
defCfgPath : '/opt/zapret/def-cfg.sh',
|
||||
defaultCfgPath : '/opt/zapret/restore-def-cfg.sh',
|
||||
|
||||
hostsGoogleFN : '/opt/zapret/ipset/zapret-hosts-google.txt',
|
||||
@@ -52,7 +53,11 @@ return baseclass.extend({
|
||||
customdPrefixList : [ 10, 20, 50, 60, 90 ] ,
|
||||
customdFileFormat : '/opt/zapret/init.d/openwrt/custom.d/%s-script.sh',
|
||||
discord_num : 50,
|
||||
discord_url : 'https://github.com/bol-van/zapret/blob/4e8e3a9ed9dbeb1156db68dfaa7b353051c13797/init.d/custom.d.examples.linux/50-discord',
|
||||
discord_url : [ 'https://github.com/bol-van/zapret/blob/4e8e3a9ed9dbeb1156db68dfaa7b353051c13797/init.d/custom.d.examples.linux/50-discord',
|
||||
'https://github.com/bol-van/zapret/blob/b251ea839cc8f04c45090314ef69fce69f2c00f2/init.d/custom.d.examples.linux/50-discord-media',
|
||||
'https://github.com/bol-van/zapret/blob/b251ea839cc8f04c45090314ef69fce69f2c00f2/init.d/custom.d.examples.linux/50-stun4all',
|
||||
'https://github.com/bol-van/zapret/tree/master/init.d/custom.d.examples.linux'
|
||||
],
|
||||
nfqws_opt_url : 'https://github.com/remittor/zapret-openwrt/discussions/168',
|
||||
|
||||
autoHostListFN : '/opt/zapret/ipset/zapret-hosts-auto.txt',
|
||||
@@ -135,6 +140,20 @@ return baseclass.extend({
|
||||
});
|
||||
},
|
||||
|
||||
getStratList: function() {
|
||||
this.init_consts();
|
||||
let exec_cmd = '/bin/busybox';
|
||||
let exec_arg = [ 'awk', '-F', '"', '/if \\[ "\\$strat" = "/ {print $4}', this.defCfgPath ];
|
||||
return fs.exec(exec_cmd, exec_arg).then(res => {
|
||||
if (res.code == 0) {
|
||||
return this.getWordsArray(res.stdout);
|
||||
}
|
||||
return [ ];
|
||||
}).catch(e => {
|
||||
ui.addNotification(null, E('p', _('Failed to get strat list: %s').format(e)));
|
||||
});
|
||||
},
|
||||
|
||||
handleServiceAction: function(name, action) {
|
||||
return this.callInitAction(name, action).then(success => {
|
||||
if (!success) {
|
||||
@@ -150,6 +169,18 @@ return baseclass.extend({
|
||||
return (v && typeof(v) === 'string') ? v.trim().replace(/\r?\n/g, '') : v;
|
||||
},
|
||||
|
||||
getWordsArray: function (text, { trim = true, removeEmpty = true } = {}) {
|
||||
const rawLines = text.split(/\n/);
|
||||
const processed = trim ? rawLines.map(line => line.trim()) : rawLines.slice();
|
||||
return removeEmpty ? processed.filter(line => line.length > 0) : processed;
|
||||
},
|
||||
|
||||
getConfigPar: function(txt, key, defval = null) {
|
||||
const re = new RegExp(`^${key}\\s*=\\s*(['"])(.*?)\\1`, 'm');
|
||||
const m = txt.match(re);
|
||||
return m ? m[2] : defval;
|
||||
},
|
||||
|
||||
decode_pkg_list: function(pkg_list) {
|
||||
let pkg_dict = { };
|
||||
let lines = pkg_list.trim().split('\n');
|
||||
@@ -257,7 +288,7 @@ return baseclass.extend({
|
||||
return result;
|
||||
},
|
||||
|
||||
makeStatusString: function(svcinfo, fwtype, bllist_preset) {
|
||||
makeStatusString: function(svcinfo, pkg_arch, bllist_preset) {
|
||||
let svc_autorun = _('Unknown');
|
||||
let svc_daemons = _('Unknown');
|
||||
|
||||
@@ -270,12 +301,18 @@ return baseclass.extend({
|
||||
svc_daemons += ' [' + svcinfo.dmn.working + '/' + svcinfo.dmn.total + ']';
|
||||
}
|
||||
}
|
||||
let update_mode = _('user entries only');
|
||||
|
||||
let td_name_width = 40;
|
||||
let td_name_style = `style="width: ${td_name_width}%; min-width:${td_name_width}%; max-width:${td_name_width}%;"`;
|
||||
let out = `
|
||||
<table class="table">
|
||||
<tr class="tr">
|
||||
<td class="td left" ${td_name_style}>
|
||||
${_('CPU architecture')}:
|
||||
</td>
|
||||
<td class="td left">
|
||||
${pkg_arch}
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="tr">
|
||||
<td class="td left" ${td_name_style}>
|
||||
${_('Service autorun status')}:
|
||||
@@ -292,22 +329,6 @@ return baseclass.extend({
|
||||
${svc_daemons}
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="tr">
|
||||
<td class="td left" ${td_name_style}>
|
||||
${_('FW type')}:
|
||||
</td>
|
||||
<td class="td left">
|
||||
${fwtype}
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="tr">
|
||||
<td class="td left" ${td_name_style}>
|
||||
${_('HostLists update mode')}:
|
||||
</td>
|
||||
<td class="td left">
|
||||
${update_mode}
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="tr">
|
||||
<td class="td left" ${td_name_style}>
|
||||
</td>
|
||||
@@ -444,9 +465,12 @@ return baseclass.extend({
|
||||
if (typeof(value) === 'string') {
|
||||
value = value.trim();
|
||||
if (this.multiline == 2) {
|
||||
value = value.replace(/\n\t\t\t--/g, "\n--");
|
||||
value = value.replace(/\n\t\t--/g, "\n--");
|
||||
value = value.replace(/\n\t--/g, "\n--");
|
||||
value = value.replace(/\n\t/g, "\n");
|
||||
value = value.replace(/\n\t/g, "\n");
|
||||
value = value.replace(/\n\t/g, "\n");
|
||||
value = value.replace(/\n\t/g, "\n");
|
||||
value = value.replace(/\n\t/g, "\n");
|
||||
value = value.replace(/\n\t/g, "\n");
|
||||
value = value.replace(/\n --/g, "\n--");
|
||||
value = value.replace(/\n --/g, "\n--");
|
||||
value = value.replace(/ --/g, "\n--");
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=zapret-ip2net
|
||||
PKG_VERSION:=71.20250918
|
||||
PKG_VERSION:=72.20251216
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_MAINTAINER:=bol-van
|
||||
PKG_LICENSE:=MIT
|
||||
@@ -9,8 +10,8 @@ PKG_LICENSE_FILES:=docs/LICENSE.txt
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/bol-van/zapret.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=06e7818240a861809a1981155981fef3f0fc4737
|
||||
PKG_SOURCE_DATE:=2025-09-18
|
||||
PKG_SOURCE_VERSION:=0bc09971914c9ec8ad5553bf0678cb827adf5839
|
||||
PKG_SOURCE_DATE:=2025-12-13
|
||||
|
||||
#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
#PKG_SOURCE_URL:=https://github.com/bol-van/zapret/archive/refs/tags/v$(PKG_VERSION).tar.gz?
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=zapret-mdig
|
||||
PKG_VERSION:=71.20250918
|
||||
PKG_VERSION:=72.20251216
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_MAINTAINER:=bol-van
|
||||
PKG_LICENSE:=MIT
|
||||
@@ -9,8 +10,8 @@ PKG_LICENSE_FILES:=docs/LICENSE.txt
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/bol-van/zapret.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=06e7818240a861809a1981155981fef3f0fc4737
|
||||
PKG_SOURCE_DATE:=2025-09-18
|
||||
PKG_SOURCE_VERSION:=0bc09971914c9ec8ad5553bf0678cb827adf5839
|
||||
PKG_SOURCE_DATE:=2025-12-13
|
||||
|
||||
#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
#PKG_SOURCE_URL:=https://github.com/bol-van/zapret/archive/refs/tags/v$(PKG_VERSION).tar.gz?
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=zapret-tpws
|
||||
PKG_VERSION:=71.20250918
|
||||
PKG_VERSION:=72.20251216
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_MAINTAINER:=bol-van
|
||||
PKG_LICENSE:=MIT
|
||||
@@ -9,8 +10,8 @@ PKG_LICENSE_FILES:=docs/LICENSE.txt
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/bol-van/zapret.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=06e7818240a861809a1981155981fef3f0fc4737
|
||||
PKG_SOURCE_DATE:=2025-09-18
|
||||
PKG_SOURCE_VERSION:=0bc09971914c9ec8ad5553bf0678cb827adf5839
|
||||
PKG_SOURCE_DATE:=2025-12-13
|
||||
|
||||
#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
#PKG_SOURCE_URL:=https://github.com/bol-van/zapret/archive/refs/tags/v$(PKG_VERSION).tar.gz?
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=zapret
|
||||
PKG_VERSION:=71.20250918
|
||||
PKG_VERSION:=72.20251216
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_MAINTAINER:=bol-van
|
||||
PKG_LICENSE:=MIT
|
||||
@@ -13,8 +14,8 @@ PKG_LICENSE_FILES:=docs/LICENSE.txt
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/bol-van/zapret.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=06e7818240a861809a1981155981fef3f0fc4737
|
||||
PKG_SOURCE_DATE:=2025-09-18
|
||||
PKG_SOURCE_VERSION:=0bc09971914c9ec8ad5553bf0678cb827adf5839
|
||||
PKG_SOURCE_DATE:=2025-12-13
|
||||
|
||||
#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
#PKG_SOURCE_URL:=https://github.com/bol-van/zapret/archive/refs/tags/v$(PKG_VERSION).tar.gz?
|
||||
@@ -54,6 +55,7 @@ define Package/$(PKG_NAME)/conffiles
|
||||
/etc/config/zapret
|
||||
/opt/zapret/config
|
||||
/opt/zapret/ipset/
|
||||
/opt/zapret/init.d/openwrt/custom.d/
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
@@ -66,6 +68,7 @@ define Package/$(PKG_NAME)/install
|
||||
#$(CP) $(PKG_BUILD_DIR)/docs/* $(1)/opt/zapret/docs/
|
||||
$(INSTALL_DIR) $(1)/opt/zapret/files
|
||||
$(CP) $(PKG_BUILD_DIR)/files/* $(1)/opt/zapret/files/
|
||||
$(CP) ./files/* $(1)/opt/zapret/files/
|
||||
$(INSTALL_DIR) $(1)/opt/zapret/ipset
|
||||
$(CP) $(PKG_BUILD_DIR)/ipset/* $(1)/opt/zapret/ipset/
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/blockcheck.sh $(1)/opt/zapret/blockcheck.sh
|
||||
@@ -79,8 +82,18 @@ define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_BIN) ./init.d.sh $(1)/etc/init.d/zapret
|
||||
$(INSTALL_DATA) ./config.default $(1)/opt/zapret/config.default
|
||||
$(INSTALL_DATA) ./ipset/zapret-hosts-google.txt $(1)/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
$(INSTALL_DATA) ./ipset/zapret-hosts-user.txt $(1)/opt/zapret/ipset/zapret-hosts-user.txt
|
||||
$(INSTALL_DATA) ./ipset/zapret-hosts-user-exclude.txt $(1)/opt/zapret/ipset/zapret-hosts-user-exclude.txt
|
||||
$(INSTALL_DATA) ./ipset/zapret-ip-exclude.txt $(1)/opt/zapret/ipset/zapret-ip-exclude.txt
|
||||
$(INSTALL_DIR) $(1)/opt/zapret/ipset_def
|
||||
$(INSTALL_DATA) ./ipset/zapret-hosts-google.txt $(1)/opt/zapret/ipset_def/zapret-hosts-google.txt
|
||||
$(INSTALL_DATA) ./ipset/zapret-hosts-user.txt $(1)/opt/zapret/ipset_def/zapret-hosts-user.txt
|
||||
$(INSTALL_DATA) ./ipset/zapret-hosts-user-exclude.txt $(1)/opt/zapret/ipset_def/zapret-hosts-user-exclude.txt
|
||||
$(INSTALL_DATA) ./ipset/zapret-ip-exclude.txt $(1)/opt/zapret/ipset_def/zapret-ip-exclude.txt
|
||||
$(INSTALL_DIR) $(1)/opt/zapret/init.d
|
||||
$(INSTALL_DIR) $(1)/opt/zapret/init.d/openwrt
|
||||
$(INSTALL_DIR) $(1)/opt/zapret/init.d/openwrt/custom.d
|
||||
$(CP) ./custom.d/* $(1)/opt/zapret/init.d/openwrt/custom.d/
|
||||
$(INSTALL_DIR) $(1)/etc/uci-defaults
|
||||
$(INSTALL_BIN) ./uci-def-cfg.sh $(1)/etc/uci-defaults/zapret-uci-def-cfg.sh
|
||||
$(INSTALL_BIN) ./uci-def-cfg.sh $(1)/opt/zapret/uci-def-cfg.sh
|
||||
@@ -91,6 +104,8 @@ define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_BIN) ./sync_config.sh $(1)/opt/zapret/sync_config.sh
|
||||
# Fix permisions
|
||||
chmod 644 $(1)/opt/zapret/ipset/*.txt
|
||||
chmod 644 $(1)/opt/zapret/ipset_def/*.txt
|
||||
chmod 644 $(1)/opt/zapret/init.d/openwrt/custom.d/*.sh
|
||||
chmod 644 $(1)/opt/zapret/config.default
|
||||
chmod 755 $(1)/opt/zapret/*.sh
|
||||
endef
|
||||
|
||||
@@ -90,14 +90,32 @@ function get_run_on_boot_option
|
||||
fi
|
||||
}
|
||||
|
||||
function restore_ipset_txt
|
||||
{
|
||||
local cfgname=$1
|
||||
if [ -f "$ZAPRET_BASE/ipset_def/$cfgname" ]; then
|
||||
cp -f "$ZAPRET_BASE/ipset_def/$cfgname" "$ZAPRET_BASE/ipset/$cfgname"
|
||||
fi
|
||||
}
|
||||
|
||||
function restore_all_ipset_cfg
|
||||
{
|
||||
restore_ipset_txt zapret-hosts-google.txt
|
||||
restore_ipset_txt zapret-hosts-user.txt
|
||||
restore_ipset_txt zapret-hosts-user-exclude.txt
|
||||
restore_ipset_txt zapret-ip-exclude.txt.txt
|
||||
}
|
||||
|
||||
function create_default_cfg
|
||||
{
|
||||
local cfgname=${1:-$ZAPRET_CFG_NAME}
|
||||
local opt_flags=${1:--}
|
||||
local opt_strat=$2
|
||||
local cfgname=${3:-$ZAPRET_CFG_NAME}
|
||||
local cfgfile=/etc/config/$cfgname
|
||||
rm -f $cfgfile
|
||||
touch $cfgfile
|
||||
uci set $cfgname.config=main
|
||||
set_cfg_default_values $cfgname
|
||||
set_cfg_default_values "$opt_flags" "$opt_strat" $cfgname
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -112,7 +130,7 @@ function merge_cfg_with_def_values
|
||||
local cfg_sec_name="$( uci -q get $ZAPRET_CFG_NAME.config )"
|
||||
[ -z "$cfg_sec_name" ] && create_default_cfg
|
||||
|
||||
create_default_cfg "$NEWCFGNAME"
|
||||
create_default_cfg "-" "" "$NEWCFGNAME"
|
||||
[ ! -f "$NEWCFGFILE" ] && return 1
|
||||
|
||||
uci -m -f $cfgfile import "$NEWCFGNAME"
|
||||
|
||||
@@ -106,7 +106,7 @@ NFQWS_PORTS_UDP_KEEPALIVE=""
|
||||
NFQWS_OPT="--filter-tcp=80 <HOSTLIST> --dpi-desync=fake,fakedsplit --dpi-desync-autottl=2 --dpi-desync-fooling=badsum --new --filter-tcp=443 --hostlist=/opt/zapret/ipset/zapret-hosts-google.txt --dpi-desync=fake,multidisorder --dpi-desync-split-pos=1,midsld --dpi-desync-repeats=11 --dpi-desync-fooling=badsum --dpi-desync-fake-tls-mod=rnd,dupsid,sni=www.google.com --new --filter-udp=443 --hostlist=/opt/zapret/ipset/zapret-hosts-google.txt --dpi-desync=fake --dpi-desync-repeats=11 --dpi-desync-fake-quic=/opt/zapret/files/fake/quic_initial_www_google_com.bin --new --filter-udp=443 <HOSTLIST_NOAUTO> --dpi-desync=fake --dpi-desync-repeats=11 --new --filter-tcp=443 <HOSTLIST> --dpi-desync=multidisorder --dpi-desync-split-pos=1,sniext+1,host+1,midsld-2,midsld,midsld+2,endhost-1"
|
||||
|
||||
|
||||
DISABLE_CUSTOM=0
|
||||
DISABLE_CUSTOM=1
|
||||
|
||||
# FlowOffload mode : donttouch,none,software,hardware
|
||||
FLOWOFFLOAD=none
|
||||
|
||||
31
zapret/custom.d/50-script.sh
Normal file
31
zapret/custom.d/50-script.sh
Normal file
@@ -0,0 +1,31 @@
|
||||
# Stun4ALL (discord audio, discord video, telegram call, etc)
|
||||
# this custom script runs desync to all stun packets
|
||||
# NOTE: @ih requires nft 1.0.1+ and updated kernel version. it's confirmed to work on 5.15 (openwrt 23) and not work on 5.10 (openwrt 22)
|
||||
|
||||
# can override in config :
|
||||
NFQWS_OPT_DESYNC_STUN="${NFQWS_OPT_DESYNC_STUN:---dpi-desync=fake --dpi-desync-repeats=2}"
|
||||
|
||||
alloc_dnum DNUM_STUN4ALL
|
||||
alloc_qnum QNUM_STUN4ALL
|
||||
|
||||
zapret_custom_daemons()
|
||||
{
|
||||
# $1 - 1 - add, 0 - stop
|
||||
|
||||
local opt="--qnum=$QNUM_STUN4ALL $NFQWS_OPT_DESYNC_STUN"
|
||||
do_nfqws $1 $DNUM_STUN4ALL "$opt"
|
||||
}
|
||||
zapret_custom_firewall()
|
||||
{
|
||||
# $1 - 1 - run, 0 - stop
|
||||
|
||||
local f='-p udp -m u32 --u32'
|
||||
fw_nfqws_post $1 "$f 0>>22&0x3C@4>>16=28:65535&&0>>22&0x3C@12=0x2112A442&&0>>22&0x3C@8&0xC0000003=0" "$f 44>>16=28:65535&&52=0x2112A442&&48&0xC0000003=0" $QNUM_STUN4ALL
|
||||
}
|
||||
zapret_custom_firewall_nft()
|
||||
{
|
||||
# stop logic is not required
|
||||
|
||||
local f="udp length >= 28 @ih,32,32 0x2112A442 @ih,0,2 0 @ih,30,2 0"
|
||||
nft_fw_nfqws_post "$f" "$f" $QNUM_STUN4ALL
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
# Copyright (c) 2024 remittor
|
||||
|
||||
function set_cfg_default_values
|
||||
function set_cfg_reset_values
|
||||
{
|
||||
local cfgname=${1:-$ZAPRET_CFG_NAME}
|
||||
local TAB="$( echo -n -e '\t' )"
|
||||
@@ -16,7 +16,7 @@ function set_cfg_default_values
|
||||
set $cfgname.config.DISABLE_IPV6='1'
|
||||
set $cfgname.config.FILTER_TTL_EXPIRED_ICMP='1'
|
||||
set $cfgname.config.MODE_FILTER='hostlist'
|
||||
set $cfgname.config.DISABLE_CUSTOM='0'
|
||||
set $cfgname.config.DISABLE_CUSTOM='1'
|
||||
set $cfgname.config.WS_USER='daemon'
|
||||
set $cfgname.config.DAEMON_LOG_ENABLE='0'
|
||||
set $cfgname.config.DAEMON_LOG_FILE='/tmp/zapret+<DAEMON_NAME>+<DAEMON_IDNUM>+<DAEMON_CFGNAME>.log'
|
||||
@@ -38,34 +38,235 @@ function set_cfg_default_values
|
||||
set $cfgname.config.NFQWS_UDP_PKT_IN='0'
|
||||
set $cfgname.config.NFQWS_PORTS_TCP_KEEPALIVE='0'
|
||||
set $cfgname.config.NFQWS_PORTS_UDP_KEEPALIVE='0'
|
||||
set $cfgname.config.NFQWS_OPT="
|
||||
--filter-tcp=80 <HOSTLIST>
|
||||
--dpi-desync=fake,fakedsplit
|
||||
--dpi-desync-autottl=2
|
||||
--dpi-desync-fooling=badsum
|
||||
--new
|
||||
--filter-tcp=443 --hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
--dpi-desync=fake,multidisorder
|
||||
--dpi-desync-split-pos=1,midsld
|
||||
--dpi-desync-repeats=11
|
||||
--dpi-desync-fooling=badsum
|
||||
--dpi-desync-fake-tls-mod=rnd,dupsid,sni=www.google.com
|
||||
--new
|
||||
--filter-udp=443 --hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
--dpi-desync=fake
|
||||
--dpi-desync-repeats=11
|
||||
--dpi-desync-fake-quic=/opt/zapret/files/fake/quic_initial_www_google_com.bin
|
||||
--new
|
||||
--filter-udp=443 <HOSTLIST_NOAUTO>
|
||||
--dpi-desync=fake
|
||||
--dpi-desync-repeats=11
|
||||
--new
|
||||
--filter-tcp=443 <HOSTLIST>
|
||||
--dpi-desync=multidisorder
|
||||
--dpi-desync-split-pos=1,sniext+1,host+1,midsld-2,midsld,midsld+2,endhost-1
|
||||
"
|
||||
# save changes
|
||||
commit $cfgname
|
||||
EOF
|
||||
return 0
|
||||
}
|
||||
|
||||
function clear_nfqws_strat
|
||||
{
|
||||
local cfgname=${1:-$ZAPRET_CFG_NAME}
|
||||
local TAB="$( echo -n -e '\t' )"
|
||||
uci batch <<-EOF
|
||||
set $cfgname.config.MODE_FILTER='hostlist'
|
||||
set $cfgname.config.NFQWS_PORTS_TCP='80,443'
|
||||
set $cfgname.config.NFQWS_PORTS_UDP='443'
|
||||
set $cfgname.config.NFQWS_OPT='$TAB'
|
||||
commit $cfgname
|
||||
EOF
|
||||
}
|
||||
|
||||
function set_cfg_nfqws_strat
|
||||
{
|
||||
local strat=${1:--}
|
||||
local cfgname=${2:-$ZAPRET_CFG_NAME}
|
||||
local TAB="$( echo -n -e '\t' )"
|
||||
|
||||
uci batch <<-EOF
|
||||
set $cfgname.config.MODE_FILTER='hostlist'
|
||||
commit $cfgname
|
||||
EOF
|
||||
if [ "$strat" = "empty" ]; then
|
||||
clear_nfqws_strat $cfgname
|
||||
fi
|
||||
if [ "$strat" = "v1_by_StressOzz" ]; then
|
||||
uci batch <<-EOF
|
||||
set $cfgname.config.NFQWS_PORTS_TCP='80,443'
|
||||
set $cfgname.config.NFQWS_PORTS_UDP='443'
|
||||
set $cfgname.config.NFQWS_OPT="
|
||||
# Strategy $strat
|
||||
|
||||
--filter-tcp=443 <HOSTLIST>
|
||||
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
--dpi-desync=fake,multidisorder
|
||||
--dpi-desync-split-seqovl=681
|
||||
--dpi-desync-split-pos=1
|
||||
--dpi-desync-fooling=badseq
|
||||
--dpi-desync-badseq-increment=10000000
|
||||
--dpi-desync-repeats=2
|
||||
--dpi-desync-split-seqovl-pattern=/opt/zapret/files/fake/tls_clienthello_www_google_com.bin
|
||||
--dpi-desync-fake-tls-mod=rnd,dupsid,sni=fonts.google.com
|
||||
|
||||
--new
|
||||
--filter-udp=443
|
||||
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
--hostlist-exclude=/opt/zapret/ipset/zapret-hosts-user-exclude.txt
|
||||
--dpi-desync=fake
|
||||
--dpi-desync-repeats=6
|
||||
--dpi-desync-fake-quic=/opt/zapret/files/fake/quic_initial_www_google_com.bin
|
||||
"
|
||||
commit $cfgname
|
||||
EOF
|
||||
fi
|
||||
if [ "$strat" = "v2_by_StressOzz" ]; then
|
||||
uci batch <<-EOF
|
||||
set $cfgname.config.NFQWS_PORTS_TCP='80,443'
|
||||
set $cfgname.config.NFQWS_PORTS_UDP='443'
|
||||
set $cfgname.config.NFQWS_OPT="
|
||||
# Strategy $strat
|
||||
|
||||
--filter-tcp=443 <HOSTLIST>
|
||||
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
--hostlist-exclude-domains=openwrt.org
|
||||
--dpi-desync=fake,fakeddisorder
|
||||
--dpi-desync-split-pos=10,midsld
|
||||
--dpi-desync-fake-tls=/opt/zapret/files/fake/tls_clienthello_www_google_com.bin
|
||||
--dpi-desync-fake-tls-mod=rnd,dupsid,sni=fonts.google.com
|
||||
--dpi-desync-fake-tls=0x0F0F0F0F
|
||||
--dpi-desync-fake-tls-mod=none
|
||||
--dpi-desync-fakedsplit-pattern=/opt/zapret/files/fake/tls_clienthello_vk_com.bin
|
||||
--dpi-desync-split-seqovl=336
|
||||
--dpi-desync-split-seqovl-pattern=/opt/zapret/files/fake/tls_clienthello_gosuslugi_ru.bin
|
||||
--dpi-desync-fooling=badseq,badsum
|
||||
--dpi-desync-badseq-increment=0
|
||||
|
||||
--new
|
||||
--filter-udp=443
|
||||
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
--hostlist-exclude=/opt/zapret/ipset/zapret-hosts-user-exclude.txt
|
||||
--dpi-desync=fake
|
||||
--dpi-desync-repeats=6
|
||||
--dpi-desync-fake-quic=/opt/zapret/files/fake/quic_initial_www_google_com.bin
|
||||
"
|
||||
commit $cfgname
|
||||
EOF
|
||||
fi
|
||||
if [ "$strat" = "v3_by_StressOzz" ]; then
|
||||
uci batch <<-EOF
|
||||
set $cfgname.config.NFQWS_PORTS_TCP='80,443'
|
||||
set $cfgname.config.NFQWS_PORTS_UDP='443'
|
||||
set $cfgname.config.NFQWS_OPT="
|
||||
# Strategy $strat
|
||||
|
||||
--filter-tcp=443 <HOSTLIST>
|
||||
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
--hostlist-exclude-domains=openwrt.org
|
||||
--dpi-desync=fake,fakeddisorder
|
||||
--dpi-desync-split-pos=10,midsld
|
||||
--dpi-desync-fake-tls=/opt/zapret/files/fake/t2.bin
|
||||
--dpi-desync-fake-tls-mod=rnd,dupsid,sni=m.ok.ru
|
||||
--dpi-desync-fake-tls=0x0F0F0F0F
|
||||
--dpi-desync-fake-tls-mod=none
|
||||
--dpi-desync-fakedsplit-pattern=/opt/zapret/files/fake/tls_clienthello_vk_com.bin
|
||||
--dpi-desync-split-seqovl=336
|
||||
--dpi-desync-split-seqovl-pattern=/opt/zapret/files/fake/tls_clienthello_gosuslugi_ru.bin
|
||||
--dpi-desync-fooling=badseq,badsum
|
||||
--dpi-desync-badseq-increment=0
|
||||
|
||||
--new
|
||||
--filter-udp=443
|
||||
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
--hostlist-exclude=/opt/zapret/ipset/zapret-hosts-user-exclude.txt
|
||||
--dpi-desync=fake
|
||||
--dpi-desync-repeats=6
|
||||
--dpi-desync-fake-quic=/opt/zapret/files/fake/quic_initial_www_google_com.bin
|
||||
"
|
||||
commit $cfgname
|
||||
EOF
|
||||
fi
|
||||
if [ "$strat" = "v4_by_StressOzz" ]; then
|
||||
uci batch <<-EOF
|
||||
set $cfgname.config.NFQWS_PORTS_TCP='80,443'
|
||||
set $cfgname.config.NFQWS_PORTS_UDP='443'
|
||||
set $cfgname.config.NFQWS_OPT="
|
||||
# Strategy $strat
|
||||
|
||||
--filter-tcp=443
|
||||
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
--hostlist-exclude=/opt/zapret/ipset/zapret-hosts-user-exclude.txt
|
||||
--hostlist-exclude-domains=openwrt.org
|
||||
--dpi-desync=fake,multisplit
|
||||
--dpi-desync-split-pos=2,sld
|
||||
--dpi-desync-fake-tls=0x0F0F0F0F
|
||||
--dpi-desync-fake-tls=/opt/zapret/files/fake/tls_clienthello_www_google_com.bin
|
||||
--dpi-desync-fake-tls-mod=rnd,dupsid,sni=google.com
|
||||
--dpi-desync-split-seqovl=2108
|
||||
--dpi-desync-split-seqovl-pattern=/opt/zapret/files/fake/tls_clienthello_www_google_com.bin
|
||||
--dpi-desync-fooling=badseq
|
||||
|
||||
--new
|
||||
--filter-tcp=443 <HOSTLIST>
|
||||
--hostlist-exclude-domains=openwrt.org
|
||||
--dpi-desync-any-protocol=1
|
||||
--dpi-desync-cutoff=n5
|
||||
--dpi-desync=multisplit
|
||||
--dpi-desync-split-seqovl=582
|
||||
--dpi-desync-split-pos=1
|
||||
--dpi-desync-split-seqovl-pattern=/opt/zapret/files/fake/4pda.bin
|
||||
|
||||
--new
|
||||
--filter-udp=443
|
||||
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
--hostlist-exclude=/opt/zapret/ipset/zapret-hosts-user-exclude.txt
|
||||
--dpi-desync=fake
|
||||
--dpi-desync-repeats=6
|
||||
--dpi-desync-fake-quic=/opt/zapret/files/fake/quic_initial_www_google_com.bin
|
||||
"
|
||||
commit $cfgname
|
||||
EOF
|
||||
fi
|
||||
if [ "$strat" = "v5_by_StressOzz" ]; then
|
||||
uci batch <<-EOF
|
||||
set $cfgname.config.NFQWS_PORTS_TCP='80,443'
|
||||
set $cfgname.config.NFQWS_PORTS_UDP='443'
|
||||
set $cfgname.config.NFQWS_OPT="
|
||||
# Strategy $strat
|
||||
|
||||
--filter-tcp=443
|
||||
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
--hostlist-exclude=/opt/zapret/ipset/zapret-hosts-user-exclude.txt
|
||||
--hostlist-exclude-domains=openwrt.org
|
||||
--ip-id=zero
|
||||
--dpi-desync=multisplit
|
||||
--dpi-desync-split-seqovl=681
|
||||
--dpi-desync-split-pos=1
|
||||
--dpi-desync-split-seqovl-pattern=/opt/zapret/files/fake/tls_clienthello_www_google_com.bin
|
||||
|
||||
--new
|
||||
--filter-tcp=443 <HOSTLIST>
|
||||
--hostlist-exclude-domains=openwrt.org
|
||||
--dpi-desync=fake,fakeddisorder
|
||||
--dpi-desync-split-pos=10,midsld
|
||||
--dpi-desync-fake-tls=/opt/zapret/files/fake/max.bin
|
||||
--dpi-desync-fake-tls-mod=rnd,dupsid
|
||||
--dpi-desync-fake-tls=0x0F0F0F0F
|
||||
--dpi-desync-fake-tls-mod=none
|
||||
--dpi-desync-fakedsplit-pattern=/opt/zapret/files/fake/tls_clienthello_vk_com.bin
|
||||
--dpi-desync-fooling=badseq,badsum
|
||||
--dpi-desync-badseq-increment=0
|
||||
|
||||
--new
|
||||
--filter-udp=443
|
||||
--hostlist=/opt/zapret/ipset/zapret-hosts-google.txt
|
||||
--hostlist-exclude=/opt/zapret/ipset/zapret-hosts-user-exclude.txt
|
||||
--dpi-desync=fake
|
||||
--dpi-desync-repeats=6
|
||||
--dpi-desync-fake-quic=/opt/zapret/files/fake/quic_initial_www_google_com.bin
|
||||
"
|
||||
commit $cfgname
|
||||
EOF
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
function set_cfg_default_values
|
||||
{
|
||||
local opt_flags=${1:--}
|
||||
local opt_strat=${2:-v2_by_StressOzz}
|
||||
local cfgname=${3:-$ZAPRET_CFG_NAME}
|
||||
|
||||
if ! echo "$opt_flags" | grep -q "(skip_base)"; then
|
||||
set_cfg_reset_values $cfgname
|
||||
fi
|
||||
if [ "$opt_strat" != "-" ]; then
|
||||
set_cfg_nfqws_strat "$opt_strat" $cfgname
|
||||
fi
|
||||
if echo "$opt_flags" | grep -q "(set_mode_autohostlist)"; then
|
||||
uci batch <<-EOF
|
||||
set $cfgname.config.MODE_FILTER='autohostlist'
|
||||
commit $cfgname
|
||||
EOF
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
BIN
zapret/files/fake/4pda.bin
Normal file
BIN
zapret/files/fake/4pda.bin
Normal file
Binary file not shown.
BIN
zapret/files/fake/max.bin
Normal file
BIN
zapret/files/fake/max.bin
Normal file
Binary file not shown.
BIN
zapret/files/fake/t2.bin
Normal file
BIN
zapret/files/fake/t2.bin
Normal file
Binary file not shown.
@@ -1,25 +1,45 @@
|
||||
cdn.youtube.com
|
||||
fonts.googleapis.com
|
||||
fonts.gstatic.com
|
||||
ggpht.com
|
||||
googleapis.com
|
||||
googleusercontent.com
|
||||
googlevideo.com
|
||||
youtubei.googleapis.com
|
||||
ytimg.com
|
||||
yt3.ggpht.com
|
||||
yt4.ggpht.com
|
||||
youtube.com
|
||||
youtubeembeddedplayer.googleapis.com
|
||||
ytimg.l.google.com
|
||||
i.ytimg.com
|
||||
i9.ytimg.com
|
||||
jnn-pa.googleapis.com
|
||||
youtube-nocookie.com
|
||||
youtube-ui.l.google.com
|
||||
yt-video-upload.l.google.com
|
||||
kids.youtube.com
|
||||
m.youtube.com
|
||||
manifest.googlevideo.com
|
||||
music.youtube.com
|
||||
nhacmp3youtube.com
|
||||
returnyoutubedislikeapi.com
|
||||
s.ytimg.com
|
||||
signaler-pa.youtube.com
|
||||
studio.youtube.com
|
||||
tv.youtube.com
|
||||
wide-youtube.l.google.com
|
||||
youtu.be
|
||||
youtube.googleapis.com
|
||||
yt.be
|
||||
withyoutube.com
|
||||
youtu.be
|
||||
youtube.com
|
||||
youtube.googleapis.com
|
||||
youtubeeducation.com
|
||||
youtubeembeddedplayer.googleapis.com
|
||||
youtubefanfest.com
|
||||
youtubegaming.com
|
||||
youtubei.googleapis.com
|
||||
youtubekids.com
|
||||
youtubemobilesupport.com
|
||||
youtube-nocookie.com
|
||||
youtube-ui.l.google.com
|
||||
yt.be
|
||||
yt3.ggpht.com
|
||||
yt3.googleusercontent.com
|
||||
yt4.ggpht.com
|
||||
ytimg.com
|
||||
ytimg.l.google.com
|
||||
yting.com
|
||||
yt-video-upload.l.google.com
|
||||
youtube.ae
|
||||
youtube.al
|
||||
youtube.am
|
||||
|
||||
@@ -3,18 +3,254 @@
|
||||
172.16.0.0/12
|
||||
192.168.0.0/16
|
||||
169.254.0.0/16
|
||||
100.64.0.0/10
|
||||
::1
|
||||
fc00::/7
|
||||
fe80::/10
|
||||
play.google.com
|
||||
android.com
|
||||
google-analytics.com
|
||||
googleusercontent.com
|
||||
####################################
|
||||
nalog.ru
|
||||
gstatic.com
|
||||
gvt1.com
|
||||
ggpht.com
|
||||
dl.google.com
|
||||
dl-ssl.google.com
|
||||
android.clients.google.com
|
||||
gvt2.com
|
||||
gvt3.com
|
||||
gosuslugi.ru
|
||||
mos-gorsud.ru
|
||||
gov.ru
|
||||
sudrf.ru
|
||||
ipstream.one
|
||||
#################################### Epicgames
|
||||
easy.ac
|
||||
fab.com
|
||||
quixel.se
|
||||
quixel.com
|
||||
eac-cdn.com
|
||||
paragon.com
|
||||
spyjinx.com
|
||||
3lateral.com
|
||||
fortnite.com
|
||||
epicgames.com
|
||||
epicgames.dev
|
||||
hyprsense.com
|
||||
sketchfab.com
|
||||
artstation.com
|
||||
roborecall.com
|
||||
twinmotion.com
|
||||
cubicmotion.com
|
||||
playparagon.com
|
||||
realityscan.com
|
||||
epicgamescdn.com
|
||||
et.epicgames.com
|
||||
ol.epicgames.com
|
||||
radgametools.com
|
||||
unrealengine.com
|
||||
api.epicgames.dev
|
||||
easyanticheat.net
|
||||
shadowcomplex.com
|
||||
battlebreakers.com
|
||||
store.epicgames.com
|
||||
capturingreality.com
|
||||
unrealtournament.com
|
||||
cdn1.unrealengine.com
|
||||
cdn2.unrealengine.com
|
||||
accounts.epicgames.com
|
||||
download.epicgames.com
|
||||
tracking.epicgames.com
|
||||
download2.epicgames.com
|
||||
download3.epicgames.com
|
||||
download4.epicgames.com
|
||||
metrics.ol.epicgames.com
|
||||
datarouter.ol.epicgames.com
|
||||
fastly-download.epicgames.com
|
||||
store-content.ak.epicgames.com
|
||||
static-assets-prod.epicgames.com
|
||||
epicgames-download1.akamaized.net
|
||||
launcher-website-prod07.ol.epicgames.com
|
||||
ut-public-service-prod10.ol.epicgames.com
|
||||
store-site-backend-static.ak.epicgames.com
|
||||
library-service.live.use1a.on.epicgames.com
|
||||
accountportal-website-prod07.ol.epicgames.com
|
||||
account-public-service-prod03.ol.epicgames.com
|
||||
catalog-public-service-prod06.ol.epicgames.com
|
||||
friends-public-service-prod06.ol.epicgames.com
|
||||
launcher-public-service-prod06.ol.epicgames.com
|
||||
entitlement-public-service-prod08.ol.epicgames.com
|
||||
lightswitch-public-service-prod06.ol.epicgames.com
|
||||
orderprocessor-public-service-ecomprod01.ol.epicgames.com
|
||||
launcherwaitingroom-public-service-prod06.ol.epicgames.com
|
||||
datastorage-public-service-liveegs.live.use1a.on.epicgames.com
|
||||
#################################### Steam
|
||||
s.team
|
||||
steam.tv
|
||||
valve.net
|
||||
steamcdn.com
|
||||
steamcdn.net
|
||||
steamstat.us
|
||||
valvecdn.com
|
||||
steam-api.com
|
||||
steamchat.com
|
||||
steamdeck.com
|
||||
steam-chat.com
|
||||
steamgames.com
|
||||
steamgames.net
|
||||
underlords.com
|
||||
steamserver.net
|
||||
steamstatic.com
|
||||
playartifact.com
|
||||
steam.cdn.on.net
|
||||
steamcontent.com
|
||||
steampowered.com
|
||||
valvecontent.com
|
||||
valvesoftware.com
|
||||
valvesoftware.net
|
||||
steam.cdn.webra.ru
|
||||
steambroadcast.com
|
||||
steamcommunity.com
|
||||
cdn.steamstatic.com
|
||||
cs.steampowered.com
|
||||
dl.steam.clngaa.com
|
||||
steam.ru.qtlglb.com
|
||||
api.steampowered.com
|
||||
steam.eca.qtlglb.com
|
||||
steamusercontent.com
|
||||
help.steampowered.com
|
||||
steam.apac.qtlglb.com
|
||||
steam.naeu.qtlglb.com
|
||||
cdn.steamcommunity.com
|
||||
gstore.val.manlaxy.com
|
||||
login.steampowered.com
|
||||
media.steampowered.com
|
||||
partner.steamgames.com
|
||||
shared.steamstatic.com
|
||||
steam.cdn.orcon.net.nz
|
||||
store.steampowered.com
|
||||
steamcdn-a.akamaihd.net
|
||||
steampipe.akamaized.net
|
||||
partner.steampowered.com
|
||||
steamcdn-a.akamaized.net
|
||||
steamdeckusercontent.com
|
||||
support.steampowered.com
|
||||
checkout.steampowered.com
|
||||
community.steamstatic.com
|
||||
steam.cdn.slingshot.co.nz
|
||||
steammobile.akamaized.net
|
||||
steamstatic.akamaized.net
|
||||
steamstore-a.akamaihd.net
|
||||
steamvideo-a.akamaihd.net
|
||||
workshop.steampowered.com
|
||||
cdn.akamai.steamstatic.com
|
||||
cdn.fastly.steamstatic.com
|
||||
client-update.queniuqe.com
|
||||
community.steampowered.com
|
||||
steamdeckcdn.akamaized.net
|
||||
steampipe-kr.akamaized.net
|
||||
clan.fastly.steamstatic.com
|
||||
steamcontent-a.akamaihd.net
|
||||
steambroadcast.akamaized.net
|
||||
steamcommunity.akamaized.net
|
||||
store.akamai.steamstatic.com
|
||||
store.fastly.steamstatic.com
|
||||
scontent.steamusercontent.com
|
||||
shared.fastly.steamstatic.com
|
||||
steamcommunity-a.akamaihd.net
|
||||
avatars.fastly.steamstatic.com
|
||||
cdn.cloudflare.steamstatic.com
|
||||
edge.steam-dns.top.comcast.net
|
||||
steamcommunity-a.akamaized.net
|
||||
steamuserimages-a.akamaihd.net
|
||||
steampipe-partner.akamaized.net
|
||||
steamusercontent-a.akamaihd.net
|
||||
client-download.steampowered.com
|
||||
community.fastly.steamstatic.com
|
||||
store.cloudflare.steamstatic.com
|
||||
community.cloudflare.steamstatic.com
|
||||
steamcdn-a.akamaihd.net.edgesuite.net
|
||||
steamcloudsweden.blob.core.windows.net
|
||||
steamcommunity.cloudflare.steamstatic.com
|
||||
steamcommunity-a.akamaihd.net.edgesuite.net
|
||||
#################################### OpenWRT
|
||||
github.com
|
||||
openwrt.org
|
||||
gh.openwrt.org
|
||||
cdn.openwrt.org
|
||||
dev.openwrt.org
|
||||
git.openwrt.org
|
||||
lede-project.org
|
||||
wiki.openwrt.org
|
||||
forum.openwrt.org
|
||||
lists.openwrt.org
|
||||
openwrt.gitlab.io
|
||||
archive.openwrt.org
|
||||
downloads.openwrt.org
|
||||
fwdownloads.openwrt.org
|
||||
mirror-01.infra.openwrt.org
|
||||
mirror-02.infra.openwrt.org
|
||||
mirror-03.infra.openwrt.org
|
||||
mirror-04.infra.openwrt.org
|
||||
#################################### UbisoftConnect
|
||||
ubi.com
|
||||
ubisoft.com
|
||||
store.ubi.com
|
||||
ubisoftconnect.com
|
||||
connect.ubisoft.com
|
||||
drops-register.ubi.com
|
||||
public-ubiservices.ubi.com
|
||||
ubisoftconnect.cdn.ubi.com
|
||||
uplaypc-s-ubisoft.cdn.ubi.com
|
||||
uplaypc-s-ubisoft-ww.cdn.ubi.com
|
||||
ubisoft-orbit-savegames.s3.amazonaws.com
|
||||
ubisoft-uplay-savegames.s3.amazonaws.com
|
||||
#################################### Aliexpress
|
||||
ae.com
|
||||
ae-rus.net
|
||||
alicdn.com
|
||||
aestatic.net
|
||||
aliexpress.ru
|
||||
aliexpress.us
|
||||
aliexpress.com
|
||||
aliexpress-media.com
|
||||
#################################### PSN
|
||||
scea.com
|
||||
np.scea.com
|
||||
ps5update.com
|
||||
psdownload.com
|
||||
playstation.net
|
||||
playstation.com
|
||||
account.sony.com
|
||||
psremoteplay.com
|
||||
ps4.playstation.com
|
||||
ps5.playstation.com
|
||||
playstationcloud.com
|
||||
psapi.playstation.net
|
||||
store.playstation.com
|
||||
media.playstation.com
|
||||
auth.np.ac.playstation.net
|
||||
sonyentertainmentnetwork.com
|
||||
np.community.playstation.net
|
||||
id.sonyentertainmentnetwork.com
|
||||
#################################### Twitch
|
||||
twitch.tv
|
||||
ttvnw.net
|
||||
jtvnw.net
|
||||
twimg.com
|
||||
m.twitch.tv
|
||||
id.twitch.tv
|
||||
www.twitch.tv
|
||||
twitchcdn.net
|
||||
ext-twitch.tv
|
||||
twitchsvc.net
|
||||
api.twitch.tv
|
||||
gql.twitch.tv
|
||||
dev.twitch.tv
|
||||
live-video.net
|
||||
twitch.a2z.com
|
||||
chat.twitch.tv
|
||||
help.twitch.tv
|
||||
assets.twitch.tv
|
||||
twitch-shadow.net
|
||||
passport.twitch.tv
|
||||
irc.chat.twitch.tv
|
||||
vod-metro.twitch.tv
|
||||
twitchcdn-shadow.net
|
||||
static.twitchcdn.net
|
||||
vod-secure.twitch.tv
|
||||
irc-ws.chat.twitch.tv
|
||||
pubsub-edge.twitch.tv
|
||||
vod-pop-secure.twitch.tv
|
||||
####################################
|
||||
|
||||
@@ -1 +1,23 @@
|
||||
abra-cadabra.com
|
||||
dis.gd
|
||||
discord-attachments-uploads-prd.storage.googleapis.com
|
||||
discord.app
|
||||
discord.co
|
||||
discord.com
|
||||
discord.design
|
||||
discord.dev
|
||||
discord.gift
|
||||
discord.gifts
|
||||
discord.gg
|
||||
discord.media
|
||||
discord.new
|
||||
discord.store
|
||||
discord.status
|
||||
discord-activities.com
|
||||
discordactivities.com
|
||||
discordapp.com
|
||||
discordapp.net
|
||||
discordcdn.com
|
||||
discordmerch.com
|
||||
discordpartygames.com
|
||||
discordsays.com
|
||||
discordsez.com
|
||||
|
||||
@@ -5,14 +5,29 @@
|
||||
|
||||
cfg_run_on_boot="$( uci -q get zapret.config.run_on_boot )"
|
||||
|
||||
create_default_cfg
|
||||
opt_flags=${1:--}
|
||||
opt_strat=$2
|
||||
|
||||
if echo "$opt_flags" | grep -q "(reset_ipset)"; then
|
||||
restore_all_ipset_cfg
|
||||
fi
|
||||
|
||||
create_default_cfg "$opt_flags" "$opt_strat"
|
||||
|
||||
if [ "$cfg_run_on_boot" = "1" ]; then
|
||||
uci set zapret.config.run_on_boot=1
|
||||
uci commit
|
||||
fi
|
||||
|
||||
if [ "$1" = "sync" ]; then
|
||||
ZAPRET_SYNC_CONFIG=0
|
||||
if [ "$opt_flags" = "sync" ]; then
|
||||
ZAPRET_SYNC_CONFIG=1
|
||||
fi
|
||||
if echo "$opt_flags" | grep -q "(sync)"; then
|
||||
ZAPRET_SYNC_CONFIG=1
|
||||
fi
|
||||
|
||||
if [ "$ZAPRET_SYNC_CONFIG" = "1" ]; then
|
||||
# renew main config
|
||||
/opt/zapret/sync_config.sh
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user