Skip to content

Commit

Permalink
- Исправлена ошибка при обновлении пакета, когда номер версии не меня…
Browse files Browse the repository at this point in the history
…лся, а оставался прежним.

- Исправлена ошибка при сканировании интерфейсов при исполнении команды
- Доработана функция сканирования интерфейсов, в случае наличия ошибок теперь выводятся сообщения об ошибках.
  • Loading branch information
qzeleza committed Jan 22, 2024
1 parent 768ef8f commit f0b3592
Show file tree
Hide file tree
Showing 13 changed files with 121 additions and 62 deletions.
7 changes: 7 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
## 1.1.7 release 2
- Исправлена ошибка при обновлении пакета, когда номер версии не менялся, а оставался прежним.
- Исправлена ошибка при сканировании интерфейсов при исполнении команды `vpn set`
- Доработана функция сканирования интерфейсов, в случае наличия ошибок теперь выводятся сообщения об ошибках.
- Добавлены статусы текущих настроек при исполнении команды debug

## 1.1.7 release 1
- Добавлена возможность для команды help <команда> - выводит все о встречающейся команде - эквивалент kvas help | grep <команда>
- Добавлена перезагрузка всех используемых сервисов при выполнении команды update
- Добавлена проверка на недопустимые символы в вводе пароля для shadowsocks соединений
- Изменена команда с `dns hosts *` на `hosts *`. Сделано это с целью удобства использования и запоминания.

## 1.1.7
- Добавлена поддержка доменных имен в файле **/opt/etc/hosts**, что позволяет быстро добавлять собственные доменные имена для локальной сети и не только; При этом, данный список атоматически добавяется в конфигурацию одного из DNS серверов, установленных Квасом: dnsmasq или AdGuardHome.
Expand Down
2 changes: 1 addition & 1 deletion build/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk

PKG_NAME:=kvas
PKG_VERSION:=1.1.7
PKG_RELEASE:=release_1
PKG_RELEASE:=release_2
PKG_BUILD_DIR:=$(BUILD_DIR)/${FULL_PACKAGE_NAME}_

include $(INCLUDE_DIR)/package.mk
Expand Down
2 changes: 1 addition & 1 deletion build/version
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
VERSION=1.1.7
STAGE=release
RELEASE=1
RELEASE=2
Binary file added ipk/kvas_1.1.7-release_2_all.ipk
Binary file not shown.
File renamed without changes.
18 changes: 9 additions & 9 deletions opt/bin/kvas
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ case "${1}" in
status | *) exit_when_adguard_on status;
[ "${status}" = 0 ] && {
cmd_dnsmasq_listen_show;
cmd_dnsmasq_port_show
} ;;
esac
;;
Expand All @@ -79,23 +78,24 @@ case "${1}" in
esac
;;

hosts)
case "${3}" in
add ) cmd_hosts_one_add "${4}" "${5}" ;;
edit ) cmd_hosts_edit ;;
*) cmd_hosts_list ;;
esac
;;

dns)
case "${2}" in
test) cmd_dns_test "${3}";;
hosts)
case "${3}" in
add ) cmd_hosts_one_add "${4}" "${5}" ;;
edit ) cmd_hosts_edit ;;
*) cmd_hosts_list ;;
esac
;;
*) cmd_dnsmasq_dns_change "${2}" ;;
esac
;;

vpn)
case "${2}" in
set) cmd_interface_change ask ;;
set) cmd_interface_change skip ;;
reset) cmd_vpn_iptable_reset && all_services_restart;;
net | guest)
case "${3}" in
Expand Down
22 changes: 22 additions & 0 deletions opt/bin/libs/debug
Original file line number Diff line number Diff line change
Expand Up @@ -393,6 +393,27 @@ show_interfaces_debug() {
fi
}

show_guest_nets(){
list=$(cat < "${KVAS_CONF_FILE}" | sed -n 's/INFACE_GUEST_ENT=\(.*\)/\1/p;'| sed 's/[ ]//g; s/^\,//')
[ -n "${list}" ] && {
ready "Список гостевых сетей"
when_ok "${list}"
}
}

