Keenetic - настройки, вопросы и пути решения.

Интернет-центры Keenetic — основа современных сетей в миллионах домохозяйств и небольших офисов.
Ответить
anvldko
Ветеран
Сообщения: 1009
Зарегистрирован: 30 июн 2019, 01:30
Откуда: Росси́йская Федера́ция
Контактная информация:

Keenetic - настройки, вопросы и пути решения.

Сообщение: # 3798Сообщение anvldko

Начало....
Справочник по cli командам
Как вернуть доступ к веб-конфигуратору?
alexlaz1982
Бывалый
Сообщения: 91
Зарегистрирован: 30 июн 2019, 20:41
Откуда: Ейск
Контактная информация:

Re: Keenetic - настройки, вопросы и пути решения.

Сообщение: # 4199Сообщение alexlaz1982

Установка PHP 8

На примере кинетик OS, для других маршрутизаторов необходимо отредактировать только строчку

Код: Выделить всё

 user nobody nobody;
заменив группу на свою существующую, например на падаван эта строчка выглядеть будет так

Код: Выделить всё

user nobody nogroup;
,а для мобильных маршрутизаторов хуавей

Код: Выделить всё

user root root;
Приступаем к установке
Копируем код по кнопке "КОД: ВЫДЕЛИТЬ ВСЁ" и вставляем в терминал, веб сервер будет доступен на 88 порту вашего маршрутизатора.

Код: Выделить всё

opkg update
opkg upgrade

Код: Выделить всё

opkg install nginx
opkg install php8-fastcgi
opkg install php8-mod-curl
opkg install php8-mod-iconv
opkg install php8-mod-mbstring
opkg install php8-mod-session
opkg install php8-mod-simplexml
opkg install php8-mod-xml
opkg install php8-mod-zip
opkg install php8-mod-dom

Код: Выделить всё

