mirror of
https://github.com/gSpotx2f/ruantiblock_openwrt.git
synced 2026-05-15 07:00:59 +00:00
BYPASS_MODE
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_VERSION:=1.2-1
|
PKG_VERSION:=1.2-2
|
||||||
LUCI_TITLE:=LuCI support for ruantiblock
|
LUCI_TITLE:=LuCI support for ruantiblock
|
||||||
LUCI_DEPENDS:=+ruantiblock
|
LUCI_DEPENDS:=+ruantiblock
|
||||||
LUCI_PKGARCH:=all
|
LUCI_PKGARCH:=all
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ return view.extend({
|
|||||||
if(data.rules.nftables && data.rules.nftables.length > 1) {
|
if(data.rules.nftables && data.rules.nftables.length > 1) {
|
||||||
for(let i of data.rules.nftables) {
|
for(let i of data.rules.nftables) {
|
||||||
if(!i.rule) continue;
|
if(!i.rule) continue;
|
||||||
|
|
||||||
let set, bytes;
|
let set, bytes;
|
||||||
i.rule.expr.forEach(e => {
|
i.rule.expr.forEach(e => {
|
||||||
if(e.match && e.match.left && e.match.left.payload) {
|
if(e.match && e.match.left && e.match.left.payload) {
|
||||||
@@ -75,7 +76,12 @@ return view.extend({
|
|||||||
return sArray;
|
return sArray;
|
||||||
};
|
};
|
||||||
|
|
||||||
output.dnsmasq = parseDnsmasqData('dnsmasq');
|
if(data.dnsmasq) {
|
||||||
|
output.dnsmasq = parseDnsmasqData('dnsmasq');
|
||||||
|
};
|
||||||
|
if(data.dnsmasq_bypass) {
|
||||||
|
output.dnsmasq_bypass = parseDnsmasqData('dnsmasq_bypass');
|
||||||
|
};
|
||||||
};
|
};
|
||||||
return output;
|
return output;
|
||||||
},
|
},
|
||||||
@@ -177,8 +183,16 @@ return view.extend({
|
|||||||
};
|
};
|
||||||
|
|
||||||
let rdTableWrapper = document.getElementById('rdTableWrapper');
|
let rdTableWrapper = document.getElementById('rdTableWrapper');
|
||||||
rdTableWrapper.innerHTML = '';
|
if(rdTableWrapper) {
|
||||||
rdTableWrapper.append(this.makeDnsmasqTable(nft_data.dnsmasq));
|
rdTableWrapper.innerHTML = '';
|
||||||
|
rdTableWrapper.append(this.makeDnsmasqTable(nft_data.dnsmasq));
|
||||||
|
};
|
||||||
|
|
||||||
|
let rdbTableWrapper = document.getElementById('rdbTableWrapper');
|
||||||
|
if(rdbTableWrapper) {
|
||||||
|
rdbTableWrapper.innerHTML = '';
|
||||||
|
rdbTableWrapper.append(this.makeDnsmasqTable(nft_data.dnsmasq_bypass));
|
||||||
|
};
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if(poll.active()) {
|
if(poll.active()) {
|
||||||
@@ -207,7 +221,9 @@ return view.extend({
|
|||||||
|
|
||||||
let update_status = null,
|
let update_status = null,
|
||||||
rules = null,
|
rules = null,
|
||||||
dnsmasq = null;
|
dnsmasq = null,
|
||||||
|
dnsmasqBypass = null;
|
||||||
|
|
||||||
if(data) {
|
if(data) {
|
||||||
if(data.status === 'enabled') {
|
if(data.status === 'enabled') {
|
||||||
update_status = E('table', { 'class': 'table' });
|
update_status = E('table', { 'class': 'table' });
|
||||||
@@ -270,7 +286,9 @@ return view.extend({
|
|||||||
E('td',{
|
E('td',{
|
||||||
'class' : 'td left',
|
'class' : 'td left',
|
||||||
'data-title': _('Match-set'),
|
'data-title': _('Match-set'),
|
||||||
}, set + ((set.length == 1) ? (' (' + set.replace(/^c/, 'CIDR').replace(/^i/, 'IP').replace(/^d/, 'dnsmasq') + ')') : '')),
|
}, set + ((set.length >= 1) ? (
|
||||||
|
' (' + set.replace(/^c/, 'CIDR').replace(/^i/, 'IP').replace(/^d/, 'dnsmasq').replace(/^bi/, 'bypass IP').replace(/^bd/, 'bypass dnsmasq') + ')'
|
||||||
|
) : '')),
|
||||||
E('td', {
|
E('td', {
|
||||||
'class' : 'td left',
|
'class' : 'td left',
|
||||||
'id' : 'rules.' + set,
|
'id' : 'rules.' + set,
|
||||||
@@ -298,12 +316,25 @@ return view.extend({
|
|||||||
]);
|
]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if(nft_data.dnsmasq_bypass) {
|
||||||
|
let rdbTableWrapper = E('div', {
|
||||||
|
'id' : 'rdbTableWrapper',
|
||||||
|
'style': 'width:100%'
|
||||||
|
}, this.makeDnsmasqTable(nft_data.dnsmasq_bypass));
|
||||||
|
|
||||||
|
dnsmasqBypass = E([
|
||||||
|
E('h3', {}, _('Dnsmasq bypass')),
|
||||||
|
rdbTableWrapper,
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
|
||||||
poll.add(L.bind(this.pollInfo, this), this.pollInterval);
|
poll.add(L.bind(this.pollInfo, this), this.pollInterval);
|
||||||
} else {
|
} else {
|
||||||
update_status = E('em', {}, _('Status') + ' : ' + _('disabled'));
|
update_status = E('em', {}, _('Status') + ' : ' + _('disabled'));
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
return E([
|
|
||||||
|
let layout = [
|
||||||
E('h2', { 'class': 'fade-in' },
|
E('h2', { 'class': 'fade-in' },
|
||||||
_('Ruantiblock') + ' - ' + _('Statistics')
|
_('Ruantiblock') + ' - ' + _('Statistics')
|
||||||
),
|
),
|
||||||
@@ -314,10 +345,25 @@ return view.extend({
|
|||||||
E('div', { 'class': 'cbi-section fade-in' },
|
E('div', { 'class': 'cbi-section fade-in' },
|
||||||
E('div', { 'class': 'cbi-section-node' }, rules)
|
E('div', { 'class': 'cbi-section-node' }, rules)
|
||||||
),
|
),
|
||||||
E('div', { 'class': 'cbi-section fade-in' },
|
];
|
||||||
E('div', { 'class': 'cbi-section-node' }, dnsmasq)
|
|
||||||
),
|
if(dnsmasqBypass) {
|
||||||
]);
|
layout.splice(4, 0,
|
||||||
|
E('div', { 'class': 'cbi-section fade-in' },
|
||||||
|
E('div', { 'class': 'cbi-section-node' }, dnsmasqBypass)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
if(dnsmasq) {
|
||||||
|
layout.splice(5, 0,
|
||||||
|
E('div', { 'class': 'cbi-section fade-in' },
|
||||||
|
E('div', { 'class': 'cbi-section-node' }, dnsmasq)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
return E(layout);
|
||||||
},
|
},
|
||||||
|
|
||||||
handleSave : null,
|
handleSave : null,
|
||||||
|
|||||||
@@ -90,6 +90,13 @@ return view.extend({
|
|||||||
'<br /><code>#comment<br />domain.net<br />sub.domain.com 8.8.8.8<br />sub.domain.com 8.8.8.8#53<br />74.125.131.19<br />74.125.0.0/16</code>'
|
'<br /><code>#comment<br />domain.net<br />sub.domain.com 8.8.8.8<br />sub.domain.com 8.8.8.8#53<br />74.125.131.19<br />74.125.0.0/16</code>'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let bypass_entries_edit = new tools.fileEditDialog(
|
||||||
|
tools.bypassEntriesFile,
|
||||||
|
_('Exclusion list'),
|
||||||
|
_('One entry (IP, CIDR or FQDN) per line. In the FQDN records, you can specify the DNS server for resolving this domain (separated by a space). You can also comment on lines (<code>#</code> is the first character of a line).<br />Examples:') +
|
||||||
|
'<br /><code>#comment<br />domain.net<br />sub.domain.com 8.8.8.8<br />sub.domain.com 8.8.8.8#53<br />74.125.131.19<br />74.125.0.0/16</code>'
|
||||||
|
);
|
||||||
|
|
||||||
let torrc_edit = new tools.fileEditDialog(
|
let torrc_edit = new tools.fileEditDialog(
|
||||||
tools.torrcFile,
|
tools.torrcFile,
|
||||||
_('Tor configuration file'),
|
_('Tor configuration file'),
|
||||||
@@ -249,19 +256,45 @@ return view.extend({
|
|||||||
bllist_module.value('', _('disabled'));
|
bllist_module.value('', _('disabled'));
|
||||||
bllist_module.depends({ bllist_preset: new RegExp('^($|' + tools.appName + ')'), '!reverse': true });
|
bllist_module.depends({ bllist_preset: new RegExp('^($|' + tools.appName + ')'), '!reverse': true });
|
||||||
|
|
||||||
// BYPASS_IP_MODE
|
Object.entries(this.parsers).forEach(
|
||||||
o = s.taboption('blacklist_tab', form.Flag, 'bypass_ip_mode',
|
e => bllist_module.value(e[1], e[0]));
|
||||||
_('Enable IP exclusion list'), _("List of IP addresses that are excluded from block bypass (always available directly)"));
|
|
||||||
|
// ADD_USER_ENTRIES
|
||||||
|
o = s.taboption('blacklist_tab', form.Flag, 'add_user_entries',
|
||||||
|
_('Enable user entries'), _("Add user entries to the blacklist when updating"));
|
||||||
|
o.rmempty = false;
|
||||||
|
o.default = 0;
|
||||||
|
o.depends({ bllist_preset: '', '!reverse': true });
|
||||||
|
|
||||||
|
// USER_ENTRIES edit dialog
|
||||||
|
o = s.taboption('blacklist_tab', form.Button, '_user_entries_btn',
|
||||||
|
_('User entries'));
|
||||||
|
o.onclick = () => user_entries_edit.show();
|
||||||
|
o.inputtitle = _('Edit');
|
||||||
|
o.inputstyle = 'edit btn';
|
||||||
|
|
||||||
|
// USER_ENTRIES_DNS
|
||||||
|
o = s.taboption('blacklist_tab', form.Value, 'user_entries_dns',
|
||||||
|
_("DNS server that is used for the user's FQDN entries"), '<code>ipaddress[#port]</code>');
|
||||||
|
o.validate = this.validateIpPort;
|
||||||
|
|
||||||
|
// BYPASS_MODE
|
||||||
|
o = s.taboption('blacklist_tab', form.Flag, 'bypass_mode',
|
||||||
|
_('Enable exclusion list'), _("List of hosts that are excluded from block bypass (always available directly)"));
|
||||||
o.rmempty = false;
|
o.rmempty = false;
|
||||||
o.default = 0;
|
o.default = 0;
|
||||||
|
|
||||||
// BYPASS_IP_LIST
|
// BYPASS_ENTRIES edit dialog
|
||||||
o = s.taboption('blacklist_tab', form.DynamicList, 'bypass_ip_list',
|
o = s.taboption('blacklist_tab', form.Button, '_bypass_entries_btn',
|
||||||
_('IP exclusion list'));
|
_('Exclusion list'));
|
||||||
o.datatype = "ip4addr";
|
o.onclick = () => bypass_entries_edit.show();
|
||||||
|
o.inputtitle = _('Edit');
|
||||||
|
o.inputstyle = 'edit btn';
|
||||||
|
|
||||||
Object.entries(this.parsers).forEach(
|
// BYPASS_ENTRIES_DNS
|
||||||
e => bllist_module.value(e[1], e[0]));
|
o = s.taboption('blacklist_tab', form.Value, 'bypass_entries_dns',
|
||||||
|
_("DNS server that is used for the FQDN entries of exclusion list"), '<code>ipaddress[#port]</code>');
|
||||||
|
o.validate = this.validateIpPort;
|
||||||
|
|
||||||
if(availableParsers) {
|
if(availableParsers) {
|
||||||
bllist_preset.description += '<br /> ( * - ' + _('requires installed blacklist module') + ' )';
|
bllist_preset.description += '<br /> ( * - ' + _('requires installed blacklist module') + ' )';
|
||||||
@@ -374,30 +407,6 @@ return view.extend({
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* User entries tab */
|
|
||||||
|
|
||||||
s.tab('user_entries_tab', _('User entries'));
|
|
||||||
|
|
||||||
// ADD_USER_ENTRIES
|
|
||||||
o = s.taboption('user_entries_tab', form.Flag, 'add_user_entries',
|
|
||||||
_('Enable'), _("Add user entries to the blacklist when updating"));
|
|
||||||
o.rmempty = false;
|
|
||||||
o.default = 0;
|
|
||||||
o.depends({ bllist_preset: '', '!reverse': true });
|
|
||||||
|
|
||||||
// USER_ENTRIES_DNS
|
|
||||||
o = s.taboption('user_entries_tab', form.Value, 'user_entries_dns',
|
|
||||||
_("DNS server that is used for FQDN entries"), '<code>ipaddress[#port]</code>');
|
|
||||||
o.validate = this.validateIpPort;
|
|
||||||
|
|
||||||
// USER_ENTRIES edit dialog
|
|
||||||
o = s.taboption('user_entries_tab', form.Button, '_user_entries_btn',
|
|
||||||
_('User entries'));
|
|
||||||
o.onclick = () => user_entries_edit.show();
|
|
||||||
o.inputtitle = _('Edit');
|
|
||||||
o.inputstyle = 'edit btn';
|
|
||||||
|
|
||||||
let map_promise = m.render();
|
let map_promise = m.render();
|
||||||
map_promise.then(node => node.classList.add('fade-in'));
|
map_promise.then(node => node.classList.add('fade-in'));
|
||||||
return map_promise;
|
return map_promise;
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ return baseclass.extend({
|
|||||||
parsersDir : '/usr/libexec/ruantiblock',
|
parsersDir : '/usr/libexec/ruantiblock',
|
||||||
torrcFile : '/etc/tor/torrc',
|
torrcFile : '/etc/tor/torrc',
|
||||||
userEntriesFile : '/etc/ruantiblock/user_entries',
|
userEntriesFile : '/etc/ruantiblock/user_entries',
|
||||||
|
bypassEntriesFile: '/etc/ruantiblock/bypass_entries',
|
||||||
fqdnFilterFile : '/etc/ruantiblock/fqdn_filter',
|
fqdnFilterFile : '/etc/ruantiblock/fqdn_filter',
|
||||||
ipFilterFile : '/etc/ruantiblock/ip_filter',
|
ipFilterFile : '/etc/ruantiblock/ip_filter',
|
||||||
crontabFile : '/etc/crontabs/root',
|
crontabFile : '/etc/crontabs/root',
|
||||||
|
|||||||
@@ -86,8 +86,11 @@ msgstr "Критическая ситуация"
|
|||||||
msgid "Current schedule"
|
msgid "Current schedule"
|
||||||
msgstr "Текущее расписание"
|
msgstr "Текущее расписание"
|
||||||
|
|
||||||
msgid "DNS server that is used for FQDN entries"
|
msgid "DNS server that is used for the user's FQDN entries"
|
||||||
msgstr "DNS сервер для FQDN записей"
|
msgstr "DNS сервер для FQDN записей пользователя"
|
||||||
|
|
||||||
|
msgid "DNS server that is used for the FQDN entries of exclusion list"
|
||||||
|
msgstr "DNS сервер для FQDN записей списка исключений"
|
||||||
|
|
||||||
msgid "Day"
|
msgid "Day"
|
||||||
msgstr "День"
|
msgstr "День"
|
||||||
@@ -119,12 +122,15 @@ msgstr "Включить"
|
|||||||
msgid "Enable FQDN filter"
|
msgid "Enable FQDN filter"
|
||||||
msgstr "Включить FQDN фильтр"
|
msgstr "Включить FQDN фильтр"
|
||||||
|
|
||||||
msgid "Enable IP exclusion list"
|
|
||||||
msgstr "Включить список исключений IP адресов"
|
|
||||||
|
|
||||||
msgid "Enable IP filter"
|
msgid "Enable IP filter"
|
||||||
msgstr "Включить IP фильтр"
|
msgstr "Включить IP фильтр"
|
||||||
|
|
||||||
|
msgid "Enable exclusion list"
|
||||||
|
msgstr "Включить список исключений"
|
||||||
|
|
||||||
|
msgid "Enable user entries"
|
||||||
|
msgstr "Включить записи пользователя"
|
||||||
|
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "Включено"
|
msgstr "Включено"
|
||||||
|
|
||||||
@@ -134,6 +140,9 @@ msgstr "Записи"
|
|||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "Ошибка"
|
msgstr "Ошибка"
|
||||||
|
|
||||||
|
msgid "Exclusion list"
|
||||||
|
msgstr "Список исключений"
|
||||||
|
|
||||||
msgid "Expecting:"
|
msgid "Expecting:"
|
||||||
msgstr "Ожидается:"
|
msgstr "Ожидается:"
|
||||||
|
|
||||||
@@ -170,9 +179,6 @@ msgstr "IP-адрес"
|
|||||||
msgid "IP addresses of hosts"
|
msgid "IP addresses of hosts"
|
||||||
msgstr "IP-адреса хостов"
|
msgstr "IP-адреса хостов"
|
||||||
|
|
||||||
msgid "IP exclusion list"
|
|
||||||
msgstr "Список исключенных IP адресов"
|
|
||||||
|
|
||||||
msgid "IP filter"
|
msgid "IP filter"
|
||||||
msgstr "Фильтр IP"
|
msgstr "Фильтр IP"
|
||||||
|
|
||||||
@@ -209,8 +215,8 @@ msgstr "Последние записи"
|
|||||||
msgid "Level"
|
msgid "Level"
|
||||||
msgstr "Уровень"
|
msgstr "Уровень"
|
||||||
|
|
||||||
msgid "List of IP addresses that are excluded from block bypass (always available directly)"
|
msgid "List of hosts that are excluded from block bypass (always available directly)"
|
||||||
msgstr "Список IP адресов, которые исключаются из обхода блокировок (всегда доступны напрямую)"
|
msgstr "Список хостов, которые исключаются из обхода блокировок (всегда доступны напрямую)"
|
||||||
|
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
msgstr "Загрузка"
|
msgstr "Загрузка"
|
||||||
|
|||||||
@@ -71,7 +71,10 @@ msgstr ""
|
|||||||
msgid "Current schedule"
|
msgid "Current schedule"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "DNS server that is used for FQDN entries"
|
msgid "DNS server that is used for the user's FQDN entries"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "DNS server that is used for the FQDN entries of exclusion list"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Day"
|
msgid "Day"
|
||||||
@@ -102,10 +105,13 @@ msgstr ""
|
|||||||
msgid "Enable FQDN filter"
|
msgid "Enable FQDN filter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Enable IP exclusion list"
|
msgid "Enable IP filter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Enable IP filter"
|
msgid "Enable exclusion list"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Enable user entries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
@@ -117,6 +123,9 @@ msgstr ""
|
|||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Exclusion list"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
msgid "Expecting:"
|
msgid "Expecting:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -153,9 +162,6 @@ msgstr ""
|
|||||||
msgid "IP addresses of hosts"
|
msgid "IP addresses of hosts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "IP exclusion list"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "IP filter"
|
msgid "IP filter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -189,7 +195,7 @@ msgstr ""
|
|||||||
msgid "Level"
|
msgid "Level"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "List of IP addresses that are excluded from block bypass (always available directly)"
|
msgid "List of hosts that are excluded from block bypass (always available directly)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Loading"
|
msgid "Loading"
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
"/etc/ruantiblock/fqdn_filter": [ "read" ],
|
"/etc/ruantiblock/fqdn_filter": [ "read" ],
|
||||||
"/etc/ruantiblock/ip_filter": [ "read" ],
|
"/etc/ruantiblock/ip_filter": [ "read" ],
|
||||||
"/etc/ruantiblock/user_entries": [ "read" ],
|
"/etc/ruantiblock/user_entries": [ "read" ],
|
||||||
|
"/etc/ruantiblock/bypass_entries": [ "read" ],
|
||||||
"/var/run/ruantiblock.token": [ "read" ],
|
"/var/run/ruantiblock.token": [ "read" ],
|
||||||
"/etc/tor/torrc": [ "read" ],
|
"/etc/tor/torrc": [ "read" ],
|
||||||
"/etc/crontabs/root": [ "read" ],
|
"/etc/crontabs/root": [ "read" ],
|
||||||
@@ -25,6 +26,7 @@
|
|||||||
"/etc/ruantiblock/fqdn_filter": [ "write" ],
|
"/etc/ruantiblock/fqdn_filter": [ "write" ],
|
||||||
"/etc/ruantiblock/ip_filter": [ "write" ],
|
"/etc/ruantiblock/ip_filter": [ "write" ],
|
||||||
"/etc/ruantiblock/user_entries": [ "write" ],
|
"/etc/ruantiblock/user_entries": [ "write" ],
|
||||||
|
"/etc/ruantiblock/bypass_entries": [ "write" ],
|
||||||
"/etc/tor/torrc": [ "write" ],
|
"/etc/tor/torrc": [ "write" ],
|
||||||
"/etc/crontabs/root": [ "write" ]
|
"/etc/crontabs/root": [ "write" ]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk
|
|||||||
|
|
||||||
PKG_NAME:=ruantiblock
|
PKG_NAME:=ruantiblock
|
||||||
PKG_VERSION:=1.2
|
PKG_VERSION:=1.2
|
||||||
PKG_RELEASE:=1
|
PKG_RELEASE:=2
|
||||||
PKG_MAINTAINER:=gSpot <https://github.com/gSpotx2f/ruantiblock_openwrt>
|
PKG_MAINTAINER:=gSpot <https://github.com/gSpotx2f/ruantiblock_openwrt>
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
@@ -29,6 +29,7 @@ define Package/$(PKG_NAME)/conffiles
|
|||||||
/etc/ruantiblock/fqdn_filter
|
/etc/ruantiblock/fqdn_filter
|
||||||
/etc/ruantiblock/ip_filter
|
/etc/ruantiblock/ip_filter
|
||||||
/etc/ruantiblock/user_entries
|
/etc/ruantiblock/user_entries
|
||||||
|
/etc/ruantiblock/bypass_entries
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Build/Configure
|
define Build/Configure
|
||||||
@@ -49,6 +50,7 @@ define Package/$(PKG_NAME)/install
|
|||||||
$(INSTALL_DATA) ./files/etc/ruantiblock/fqdn_filter $(1)/etc/ruantiblock/fqdn_filter
|
$(INSTALL_DATA) ./files/etc/ruantiblock/fqdn_filter $(1)/etc/ruantiblock/fqdn_filter
|
||||||
$(INSTALL_DATA) ./files/etc/ruantiblock/ip_filter $(1)/etc/ruantiblock/ip_filter
|
$(INSTALL_DATA) ./files/etc/ruantiblock/ip_filter $(1)/etc/ruantiblock/ip_filter
|
||||||
$(INSTALL_DATA) ./files/etc/ruantiblock/user_entries $(1)/etc/ruantiblock/user_entries
|
$(INSTALL_DATA) ./files/etc/ruantiblock/user_entries $(1)/etc/ruantiblock/user_entries
|
||||||
|
$(INSTALL_DATA) ./files/etc/ruantiblock/bypass_entries $(1)/etc/ruantiblock/bypass_entries
|
||||||
$(INSTALL_DIR) $(1)/usr/share/ruantiblock
|
$(INSTALL_DIR) $(1)/usr/share/ruantiblock
|
||||||
$(INSTALL_DATA) ./files/usr/share/ruantiblock/config_script $(1)/usr/share/ruantiblock/config_script
|
$(INSTALL_DATA) ./files/usr/share/ruantiblock/config_script $(1)/usr/share/ruantiblock/config_script
|
||||||
$(INSTALL_DATA) ./files/usr/share/ruantiblock/info_output $(1)/usr/share/ruantiblock/info_output
|
$(INSTALL_DATA) ./files/usr/share/ruantiblock/info_output $(1)/usr/share/ruantiblock/info_output
|
||||||
@@ -73,9 +75,10 @@ define Package/$(PKG_NAME)/prerm
|
|||||||
FILE_INIT_SCRIPT="/etc/init.d/ruantiblock"
|
FILE_INIT_SCRIPT="/etc/init.d/ruantiblock"
|
||||||
FILE_MAIN_SCRIPT="/usr/bin/ruantiblock"
|
FILE_MAIN_SCRIPT="/usr/bin/ruantiblock"
|
||||||
CRONTAB_FILE="/etc/crontabs/root"
|
CRONTAB_FILE="/etc/crontabs/root"
|
||||||
DNSMASQ_DATA_FILE="/tmp/dnsmasq.d/ruantiblock.dnsmasq"
|
DNSMASQ_DATA_FILE="/tmp/dnsmasq.d/02-ruantiblock.dnsmasq"
|
||||||
|
DNSMASQ_DATA_FILE_BYPASS="/tmp/dnsmasq.d/01-ruantiblock_bypass.dnsmasq"
|
||||||
|
|
||||||
rm -f $$DNSMASQ_DATA_FILE
|
rm -f $$DNSMASQ_DATA_FILE $$DNSMASQ_DATA_FILE_BYPASS
|
||||||
test -e "$$FILE_MAIN_SCRIPT" && $$FILE_MAIN_SCRIPT destroy
|
test -e "$$FILE_MAIN_SCRIPT" && $$FILE_MAIN_SCRIPT destroy
|
||||||
|
|
||||||
test -e "$$FILE_INIT_SCRIPT" && $$FILE_INIT_SCRIPT disable
|
test -e "$$FILE_INIT_SCRIPT" && $$FILE_INIT_SCRIPT disable
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ config main 'config'
|
|||||||
option proxy_local_clients '1'
|
option proxy_local_clients '1'
|
||||||
option nftset_clear_sets '1'
|
option nftset_clear_sets '1'
|
||||||
option allowed_hosts_mode '0'
|
option allowed_hosts_mode '0'
|
||||||
option bypass_ip_mode '0'
|
option bypass_mode '0'
|
||||||
option if_vpn 'tun0'
|
option if_vpn 'tun0'
|
||||||
option tor_trans_port '9040'
|
option tor_trans_port '9040'
|
||||||
option tor_allow_udp '0'
|
option tor_allow_udp '0'
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ DATA_DIR="/tmp/ruantiblock"
|
|||||||
### Директория модулей
|
### Директория модулей
|
||||||
MODULES_DIR="/usr/libexec/ruantiblock"
|
MODULES_DIR="/usr/libexec/ruantiblock"
|
||||||
### Дополнительный конфиг dnsmasq с FQDN записями блэклиста
|
### Дополнительный конфиг dnsmasq с FQDN записями блэклиста
|
||||||
DNSMASQ_DATA_FILE="/tmp/dnsmasq.d/ruantiblock.dnsmasq"
|
DNSMASQ_DATA_FILE="/tmp/dnsmasq.d/02-ruantiblock.dnsmasq"
|
||||||
|
DNSMASQ_DATA_FILE_BYPASS="/tmp/dnsmasq.d/01-ruantiblock_bypass.dnsmasq"
|
||||||
### Команда для перезапуска dnsmasq
|
### Команда для перезапуска dnsmasq
|
||||||
DNSMASQ_RESTART_CMD="/etc/init.d/dnsmasq restart"
|
DNSMASQ_RESTART_CMD="/etc/init.d/dnsmasq restart"
|
||||||
### Директория для html-страницы статуса (не используется в OpenWrt)
|
### Директория для html-страницы статуса (не используется в OpenWrt)
|
||||||
@@ -22,10 +23,6 @@ NFTSET_CLEAR_SETS=0
|
|||||||
ALLOWED_HOSTS_MODE=0
|
ALLOWED_HOSTS_MODE=0
|
||||||
### Список IP адресов хостов для фильтра, через пробел (прим.: 192.168.0.10 192.168.0.15)
|
### Список IP адресов хостов для фильтра, через пробел (прим.: 192.168.0.10 192.168.0.15)
|
||||||
ALLOWED_HOSTS_LIST=""
|
ALLOWED_HOSTS_LIST=""
|
||||||
### Режим списка IP адресов исключаемых из обхода блокировок (0 - выкл, 1 - вкл)
|
|
||||||
BYPASS_IP_MODE=0
|
|
||||||
### Список IP адресов, которые исключаются из обхода блокировок, через пробел (прим.: 52.49.102.199 52.49.102.200)
|
|
||||||
BYPASS_IP_LIST=""
|
|
||||||
### VPN интерфейс для правил маршрутизации
|
### VPN интерфейс для правил маршрутизации
|
||||||
IF_VPN="tun0"
|
IF_VPN="tun0"
|
||||||
### Порт прозрачного прокси Tor (параметр TransPort в torrc)
|
### Порт прозрачного прокси Tor (параметр TransPort в torrc)
|
||||||
@@ -34,7 +31,7 @@ TOR_TRANS_PORT=9040
|
|||||||
TOR_ALLOW_UDP=0
|
TOR_ALLOW_UDP=0
|
||||||
### DNS-сервер для резолвинга в домене .onion (Tor)
|
### DNS-сервер для резолвинга в домене .onion (Tor)
|
||||||
ONION_DNS_ADDR="127.0.0.1#9053"
|
ONION_DNS_ADDR="127.0.0.1#9053"
|
||||||
### --set-mark для отбора пакетов в VPN туннель
|
### метка для отбора пакетов в VPN туннель
|
||||||
VPN_PKTS_MARK=8
|
VPN_PKTS_MARK=8
|
||||||
### Приоритет правила отбора пакетов при маршрутизации в VPN-интерфейс
|
### Приоритет правила отбора пакетов при маршрутизации в VPN-интерфейс
|
||||||
VPN_RULE_PRIO=1000
|
VPN_RULE_PRIO=1000
|
||||||
@@ -44,25 +41,16 @@ T_PROXY_PORT_TCP=1100
|
|||||||
T_PROXY_PORT_UDP=1100
|
T_PROXY_PORT_UDP=1100
|
||||||
### Отправлять в прозрачный прокси UDP-трафик (0 - выкл, 1 - вкл)
|
### Отправлять в прозрачный прокси UDP-трафик (0 - выкл, 1 - вкл)
|
||||||
T_PROXY_ALLOW_UDP=0
|
T_PROXY_ALLOW_UDP=0
|
||||||
### Добавление в список блокировок пользовательских записей из файла $USER_ENTRIES_FILE (0 - выкл, 1 - вкл)
|
|
||||||
### В $DATA_DIR можно создать текстовый файл user_entries с записями IP, CIDR или FQDN (одна на строку). Эти записи будут добавлены в список блокировок
|
|
||||||
### В записях FQDN можно задать DNS-сервер для разрешения данного домена, через пробел (прим.: domain.com 8.8.8.8)
|
|
||||||
### Можно комментировать строки (#)
|
|
||||||
ADD_USER_ENTRIES=0
|
|
||||||
### DNS-сервер для пользовательских записей (пустая строка - без DNS-сервера). Можно с портом: 8.8.8.8#53. Если в записи указан свой DNS-сервер - он имеет приоритет
|
|
||||||
USER_ENTRIES_DNS=""
|
|
||||||
### Файл пользовательских записей
|
|
||||||
USER_ENTRIES_FILE="/etc/ruantiblock/user_entries"
|
|
||||||
### Запись событий в syslog (0 - выкл, 1 - вкл)
|
### Запись событий в syslog (0 - выкл, 1 - вкл)
|
||||||
ENABLE_LOGGING=1
|
ENABLE_LOGGING=1
|
||||||
### Html-страница с инфо о текущем статусе (0 - выкл, 1 - вкл) (не используется в OpenWrt)
|
### Html-страница с инфо о текущем статусе (0 - выкл, 1 - вкл) (не используется в OpenWrt)
|
||||||
ENABLE_HTML_INFO=0
|
ENABLE_HTML_INFO=0
|
||||||
### метка для отбора пакетов в VPN туннель
|
|
||||||
VPN_PKTS_MARK=8
|
|
||||||
### Максимальное кол-во элементов списка nftables
|
### Максимальное кол-во элементов списка nftables
|
||||||
#NFTSET_MAXELEM_CIDR=65535
|
#NFTSET_MAXELEM_CIDR=65535
|
||||||
NFTSET_MAXELEM_IP=1000000
|
NFTSET_MAXELEM_IP=1000000
|
||||||
NFTSET_MAXELEM_DNSMASQ=65535
|
NFTSET_MAXELEM_DNSMASQ=65535
|
||||||
|
NFTSET_MAXELEM_BYPASS_IP=65535
|
||||||
|
NFTSET_MAXELEM_BYPASS_FQDN=65535
|
||||||
### Политика отбора элементов в сетах nftables. "performance" - производительность и большее потребление RAM. "memory" - хуже производительность и меньше потребление RAM
|
### Политика отбора элементов в сетах nftables. "performance" - производительность и большее потребление RAM. "memory" - хуже производительность и меньше потребление RAM
|
||||||
NFTSET_POLICY_CIDR="memory"
|
NFTSET_POLICY_CIDR="memory"
|
||||||
NFTSET_POLICY_IP="memory"
|
NFTSET_POLICY_IP="memory"
|
||||||
@@ -79,6 +67,21 @@ NFT_PRIO_NAT_LOCAL="filter - 10"
|
|||||||
NFT_PRIO_ROUTE="mangle + 10"
|
NFT_PRIO_ROUTE="mangle + 10"
|
||||||
### Приоритет правила отбора пакетов nftables для трафика локальных клиентов в VPN-конфигурации
|
### Приоритет правила отбора пакетов nftables для трафика локальных клиентов в VPN-конфигурации
|
||||||
NFT_PRIO_ROUTE_LOCAL="mangle + 10"
|
NFT_PRIO_ROUTE_LOCAL="mangle + 10"
|
||||||
|
### Добавление в список блокировок пользовательских записей из файла $USER_ENTRIES_FILE (0 - выкл, 1 - вкл)
|
||||||
|
### В $DATA_DIR можно создать текстовый файл user_entries с записями IP, CIDR или FQDN (одна на строку). Эти записи будут добавлены в список блокировок
|
||||||
|
### В записях FQDN можно задать DNS-сервер для разрешения данного домена, через пробел (прим.: domain.com 8.8.8.8)
|
||||||
|
### Можно комментировать строки (#)
|
||||||
|
ADD_USER_ENTRIES=0
|
||||||
|
### DNS-сервер для пользовательских записей (пустая строка - без DNS-сервера). Можно с портом: 8.8.8.8#53. Если в записи указан свой DNS-сервер - он имеет приоритет
|
||||||
|
USER_ENTRIES_DNS=""
|
||||||
|
### Файл пользовательских записей
|
||||||
|
USER_ENTRIES_FILE="/etc/ruantiblock/user_entries"
|
||||||
|
### Режим списка записей, исключаемых из обхода блокировок (0 - выкл, 1 - вкл)
|
||||||
|
BYPASS_MODE=0
|
||||||
|
### DNS-сервер для исключаемых записей (пустая строка - без DNS-сервера). Можно с портом: 8.8.8.8#53. Если в записи указан свой DNS-сервер - он имеет приоритет
|
||||||
|
BYPASS_ENTRIES_DNS=""
|
||||||
|
### Файл исключаемых записей
|
||||||
|
BYPASS_ENTRIES_FILE="/etc/ruantiblock/bypass_entries"
|
||||||
### Кол-во попыток обновления блэклиста (в случае неудачи)
|
### Кол-во попыток обновления блэклиста (в случае неудачи)
|
||||||
MODULE_RUN_ATTEMPTS=3
|
MODULE_RUN_ATTEMPTS=3
|
||||||
### Таймаут между попытками обновления
|
### Таймаут между попытками обновления
|
||||||
|
|||||||
@@ -19,7 +19,8 @@ SCRIPTS_DIR="/usr/share/${NAME}"
|
|||||||
export DATA_DIR="${CONFIG_DIR}/var"
|
export DATA_DIR="${CONFIG_DIR}/var"
|
||||||
export MODULES_DIR="/usr/libexec/${NAME}"
|
export MODULES_DIR="/usr/libexec/${NAME}"
|
||||||
### Дополнительный конфиг dnsmasq с FQDN записями блэклиста
|
### Дополнительный конфиг dnsmasq с FQDN записями блэклиста
|
||||||
export DNSMASQ_DATA_FILE="/var/dnsmasq.d/${NAME}.dnsmasq"
|
export DNSMASQ_DATA_FILE="/var/dnsmasq.d/02-${NAME}.dnsmasq"
|
||||||
|
export DNSMASQ_DATA_FILE_BYPASS="/var/dnsmasq.d/01-${NAME}_bypass.dnsmasq"
|
||||||
### Команда для перезапуска dnsmasq
|
### Команда для перезапуска dnsmasq
|
||||||
export DNSMASQ_RESTART_CMD="/etc/init.d/dnsmasq restart"
|
export DNSMASQ_RESTART_CMD="/etc/init.d/dnsmasq restart"
|
||||||
### Директория для html-страницы статуса (не используется в OpenWrt)
|
### Директория для html-страницы статуса (не используется в OpenWrt)
|
||||||
@@ -37,10 +38,6 @@ export NFTSET_CLEAR_SETS=0
|
|||||||
export ALLOWED_HOSTS_MODE=0
|
export ALLOWED_HOSTS_MODE=0
|
||||||
### Список IP адресов хостов для фильтра, через пробел (прим.: 192.168.0.10 192.168.0.15)
|
### Список IP адресов хостов для фильтра, через пробел (прим.: 192.168.0.10 192.168.0.15)
|
||||||
export ALLOWED_HOSTS_LIST=""
|
export ALLOWED_HOSTS_LIST=""
|
||||||
### Режим списка IP адресов исключаемых из обхода блокировок (0 - выкл, 1 - вкл)
|
|
||||||
export BYPASS_IP_MODE=0
|
|
||||||
### Список IP адресов, которые исключаются из обхода блокировок, через пробел (прим.: 52.49.102.199 52.49.102.200)
|
|
||||||
export BYPASS_IP_LIST=""
|
|
||||||
### VPN интерфейс для правил маршрутизации
|
### VPN интерфейс для правил маршрутизации
|
||||||
export IF_VPN="tun0"
|
export IF_VPN="tun0"
|
||||||
### Порт прозрачного прокси Tor (параметр TransPort в torrc)
|
### Порт прозрачного прокси Tor (параметр TransPort в torrc)
|
||||||
@@ -49,7 +46,7 @@ export TOR_TRANS_PORT=9040
|
|||||||
export TOR_ALLOW_UDP=0
|
export TOR_ALLOW_UDP=0
|
||||||
### DNS-сервер для резолвинга в домене .onion (Tor)
|
### DNS-сервер для резолвинга в домене .onion (Tor)
|
||||||
export ONION_DNS_ADDR="127.0.0.1#9053"
|
export ONION_DNS_ADDR="127.0.0.1#9053"
|
||||||
### --set-mark для отбора пакетов в VPN туннель
|
### метка для отбора пакетов в VPN туннель
|
||||||
export VPN_PKTS_MARK=8
|
export VPN_PKTS_MARK=8
|
||||||
### Приоритет правила отбора пакетов при маршрутизации в VPN-интерфейс
|
### Приоритет правила отбора пакетов при маршрутизации в VPN-интерфейс
|
||||||
export VPN_RULE_PRIO=1000
|
export VPN_RULE_PRIO=1000
|
||||||
@@ -59,15 +56,6 @@ export T_PROXY_PORT_TCP=1100
|
|||||||
export T_PROXY_PORT_UDP=1100
|
export T_PROXY_PORT_UDP=1100
|
||||||
### Отправлять в прозрачный прокси UDP-трафик (0 - выкл, 1 - вкл)
|
### Отправлять в прозрачный прокси UDP-трафик (0 - выкл, 1 - вкл)
|
||||||
export T_PROXY_ALLOW_UDP=0
|
export T_PROXY_ALLOW_UDP=0
|
||||||
### Добавление в список блокировок пользовательских записей из файла $USER_ENTRIES_FILE (0 - выкл, 1 - вкл)
|
|
||||||
### В $DATA_DIR можно создать текстовый файл user_entries с записями IP, CIDR или FQDN (одна на строку). Эти записи будут добавлены в список блокировок
|
|
||||||
### В записях FQDN можно задать DNS-сервер для разрешения данного домена, через пробел (прим.: domain.com 8.8.8.8)
|
|
||||||
### Можно комментировать строки (#)
|
|
||||||
export ADD_USER_ENTRIES=0
|
|
||||||
### DNS-сервер для пользовательских записей (пустая строка - без DNS-сервера). Можно с портом: 8.8.8.8#53. Если в записи указан свой DNS-сервер - он имеет приоритет
|
|
||||||
export USER_ENTRIES_DNS=""
|
|
||||||
### Файл пользовательских записей
|
|
||||||
export USER_ENTRIES_FILE="${CONFIG_DIR}/user_entries"
|
|
||||||
### Запись событий в syslog (0 - выкл, 1 - вкл)
|
### Запись событий в syslog (0 - выкл, 1 - вкл)
|
||||||
export ENABLE_LOGGING=1
|
export ENABLE_LOGGING=1
|
||||||
### Html-страница с инфо о текущем статусе (0 - выкл, 1 - вкл) (не используется в OpenWrt)
|
### Html-страница с инфо о текущем статусе (0 - выкл, 1 - вкл) (не используется в OpenWrt)
|
||||||
@@ -76,6 +64,8 @@ export ENABLE_HTML_INFO=0
|
|||||||
export NFTSET_MAXELEM_CIDR=65535
|
export NFTSET_MAXELEM_CIDR=65535
|
||||||
export NFTSET_MAXELEM_IP=1000000
|
export NFTSET_MAXELEM_IP=1000000
|
||||||
export NFTSET_MAXELEM_DNSMASQ=65535
|
export NFTSET_MAXELEM_DNSMASQ=65535
|
||||||
|
export NFTSET_MAXELEM_BYPASS_IP=65535
|
||||||
|
export NFTSET_MAXELEM_BYPASS_FQDN=65535
|
||||||
### Политика отбора элементов в сетах nftables. "performance" - производительность и большее потребление RAM. "memory" - хуже производительность и меньше потребление RAM
|
### Политика отбора элементов в сетах nftables. "performance" - производительность и большее потребление RAM. "memory" - хуже производительность и меньше потребление RAM
|
||||||
export NFTSET_POLICY_CIDR="memory"
|
export NFTSET_POLICY_CIDR="memory"
|
||||||
export NFTSET_POLICY_IP="memory"
|
export NFTSET_POLICY_IP="memory"
|
||||||
@@ -92,6 +82,21 @@ export NFT_PRIO_NAT_LOCAL="filter - 10"
|
|||||||
export NFT_PRIO_ROUTE="mangle + 10"
|
export NFT_PRIO_ROUTE="mangle + 10"
|
||||||
### Приоритет правила отбора пакетов nftables для трафика локальных клиентов в VPN-конфигурации
|
### Приоритет правила отбора пакетов nftables для трафика локальных клиентов в VPN-конфигурации
|
||||||
export NFT_PRIO_ROUTE_LOCAL="mangle + 10"
|
export NFT_PRIO_ROUTE_LOCAL="mangle + 10"
|
||||||
|
### Добавление в список блокировок пользовательских записей из файла $USER_ENTRIES_FILE (0 - выкл, 1 - вкл)
|
||||||
|
### В $DATA_DIR можно создать текстовый файл user_entries с записями IP, CIDR или FQDN (одна на строку). Эти записи будут добавлены в список блокировок
|
||||||
|
### В записях FQDN можно задать DNS-сервер для разрешения данного домена, через пробел (прим.: domain.com 8.8.8.8)
|
||||||
|
### Можно комментировать строки (#)
|
||||||
|
export ADD_USER_ENTRIES=0
|
||||||
|
### DNS-сервер для пользовательских записей (пустая строка - без DNS-сервера). Можно с портом: 8.8.8.8#53. Если в записи указан свой DNS-сервер - он имеет приоритет
|
||||||
|
export USER_ENTRIES_DNS=""
|
||||||
|
### Файл пользовательских записей
|
||||||
|
export USER_ENTRIES_FILE="${CONFIG_DIR}/user_entries"
|
||||||
|
### Режим списка IP адресов исключаемых из обхода блокировок (0 - выкл, 1 - вкл)
|
||||||
|
export BYPASS_MODE=0
|
||||||
|
### DNS-сервер для исключаемых записей (пустая строка - без DNS-сервера). Можно с портом: 8.8.8.8#53. Если в записи указан свой DNS-сервер - он имеет приоритет
|
||||||
|
export BYPASS_ENTRIES_DNS=""
|
||||||
|
### Файл исключаемых записей
|
||||||
|
export BYPASS_ENTRIES_FILE="${CONFIG_DIR}/bypass_entries"
|
||||||
### Кол-во попыток обновления блэклиста (в случае неудачи)
|
### Кол-во попыток обновления блэклиста (в случае неудачи)
|
||||||
export MODULE_RUN_ATTEMPTS=3
|
export MODULE_RUN_ATTEMPTS=3
|
||||||
### Таймаут между попытками обновления
|
### Таймаут между попытками обновления
|
||||||
@@ -194,18 +199,21 @@ export IP_DATA_FILE="${DATA_DIR}/${NAME}.ip"
|
|||||||
export NFT_TABLE="ip r"
|
export NFT_TABLE="ip r"
|
||||||
export NFT_TABLE_DNSMASQ="4#ip#r"
|
export NFT_TABLE_DNSMASQ="4#ip#r"
|
||||||
export NFTSET_ALLOWED_HOSTS="allowed_ip"
|
export NFTSET_ALLOWED_HOSTS="allowed_ip"
|
||||||
export NFTSET_BYPASS_IP="bypass_ip"
|
export NFTSET_BYPASS_IP="bi"
|
||||||
|
export NFTSET_BYPASS_FQDN="bd"
|
||||||
export NFTSET_ONION="onion"
|
export NFTSET_ONION="onion"
|
||||||
export NFTSET_CIDR="c"
|
export NFTSET_CIDR="c"
|
||||||
export NFTSET_IP="i"
|
export NFTSET_IP="i"
|
||||||
export NFTSET_DNSMASQ="d"
|
export NFTSET_DNSMASQ="d"
|
||||||
export NFTSET_ALLOWED_HOSTS_TYPE="ipv4_addr"
|
export NFTSET_ALLOWED_HOSTS_TYPE="ipv4_addr"
|
||||||
export NFTSET_BYPASS_IP_TYPE="ipv4_addr"
|
export NFTSET_BYPASS_IP_TYPE="ipv4_addr"
|
||||||
|
export NFTSET_BYPASS_FQDN_TYPE="ipv4_addr"
|
||||||
export NFTSET_CIDR_TYPE="ipv4_addr"
|
export NFTSET_CIDR_TYPE="ipv4_addr"
|
||||||
export NFTSET_IP_TYPE="ipv4_addr"
|
export NFTSET_IP_TYPE="ipv4_addr"
|
||||||
export NFTSET_DNSMASQ_TYPE="ipv4_addr"
|
export NFTSET_DNSMASQ_TYPE="ipv4_addr"
|
||||||
export NFTSET_CIDR_CFG="set ${NFTSET_CIDR} {type ${NFTSET_CIDR_TYPE};size ${NFTSET_MAXELEM_CIDR};policy ${NFTSET_POLICY_CIDR};flags interval;auto-merge;"
|
export NFTSET_CIDR_CFG="set ${NFTSET_CIDR} {type ${NFTSET_CIDR_TYPE};size ${NFTSET_MAXELEM_CIDR};policy ${NFTSET_POLICY_CIDR};flags interval;auto-merge;"
|
||||||
export NFTSET_IP_CFG="set ${NFTSET_IP} {type ${NFTSET_IP_TYPE};size ${NFTSET_MAXELEM_IP};policy ${NFTSET_POLICY_IP};flags dynamic;"
|
export NFTSET_IP_CFG="set ${NFTSET_IP} {type ${NFTSET_IP_TYPE};size ${NFTSET_MAXELEM_IP};policy ${NFTSET_POLICY_IP};flags dynamic;"
|
||||||
|
export NFTSET_BYPASS_IP_CFG="set ${NFTSET_BYPASS_IP} {type ${NFTSET_BYPASS_IP_TYPE};size ${NFTSET_MAXELEM_BYPASS_IP};policy ${NFTSET_POLICY_CIDR};flags interval;auto-merge;"
|
||||||
export UPDATE_STATUS_FILE="${DATA_DIR}/update_status"
|
export UPDATE_STATUS_FILE="${DATA_DIR}/update_status"
|
||||||
U_PID_FILE="/var/run/${NAME}_update.pid"
|
U_PID_FILE="/var/run/${NAME}_update.pid"
|
||||||
START_PID_FILE="/var/run/${NAME}_start.pid"
|
START_PID_FILE="/var/run/${NAME}_start.pid"
|
||||||
@@ -236,7 +244,7 @@ cat << EOF
|
|||||||
reload : Renew nftables configuration
|
reload : Renew nftables configuration
|
||||||
update : Update blacklist
|
update : Update blacklist
|
||||||
force-update : Force update blacklist
|
force-update : Force update blacklist
|
||||||
data-files : Create ${IP_DATA_FILE} & ${DNSMASQ_DATA_FILE} (without network functions)
|
data-files : Create ${IP_DATA_FILE}, ${DNSMASQ_DATA_FILE}, ${DNSMASQ_DATA_FILE_BYPASS} (without network functions)
|
||||||
status : Status & some info
|
status : Status & some info
|
||||||
raw-status : Return code: 0 - enabled, 1 - error, 2 - disabled, 3 - starting, 4 - updating
|
raw-status : Return code: 0 - enabled, 1 - error, 2 - disabled, 3 - starting, 4 - updating
|
||||||
html-info : Return the html-info output
|
html-info : Return the html-info output
|
||||||
@@ -311,11 +319,8 @@ AddNftSets() {
|
|||||||
if [ -n "$_allowed_hosts" ]; then
|
if [ -n "$_allowed_hosts" ]; then
|
||||||
$NFT_CMD add element $NFT_TABLE "$NFTSET_ALLOWED_HOSTS" { "$_allowed_hosts" }
|
$NFT_CMD add element $NFT_TABLE "$NFTSET_ALLOWED_HOSTS" { "$_allowed_hosts" }
|
||||||
fi
|
fi
|
||||||
$NFT_CMD add set $NFT_TABLE "$NFTSET_BYPASS_IP" { type "$NFTSET_BYPASS_IP_TYPE"\; policy "$NFTSET_POLICY_CIDR"\; flags interval\; auto-merge\; }
|
$NFT_CMD add set $NFT_TABLE "$NFTSET_BYPASS_IP" { type "$NFTSET_BYPASS_IP_TYPE"\; size $NFTSET_MAXELEM_BYPASS_IP\; policy "$NFTSET_POLICY_CIDR"\; flags interval\; auto-merge\; }
|
||||||
_bypass_ips=`printf "$BYPASS_IP_LIST" | $AWK_CMD '{gsub(/[ ]+/, ",", $0); printf $0;}'`
|
$NFT_CMD add set $NFT_TABLE "$NFTSET_BYPASS_FQDN" { type "$NFTSET_BYPASS_FQDN_TYPE"\; size $NFTSET_MAXELEM_BYPASS_FQDN\; policy "$NFTSET_POLICY_DNSMASQ"\; flags dynamic,timeout\; timeout "$NFTSET_DNSMASQ_TIMEOUT"\; }
|
||||||
if [ -n "$_bypass_ips" ]; then
|
|
||||||
$NFT_CMD add element $NFT_TABLE "$NFTSET_BYPASS_IP" { "$_bypass_ips" }
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateBllistSets() {
|
UpdateBllistSets() {
|
||||||
@@ -353,7 +358,7 @@ SetNetConfig() {
|
|||||||
|
|
||||||
DropNetConfig() {
|
DropNetConfig() {
|
||||||
DeleteNftRules
|
DeleteNftRules
|
||||||
FlushNftSets "$NFTSET_ALLOWED_HOSTS" "$NFTSET_BYPASS_IP" "$NFTSET_CIDR" "$NFTSET_IP" "$NFTSET_DNSMASQ" "$NFTSET_ONION"
|
FlushNftSets "$NFTSET_ALLOWED_HOSTS" "$NFTSET_BYPASS_IP" "$NFTSET_BYPASS_FQDN" "$NFTSET_CIDR" "$NFTSET_IP" "$NFTSET_DNSMASQ" "$NFTSET_ONION"
|
||||||
}
|
}
|
||||||
|
|
||||||
DestroyNetConfig() {
|
DestroyNetConfig() {
|
||||||
@@ -364,6 +369,7 @@ DestroyNetConfig() {
|
|||||||
ClearDataFiles() {
|
ClearDataFiles() {
|
||||||
if [ -d "$DATA_DIR" ]; then
|
if [ -d "$DATA_DIR" ]; then
|
||||||
printf "" > "$DNSMASQ_DATA_FILE"
|
printf "" > "$DNSMASQ_DATA_FILE"
|
||||||
|
printf "" > "$DNSMASQ_DATA_FILE_BYPASS"
|
||||||
printf "" > "$IP_DATA_FILE"
|
printf "" > "$IP_DATA_FILE"
|
||||||
printf "0 0 0" > "$UPDATE_STATUS_FILE"
|
printf "0 0 0" > "$UPDATE_STATUS_FILE"
|
||||||
fi
|
fi
|
||||||
@@ -378,66 +384,121 @@ PreStartCheck() {
|
|||||||
[ -d "$DATA_DIR" ] || mkdir -p "$DATA_DIR"
|
[ -d "$DATA_DIR" ] || mkdir -p "$DATA_DIR"
|
||||||
[ "$ENABLE_HTML_INFO" = "1" -a ! -d "$HTML_DIR" ] && mkdir -p "$HTML_DIR"
|
[ "$ENABLE_HTML_INFO" = "1" -a ! -d "$HTML_DIR" ] && mkdir -p "$HTML_DIR"
|
||||||
### Костыль для старта dnsmasq
|
### Костыль для старта dnsmasq
|
||||||
[ -e "$DNSMASQ_DATA_FILE" ] || printf "\n" > "$DNSMASQ_DATA_FILE"
|
[ -e "$DNSMASQ_DATA_FILE" ] || printf "" > "$DNSMASQ_DATA_FILE"
|
||||||
|
[ -e "$DNSMASQ_DATA_FILE_BYPASS" ] || printf "" > "$DNSMASQ_DATA_FILE_BYPASS"
|
||||||
}
|
}
|
||||||
|
|
||||||
AddUserEntries() {
|
AddUserEntries() {
|
||||||
if [ "$ADD_USER_ENTRIES" = "1" ]; then
|
if [ "$ADD_USER_ENTRIES" = "1" ]; then
|
||||||
if [ -f "$USER_ENTRIES_FILE" ]; then
|
if [ -f "$USER_ENTRIES_FILE" ]; then
|
||||||
$AWK_CMD 'BEGIN {
|
$AWK_CMD 'BEGIN {
|
||||||
null="";
|
null = "";
|
||||||
ip_array[0]=null;
|
ip_array[0] = null;
|
||||||
cidr_array[0]=null;
|
cidr_array[0] = null;
|
||||||
fqdn_array[0]=null;
|
fqdn_array[0] = null;
|
||||||
|
}
|
||||||
|
function writeIpList(array, _str) {
|
||||||
|
_str = "";
|
||||||
|
for(i in array) {
|
||||||
|
_str = _str i ",";
|
||||||
|
};
|
||||||
|
return _str;
|
||||||
|
};
|
||||||
|
function writeDNSData(val, dns) {
|
||||||
|
if(length(dns) == 0 && length(ENVIRON["USER_ENTRIES_DNS"]) > 0) {
|
||||||
|
dns = ENVIRON["USER_ENTRIES_DNS"];
|
||||||
|
};
|
||||||
|
if(length(dns) > 0) {
|
||||||
|
printf "server=/%s/%s\n", val, dns >> ENVIRON["DNSMASQ_DATA_FILE"];
|
||||||
|
};
|
||||||
|
printf "nftset=/%s/%s#%s\n", val, ENVIRON["NFT_TABLE_DNSMASQ"], ENVIRON["NFTSET_DNSMASQ"] >> ENVIRON["DNSMASQ_DATA_FILE"];
|
||||||
|
};
|
||||||
|
function writeFqdnEntries() {
|
||||||
|
delete fqdn_array[0];
|
||||||
|
for(i in fqdn_array) {
|
||||||
|
split(fqdn_array[i], a, " ");
|
||||||
|
writeDNSData(a[1], a[2]);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
($0 !~ /^([\040\011]*$|#)/) {
|
||||||
|
if($0 ~ /^[0-9]{1,3}([.][0-9]{1,3}){3}$/) {
|
||||||
|
ip_array[$0] = null;
|
||||||
}
|
}
|
||||||
function writeIpList(array, _str) {
|
else if($0 ~ /^[0-9]{1,3}([.][0-9]{1,3}){3}[\057][0-9]{1,2}$/) {
|
||||||
_str="";
|
cidr_array[$0] = null;
|
||||||
for(i in array) {
|
|
||||||
_str=_str i ",";
|
|
||||||
};
|
|
||||||
return _str;
|
|
||||||
};
|
|
||||||
function writeDNSData(val, dns) {
|
|
||||||
if(length(dns) == 0 && length(ENVIRON["USER_ENTRIES_DNS"]) > 0) {
|
|
||||||
dns=ENVIRON["USER_ENTRIES_DNS"];
|
|
||||||
};
|
|
||||||
if(length(dns) > 0) {
|
|
||||||
printf "server=/%s/%s\n", val, dns >> ENVIRON["DNSMASQ_DATA_FILE"];
|
|
||||||
};
|
|
||||||
printf "nftset=/%s/%s#%s\n", val, ENVIRON["NFT_TABLE_DNSMASQ"], ENVIRON["NFTSET_DNSMASQ"] >> ENVIRON["DNSMASQ_DATA_FILE"];
|
|
||||||
};
|
|
||||||
function writeFqdnEntries() {
|
|
||||||
delete fqdn_array[0];
|
|
||||||
for(i in fqdn_array) {
|
|
||||||
split(fqdn_array[i], a, " ");
|
|
||||||
writeDNSData(a[1], a[2]);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
($0 !~ /^([\040\011]*$|#)/) {
|
|
||||||
if($0 ~ /^[0-9]{1,3}([.][0-9]{1,3}){3}$/) {
|
|
||||||
ip_array[$0]=null;
|
|
||||||
}
|
|
||||||
else if($0 ~ /^[0-9]{1,3}([.][0-9]{1,3}){3}[\057][0-9]{1,2}$/) {
|
|
||||||
cidr_array[$0]=null;
|
|
||||||
}
|
|
||||||
else if($0 ~ /^[a-z0-9.\052-]+[.]([a-z]{2,}|xn--[a-z0-9]+)([ ][0-9]{1,3}([.][0-9]{1,3}){3}([#][0-9]{2,5})?)?$/) {
|
|
||||||
fqdn_array[length(fqdn_array)]=$1 " " $2;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
END {
|
else if($0 ~ /^[a-z0-9.\052-]+[.]([a-z]{2,}|xn--[a-z0-9]+)([ ][0-9]{1,3}([.][0-9]{1,3}){3}([#][0-9]{2,5})?)?$/) {
|
||||||
printf "table %s {\n%s", ENVIRON["NFT_TABLE"], ENVIRON["NFTSET_CIDR_CFG"] >> ENVIRON["IP_DATA_FILE"];
|
fqdn_array[length(fqdn_array)] = $1 " " $2;
|
||||||
delete cidr_array[0];
|
};
|
||||||
if(length(cidr_array) > 0) {
|
}
|
||||||
printf "elements={%s};", writeIpList(cidr_array) >> ENVIRON["IP_DATA_FILE"];
|
END {
|
||||||
};
|
printf "table %s {\n%s", ENVIRON["NFT_TABLE"], ENVIRON["NFTSET_CIDR_CFG"] >> ENVIRON["IP_DATA_FILE"];
|
||||||
printf "}\n%s", ENVIRON["NFTSET_IP_CFG"] >> ENVIRON["IP_DATA_FILE"];
|
delete cidr_array[0];
|
||||||
delete ip_array[0];
|
if(length(cidr_array) > 0) {
|
||||||
if(length(ip_array) > 0) {
|
printf "elements={%s};", writeIpList(cidr_array) >> ENVIRON["IP_DATA_FILE"];
|
||||||
printf "elements={%s};", writeIpList(ip_array) >> ENVIRON["IP_DATA_FILE"];
|
};
|
||||||
};
|
printf "}\n%s", ENVIRON["NFTSET_IP_CFG"] >> ENVIRON["IP_DATA_FILE"];
|
||||||
printf "}\n}\n" >> ENVIRON["IP_DATA_FILE"];
|
delete ip_array[0];
|
||||||
writeFqdnEntries();
|
if(length(ip_array) > 0) {
|
||||||
}' "$USER_ENTRIES_FILE"
|
printf "elements={%s};", writeIpList(ip_array) >> ENVIRON["IP_DATA_FILE"];
|
||||||
|
};
|
||||||
|
printf "}\n}\n" >> ENVIRON["IP_DATA_FILE"];
|
||||||
|
writeFqdnEntries();
|
||||||
|
}' "$USER_ENTRIES_FILE"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
AddBypassEntries() {
|
||||||
|
printf "" > "$DNSMASQ_DATA_FILE_BYPASS"
|
||||||
|
FlushNftSets "$NFTSET_BYPASS_IP" "$NFTSET_BYPASS_FQDN"
|
||||||
|
if [ "$BYPASS_MODE" = "1" ]; then
|
||||||
|
if [ -f "$BYPASS_ENTRIES_FILE" ]; then
|
||||||
|
$AWK_CMD 'BEGIN {
|
||||||
|
null = "";
|
||||||
|
ip_array[0] = null;
|
||||||
|
fqdn_array[0] = null;
|
||||||
|
}
|
||||||
|
function writeIpList(array, _str) {
|
||||||
|
_str = "";
|
||||||
|
for(i in array) {
|
||||||
|
_str = _str i ",";
|
||||||
|
};
|
||||||
|
return _str;
|
||||||
|
};
|
||||||
|
function writeDNSData(val, dns) {
|
||||||
|
if(length(dns) == 0 && length(ENVIRON["BYPASS_ENTRIES_DNS"]) > 0) {
|
||||||
|
dns = ENVIRON["BYPASS_ENTRIES_DNS"];
|
||||||
|
};
|
||||||
|
if(length(dns) > 0) {
|
||||||
|
printf "server=/%s/%s\n", val, dns >> ENVIRON["DNSMASQ_DATA_FILE_BYPASS"];
|
||||||
|
};
|
||||||
|
printf "nftset=/%s/%s#%s\n", val, ENVIRON["NFT_TABLE_DNSMASQ"], ENVIRON["NFTSET_BYPASS_FQDN"] >> ENVIRON["DNSMASQ_DATA_FILE_BYPASS"];
|
||||||
|
};
|
||||||
|
function writeFqdnEntries() {
|
||||||
|
delete fqdn_array[0];
|
||||||
|
for(i in fqdn_array) {
|
||||||
|
split(fqdn_array[i], a, " ");
|
||||||
|
writeDNSData(a[1], a[2]);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
($0 !~ /^([\040\011]*$|#)/) {
|
||||||
|
if($0 ~ /^[0-9]{1,3}([.][0-9]{1,3}){3}([\057][0-9]{1,2})?$/) {
|
||||||
|
ip_array[$0] = null;
|
||||||
|
}
|
||||||
|
else if($0 ~ /^[a-z0-9.\052-]+[.]([a-z]{2,}|xn--[a-z0-9]+)([ ][0-9]{1,3}([.][0-9]{1,3}){3}([#][0-9]{2,5})?)?$/) {
|
||||||
|
fqdn_array[length(fqdn_array)] = $1 " " $2;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
END {
|
||||||
|
printf "table %s {\n%s", ENVIRON["NFT_TABLE"], ENVIRON["NFTSET_BYPASS_IP_CFG"] >> ENVIRON["IP_DATA_FILE"];
|
||||||
|
delete ip_array[0];
|
||||||
|
if(length(ip_array) > 0) {
|
||||||
|
printf "elements={%s};", writeIpList(ip_array) >> ENVIRON["IP_DATA_FILE"];
|
||||||
|
};
|
||||||
|
printf "}\n}\n" >> ENVIRON["IP_DATA_FILE"];
|
||||||
|
writeFqdnEntries();
|
||||||
|
}' "$BYPASS_ENTRIES_FILE"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -467,6 +528,7 @@ GetDataFiles() {
|
|||||||
sleep $MODULE_RUN_TIMEOUT
|
sleep $MODULE_RUN_TIMEOUT
|
||||||
done
|
done
|
||||||
AddUserEntries
|
AddUserEntries
|
||||||
|
AddBypassEntries
|
||||||
if [ $_return_code -eq 0 ]; then
|
if [ $_return_code -eq 0 ]; then
|
||||||
_update_string=`$AWK_CMD '{
|
_update_string=`$AWK_CMD '{
|
||||||
printf "Received entries: %s\n", (NF < 3) ? "No data" : "CIDR: "$1", IP: "$2", FQDN: "$3;
|
printf "Received entries: %s\n", (NF < 3) ? "No data" : "CIDR: "$1", IP: "$2", FQDN: "$3;
|
||||||
@@ -481,6 +543,7 @@ GetDataFiles() {
|
|||||||
ClearDataFiles
|
ClearDataFiles
|
||||||
ADD_USER_ENTRIES=1
|
ADD_USER_ENTRIES=1
|
||||||
AddUserEntries
|
AddUserEntries
|
||||||
|
AddBypassEntries
|
||||||
_return_code=0
|
_return_code=0
|
||||||
else
|
else
|
||||||
_return_code=2
|
_return_code=2
|
||||||
@@ -488,7 +551,7 @@ GetDataFiles() {
|
|||||||
fi
|
fi
|
||||||
if [ $_return_code -eq 0 ]; then
|
if [ $_return_code -eq 0 ]; then
|
||||||
if [ "$PROXY_MODE" = "2" -o "$PROXY_MODE" = "3" ]; then
|
if [ "$PROXY_MODE" = "2" -o "$PROXY_MODE" = "3" ]; then
|
||||||
printf "\n" >> "$DNSMASQ_DATA_FILE"
|
printf "" >> "$DNSMASQ_DATA_FILE"
|
||||||
else
|
else
|
||||||
### Запись для .onion в $DNSMASQ_DATA_FILE
|
### Запись для .onion в $DNSMASQ_DATA_FILE
|
||||||
printf "server=/onion/%s\nnftset=/onion/%s#%s\n" "$ONION_DNS_ADDR" "$NFT_TABLE_DNSMASQ" "$NFTSET_ONION" >> "$DNSMASQ_DATA_FILE"
|
printf "server=/onion/%s\nnftset=/onion/%s#%s\n" "$ONION_DNS_ADDR" "$NFT_TABLE_DNSMASQ" "$NFTSET_ONION" >> "$DNSMASQ_DATA_FILE"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
AWK_CMD="awk"
|
AWK_CMD="awk"
|
||||||
UCI_SECTION="ruantiblock.config"
|
UCI_SECTION="ruantiblock.config"
|
||||||
UCI_VARS="proxy_mode proxy_local_clients nftset_clear_sets allowed_hosts_mode allowed_hosts_list bypass_ip_mode bypass_ip_list if_vpn tor_trans_port tor_allow_udp onion_dns_addr t_proxy_port_tcp t_proxy_port_udp t_proxy_allow_udp add_user_entries user_entries_dns enable_logging bllist_min_entries bllist_module bllist_preset bllist_ip_limit bllist_gr_excluded_nets bllist_summarize_ip bllist_summarize_cidr bllist_ip_filter bllist_ip_filter_type bllist_sd_limit bllist_gr_excluded_sld bllist_fqdn_filter bllist_fqdn_filter_type bllist_enable_idn bllist_alt_nslookup bllist_alt_dns_addr update_at_startup"
|
UCI_VARS="proxy_mode proxy_local_clients nftset_clear_sets allowed_hosts_mode allowed_hosts_list bypass_mode bypass_entries_dns if_vpn tor_trans_port tor_allow_udp onion_dns_addr t_proxy_port_tcp t_proxy_port_udp t_proxy_allow_udp add_user_entries user_entries_dns enable_logging bllist_min_entries bllist_module bllist_preset bllist_ip_limit bllist_gr_excluded_nets bllist_summarize_ip bllist_summarize_cidr bllist_ip_filter bllist_ip_filter_type bllist_sd_limit bllist_gr_excluded_sld bllist_fqdn_filter bllist_fqdn_filter_type bllist_enable_idn bllist_alt_nslookup bllist_alt_dns_addr update_at_startup"
|
||||||
|
|
||||||
eval `uci show "$UCI_SECTION" | $AWK_CMD -F "=" -v UCI_VARS="$UCI_VARS" '
|
eval `uci show "$UCI_SECTION" | $AWK_CMD -F "=" -v UCI_VARS="$UCI_VARS" '
|
||||||
BEGIN {
|
BEGIN {
|
||||||
|
|||||||
@@ -29,6 +29,10 @@ Info() {
|
|||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
printf ",\"dnsmasq\":"
|
printf ",\"dnsmasq\":"
|
||||||
$NFT_CMD -j list set $NFT_TABLE "$NFTSET_DNSMASQ" 2> /dev/null
|
$NFT_CMD -j list set $NFT_TABLE "$NFTSET_DNSMASQ" 2> /dev/null
|
||||||
|
if [ "$BYPASS_MODE" = "1" ]; then
|
||||||
|
printf ",\"dnsmasq_bypass\":"
|
||||||
|
$NFT_CMD -j list set $NFT_TABLE "$NFTSET_BYPASS_FQDN" 2> /dev/null
|
||||||
|
fi
|
||||||
printf "}"
|
printf "}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,12 +26,6 @@ case "$ALLOWED_HOSTS_MODE" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if [ "$BYPASS_IP_MODE" = "1" ]; then
|
|
||||||
NFT_BYPASS_IP_EXPR="ip daddr @${NFTSET_BYPASS_IP} counter accept"
|
|
||||||
else
|
|
||||||
NFT_BYPASS_IP_EXPR="continue"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$NFTSET_DNSMASQ_TIMEOUT_UPDATE" = "1" ]; then
|
if [ "$NFTSET_DNSMASQ_TIMEOUT_UPDATE" = "1" ]; then
|
||||||
NFT_DNSMASQ_RULE_TARGET="$NFT_DNSMASQ_TIMEOUT_UPDATE_CHAIN"
|
NFT_DNSMASQ_RULE_TARGET="$NFT_DNSMASQ_TIMEOUT_UPDATE_CHAIN"
|
||||||
else
|
else
|
||||||
@@ -72,7 +66,7 @@ NftVpnRouteStatus() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
NftMainAdd() {
|
NftMainAdd() {
|
||||||
local _nft_sets="${NFTSET_CIDR} ${NFTSET_IP}" _set
|
local _set
|
||||||
$NFT_CMD add chain $NFT_TABLE "$NFT_LOCAL_CLIENTS_CHAIN" { $LOCAL_CLIENTS_CHAIN_TYPE }
|
$NFT_CMD add chain $NFT_TABLE "$NFT_LOCAL_CLIENTS_CHAIN" { $LOCAL_CLIENTS_CHAIN_TYPE }
|
||||||
$NFT_CMD add chain $NFT_TABLE "$NFT_ACTION_CHAIN"
|
$NFT_CMD add chain $NFT_TABLE "$NFT_ACTION_CHAIN"
|
||||||
$NFT_CMD add chain $NFT_TABLE "$NFT_DNSMASQ_TIMEOUT_UPDATE_CHAIN"
|
$NFT_CMD add chain $NFT_TABLE "$NFT_DNSMASQ_TIMEOUT_UPDATE_CHAIN"
|
||||||
@@ -95,8 +89,13 @@ NftMainAdd() {
|
|||||||
fi
|
fi
|
||||||
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_BLLIST_CHAIN" ip daddr "@${NFTSET_ONION}" counter goto "$NFT_ACTION_CHAIN"
|
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_BLLIST_CHAIN" ip daddr "@${NFTSET_ONION}" counter goto "$NFT_ACTION_CHAIN"
|
||||||
fi
|
fi
|
||||||
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_BLLIST_CHAIN" $NFT_BYPASS_IP_EXPR
|
if [ "$BYPASS_MODE" = "1" ]; then
|
||||||
for _set in $_nft_sets
|
for _set in "$NFTSET_BYPASS_IP" "$NFTSET_BYPASS_FQDN"
|
||||||
|
do
|
||||||
|
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_BLLIST_CHAIN" ip daddr "@${_set}" counter accept
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
for _set in "$NFTSET_CIDR" "$NFTSET_IP"
|
||||||
do
|
do
|
||||||
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_BLLIST_CHAIN" ip daddr "@${_set}" counter goto "$NFT_ACTION_CHAIN"
|
NftCmdWrapper $NFT_CMD add rule $NFT_TABLE "$NFT_BLLIST_CHAIN" ip daddr "@${_set}" counter goto "$NFT_ACTION_CHAIN"
|
||||||
done
|
done
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 103 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 200 KiB After Width: | Height: | Size: 213 KiB |
Reference in New Issue
Block a user