show_services_status(){
. /opt/apps/kvas/bin/libs/vpn
cmd_vpn_status
cmd_ads_status
if cmd_adguardhome_status | grep -q ВКЛЮЧЕН ; then
cmd_adguardhome_status
else
cmd_dns_crypt_status_show
cmd_dnsmasq_dns_change
fi
show_guest_nets

}
# ------------------------------------------------------------------------------------------
#
# Формируем лог отладочной информации
Expand All @@ -416,6 +437,7 @@ print_debug() {
router_info
# ping_debug
show_install_log
show_services_status
print_line
syslog_debug
show_interfaces_debug
Expand Down
25 changes: 19 additions & 6 deletions opt/bin/libs/main
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,12 @@ MINUS=9

get_firmware_version(){
# номер версии фирменной Keenetic ОС
curl -s localhost:79/rci/show/version | jq '.title' | sed 's/[" ]//g'
curl -s localhost:79/rci/show/version | jq '.title' | sed 's/["a-zA-Z]//g'
}

get_hook_dir(){
# Получаем директорию текущего механизма обработки состояний подключений
get_firmware_version | grep -q '4.' && echo "ifstatechanged.d" || echo "iflayerchanged.d"
get_firmware_version | grep -q '4.' && echo "iflayerchanged.d" || echo "ifstatechanged.d"
}

get_entware_ikev2_inface(){
Expand Down Expand Up @@ -148,6 +148,7 @@ get_guest_inface_list_from_config(){
# ------------------------------------------------------------------------------------------
reset_connection() {
inface_cli=${1}
time_delay=${2}
# получаем текущее состояние инф-са для возвращения его к исходному состоянию
state=$(curl -s "${INFACE_REQUEST}" | jq -r '.[] | select(.id=="'"${inface_cli}"'") | .state')
isp_state=$(curl -s "${INFACE_REQUEST}" | jq -r '.[] | select(.defaultgw==true and .global==true) | .state')
Expand All @@ -164,10 +165,20 @@ reset_connection() {
if [ "${state}" = 'up' ]; then
curl -s -d '{"down":"true"}' "${INFACE_PART_REQUEST}/${inface_cli}" &> /dev/null
else
curl -s -d '{"up":"true"}' "${INFACE_PART_REQUEST}/${inface_cli}" &> /dev/null
error_mess=$(curl -s -d '{"up":"true"}' "${INFACE_PART_REQUEST}/${inface_cli}" \
| jq '.[] | .status | .[] | select(.status == "error") | .message' | tr '\"' '"')
echo "${error_mess}" | grep -q '[a-zA-Z]' && {
error "Обнаружена ошибка при переключении '${inface_cli}' сети. " nl
error "Прежде чем продолжить - устраните ее." nl
print_line
error "${error_mess}" nl
print_line
exit 0
}
fi
sleep 3
sleep "${time_delay}"
curl -s -d "{\"${state}\":\"true\"}" "${INFACE_PART_REQUEST}/${inface_cli}" &> /dev/null
sleep 1
}


Expand Down Expand Up @@ -326,7 +337,7 @@ get_router_protocol() {
#
# ------------------------------------------------------------------------------------------
get_router_wui_port() {
curl -s "localhost:79/rci/ip/http/port" | tr -d '" '
curl -s "localhost:79/rci/ip/http/port" | tr -d '" ' | sed 's/[{}]//g'
}
# ------------------------------------------------------------------------------------------
#
Expand All @@ -337,7 +348,9 @@ get_router_host() {
port=$(get_router_wui_port)
ip=$(get_router_ip)
protocol=$(get_router_protocol)
! [ "${port}" -eq 80 ] && ip="${ip}:${port}"
[ -z "${port}" ] && ip="${ip}" || {
[ "${port}" -eq 80 ] || ip="${ip}:${port}"
}
# echo "${protocol}${ip}"
echo "http://${ip}"
}
Expand Down
76 changes: 39 additions & 37 deletions opt/bin/libs/vpn
Original file line number Diff line number Diff line change
Expand Up @@ -149,9 +149,7 @@ cmd_kvas_init(){
#
# ip4_add_route_table &> /dev/null && when_ok "УСПЕШНО" || when_bad "ОШИБКА"

[ "${stage}" = initd ] && update_time

all_services_restart
[ "${stage}" = initd ] && update_time || all_services_restart

log_alert "${prefix}Сброс пакета КВАС в исходное состояние ЗАВЕРШЕН!"

Expand Down Expand Up @@ -755,17 +753,17 @@ warning_info(){
}
cmd_bridge_vpn_access_list() {

[ "${2}" = skeep ] || {
[ "${2}" = skip ] || {
warning_info
echo "Полный список подключенных гостевых сетей:"
print_line
}

mode="${1}"
selected_vpn=$(get_config_value INFACE_CLI)
mode="${1}"
selected_vpn=$(get_config_value INFACE_CLI)
# Список интерфейсов которые доступны в формате '"vps" [OpenVPN] -> 192.168.255.14 ВКЛ.'
# или если адреса нет, то в формате '"Моя сеть" [SSTP] откл.'
interfaces_json=$(curl -s "${INFACE_REQUEST}" )
interfaces_json=$(curl -s "${INFACE_REQUEST}" )
# Убираем основной мост Bridge0, все сети GigabitEthernet | Port | AccessPoint | WifiMaster | WifiStation
interfaces_list=$(echo "${interfaces_json}" | jq -r '.[]
| select(
Expand Down Expand Up @@ -953,7 +951,7 @@ cmd_bridge_vpn_access_add() {
# ------------------------------------------------------------------------------------------
bridge_inface_select() {
action="${2}"
entware_list=$(cmd_bridge_vpn_access_list "${action}" skeep)
entware_list=$(cmd_bridge_vpn_access_list "${action}" skip)
if [ -n "${entware_list}" ]; then
# echo "Выберите гостевую сеть для добавления:"
# print_line
Expand Down Expand Up @@ -1122,9 +1120,9 @@ cmd_dnsmasq_dns_change() {
# ------------------------------------------------------------------------------------------
cmd_dnsmasq_listen_show() {
exit_when_adguard_on status; [ "${status}" = 0 ] && {
ready "DNSMASQ слушает адрес"
ready "DNSMASQ слушает адрес:порт"
ip=$(get_config_value DNSMASQ_LISTEN_IP)
when_alert "${ip}"
when_alert "${ip}:$(cmd_adguardhome_status)"
}
}

Expand Down Expand Up @@ -1640,14 +1638,13 @@ update_interface_name_list() {
print_line

HOOK_INFACE_FILE=/opt/etc/ndm/$(get_hook_dir)/100-save-inface_entware

rm -f "${INFACE_NAMES_FILE}"
touch "${INFACE_NAMES_FILE}"
# если нет файла по отлавливанию хука
if ! [ -f "${HOOK_INFACE_FILE}" ]; then
# создаем файл
cat <<EOF >"${HOOK_INFACE_FILE}"
#!/bin/sh
if ! [ -f "${INFACE_NAMES_FILE}" ]; then touch "${INFACE_NAMES_FILE}"; fi
if [ -z "\$(grep "\${id}" "${INFACE_NAMES_FILE}")" ]; then
echo "\${id}|\${system_name}" >> "${INFACE_NAMES_FILE}"
fi
Expand All @@ -1665,18 +1662,22 @@ EOF
inface_list=$(
curl -s "${INFACE_REQUEST}" \
| jq -r '.[] | select([.type]| inside(['"${types_inface}"'])) | select(.defaultgw!=true) | .id' \
| tr '\n' ' ' \
| tr '\n' ' ' | sed 's/[ ]$//g' \
)
# проходимся по каждому интерфейсу
# ВНИМАНИЕ! inface_list - все маленькими буквами!!!
count=1
list_len=$(echo "${inface_list}" | wc -w)
for inface_cli in ${inface_list}; do
# переподключаем текущее соединение
reset_connection "${inface_cli}"
[ "${list_len}" = "${count}" ] && delay=4 || delay=2
reset_connection "${inface_cli}" "${delay}"
# получаем описание интерфейса
description=$(get_value_interface_field "${inface_cli}" description | sed 's|\/|\\/|g')
# вставляем описание в файл /opt/etc/inface_equals
[ -n "${description}" ] && \
sed -i 's/\('"${inface_cli}"'.*\)/\1|'"${description}"'/' "${INFACE_NAMES_FILE}"
count=$((count + 1))
done
rm -f "${HOOK_INFACE_FILE}"
}
Expand Down Expand Up @@ -1774,7 +1775,7 @@ show_vpn_list() {
sleep 1
connected=$(is_vpn_interface_connected "${cli_inface}")

if [ -n "${is_current_vpn}" ]; then
if [ -n "${inface_entware}" ] && [ -n "${is_current_vpn}" ]; then
mess="${BLUE}${mess} текущий${NOCL}"
fi

Expand All @@ -1791,23 +1792,23 @@ show_vpn_list() {
# ------------------------------------------------------------------------------------------
show_interface_name_list_process(){

[ -f "${INFACE_NAMES_FILE}" ] || update_interface_name_list
# answer="${1}"
#
# if [ -f "${INFACE_NAMES_FILE}" ]; then
#if [ "${answer}" = ask ] ; then
#read_ynq_timer "Обновить список интерфейсов" answer N
#if [ "${answer}" = q ] ; then exit_q; exit 1; fi
#print_line
#if echo "${answer}" | grep -qi y ; then
# update_interface_name_list
#fi
#elif [ "${answer}" = no ] ; then
# update_interface_name_list
#fi
# else
# update_interface_name_list
# fi
# [ -f "${INFACE_NAMES_FILE}" ] || update_interface_name_list
answer="${1}"

if [ -f "${INFACE_NAMES_FILE}" ]; then
if [ "${answer}" = ask ] ; then
read_ynq_timer "Обновить список интерфейсов" answer N
if [ "${answer}" = q ] ; then exit_q; exit 1; fi
print_line
if echo "${answer}" | grep -qi y ; then
update_interface_name_list
fi
elif [ "${answer}" = no ] ; then
update_interface_name_list
fi
else
update_interface_name_list
fi
}
# ------------------------------------------------------------------------------------------
#
Expand All @@ -1821,8 +1822,8 @@ cmd_interface_change() {
answer="${1}"
is_install_stage="${2:-no}"

# пропускаем запрос о сканировании если параметр skeep
[ "${answer}" = skeep ] || show_interface_name_list_process "${answer}"
# пропускаем запрос о сканировании если параметр skip
[ "${answer}" = skip ] || show_interface_name_list_process "${answer}"


# Отображаем список текущих интерфейсов с номерами по порядку и данными об их доступности
Expand Down Expand Up @@ -1896,9 +1897,8 @@ select_vpn_interface() {

elif echo "${num_vpn_inface}" | grep -qi "q"; then
# Если нажали на q
cli="$(get_router_host)/a"
echo -e "${RED}Процедура настройки прервана пользователем!${NOCL}"

print_line
# если интернет отключен, то выдаем сообщение
if curl -s "http://localhost:79/rci/show/interface" | \
jq -r '.[] | select(.id=="'"$(get_defaultgw_id)"'" and .state=="up" and .link=="up") | .connected' | grep -qv 'yes' ; then
Expand All @@ -1908,6 +1908,7 @@ select_vpn_interface() {
else
"${ADGUARDHOME_DEMON}" stop &> /dev/null
fi
cli="$(get_router_host)/a"
echo -e "${RED}К сожалению, у Вас пропал интернет. ${NOCL}"
echo -e "${RED}Проверьте основное подключение к провайдеру. ${NOCL}"
print_line
Expand All @@ -1921,6 +1922,7 @@ select_vpn_interface() {
print_line
exit 1
fi
exit
else
cmd_interface_change "no" "${is_install_stage}"
fi
Expand Down
Loading

0 comments on commit f0b3592

Please sign in to comment.