Skip to content

Commit

Permalink
- Добавлена поддержка доменных имен в файле **/opt/etc/hosts**, что п…
Browse files Browse the repository at this point in the history
…озволяет быстро добавлять собственные доменные имена для локальной сети и не только; При этом, данный список атоматически добавяется в конфигурацию одного из DNS серверов, установленных Квасом: dnsmasq или AdGuardHome.

- Добавлена команда **dns hosts**, которая отображает список хостов и их **IP** добавленные Вами в **/opt/etc/hosts**
- Добавлена команда **dns hosts edit**, которая позволяет редактировать список хостов и их **IP** в файле **/opt/etc/hosts**
- Добавлена команда **dns hosts add <ip> <host>** или **dns hosts add <host> <ip>**, которая добавляет один хост в файл **/opt/etc/hosts**
- Реализована возможность добавлять клиентов **SSTP** сетей для подключения к **Квасу** командой .
- Реализовано автоматическое обновление списка VPN интерфейсов, при их создании или удалении (кроме IPSpec)
- Реализован механизм очистки правил **iptables** для интерфейсов **PPTP** и **L2TP**, через которые происходит подключение к провайдеру, с целью решить вопрос возобновление работы **Кваса** при обрыве соединения такого рода [#issue](#97).
- Осуществлен переход на новый механизм **ndm** для отслеживания состояний интерфейсов - **iflayerchanged.d** (для прошивок >= 4.0), вместо предыдущего вариант - **ifdestroyed.d**(для прошивок < 4.0).
  • Loading branch information
qzeleza committed Jan 18, 2024
1 parent a47f669 commit cd36c45
Show file tree
Hide file tree
Showing 19 changed files with 450 additions and 83 deletions.
10 changes: 10 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
## 1.1.7
- Добавлена поддержка доменных имен в файле **/opt/etc/hosts**, что позволяет быстро добавлять собственные доменные имена для локальной сети и не только; При этом, данный список атоматически добавяется в конфигурацию одного из DNS серверов, установленных Квасом: dnsmasq или AdGuardHome.
- Добавлена команда **dns hosts**, которая отображает список хостов и их **IP** добавленные Вами в **/opt/etc/hosts**
- Добавлена команда **dns hosts edit**, которая позволяет редактировать список хостов и их **IP** в файле **/opt/etc/hosts**
- Добавлена команда **dns hosts add <ip> <host>** или **dns hosts add <host> <ip>**, которая добавляет один хост в файл **/opt/etc/hosts**
- Реализована возможность добавлять клиентов **SSTP** сетей для подключения к **Квасу** командой `vpn net add`.
- Реализовано автоматическое обновление списка VPN интерфейсов, при их создании или удалении (кроме IPSpec)
- Реализован механизм очистки правил **iptables** для интерфейсов **PPTP** и **L2TP**, через которые происходит подключение к провайдеру, с целью решить вопрос возобновление работы **Кваса** при обрыве соединения такого рода [#issue](https://github.com/qzeleza/kvas/issues/97).
- Осуществлен переход на новый механизм **ndm** для отслеживания состояний интерфейсов - **iflayerchanged.d** (для прошивок >= 4.0), вместо предыдущего вариант - **ifdestroyed.d**(для прошивок < 4.0).

## 1.1.6 stable-6
- Произведена замена записи 'conf-file=/opt/etc/kvas.dnsmasq' на 'conf-dir=/opt/etc/dnsmasq.d/,*.dnsmasq', а сам файл kvas.dnsmasq перенесен в папку /opt/etc/dnsmasq.d/, с целью включения в работу dnsmasq любых файлов находящихся в папке /opt/etc/dnsmasq.d/
- Добавлена возможность восстановления предыдущих гостевых сетей при обновлении пакета. Работает, только при обновлении текущего релиза.
Expand Down
4 changes: 2 additions & 2 deletions build/Makefile
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
include $(TOPDIR)/rules.mk

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

include $(INCLUDE_DIR)/package.mk
Expand Down
6 changes: 3 additions & 3 deletions build/version
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
VERSION=1.1.6
STAGE=stable
RELEASE=6
VERSION=1.1.7
STAGE=
RELEASE=
3 changes: 2 additions & 1 deletion image.build
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,8 @@ if [ "${1}" = build ] || [ -z "$(docker ps -a -f 'status=running' | grep "${APP_
# если не создан образ, то запускаем сборку образа
show_line; echo "Запускаем сборку образа ${image_name}"
show_line
docker-compose up --build -d
docker image ls | grep -q "${image_name}" && build='' || build='--build'
docker-compose up "${build}" -d
fi

if [ "${?}" = 0 ]; then
Expand Down
Binary file removed ipk/kvas_1.1.6-stable_6_all.ipk
Binary file not shown.
Binary file added ipk/kvas_1.1.7_all.ipk
Binary file not shown.
Binary file modified ipk/old/kvas_1.1.6-stable_6_all.ipk
Binary file not shown.
8 changes: 8 additions & 0 deletions opt/bin/kvas
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
. /opt/apps/kvas/bin/libs/vpn
. /opt/apps/kvas/bin/libs/check
. /opt/apps/kvas/bin/libs/update
. /opt/apps/kvas/bin/libs/hosts
. /opt/apps/kvas/bin/main/setup

#------------------------------------------------------------------------------
Expand Down Expand Up @@ -81,6 +82,13 @@ case "${1}" in
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
;;
Expand Down
72 changes: 72 additions & 0 deletions opt/bin/libs/hosts
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#!/bin/sh
# ------------------------------------------------------------------------------------------
#
# ПРОЕКТ КВАС
#
# ------------------------------------------------------------------------------------------
# Данный файл служит основной библиотекой функций пакета КВАС
# ------------------------------------------------------------------------------------------
# Разработчик: kvas@zeleza.ru
# Дата: 17/01/2024
# Лицензия: Apache License 2.0
# ------------------------------------------------------------------------------------------
# подключаем основную библиотеку
. /opt/apps/kvas/bin/libs/main

#
# Выводим список доменных имен из файла /opt/etc/hosts
#
cmd_hosts_list(){
warning "Список доменных имен в файле ${GREEN}/opt/etc/hosts${NOCL}:"
print_line
cat < /opt/etc/hosts | grep -vE '^#'
}

#
# Редактируем список доменных имен в файле /opt/etc/hosts
#
cmd_hosts_edit(){
nano /opt/etc/hosts && {
if cmd_adguardhome_status | grep -q "ВКЛЮЧЕН" ; then
mess="Перезапуск службы AdGuardHome..."
service=/opt/etc/init.d/S56dnsmasq
else
mess="Перезапуск службы dnsmasq..."
service=/opt/etc/init.d/S56dnsmasq
fi
ready "${mess}"
${service} restart &> /dev/null
if [ $? = 0 ] ; then
when_ok "УСПЕШНО"
res=0
else
when_bad "ОШИБКА"
res=1
fi
ready "Файл /opt/etc/hosts обновлен..."
[ "${res}" = 1 ] && when_ok "УСПЕШНО" || when_bad "С ОШИБКОЙ"
}
}

#
# Добавляем список доменных имен в файле /opt/etc/hosts
# добавлять можно как <domain> <ip>, так и kvas dns host add <ip> <domain>
#
cmd_hosts_one_add(){

if echo "${1}" | grep -qE "${IP_FILTER}"; then
ip=${1}
host=${2}
elif echo "${2}" | grep -qE "${IP_FILTER}"; then
ip=${2}
host=${1}
else
error "Неправильно задан один из аргументов!" nl
print_line
exit 0
fi
ready "Доменное имя ${host} c ${ip} добавлено..."
printf "%s\t%s\n" "${ip}" "${host}" >> /opt/etc/hosts
dig "${host}" @localhost &> /dev/null
[ $? = 0 ] && when_ok "УСПЕШНО" || when_bad "ОШИБКА"
}
26 changes: 24 additions & 2 deletions opt/bin/libs/main
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ CRONTAB_FILE=/opt/etc/crontab
UPDATE_BIN_FILE=/opt/apps/kvas/bin/main/update
DNS_LOCAL_DEMON_FILE=/opt/etc/ndm/netfilter.d/100-dns-local
IPSET_REDIRECT_DEMON_FILE=/opt/etc/ndm/netfilter.d/100-proxy-redirect
HOOK_INFACE_FILE=/opt/etc/ndm/ifstatechanged.d/100-save-inface_entware
INFACE_NAMES_FILE=/opt/etc/inface_equals
SHADOWSOCKS_CONF=/opt/etc/shadowsocks.json
SHADOWSOCKS_CONF_BACKUP=${KVAS_BACKUP_PATH}/shadowsocks.json
Expand All @@ -70,6 +69,17 @@ LOCALHOST_IP=127.0.0.1
INFACE_REQUEST="${LOCALHOST_IP}:79/rci/show/interface"
INFACE_PART_REQUEST="${LOCALHOST_IP}:79/rci/interface"
SSR_ENTWARE_TEMPL=ezcfg
MINUS=9

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

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

get_entware_ikev2_inface(){
# net_inface_last=$(ip a| grep global | sed 's/.*\(eth[0-9]\{1,3\}\).*/\1/g' | sort | tail -n1)
Expand Down Expand Up @@ -366,9 +376,16 @@ echo_debug() {
fi
}
diff_len() {
len=${2:-${LENGTH}} # максим длинна строки
charlen=$(echo "${1}" | sed -r "s/[\]033\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g")
charlen=${#charlen}
echo $(( LENGTH - charlen ))
echo $(( len - charlen ))
}

join_ready() {
size=$(diff_len "${1}" "${3}")
printf "%b%-${size}s%b" "${1}"
printf "%b%s%b" "${4}${2}${NOCL}"
}
ready() {
size=$(diff_len "${1}")
Expand Down Expand Up @@ -521,6 +538,11 @@ exit_q(){
print_line
error "Процедура прервана пользователем!"
}
clean(){
printf "%b%s%b" "\033c"
}


# ------------------------------------------------------------------------------------------
#
# Читаем значение переменной из ввода данных в цикле
Expand Down
53 changes: 53 additions & 0 deletions opt/bin/libs/ndm_d
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/bin/sh
# ------------------------------------------------------------------------------------------
#
# ПРОЕКТ КВАС
#
# ------------------------------------------------------------------------------------------
# Данный файл служит основной библиотекой функций пакета КВАС
# ------------------------------------------------------------------------------------------
# Разработчик: kvas@zeleza.ru
# Дата: 18/01/2024
# Лицензия: Apache License 2.0
# ------------------------------------------------------------------------------------------
iface_file=/opt/etc/inface_equals

# ------------------------------------------------------------------------------------------
#
# Получаем конкретный или все интерфейсы роутера в json формате
#
# Передаем имя конкретного CLI интерфейса роутера,
# или ключевое слово all или ALL - для всех интерфейсов
#
# ------------------------------------------------------------------------------------------
get_cli_iface_json(){

cli_iface="${1:-all}"

echo "${cli_iface}" | grep -i all && cli_iface=''
curl -s localhost:79/rci/show/interface/"${cli_iface}"
}
# ------------------------------------------------------------------------------------------
#
# Получаем название конкретного интерфейса
#
# Передаем имя конкретного CLI интерфейса роутера
#
# ------------------------------------------------------------------------------------------
get_iface_description(){
cli_iface=${1}
get_cli_iface_json "${cli_iface}" | jq 'description'
}
# ------------------------------------------------------------------------------------------
#
# Проверяем название конкретного интерфейса на то,
# является ли он глобальным интерфейсом - необходим ли он для подключения к провайдеру.
#
# Передаем имя конкретного CLI интерфейса роутера
#
# ------------------------------------------------------------------------------------------
is_cli_iface_global(){
cli_iface=${1}
get_cli_iface_json "${cli_iface}" | jq '.global' | grep -q true
}

Loading

0 comments on commit cd36c45

Please sign in to comment.