cat > "/opt/etc/nginx/nginx.conf" <<EOF
user nobody nobody;
worker_processes 1;
events {
worker_connections 64;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile off;
keepalive_timeout 65;
server {
listen 88;
server_name localhost;
charset utf-8;
location / {
root /opt/share/www;
index index.php index.html index.htm;
}
error_page 404 /404.html;
error_page 403 /403.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /opt/share/nginx/html;
}
location ~ \.php\$ {
root /opt/share/www;
fastcgi_pass unix:/opt/var/run/php-fcgi.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
}
EOF

Код: Выделить всё

rm /opt/etc/nginx/fastcgi_params
cat > "/opt/etc/nginx/fastcgi_params" <<EOF
fastcgi_param QUERY_STRING \$query_string;
fastcgi_param REQUEST_METHOD \$request_method;
fastcgi_param CONTENT_TYPE \$content_type;
fastcgi_param CONTENT_LENGTH \$content_length;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
fastcgi_param SCRIPT_NAME \$fastcgi_script_name;
fastcgi_param REQUEST_URI \$request_uri;
fastcgi_param DOCUMENT_URI \$document_uri;
fastcgi_param DOCUMENT_ROOT \$document_root;
fastcgi_param SERVER_PROTOCOL \$server_protocol;
fastcgi_param REQUEST_SCHEME \$scheme;
fastcgi_param HTTPS \$https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/\$nginx_version;
fastcgi_param REMOTE_ADDR \$remote_addr;
fastcgi_param REMOTE_PORT \$remote_port;
fastcgi_param SERVER_ADDR \$server_addr;
fastcgi_param SERVER_PORT \$server_port;
fastcgi_param SERVER_NAME \$server_name;
fastcgi_param REDIRECT_STATUS 200;
EOF

Код: Выделить всё

rm /opt/etc/init.d/S79php-fcgi
cat > "/opt/etc/init.d/S79php-fcgi" <<EOF
#!/bin/sh
export PHP_FCGI_CHILDREN=''
ENABLED=yes
PROCS=php-fcgi
ARGS="-b /opt/var/run/php-fcgi.sock &"
PREARGS=""
DESC=\$PROCS
PATH=/opt/bin:/opt/sbin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
. /opt/etc/init.d/rc.func
EOF
chmod +x /opt/etc/init.d/S79php-fcgi

Код: Выделить всё

mkdir /opt/share/www
/opt/etc/init.d/S80nginx start

Код: Выделить всё

/opt/etc/init.d/rc.unslung restart
Веб скрипты кладём по адресу /opt/share/www
У вас нет необходимых прав для просмотра вложений в этом сообщении.
anvldko
Ветеран
Сообщения: 1009
Зарегистрирован: 30 июн 2019, 01:30
Откуда: Росси́йская Федера́ция
Контактная информация:

Re: Keenetic - настройки, вопросы и пути решения.

Сообщение: # 4555Сообщение anvldko

Получение публичного ключа для Claudflare DNS

Добавляем в stubby.yml

Код: Выделить всё

# The cloudflare
  - address_data: 1.1.1.1
    tls_port: 853
    tls_auth_name: "cloudflare-dns.com"
    tls_pubkey_pinset:
      - digest: "sha256"
        value: PublicKey
  - address_data: 1.0.0.1
    tls_auth_name: "cloudflare-dns.com"
    tls_pubkey_pinset:
      - digest: "sha256"
        value: PublicKey
Устанавливаем пакет openssl

Код: Выделить всё

opkg install openssl-util
Выполняем команду в ответ на которую мы получим правильный публичный ключ DNS over TLS для cloudflare

Код: Выделить всё

echo | openssl s_client -connect '1.0.0.1:853' 2>/dev/null | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
Меняем в конфиге PublicKey на ключ получиный командой выше, на текущую дату он равен HdDBgtnj07/NrKNmLCbg5rxK78ZehdHZ/Uoutx4iHzY=

Готовый конфиг

Код: Выделить всё

resolution_type: GETDNS_RESOLUTION_STUB
round_robin_upstreams: 1
appdata_dir: "/opt/var/lib/stubby"
tls_authentication: GETDNS_AUTHENTICATION_REQUIRED
tls_query_padding_blocksize: 128
edns_client_subnet_private: 1
idle_timeout: 5000
listen_addresses:
  - 127.0.0.1@5453
#  - 0::1@5453
dns_transport_list:
  - GETDNS_TRANSPORT_TLS
upstream_recursive_servers:
  - address_data: 1.1.1.1
    tls_port: 853
    tls_auth_name: "cloudflare-dns.com"
    tls_pubkey_pinset:
      - digest: "sha256"
        value: HdDBgtnj07/NrKNmLCbg5rxK78ZehdHZ/Uoutx4iHzY=
  - address_data: 1.0.0.1
    tls_port: 853
    tls_auth_name: "cloudflare-dns.com"
    tls_pubkey_pinset:
      - digest: "sha256"
        value: HdDBgtnj07/NrKNmLCbg5rxK78ZehdHZ/Uoutx4iHzY=
Дополнительно вы можете включить блокировщик с помощью cloudflare-dns, просто измените айпи адрес на требуемый вам вариант. (блокировка работает только в случае указания днс без шифирования, в противном случае можно использовать те, которые быстрее отвечают)
Блокируйте вредоносное ПО с помощью 1.1.1.1 для всей семьи

Код: Выделить всё

  - address_data: 1.1.1.2
  - address_data: 1.0.0.2
Блокируйте вредоносное ПО и контент для взрослых с помощью 1.1.1.1 для всей семьи

Код: Выделить всё

  - address_data: 1.1.1.3
  - address_data: 1.0.0.3
Тоже самое для гугла

Код: Выделить всё

echo | openssl s_client -connect '8.8.8.8:853' 2>/dev/null | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
получаем на текущую дату:
+AsYDJCarV0Leal5YZAjgMo0PH/uqZLxg8NBfRm8AEI=
anvldko
Ветеран
Сообщения: 1009
Зарегистрирован: 30 июн 2019, 01:30
Откуда: Росси́йская Федера́ция
Контактная информация:

Re: Keenetic - настройки, вопросы и пути решения.

Сообщение: # 4655Сообщение anvldko

Всегда получаем белый IP

Чтобы скрипт корректно работал меняем в строке ConnName=Rostelecom на имя профиля соединения к провайдру из морды кинетика, или в морде переименовываем свой профиль на Rostelecom.

Создадим пустой скрипт запуска 030-rostelecom.sh и установим права на него 755

Код: Выделить всё

echo -en "" > /opt/etc/ndm/wan.d/030-rostelecom.sh

Код: Выделить всё

chmod 755 /opt/etc/ndm/wan.d/030-rostelecom.sh
Далее копируем в него текст:

Код: Выделить всё

#!/opt/bin/sh

ConnName=Rostelecom
counter=/opt/tmp/CountReconnectWan.txt
previp=/opt/tmp/previp.txt
max_tries=10

if ! opkg list-installed | grep '^jq' > /dev/null; then
	opkg update
	opkg install jq
fi

sleep 3

RESP=$(wget -qO - http://localhost:79/rci/show/interface | jq -r ".[] | select(.description==\"$ConnName\") | select(.defaultgw==true) | .id, .description, .address")
[ -n "$RESP" ] || exit 1

_ip=$(echo $RESP | awk '{print $3}')
_name=$(echo $RESP | awk '{print $2}')
_iface=$(echo $RESP | awk '{print $1}')

if echo "$_ip" | grep -qE "^(10\.|100\.6[4-9]\.|100\.[7-9][0-9]\.|100\.1[01][0-9]\.|100\.12[0-7]\.|172\.1[6-9]\.|172\.2[0-9]\.|172\.3[01]\.|null)"; then
    [ -f "$counter" ] || echo "0" > $counter
    try_nr=$(cat $counter)
    try_nr=$((++try_nr))
    if [ $try_nr -gt $max_tries ]; then
        echo "0" > $counter
		logger -p local0.error -t white_ip[$$] "Provider: $_name, interface: $_iface. Too much tries. Exit"
        exit 1
    fi
    echo "$try_nr" > $counter
    logger -p local0.error -t white_ip[$$] "Provider: $_name, interface: $_iface. Reloading WAN due grey IP - $_ip. Try $try_nr of $max_tries."
	wget -qO - --post-data="[{\"interface\":{\"name\":\"$_iface\",\"down\":{}}}]" http://localhost:79/rci/
    sleep 3
    wget -qO - --post-data="[{\"interface\":{\"name\":\"$_iface\",\"up\":{}}}]" http://localhost:79/rci/
else
    echo "0" > $counter
    [ -f "$previp" ] || echo "0.0.0.0" > $previp
    _previp=$(cat $previp)
    if [ "$_previp" != "$_ip" ]; then
        logger -p local0.notice -t white_ip[$$] "Provider: $_name, interface: $_iface, white IP - $_ip."
        echo "$_ip" > $previp
	else
		logger -p local0.notice -t white_ip[$$] "Provider: $_name, interface: $_iface, white IP - $_ip (address unchanged)."
    fi
	exit 0
fi

Ответить