Skip to content

Commit

Permalink
Добавлен способ обновления пакета на новую версию путем установки скр…
Browse files Browse the repository at this point in the history
…ипта, который удаляет старый пакет и восстанавливает список разблокировки.
  • Loading branch information
qzeleza committed Sep 26, 2023
1 parent 39883a3 commit 7bb8de7
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 31 deletions.
6 changes: 5 additions & 1 deletion HISTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@
- При установке пакета, происходит автоматическое обновление iptables (актуально для новой прошивки).
- Для SSR соединений добавлен "костыль" в случае отказа загрузки ssr сервиса при загрузке роутера.
- Решена проблема [#68](https://github.com/qzeleza/kvas/issues/68) с отключением шифрования при трафика при его проверке.
- Добавлен новый вариант установки пакета при помощи команды: **/bin/sh -c $(curl -fsSL https://github.com/qzeleza/kvas/raw/main/ipk/install.sh)**
- Попытка решить проблемы с отсутствием обхода при переподключением VPN (тикеты #45 и #73)
- Доработан код функции по добавлению гостевых сетей (kvas vpn guest add all).
- Добавлена возможность удалять пакет безусловно при помощи ключа "y|yes|да". Теперь можно удалить пакет
- Добавлена возможность обновления пакета через скрипт командой `curl -sOfL https://raw.githubusercontent.com/qzeleza/kvas/main/ipk/update.sh && sh ./update.sh`


## 1.1.3
- Доработана функция получения локального entware интерфейса по ip. Спасибо за помощь [@Aleksandr Akimov](https://forum.keenetic.com/profile/13033-aleksandr-akimov/).
Expand Down
Binary file modified ipk/kvas_all.ipk
Binary file not shown.
33 changes: 28 additions & 5 deletions ipk/install.sh → ipk/update.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ when_err() (echo -e "${RED}ОШИБКА${NOCL}" )
package_name=kvas_all.ipk
package_url=https://github.com/qzeleza/kvas/releases/latest/download/${package_name}
list_backup=/opt/etc/hosts.list.backup
host_list=/opt/etc/hosts.list

clear
print_line
Expand All @@ -35,22 +36,44 @@ ready 'Обновляем opkg...'
opkg update && opkg upgrade && opkg install curl iptables
} &>/dev/null && when_ok || when_err


ready 'Загружаем пакет...'
{
[ -f /opt/bin/kvas ] && kvas export "${list_backup}"

cd /opt/packages
curl -sOL "${package_url}"
} &>/dev/null && when_ok || when_err

ready 'Устанавливаем пакет...'
[ -f "${host_list}" ] && {
ready 'Сохраняем список разблокировки в архив...'
mv "${host_list}" "${list_backup}" &>/dev/null && when_ok || when_err
}

ready 'Удаляем предыдущую версию пакета...'
{
kvas rm yes

} &>/dev/null && when_ok || when_err

ready 'Устанавливаем новую версию пакета...'
{
opkg install "./${package_name}"

} &>/dev/null && when_ok || when_err

print_line
sleep 2
sleep 1

{
clear
kvas setup
} && rm -f ./install.sh
kvas setup update
}

[ -f "${list_backup}" ] && {
ready 'Восстанавливаем список разблокировки из архива...'
kvas import "${list_backup}" &>/dev/null && when_ok || when_err
}

print_line
sleep 2
rm -f ./update.sh
4 changes: 3 additions & 1 deletion opt/bin/kvas
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@

if echo "${1}" | grep -qvEi 'uninstall|remove|rm' && [ -z "$(get_config_value "SETUP_FINISHED")" ]; then
print_line
error "Настройка пакета не завершена, запускаем настройку пакета" "1"
echo "${2}" | grep -q "update" && warning "Запускаем настройку пакета" || {
error "Настройка пакета не завершена, запускаем настройку пакета" "1"
}
print_line
cmd_install
print_line
Expand Down
24 changes: 12 additions & 12 deletions opt/bin/libs/vpn
Original file line number Diff line number Diff line change
Expand Up @@ -522,7 +522,6 @@ bridge_vpn_access_del() {
guest_bridge_id="${1}"
ready "Удаление гостевого интерфейса ${guest_bridge_id} завершено"
ip4_firewall_rm_selected_guest_net "${guest_bridge_id}" && when_alert "УСПЕШНО" || when_bad "С ОШИБКОЙ"
print_line
}


Expand Down Expand Up @@ -577,7 +576,7 @@ cmd_bridge_vpn_access_del() {
bridge_vpn_access_del "${guest_bridge_id}"
fi
fi
if [ -n "${guest_bridge_id}" ] && [ "${cmd}" = update ]; then cmd_kvas_init ; fi
#if [ -n "${guest_bridge_id}" ] && [ "${cmd}" = update ]; then cmd_kvas_init ; fi
}


Expand Down Expand Up @@ -621,12 +620,12 @@ cmd_bridge_vpn_access_add() {
for bridge_id in ${entware_bridge_list}; do
bridge_access_add "${bridge_id}" "${ip}"
done
cmd_kvas_init ''
# cmd_kvas_init ''
else
guest_bridge_id=''; bridge_inface_select guest_bridge_id add
if [ -n "${guest_bridge_id}" ]; then
bridge_access_add "${guest_bridge_id}" "${ip}"
cmd_kvas_init
# cmd_kvas_init
fi
fi
}
Expand All @@ -636,7 +635,7 @@ has_in_iptables_rules(){
if has_ssr_enable; then
iptables-save | grep " ${1} " | grep PREROUTING | grep -q DNAT && iptables-save | grep " ${1} " | grep PREROUTING | grep unblock | grep -q REDIRECT
else
iptables-save | grep " ${1} " | grep PREROUTING | grep -q DNAT && iptables-save | grep " ${1} " | grep PREROUTING | grep -q MASQUERADE
iptables-save | grep " ${1} " | grep PREROUTING | grep -q DNAT && iptables-save | grep " ${1} " | grep POSTROUTING | grep -q MASQUERADE
fi
}

Expand Down Expand Up @@ -669,15 +668,16 @@ bridge_inface_select() {
if echo "${action}" | grep -q "del" && has_in_iptables_rules "${inface}"; then
del_count=$((del_count + 1))
# отображаем только те гостевые интерфейсы, для которых правила уже есть
ready "${num}. Интерфейс '${desc}::Bridge${num_inface}' [${net}]"
ready "${num}. Интерфейс '${desc}' [br${num_inface}:${net}]"
when_ok "ПОДКЛЮЧЕН"
elif echo "${action}" | grep -q "add" && ! has_in_iptables_rules "${inface}"; then
add_count=$((add_count + 1))
# отображаем только те гостевые интерфейсы, для которых правил еще нет
ready "${num}. Интерфейс '${desc}::Bridge${num_inface}' [${net}]"
ready "${num}. Интерфейс '${desc}' [br${num_inface}:${net}]"
when_bad "ОТКЛЮЧЕН"
fi
done
total=$((add_count+del_count))
if [ "${add_count}" -gt 0 ] || [ "${del_count}" -gt 0 ]; then
while true; do
print_line
Expand Down Expand Up @@ -1584,7 +1584,7 @@ dns_crypt_install() {
is_install_stage="${1}"
# В случае наличия архива файла запуска сервиса dnscrypt_proxy2
if [ -f /opt/etc/init.d/K09dnscrypt-proxy2 ]; then
warning "Обнаружен архив файла S09dnscrypt-proxy2."
#warning "Обнаружен архив файла S09dnscrypt-proxy2."
ready "Восстанавливаем S09dnscrypt-proxy2 из архива..."
# реанимируем его из архива
cp /opt/etc/init.d/K09dnscrypt-proxy2 /opt/etc/init.d/S09dnscrypt-proxy2 1> /dev/null 2> "${ERROR_LOG_FILE}"
Expand Down Expand Up @@ -1621,13 +1621,13 @@ dns_crypt_install() {

# архивируем предыдущие настройки
if [ -f '/opt/etc/dnscrypt-proxy.toml' ]; then
warning "Файл конфигурации dnscrypt-proxy2 сохраняем"
#warning "Файл конфигурации dnscrypt-proxy2 сохраняем"
cp /opt/etc/dnscrypt-proxy.toml ${KVAS_BACKUP_PATH}/dnscrypt-proxy.toml
warning "под именем ${KVAS_BACKUP_PATH}/dnscrypt-proxy.toml"
#warning "под именем ${KVAS_BACKUP_PATH}/dnscrypt-proxy.toml"
elif [ -f "${KVAS_BACKUP_PATH}/dnscrypt-proxy.toml" ]; then
warning "Обнаружен файл конфигурации dnscrypt-proxy2 "
#warning "Обнаружен файл конфигурации dnscrypt-proxy2 "
cp "${KVAS_BACKUP_PATH}/dnscrypt-proxy.toml" /opt/etc/dnscrypt-proxy.toml
warning "Восстанавливаем предыдущие настройки."
#warning "Восстанавливаем предыдущие настройки."
fi

# Настраиваем сервис
Expand Down
31 changes: 19 additions & 12 deletions opt/etc/ndm/ndm
Original file line number Diff line number Diff line change
Expand Up @@ -199,11 +199,18 @@ ip4_add_selected_guest_to_vpn_network(){
# Маркируем трафик гостевой сети
{
log_warning "Подключаем правила маркировки гостевого трафика для VPN."
ip4tables PREROUTING -w -t nat -i "${guest_inface}" -p tcp -j DNAT --to "$(inface_gw4):53"
ip4tables PREROUTING -w -t nat -i "${guest_inface}" -p udp -j DNAT --to "$(inface_gw4):53"
ip4tables POSTROUTING -t nat -s "$(guest_net "${guest_inface}")" -o "${guest_inface}" -j MASQUERADE
# ip4tables PREROUTING -w -t nat -i "${guest_inface}" -p tcp -j DNAT --to "$(inface_gw4):53"
# ip4tables PREROUTING -w -t nat -i "${guest_inface}" -p udp -j DNAT --to "$(inface_gw4):53"
ip4tables POSTROUTING -t nat -s "$(guest_net "${guest_inface}")" -o "${guest_inface}" -m ndmmark --ndmmark ${MARK_NUM} -j MASQUERADE
# Под вопросом ?
ip4tables POSTROUTING -t nat -s "$(guest_net "${guest_inface}")" -o "${guest_inface}" -m ndmmark --ndmmark ${MARK_NUM} -j SNAT --to-source $(inface_guest_gw4 "${guest_inface}")

} &>/dev/null
when_error "${?}" " ${IPv4} Возникла ошибка при маркировке гостевого трафика ${guest_inface} [$(guest_net "${guest_inface}")] для VPN."
rules_masq=$(ip4save | grep "\-j MASQUERADE" | grep " ${guest_inface} ")
rules_dns=$(ip4save | grep " ${guest_inface} " | grep DNAT | grep 53)
if [ -z "${rules_dns}" ] || [ -z "${rules_masq}" ] ; then
error "${IPv4} Возникла ошибка при маркировке гостевого трафика ${guest_inface} [$(guest_net "${guest_inface}")] для VPN."
fi
fi
}
ip4_add_guest_to_vpn_network(){
Expand Down Expand Up @@ -232,15 +239,15 @@ ip4_add_selected_guest_to_ssr_network(){
ip4tables PREROUTING -w -t nat -i "${guest_inface}" -p tcp -j DNAT --to "$(inface_gw4):53"
ip4tables PREROUTING -w -t nat -i "${guest_inface}" -p udp -j DNAT --to "$(inface_gw4):53"
# Выборочные IP в Shadowsocks
ip4tables PREROUTING -w -t nat -i "${guest_inface}" -p tcp -m set --match-set unblock dst -j REDIRECT --to-ports "${ssr_port}"
ip4tables PREROUTING -w -t nat -i "${guest_inface}" -p udp -m set --match-set unblock dst -j REDIRECT --to-ports "${ssr_port}"
ip4tables PREROUTING -w -t nat -i "${guest_inface}" -p tcp -m set --match-set unblock dst -j REDIRECT --to-port "${ssr_port}"
ip4tables PREROUTING -w -t nat -i "${guest_inface}" -p udp -m set --match-set unblock dst -j REDIRECT --to-port "${ssr_port}"

} &>/dev/null

rules_block=$(ip4save | grep " ${guest_inface} " | grep "${table_name}" | grep "REDIRECT" | grep "${ssr_port}")
rules_dns=$(ip4save | grep " ${guest_inface} " | grep DNAT | grep 53)
if [ -z "${rules_block}" ] || [ -z "${rules_dns}" ]; then
when_error "${?}" " ${IPv4} Возникла ошибка при маркировке гостевого трафика ${guest_inface} [$(guest_net "${guest_inface}")] для SHADOWSOCKS"
error "${IPv4} Возникла ошибка при маркировке гостевого трафика ${guest_inface} [$(guest_net "${guest_inface}")] для SHADOWSOCKS"
fi
fi
}
Expand Down Expand Up @@ -331,8 +338,8 @@ ip4_firewall_set_ssr_rules(){
# Исключаем любые обращения к собственному адресу SHADOWSOCKS
ip4tables ${SSR_IPTABLES_CHAIN} -t nat -d "${ssr_ip}" -j RETURN &>/dev/null

ip4tables PREROUTING -w -t nat -i "${interface}" -p tcp -m set --match-set "${table_name}" dst -j REDIRECT --to-ports "${proxy_port}" &>/dev/null
ip4tables PREROUTING -w -t nat -i "${interface}" -p udp -m set --match-set "${table_name}" dst -j REDIRECT --to-ports "${proxy_port}" &>/dev/null
ip4tables PREROUTING -w -t nat -i "${interface}" -p tcp -m set --match-set "${table_name}" dst -j REDIRECT --to-port "${proxy_port}" &>/dev/null
ip4tables PREROUTING -w -t nat -i "${interface}" -p udp -m set --match-set "${table_name}" dst -j REDIRECT --to-port "${proxy_port}" &>/dev/null

} &>/dev/null
# when_error "${?}" " ${IPv4} Возникла ошибка при установке правил iptable для Shadowsocks подключения"
Expand Down Expand Up @@ -415,7 +422,7 @@ ip4tbl_flush_rm_match_set(){
ip4save | grep "${route}" | grep "${chain}" | grep -q "${prot}" && {
if [ -n "${interface}" ] && [ -n "${proxy_port}" ] ; then
# Для shadowsocks
iptab -t "${table}" -i "${interface}" -D "${route}" -p "${prot}" -m set --match-set ${table_name} dst -j "${chain}" --to-ports "${proxy_port}" &>/dev/null
iptab -t "${table}" -i "${interface}" -D "${route}" -p "${prot}" -m set --match-set ${table_name} dst -j "${chain}" --to-port "${proxy_port}" &>/dev/null
else
# Для VPN
iptab -t "${table}" -D "${route}" -p "${prot}" -m set --match-set ${table_name} dst -j "${chain}" &>/dev/null
Expand Down Expand Up @@ -514,8 +521,8 @@ ip4_firewall_rm_ssr_selected_guest_net(){
ssr_port=$(get_config_value "SSR_DNS_PORT")
iptab -D PREROUTING -t nat -p udp -i "${guest_inface}" -j DNAT --to-destination "$(inface_gw4):53"
iptab -D PREROUTING -t nat -p tcp -i "${guest_inface}" -j DNAT --to-destination "$(inface_gw4):53"
iptab -D PREROUTING -t nat -p udp -i "${guest_inface}" -m set --match-set unblock dst -j REDIRECT --to-ports "${ssr_port}"
iptab -D PREROUTING -t nat -p tcp -i "${guest_inface}" -m set --match-set unblock dst -j REDIRECT --to-ports "${ssr_port}"
iptab -D PREROUTING -t nat -p udp -i "${guest_inface}" -m set --match-set unblock dst -j REDIRECT --to-port "${ssr_port}"
iptab -D PREROUTING -t nat -p tcp -i "${guest_inface}" -m set --match-set unblock dst -j REDIRECT --to-port "${ssr_port}"
}
# для всех гостевых интерфейсов
ip4_firewall_flush_ssr_guest_rules(){
Expand Down

0 comments on commit 7bb8de7

Please sign in to comment.