Skip to content

Commit

Permalink
Обновлена информация в README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
qzeleza committed Apr 13, 2024
1 parent b7a9dd2 commit 1e3eb8e
Show file tree
Hide file tree
Showing 22 changed files with 182 additions and 125 deletions.
11 changes: 11 additions & 0 deletions HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
## 1.1.8 release 1
- Доработана функция get_entware_ikev2_inface коррекции работы IKEv2 + SS [issue [#114](https://github.com/qzeleza/kvas/issues/114)]
- Перепроверена работа функции обновления программы AdGuardHome - все работает штатно [[запрос от pavelts](https://forum.keenetic.com/topic/14415-пробуем-квас/?do=findComment&comment=181529)].
- Внесены доработки в код для устранения ошибок, связанных с отсутствием **/opt/etc/hosts**
- Внесены изменения для коррекции правил iptables, согласно предложенным изменениям в [issue [#116](https://github.com/qzeleza/kvas/issues/116)]
- Внесены изменения в код для исправления ситуаций с возникновением ошибок, типа **sh: bad number** [issue [#114](https://github.com/qzeleza/kvas/issues/104)]
- Внесены изменения в код для решения проблемы с очисткой правил и таблиц при обрыве соединения провайдера [issue [#97](https://github.com/qzeleza/kvas/issues/97) ]
- Доработан код для корректного внесения правок переменной port в файл конфигурации **AdGuardHome** [[запрос от Shvedoffsky](https://t.me/kvas_pro/16/275)]
- Появилась возможность вводить для **SSR** соединения кодированную ссылку вместо набора данных в ручную.
- Появилась возможность быстро проверить, есть ли в списке конкретный домен или его часть при помощи команды `kvas list domen`, это эквивалент команды `kvas list | grep domen`

## 1.1.7 release 8
- Доработан код, который исправляет ошибку "таблица ipset пуста" при запуске `kvas test`. [issue [#108](https://github.com/qzeleza/kvas/issues/108)].
- Доработан код обновления пакета с целью предотвратить перезапись архивных данных [issue [#106](https://github.com/qzeleza/kvas/issues/106)].
Expand Down
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
![GitHub Repo stars](https://img.shields.io/github/stars/qzeleza/kvas?color=orange) ![GitHub closed issues](https://img.shields.io/github/issues-closed/qzeleza/kvas?color=success) ![GitHub last commit](https://img.shields.io/github/last-commit/qzeleza/kvas) ![GitHub commit activity](https://img.shields.io/github/commit-activity/y/qzeleza/kvas) ![GitHub top language](https://img.shields.io/github/languages/top/qzeleza/kvas) ![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/qzeleza/kvas)
# [КВАС](https://forum.keenetic.com/topic/14415-пробуем-квас-shadowsocks-и-другие-vpn-клиенты) - защита ваших подключений #

---

#### Внимание!
Открыта [группа в Телеграмм](https://t.me/kvas_pro) с целью оперативного обмена информацией по проекту.

---


### VPN и SHADOWSOCKS клиент для [роутеров Keenetic](https://keenetic.ru/ru/)

Expand All @@ -25,8 +32,9 @@
7**Квас** позволяет оперировать со списком исключений при блокировки рекламы, добавляет и удаляет домены в этом списке.

## Установка пакета
1. Зайдите в **entware** своего роутера и введите команду `curl -sO http://kvas.zeleza.ru/upgrade && sh upgrade`.
1. Зайдите в **entware** своего роутера и введите команду `curl -sOfL http://kvas.zeleza.ru/upgrade && sh upgrade`.
2. Далее, следуйте инструкциям на экране.
3. Подробности читайте [здесь](https://github.com/qzeleza/kvas/wiki/Установка-пакета)

## Используемые в проекте продукты
- Для проведения тестов, в проекте используется пакет [BATS](https://github.com/bats-core/bats-core/blob/master/LICENSE.md) от нескольких [АВТОРОВ](https://github.com/bats-core/bats-core/blob/master/AUTHORS).
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.7
PKG_RELEASE:=release_8
PKG_VERSION:=1.1.8
PKG_RELEASE:=release_1
PKG_BUILD_DIR:=$(BUILD_DIR)/${FULL_PACKAGE_NAME}_

include $(INCLUDE_DIR)/package.mk
Expand Down
4 changes: 2 additions & 2 deletions build/version
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
VERSION=1.1.7
VERSION=1.1.8
STAGE=release
RELEASE=8
RELEASE=1
Binary file added ipk/kvas_1.1.8-release_1_all.ipk
Binary file not shown.
File renamed without changes.
2 changes: 1 addition & 1 deletion opt/bin/kvas
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ case "${1}" in
;;
purge | clear) cmd_clear_list "${2}"
;;
show | list) cmd_show_list
show | list | search | find) [ -n "${2}" ] && cmd_show_list | grep "${2}" || cmd_show_list
;;
update | reset | init) cmd_kvas_init
;;
Expand Down
2 changes: 2 additions & 0 deletions opt/bin/libs/hosts
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,13 @@ cmd_hosts_list(){

dns_server_restart(){
host="${1}"
[ -f /opt/etc/hosts ] || touch /opt/etc/hosts
[ -n "${host}" ] && kdig "${host}" @localhost &> /dev/null
if cmd_adguardhome_status | grep -q "ВКЛЮЧЕН" ; then
mess="Перезапуск службы AdGuardHome..."
service=/opt/etc/init.d/S99adguardhome
else

mess="Перезапуск службы dnsmasq..."
service=/opt/etc/init.d/S56dnsmasq
fi
Expand Down
7 changes: 4 additions & 3 deletions opt/bin/libs/main
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ DATE_FORMAT='+%d/%m/%Y %H:%M:%S'
# ------------------------------------------------------------------------------------------
# Вычисляем текущую ширину экрана для печати линий определенной ширины
length=$(stty size 2>/dev/null | cut -d' ' -f2)
[ "${length}" -gt 80 ] && LENGTH=$((length*2/3)) || LENGTH=68

[[ -v "${length}" && "${length}" -gt 80 ]] && LENGTH=$((length*2/3)) || LENGTH=68

PROGRESS_BAR_WIDTH=$((LENGTH-5)) # progress bar length in characters

Expand Down Expand Up @@ -112,7 +113,7 @@ get_hook_dir(){
get_entware_ikev2_inface(){
# net_inface_last=$(ip a| grep global | sed 's/.*\(eth[0-9]\{1,3\}\).*/\1/g' | sort | tail -n1)
# echo $((net_inface_last + 1))
echo eth3
ip a | grep -q 'global eth3' && echo eth3 || echo eth2.2
}

get_ip_list(){
Expand Down Expand Up @@ -444,7 +445,7 @@ error() {
size=$(diff_len "${_error}")
# printf "${nn}%b%-${size}s%b\n" "${_error}" 2>&1
printf "%b%-${size}s%b\n" "${_error}" 2>&1
log_error "${_error}"
log_error "${1}"
}
warning() {
_error="${GREEN}${1}${NOCL}"
Expand Down
7 changes: 4 additions & 3 deletions opt/bin/libs/update
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@ cmd_adguard_update(){
current_version=$(AdGuardHome --version | cut -d' ' -f4)

if [ "${latest_version}" != "${current_version}" ]; then
copy_name=${bin_path}/${full_adguard_name}.${current_version}
copy_name=${bin_path}/${full_adguard_name}_${current_version}

mess_2="Копия сохранена под именем ${copy_name}"
warning "Найдено обновление пакета ${full_adguard_name} версии ${latest_version}"
print_line
echo -e "${BLUE}Обновляем пакет ${full_adguard_name}...${NOCL}"
ready "${BLUE}Обновляем пакет ${full_adguard_name}...${NOCL}"
{
curl -kfsSL "${url_update}" -o "/tmp/${full_adguard_name}.tar.gz"
# Делаем копию предыдущей версии пакета
Expand All @@ -48,5 +48,6 @@ cmd_adguard_update(){
arch=$(grep "arch" /opt/etc/entware_release | cut -f2 -d"=")
error "Для Вашей архитектуры процессора '${arch}' обновления не найдены." nl
fi
}
} || error "Сервис AdGuard Home ОТКЛЮЧЕН. Для продолжения необходимо запустить команду kvas adguard on"

}
114 changes: 82 additions & 32 deletions opt/bin/libs/vpn
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
. /opt/apps/kvas/bin/libs/ndm
. /opt/apps/kvas/bin/libs/adblock

# Убираем ошибки связанные с отсутствием /opt/etc/hosts
[ -f /opt/etc/hosts ] || touch /opt/etc/hosts
# ------------------------------------------------------------------------------------------
#
# Добавляет хосты в белый список, доступ к сайтам которого
Expand Down Expand Up @@ -471,6 +473,8 @@ adguardhome_setup() {
else
when_bad "СБОЙ";
error "Возникла ошибка при установке AdGuard Home в качестве основного DNS сервера."
print_line
cat < "${ADGUARDHOME_LOG}" | tail
exit 1
fi
}
Expand Down Expand Up @@ -567,7 +571,7 @@ adguardhome_check_config() {

# Если случайно был уже запущен какой либо экземпляр процесса AdGuardHome, то удаляем его из памяти
pid_to_kill=$(ps -w | grep 'AdGuardHome -l /opt/var/log/AdGuardHome.log' | grep -v 'grep' | cut -d' ' -f1)
[ -n "${pid_to_kill}" ] && kill -9 "${pid_to_kill}"
[ -n "${pid_to_kill}" ] && kill -9 "${pid_to_kill}" &> /dev/null
# Запускаем новую чистую настройку AdGuardHome
/opt/bin/AdGuardHome -c "${tmp_conf}" -l "${log_file}" &
sleep 2
Expand Down Expand Up @@ -606,6 +610,7 @@ adguardhome_install_locally() {

[ -f /opt/etc/hosts ] && cp /opt/etc/hosts "${KVAS_BACKUP_PATH}/hosts"

opkg update &> /dev/null
opkg remove adguardhome-go --force-depends &> /dev/null
opkg install adguardhome-go --force-maintainer &> /dev/null
. /opt/apps/kvas/bin/libs/update
Expand Down Expand Up @@ -888,7 +893,7 @@ bridge_access_add() {
if cmd_adguardhome_status | grep -q "ВКЛЮЧЕН" ; then
# Если доступен ADGUARDHOME
cat < "${ADGUARDHOME_CONFIG}" | grep -q '- '"${guest_net_ip}" || \
sed -i '/bind_hosts/,/port/ s/.*\(port.*\)/ - '"${guest_net_ip}"'\n\1/1' "${ADGUARDHOME_CONFIG}"
sed -i '/bind_hosts/,/port/ s/.*\(port.*\)/ - '"${guest_net_ip}"'\n \1/1' "${ADGUARDHOME_CONFIG}"
else
# Если сейчас работает только dnsmasq
cat < "${DNSMASQ_CONFIG}" | grep -q "listen-address=${guest_net_ip}" ||
Expand All @@ -899,19 +904,20 @@ bridge_access_add() {
}


bridge_vpn_access_add(){

bridge_vpn_access_add() {
guest_bridge_id=${1}

if [ -n "${guest_bridge_id}" ]; then
if echo "${guest_bridge_id}" | grep -iq ikev2 ; then
ikev2_net_access_add
else
bridge_access_add "${guest_bridge_id}"

if has_ssr_enable; then
ip4_add_selected_guest_to_ssr_network "${guest_bridge_id}"
fi
fi
fi


}

# ------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -1037,6 +1043,7 @@ dnsmasq_install(){
ready "Устанавливаем пакет dnsmasq..."
if ! [ -f /opt/etc/init.d/S56dnsmasq ]; then
# то в этом случае можем попытаться удалять или устанавливать пакеты
opkg update 1> /dev/null 2> "${ERROR_LOG_FILE}"
opkg remove dnsmasq-full --force-depends 1> /dev/null 2> "${ERROR_LOG_FILE}"
opkg install dnsmasq-full --force-maintainer 1> /dev/null 2> "${ERROR_LOG_FILE}"
when_error "${?}" "Ошибка при установке пакета dnsmasq"
Expand Down Expand Up @@ -1300,7 +1307,7 @@ active_backup_config(){
[ $? = 0 ] && when_ok "УСПЕШНО" || when_bad "ОШИБКА"
else
ready "Восстанавливаем файл конфигурации shadowsocks из архива "
mv -f "${SHADOWSOCKS_CONF}.kvas" "${SHADOWSOCKS_CONF}" &>/dev/null
cp "${SHADOWSOCKS_CONF}.kvas" "${SHADOWSOCKS_CONF}" &>/dev/null
if [ ${?} = 0 ]; then
when_ok "УСПЕШНО";
else
Expand Down Expand Up @@ -1332,9 +1339,9 @@ shadowsocks_backup() {
fi
fi
if [ -f "${SHADOWSOCKS_CONF}" ] ; then
grep -qE '""|@' "${SHADOWSOCKS_CONF}" && grep -qE '127.0.0.1|barfoo!' "${SHADOWSOCKS_CONF}" && shadowsocks_read_config
grep -qE '""|@|127.0.0.1|barfoo!' "${SHADOWSOCKS_CONF}" && shadowsocks_read_config
else
if [ -f "${SHADOWSOCKS_CONF}.kvas" ] ; then
if [ -f "${SHADOWSOCKS_CONF}.kvas" ] && grep -qvE '""|@|127.0.0.1|barfoo!' "${SHADOWSOCKS_CONF}" ; then
active_backup_config
else
shadowsocks_read_data
Expand Down Expand Up @@ -1423,24 +1430,79 @@ cmd_shadowsocks_read_new_data() {
# fi

}


shadowsocks_read_link(){


SSR_LINK=""; SSR_SERVER_IP=""; SSR_SERVER_PORT=""; SSR_SERVER_CRYPT=""; SSR_SERVER_PASSWD=""

read_value "Ведите кодированную ссылку в формате ss://:" SSR_LINK
[ "${SSR_LINK}" = q ] && exit 1

if [[ -n "${SSR_LINK}" && "${#SSR_LINK}" -gt 6 ]] ; then
password=$(echo "${SSR_LINK}" | grep -oP "(?<=ss://).*?(?=@)" | base64 -d )
SSR_SERVER_PASSWD=$(echo "${password}" | cut -d ":" -f 2)
SSR_SERVER_CRYPT=$(echo "${password}" | cut -d ":" -f 1)
SSR_SERVER_IP=$(echo "${SSR_LINK}" | grep -oP "(?<=@).*?(?=:)")
SSR_SERVER_PORT=$(echo "${SSR_LINK}" | cut -d ":" -f 3 | cut -d "#" -f 1)
else
error "Ссылка пуста или слишком коротка! Введите корректную ссылку!" nl
exit 1
fi
if [ -z "${SSR_SERVER_PASSWD}" ] || [ -z "${SSR_SERVER_CRYPT}" ] || [ -z "${SSR_SERVER_IP}" ] || [ -z "${SSR_SERVER_PORT}" ] ; then
error "Извлеченные данные не корректны! Введите ссылку с корректными данными!" nl
exit 1
else

if [ -f "${SHADOWSOCKS_CONF}" ] ; then
sed -i "s/\(\"server\":\).*/\1 \"${SSR_SERVER_IP}\",/; \
s/\(\"server_port\":\).*/\1 ${SSR_SERVER_PORT},/; \
s/\(\"local_port\":\).*/\1 $(get_config_value SSR_DNS_PORT),/; \
s/\(\"password\":\).*/\1 \"${SSR_SERVER_PASSWD}\",/; \
s/\(\"method\":\).*/\1 \"${SSR_SERVER_CRYPT}\",/;" \
"${SHADOWSOCKS_CONF}"
else
print_line
error "Не обнаружен файл ${SHADOWSOCKS_CONF}." nl
print_line
exit 0
fi
fi
}


# ------------------------------------------------------------------------------------------
#
# Отключаем shadowsocks клиента
#
# ------------------------------------------------------------------------------------------
shadowsocks_read_data() {

echo "Чтобы продолжить работу необходимо ввести следующие данные:"
echo -e "${GREEN}Хост${NOCL} сервера, его ${GREEN}порт, пароль доступа${NOCL} и ${GREEN}метод шифрования${NOCL}"

echo -e "${BLUE}Пожалуйста, последовательно введите эти данные ниже.${NOCL}"
print_line

# устанавливаем новую конфигурацию shadowsocks
cp -f "/opt/apps/${APP_NAME}/etc/conf/shadowsocks.json" "${SHADOWSOCKS_CONF}"

answer=''; read_ynq_timer "У Вас имеется кодированная ss:// ссылка для ввода данных" answer n 6
if [ "${answer}" = q ] ; then exit_q; exit 1; fi

{
if echo "${answer}" | grep -qi y ; then
shadowsocks_read_link
else

echo "Чтобы продолжить работу необходимо ввести следующие данные:"
echo -e "${GREEN}Хост${NOCL} сервера, его ${GREEN}порт, пароль доступа${NOCL} и ${GREEN}метод шифрования${NOCL}"

echo -e "${BLUE}Пожалуйста, последовательно введите эти данные ниже.${NOCL}"
print_line

shadowsocks_read_config
fi
# читаем данные и Производим замену в библиотеке ndm основных значения интерфейсов
shadowsocks_read_config && ndm_interface_change "$(get_ssr_entware_interface)" "shadowsocks"
} && ndm_interface_change "$(get_ssr_entware_interface)" "shadowsocks"



}
# ------------------------------------------------------------------------------------------
#
Expand Down Expand Up @@ -1484,7 +1546,7 @@ shadowsocks_off() {
ready "Интерфейс shadowsocks отключен "
# сохраняем файл конфигурации shadowsocks
/opt/etc/init.d/S22shadowsocks stop &> /dev/null
mv -f "${SHADOWSOCKS_CONF}" "${SHADOWSOCKS_CONF}.kvas" &> /dev/null
[ -f "${SHADOWSOCKS_CONF}" ] || mv -f "${SHADOWSOCKS_CONF}" "${SHADOWSOCKS_CONF}.kvas" &> /dev/null
rm -f "/opt/etc/ndm/netfilter.d/100-proxy-redirect"
cmd_shadowsocks_iptable_flush &> /dev/null
[ $? = 0 ] && when_ok "УСПЕШНО" || when_bad "C ОШИБКАМИ"
Expand Down Expand Up @@ -1631,11 +1693,10 @@ EOF
)
# проходимся по каждому интерфейсу
# ВНИМАНИЕ! inface_list - все маленькими буквами!!!
count=1
count=1; delay=4
list_len=$(echo "${inface_list}" | wc -w)
for inface_cli in ${inface_list}; do
# переподключаем текущее соединение
[ "${list_len}" = "${count}" ] && delay=4 || delay=2
reset_connection "${inface_cli}" "${delay}"
# получаем описание интерфейса
description=$(get_value_interface_field "${inface_cli}" description | sed 's|\/|\\/|g')
Expand Down Expand Up @@ -1829,19 +1890,7 @@ switch_vpn_on(){
ln -s /opt/apps/kvas/bin/main/check_vpn /opt/etc/cron.5mins/check_vpn && when_ok "УСПЕШНО" || when_bad "ОШИБКА"
}

# Проверяем подключены ли гостевые сети
# guest_net_list=$(get_config_value INFACE_GUEST_ENT | tr ' ' ',')
# if [ -n "${guest_net_list}" ] ; then
# print_line
# echo -e "${RED}ВНИМАНИЕ!${NOCL}"
# echo "Обнаружены гостевые сети: ${guest_net_list}, которые были добавлены для "
# echo "предыдущего VPN соединения. Для подключения клиентов этих сетей "
# echo "к выбранному VPN соединению необходимо их удалить и снова добавить."
# echo "С этой целью воспользуйтесь следующими командами:"
# echo -e "1. ${GREEN}kvas vpn net del${NOCL}"
# echo -e "2. ${GREEN}kvas vpn net add${NOCL}"
# print_line
# fi

}

# ------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -2038,6 +2087,7 @@ dns_crypt_install() {
# при его отсутствии - устанавливаем пакет
if ! [ -f /opt/etc/init.d/S09dnscrypt-proxy2 ]; then
ready "Устанавливаем пакет dnscrypt-proxy2..."
opkg update &> /dev/null
opkg remove dnscrypt-proxy2 --force-depends 1> /dev/null 2> "${ERROR_LOG_FILE}"
opkg install dnscrypt-proxy2 --force-maintainer 1> /dev/null 2> "${ERROR_LOG_FILE}"
when_error "${?}" "Ошибка при установке пакета dnsmasq"
Expand Down
3 changes: 2 additions & 1 deletion opt/bin/main/upgrade
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,7 @@ fi
#--------------------------------------------------------------------------------------------------------------
ready "Устанавливаем новую версию пакета [${version}]..."
{
opkg update &> /dev/null
opkg install "/opt/packages/${package_name}"

} &>/dev/null && when_ok || when_err
Expand All @@ -305,7 +306,7 @@ if ! [ -f /opt/bin/kvas ] ; then
# если файл пакета не найден после установки пакета, значит произошла ошибка
print_error "Пакет установлен некорректно - отсутствуют исполняемые файлы!"
echo -e "${GREEN}Попробуйте установить пакет вручную командой "
echo -e "${BLUE}'opkg install /opt/packages/${package_name}'${NOCL}"
echo -e "${BLUE}'opkg update && opkg install /opt/packages/${package_name}'${NOCL}"
print_line
exit 1
else
Expand Down
2 changes: 2 additions & 0 deletions opt/etc/conf/hosts.list
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ myip2.ru

*oaistatic.com
*openai.com
*chatgpt.com

*openwrt.org

*whatsapp.net
Loading

0 comments on commit 1e3eb8e

Please sign in to comment.