Skip to content

Commit 1e3eb8e

Browse files
committed
Обновлена информация в README.md
1 parent b7a9dd2 commit 1e3eb8e

22 files changed

+182
-125
lines changed

HISTORY.md

+11
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
## 1.1.8 release 1
2+
- Доработана функция get_entware_ikev2_inface коррекции работы IKEv2 + SS [issue [#114](https://github.com/qzeleza/kvas/issues/114)]
3+
- Перепроверена работа функции обновления программы AdGuardHome - все работает штатно [[запрос от pavelts](https://forum.keenetic.com/topic/14415-пробуем-квас/?do=findComment&comment=181529)].
4+
- Внесены доработки в код для устранения ошибок, связанных с отсутствием **/opt/etc/hosts**
5+
- Внесены изменения для коррекции правил iptables, согласно предложенным изменениям в [issue [#116](https://github.com/qzeleza/kvas/issues/116)]
6+
- Внесены изменения в код для исправления ситуаций с возникновением ошибок, типа **sh: bad number** [issue [#114](https://github.com/qzeleza/kvas/issues/104)]
7+
- Внесены изменения в код для решения проблемы с очисткой правил и таблиц при обрыве соединения провайдера [issue [#97](https://github.com/qzeleza/kvas/issues/97) ]
8+
- Доработан код для корректного внесения правок переменной port в файл конфигурации **AdGuardHome** [[запрос от Shvedoffsky](https://t.me/kvas_pro/16/275)]
9+
- Появилась возможность вводить для **SSR** соединения кодированную ссылку вместо набора данных в ручную.
10+
- Появилась возможность быстро проверить, есть ли в списке конкретный домен или его часть при помощи команды `kvas list domen`, это эквивалент команды `kvas list | grep domen`
11+
112
## 1.1.7 release 8
213
- Доработан код, который исправляет ошибку "таблица ipset пуста" при запуске `kvas test`. [issue [#108](https://github.com/qzeleza/kvas/issues/108)].
314
- Доработан код обновления пакета с целью предотвратить перезапись архивных данных [issue [#106](https://github.com/qzeleza/kvas/issues/106)].

README.md

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
![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)
22
# [КВАС](https://forum.keenetic.com/topic/14415-пробуем-квас-shadowsocks-и-другие-vpn-клиенты) - защита ваших подключений #
33

4+
---
5+
6+
#### Внимание!
7+
Открыта [группа в Телеграмм](https://t.me/kvas_pro) с целью оперативного обмена информацией по проекту.
8+
9+
---
10+
411

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

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

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

3139
## Используемые в проекте продукты
3240
- Для проведения тестов, в проекте используется пакет [BATS](https://github.com/bats-core/bats-core/blob/master/LICENSE.md) от нескольких [АВТОРОВ](https://github.com/bats-core/bats-core/blob/master/AUTHORS).

build/Makefile

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
include $(TOPDIR)/rules.mk
22

33
PKG_NAME:=kvas
4-
PKG_VERSION:=1.1.7
5-
PKG_RELEASE:=release_8
4+
PKG_VERSION:=1.1.8
5+
PKG_RELEASE:=release_1
66
PKG_BUILD_DIR:=$(BUILD_DIR)/${FULL_PACKAGE_NAME}_
77

88
include $(INCLUDE_DIR)/package.mk

build/version

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
VERSION=1.1.7
1+
VERSION=1.1.8
22
STAGE=release
3-
RELEASE=8
3+
RELEASE=1

ipk/kvas_1.1.8-release_1_all.ipk

574 KB
Binary file not shown.

opt/bin/kvas

+1-1
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ case "${1}" in
144144
;;
145145
purge | clear) cmd_clear_list "${2}"
146146
;;
147-
show | list) cmd_show_list
147+
show | list | search | find) [ -n "${2}" ] && cmd_show_list | grep "${2}" || cmd_show_list
148148
;;
149149
update | reset | init) cmd_kvas_init
150150
;;

opt/bin/libs/hosts

+2
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@ cmd_hosts_list(){
2424

2525
dns_server_restart(){
2626
host="${1}"
27+
[ -f /opt/etc/hosts ] || touch /opt/etc/hosts
2728
[ -n "${host}" ] && kdig "${host}" @localhost &> /dev/null
2829
if cmd_adguardhome_status | grep -q "ВКЛЮЧЕН" ; then
2930
mess="Перезапуск службы AdGuardHome..."
3031
service=/opt/etc/init.d/S99adguardhome
3132
else
33+
3234
mess="Перезапуск службы dnsmasq..."
3335
service=/opt/etc/init.d/S56dnsmasq
3436
fi

opt/bin/libs/main

+4-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ DATE_FORMAT='+%d/%m/%Y %H:%M:%S'
2323
# ------------------------------------------------------------------------------------------
2424
# Вычисляем текущую ширину экрана для печати линий определенной ширины
2525
length=$(stty size 2>/dev/null | cut -d' ' -f2)
26-
[ "${length}" -gt 80 ] && LENGTH=$((length*2/3)) || LENGTH=68
26+
27+
[[ -v "${length}" && "${length}" -gt 80 ]] && LENGTH=$((length*2/3)) || LENGTH=68
2728

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

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

118119
get_ip_list(){
@@ -444,7 +445,7 @@ error() {
444445
size=$(diff_len "${_error}")
445446
# printf "${nn}%b%-${size}s%b\n" "${_error}" 2>&1
446447
printf "%b%-${size}s%b\n" "${_error}" 2>&1
447-
log_error "${_error}"
448+
log_error "${1}"
448449
}
449450
warning() {
450451
_error="${GREEN}${1}${NOCL}"

opt/bin/libs/update

+4-3
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ cmd_adguard_update(){
2222
current_version=$(AdGuardHome --version | cut -d' ' -f4)
2323

2424
if [ "${latest_version}" != "${current_version}" ]; then
25-
copy_name=${bin_path}/${full_adguard_name}.${current_version}
25+
copy_name=${bin_path}/${full_adguard_name}_${current_version}
2626

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

opt/bin/libs/vpn

+82-32
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
. /opt/apps/kvas/bin/libs/ndm
44
. /opt/apps/kvas/bin/libs/adblock
55

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

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

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

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

901906

902-
bridge_vpn_access_add(){
903-
907+
bridge_vpn_access_add() {
904908
guest_bridge_id=${1}
905909

906910
if [ -n "${guest_bridge_id}" ]; then
907911
if echo "${guest_bridge_id}" | grep -iq ikev2 ; then
908912
ikev2_net_access_add
909913
else
910914
bridge_access_add "${guest_bridge_id}"
915+
916+
if has_ssr_enable; then
917+
ip4_add_selected_guest_to_ssr_network "${guest_bridge_id}"
918+
fi
911919
fi
912920
fi
913-
914-
915921
}
916922

917923
# ------------------------------------------------------------------------------------------
@@ -1037,6 +1043,7 @@ dnsmasq_install(){
10371043
ready "Устанавливаем пакет dnsmasq..."
10381044
if ! [ -f /opt/etc/init.d/S56dnsmasq ]; then
10391045
# то в этом случае можем попытаться удалять или устанавливать пакеты
1046+
opkg update 1> /dev/null 2> "${ERROR_LOG_FILE}"
10401047
opkg remove dnsmasq-full --force-depends 1> /dev/null 2> "${ERROR_LOG_FILE}"
10411048
opkg install dnsmasq-full --force-maintainer 1> /dev/null 2> "${ERROR_LOG_FILE}"
10421049
when_error "${?}" "Ошибка при установке пакета dnsmasq"
@@ -1300,7 +1307,7 @@ active_backup_config(){
13001307
[ $? = 0 ] && when_ok "УСПЕШНО" || when_bad "ОШИБКА"
13011308
else
13021309
ready "Восстанавливаем файл конфигурации shadowsocks из архива "
1303-
mv -f "${SHADOWSOCKS_CONF}.kvas" "${SHADOWSOCKS_CONF}" &>/dev/null
1310+
cp "${SHADOWSOCKS_CONF}.kvas" "${SHADOWSOCKS_CONF}" &>/dev/null
13041311
if [ ${?} = 0 ]; then
13051312
when_ok "УСПЕШНО";
13061313
else
@@ -1332,9 +1339,9 @@ shadowsocks_backup() {
13321339
fi
13331340
fi
13341341
if [ -f "${SHADOWSOCKS_CONF}" ] ; then
1335-
grep -qE '""|@' "${SHADOWSOCKS_CONF}" && grep -qE '127.0.0.1|barfoo!' "${SHADOWSOCKS_CONF}" && shadowsocks_read_config
1342+
grep -qE '""|@|127.0.0.1|barfoo!' "${SHADOWSOCKS_CONF}" && shadowsocks_read_config
13361343
else
1337-
if [ -f "${SHADOWSOCKS_CONF}.kvas" ] ; then
1344+
if [ -f "${SHADOWSOCKS_CONF}.kvas" ] && grep -qvE '""|@|127.0.0.1|barfoo!' "${SHADOWSOCKS_CONF}" ; then
13381345
active_backup_config
13391346
else
13401347
shadowsocks_read_data
@@ -1423,24 +1430,79 @@ cmd_shadowsocks_read_new_data() {
14231430
# fi
14241431

14251432
}
1433+
1434+
1435+
shadowsocks_read_link(){
1436+
1437+
1438+
SSR_LINK=""; SSR_SERVER_IP=""; SSR_SERVER_PORT=""; SSR_SERVER_CRYPT=""; SSR_SERVER_PASSWD=""
1439+
1440+
read_value "Ведите кодированную ссылку в формате ss://:" SSR_LINK
1441+
[ "${SSR_LINK}" = q ] && exit 1
1442+
1443+
if [[ -n "${SSR_LINK}" && "${#SSR_LINK}" -gt 6 ]] ; then
1444+
password=$(echo "${SSR_LINK}" | grep -oP "(?<=ss://).*?(?=@)" | base64 -d )
1445+
SSR_SERVER_PASSWD=$(echo "${password}" | cut -d ":" -f 2)
1446+
SSR_SERVER_CRYPT=$(echo "${password}" | cut -d ":" -f 1)
1447+
SSR_SERVER_IP=$(echo "${SSR_LINK}" | grep -oP "(?<=@).*?(?=:)")
1448+
SSR_SERVER_PORT=$(echo "${SSR_LINK}" | cut -d ":" -f 3 | cut -d "#" -f 1)
1449+
else
1450+
error "Ссылка пуста или слишком коротка! Введите корректную ссылку!" nl
1451+
exit 1
1452+
fi
1453+
if [ -z "${SSR_SERVER_PASSWD}" ] || [ -z "${SSR_SERVER_CRYPT}" ] || [ -z "${SSR_SERVER_IP}" ] || [ -z "${SSR_SERVER_PORT}" ] ; then
1454+
error "Извлеченные данные не корректны! Введите ссылку с корректными данными!" nl
1455+
exit 1
1456+
else
1457+
1458+
if [ -f "${SHADOWSOCKS_CONF}" ] ; then
1459+
sed -i "s/\(\"server\":\).*/\1 \"${SSR_SERVER_IP}\",/; \
1460+
s/\(\"server_port\":\).*/\1 ${SSR_SERVER_PORT},/; \
1461+
s/\(\"local_port\":\).*/\1 $(get_config_value SSR_DNS_PORT),/; \
1462+
s/\(\"password\":\).*/\1 \"${SSR_SERVER_PASSWD}\",/; \
1463+
s/\(\"method\":\).*/\1 \"${SSR_SERVER_CRYPT}\",/;" \
1464+
"${SHADOWSOCKS_CONF}"
1465+
else
1466+
print_line
1467+
error "Не обнаружен файл ${SHADOWSOCKS_CONF}." nl
1468+
print_line
1469+
exit 0
1470+
fi
1471+
fi
1472+
}
1473+
1474+
14261475
# ------------------------------------------------------------------------------------------
14271476
#
14281477
# Отключаем shadowsocks клиента
14291478
#
14301479
# ------------------------------------------------------------------------------------------
14311480
shadowsocks_read_data() {
14321481

1433-
echo "Чтобы продолжить работу необходимо ввести следующие данные:"
1434-
echo -e "${GREEN}Хост${NOCL} сервера, его ${GREEN}порт, пароль доступа${NOCL} и ${GREEN}метод шифрования${NOCL}"
1435-
1436-
echo -e "${BLUE}Пожалуйста, последовательно введите эти данные ниже.${NOCL}"
1437-
print_line
1438-
14391482
# устанавливаем новую конфигурацию shadowsocks
14401483
cp -f "/opt/apps/${APP_NAME}/etc/conf/shadowsocks.json" "${SHADOWSOCKS_CONF}"
14411484

1485+
answer=''; read_ynq_timer "У Вас имеется кодированная ss:// ссылка для ввода данных" answer n 6
1486+
if [ "${answer}" = q ] ; then exit_q; exit 1; fi
1487+
1488+
{
1489+
if echo "${answer}" | grep -qi y ; then
1490+
shadowsocks_read_link
1491+
else
1492+
1493+
echo "Чтобы продолжить работу необходимо ввести следующие данные:"
1494+
echo -e "${GREEN}Хост${NOCL} сервера, его ${GREEN}порт, пароль доступа${NOCL} и ${GREEN}метод шифрования${NOCL}"
1495+
1496+
echo -e "${BLUE}Пожалуйста, последовательно введите эти данные ниже.${NOCL}"
1497+
print_line
1498+
1499+
shadowsocks_read_config
1500+
fi
14421501
# читаем данные и Производим замену в библиотеке ndm основных значения интерфейсов
1443-
shadowsocks_read_config && ndm_interface_change "$(get_ssr_entware_interface)" "shadowsocks"
1502+
} && ndm_interface_change "$(get_ssr_entware_interface)" "shadowsocks"
1503+
1504+
1505+
14441506
}
14451507
# ------------------------------------------------------------------------------------------
14461508
#
@@ -1484,7 +1546,7 @@ shadowsocks_off() {
14841546
ready "Интерфейс shadowsocks отключен "
14851547
# сохраняем файл конфигурации shadowsocks
14861548
/opt/etc/init.d/S22shadowsocks stop &> /dev/null
1487-
mv -f "${SHADOWSOCKS_CONF}" "${SHADOWSOCKS_CONF}.kvas" &> /dev/null
1549+
[ -f "${SHADOWSOCKS_CONF}" ] || mv -f "${SHADOWSOCKS_CONF}" "${SHADOWSOCKS_CONF}.kvas" &> /dev/null
14881550
rm -f "/opt/etc/ndm/netfilter.d/100-proxy-redirect"
14891551
cmd_shadowsocks_iptable_flush &> /dev/null
14901552
[ $? = 0 ] && when_ok "УСПЕШНО" || when_bad "C ОШИБКАМИ"
@@ -1631,11 +1693,10 @@ EOF
16311693
)
16321694
# проходимся по каждому интерфейсу
16331695
# ВНИМАНИЕ! inface_list - все маленькими буквами!!!
1634-
count=1
1696+
count=1; delay=4
16351697
list_len=$(echo "${inface_list}" | wc -w)
16361698
for inface_cli in ${inface_list}; do
16371699
# переподключаем текущее соединение
1638-
[ "${list_len}" = "${count}" ] && delay=4 || delay=2
16391700
reset_connection "${inface_cli}" "${delay}"
16401701
# получаем описание интерфейса
16411702
description=$(get_value_interface_field "${inface_cli}" description | sed 's|\/|\\/|g')
@@ -1829,19 +1890,7 @@ switch_vpn_on(){
18291890
ln -s /opt/apps/kvas/bin/main/check_vpn /opt/etc/cron.5mins/check_vpn && when_ok "УСПЕШНО" || when_bad "ОШИБКА"
18301891
}
18311892

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

18471896
# ------------------------------------------------------------------------------------------
@@ -2038,6 +2087,7 @@ dns_crypt_install() {
20382087
# при его отсутствии - устанавливаем пакет
20392088
if ! [ -f /opt/etc/init.d/S09dnscrypt-proxy2 ]; then
20402089
ready "Устанавливаем пакет dnscrypt-proxy2..."
2090+
opkg update &> /dev/null
20412091
opkg remove dnscrypt-proxy2 --force-depends 1> /dev/null 2> "${ERROR_LOG_FILE}"
20422092
opkg install dnscrypt-proxy2 --force-maintainer 1> /dev/null 2> "${ERROR_LOG_FILE}"
20432093
when_error "${?}" "Ошибка при установке пакета dnsmasq"

opt/bin/main/upgrade

+2-1
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,7 @@ fi
294294
#--------------------------------------------------------------------------------------------------------------
295295
ready "Устанавливаем новую версию пакета [${version}]..."
296296
{
297+
opkg update &> /dev/null
297298
opkg install "/opt/packages/${package_name}"
298299

299300
} &>/dev/null && when_ok || when_err
@@ -305,7 +306,7 @@ if ! [ -f /opt/bin/kvas ] ; then
305306
# если файл пакета не найден после установки пакета, значит произошла ошибка
306307
print_error "Пакет установлен некорректно - отсутствуют исполняемые файлы!"
307308
echo -e "${GREEN}Попробуйте установить пакет вручную командой "
308-
echo -e "${BLUE}'opkg install /opt/packages/${package_name}'${NOCL}"
309+
echo -e "${BLUE}'opkg update && opkg install /opt/packages/${package_name}'${NOCL}"
309310
print_line
310311
exit 1
311312
else

opt/etc/conf/hosts.list

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ myip2.ru
1212

1313
*oaistatic.com
1414
*openai.com
15+
*chatgpt.com
16+
1517
*openwrt.org
1618

1719
*whatsapp.net

0 commit comments

Comments
 (0)