forked from Reisber/Personal
Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| df773a6dff | |||
| d8c341ea77 | |||
| c158acfffa | |||
| db02b37a81 | |||
| d8f4e22084 | |||
| e329ed10d3 | |||
| 7959b9364b | |||
| 6bb2e435ea | |||
| 64a0ea248d | |||
| 984128fa3d | |||
| dfe582049a | |||
| 1e5d9d2777 | |||
| 41846064fe | |||
| 7122a5fc41 | |||
| 59f3634d1f | |||
| fc3445ab70 | |||
| de0c08f03b | |||
| 346369f585 | |||
| 742725b961 | |||
| ff7749acba | |||
| 4dc2a4c8ef | |||
| 7e2d426e7b |
119
MTProto.md
Normal file
119
MTProto.md
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
### Устаналвиваем докер
|
||||||
|
```
|
||||||
|
curl -fsSL https://get.docker.com | sh
|
||||||
|
```
|
||||||
|
Далее `nano start_proxy.sh`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Цвета для красивого вывода
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
CONTAINER_NAME="mtproto-proxy"
|
||||||
|
PORT="443"
|
||||||
|
FAKE_DOMAIN="ya.ru" # Домен для Fake TLS
|
||||||
|
|
||||||
|
echo "🚀 Запуск MTProto прокси с Fake TLS"
|
||||||
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
|
echo -e "📌 Используем домен: ${BLUE}${FAKE_DOMAIN}${NC}"
|
||||||
|
|
||||||
|
# Генерируем секрет для Fake TLS
|
||||||
|
echo -n "🔑 Генерация Fake TLS секрета... "
|
||||||
|
|
||||||
|
# Получаем hex домена ya.ru
|
||||||
|
DOMAIN_HEX=$(echo -n $FAKE_DOMAIN | xxd -ps | tr -d '\n')
|
||||||
|
echo -e "\n hex домена: ${DOMAIN_HEX}"
|
||||||
|
|
||||||
|
# Дополняем случайными символами до 30 символов
|
||||||
|
DOMAIN_LEN=${#DOMAIN_HEX}
|
||||||
|
NEEDED=$((30 - DOMAIN_LEN))
|
||||||
|
RANDOM_HEX=$(openssl rand -hex 15 | cut -c1-$NEEDED)
|
||||||
|
|
||||||
|
# Собираем секрет
|
||||||
|
SECRET="ee${DOMAIN_HEX}${RANDOM_HEX}"
|
||||||
|
|
||||||
|
echo -e " Случайное дополнение: ${RANDOM_HEX}"
|
||||||
|
echo -e " Секрет: ${YELLOW}${SECRET}${NC}"
|
||||||
|
echo " Длина: ${#SECRET} символов"
|
||||||
|
|
||||||
|
# Проверяем, свободен ли порт 443
|
||||||
|
echo -n "🔍 Проверка порта ${PORT}... "
|
||||||
|
if ss -tuln | grep -q ":${PORT} "; then
|
||||||
|
echo -e "${YELLOW}порт занят${NC}"
|
||||||
|
# Ищем альтернативный порт
|
||||||
|
for alt_port in 8443 8444 8445; do
|
||||||
|
if ! ss -tuln | grep -q ":${alt_port} "; then
|
||||||
|
PORT=$alt_port
|
||||||
|
echo " Используем порт: ${PORT}"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo -e "${GREEN}свободен${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Останавливаем старый контейнер, если есть
|
||||||
|
echo -n "🛑 Остановка старого контейнера... "
|
||||||
|
sudo docker stop ${CONTAINER_NAME} >/dev/null 2>&1
|
||||||
|
sudo docker rm ${CONTAINER_NAME} >/dev/null 2>&1
|
||||||
|
echo -e "${GREEN}готово${NC}"
|
||||||
|
|
||||||
|
# Запускаем официальный прокси от Telegram
|
||||||
|
echo -n "📦 Запуск контейнера... "
|
||||||
|
sudo docker run -d \
|
||||||
|
--name ${CONTAINER_NAME} \
|
||||||
|
--restart unless-stopped \
|
||||||
|
-p ${PORT}:443 \
|
||||||
|
-e SECRET="${SECRET}" \
|
||||||
|
telegrammessenger/proxy > /dev/null 2>&1
|
||||||
|
|
||||||
|
# Проверяем результат
|
||||||
|
sleep 3
|
||||||
|
if sudo docker ps | grep -q ${CONTAINER_NAME}; then
|
||||||
|
SERVER_IP=$(curl -s ifconfig.me)
|
||||||
|
|
||||||
|
echo -e "${GREEN}✅ УСПЕШНО${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "📊 ИНФОРМАЦИЯ ДЛЯ ПОДКЛЮЧЕНИЯ:"
|
||||||
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
|
echo "🌐 Сервер: ${SERVER_IP}"
|
||||||
|
echo "🔌 Порт: ${PORT}"
|
||||||
|
echo "🔑 Секрет: ${SECRET}"
|
||||||
|
echo "🌐 Fake TLS домен: ${FAKE_DOMAIN}"
|
||||||
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
|
echo "🔗 Ссылка для Telegram (нажмите для автоподключения):"
|
||||||
|
echo -e "${GREEN}tg://proxy?server=${SERVER_IP}&port=${PORT}&secret=${SECRET}${NC}"
|
||||||
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
|
|
||||||
|
# Сохраняем конфигурацию
|
||||||
|
cat > ~/mtproto_config.txt << EOF
|
||||||
|
SERVER=${SERVER_IP}
|
||||||
|
PORT=${PORT}
|
||||||
|
SECRET=${SECRET}
|
||||||
|
DOMAIN=${FAKE_DOMAIN}
|
||||||
|
LINK=tg://proxy?server=${SERVER_IP}&port=${PORT}&secret=${SECRET}
|
||||||
|
EOF
|
||||||
|
echo "✅ Конфигурация сохранена в ~/mtproto_config.txt"
|
||||||
|
|
||||||
|
# Показываем последние логи
|
||||||
|
echo ""
|
||||||
|
echo "📋 Логи контейнера:"
|
||||||
|
sudo docker logs --tail 5 ${CONTAINER_NAME}
|
||||||
|
else
|
||||||
|
echo -e "${RED}❌ ОШИБКА${NC}"
|
||||||
|
sudo docker logs ${CONTAINER_NAME}
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
Вешаем `chmod +x start_proxy.sh`
|
||||||
|
И запускаем
|
||||||
|
|
||||||
160
NEBULA/nebula.md
160
NEBULA/nebula.md
@@ -1,5 +1,5 @@
|
|||||||
# И так. Я решил поднять небулу
|
# И так. Я решил поднять небулу
|
||||||
## Мной, в качестве сервера выбран debian 12 (6Cores, 12GB RAM + 160gb SSD)
|
## Мной, в качестве сервера выбран debian 13 (16Cores, 32GB RAM + 2tb SSD)
|
||||||
## Обязательно проверяйте, чтобы у вашего хостера/home-server была виртуализация
|
## Обязательно проверяйте, чтобы у вашего хостера/home-server была виртуализация
|
||||||
### Начало установки
|
### Начало установки
|
||||||
## Для начала установим MariaDB сервер да и nginx
|
## Для начала установим MariaDB сервер да и nginx
|
||||||
@@ -26,13 +26,13 @@ curl -fsSL https://downloads.opennebula.io/repo/repo2.key| gpg --dearmor -o /etc
|
|||||||
```
|
```
|
||||||
Затем скачаем саму небулу
|
Затем скачаем саму небулу
|
||||||
```
|
```
|
||||||
echo "deb https://downloads.opennebula.io/repo/6.10/Debian/12 stable opennebula" | tee /etc/apt/sources.list.d/opennebula.list
|
echo "deb https://downloads.opennebula.io/repo/7.1/Debian/13 stable opennebula" | sudo tee /etc/apt/sources.list.d/opennebula.list
|
||||||
```
|
```
|
||||||
Обновим и установим репозитроий с небулой
|
Обновим и установим репозитроий с небулой
|
||||||
```
|
```
|
||||||
apt-get update -y
|
apt-get update -y
|
||||||
|
|
||||||
apt-get install opennebula opennebula-sunstone opennebula-gate opennebula-flow -y
|
apt-get install opennebula opennebula-fireedge opennebula-gate opennebula-flow -y
|
||||||
|
|
||||||
```
|
```
|
||||||
После успешной установки запустим следующую команду для установки необходимых зависимостей
|
После успешной установки запустим следующую команду для установки необходимых зависимостей
|
||||||
@@ -66,19 +66,15 @@ cat /var/lib/one/.one/one_auth
|
|||||||
```
|
```
|
||||||
После этого
|
После этого
|
||||||
```
|
```
|
||||||
systemctl start opennebula opennebula-sunstone
|
systemctl start opennebula opennebula-fireedge opennebula-flow opennebula-gate
|
||||||
systemctl enable opennebula opennebula-sunstone
|
systemctl enable opennebula opennebula-fireedge opennebula-flow opennebula-gate
|
||||||
```
|
```
|
||||||
Думали всё?
|
Думали всё?
|
||||||
Начинаем дебажить
|
Начинаем дебажить
|
||||||
В целом, нам, для начала, необходимо создать Host. Это место, где будут крутиться наши виртуалки
|
В целом, нам, для начала, необходимо создать Host. Это место, где будут крутиться наши виртуалки
|
||||||
Имя хоста обязательно должно совпадать с записью в `/etc/hosts`, так-же, если хост находится на одном с небулой сервере, то необходимо что-бы он был с ip 127.0.0.1
|
Имя хоста обязательно должно совпадать с записью в `/etc/hosts`, так-же, если хост находится на одном с небулой сервере, то необходимо что-бы он был с ip 127.0.0.1
|
||||||
Далее
|
Далее
|
||||||
```
|
|
||||||
su - oneadmin -c "ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa"
|
|
||||||
su - oneadmin -c "cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys"
|
|
||||||
chmod 600 /var/lib/one/.ssh/authorized_keys
|
|
||||||
```
|
|
||||||
Проверим возможность Oneadmin общаться с самим собой
|
Проверим возможность Oneadmin общаться с самим собой
|
||||||
```
|
```
|
||||||
su - oneadmin
|
su - oneadmin
|
||||||
@@ -87,13 +83,11 @@ ssh -o StrictHostKeyChecking=no localhost
|
|||||||
Если нас пустило без пароля - шик
|
Если нас пустило без пароля - шик
|
||||||
Пишем
|
Пишем
|
||||||
```
|
```
|
||||||
apt-get install -y qemu-kvm libvirt-daemon-system libvirt-clients virtinst bridge-utils
|
|
||||||
usermod -a -G libvirt,kvm oneadmin
|
usermod -a -G libvirt,kvm oneadmin
|
||||||
```
|
```
|
||||||
После этого мы почти готовы поднимать VM, но ещё не совсем
|
После этого мы почти готовы поднимать VM, но ещё не совсем
|
||||||
```
|
```
|
||||||
ln -s /usr/bin/qemu-system-x86_64 /usr/bin/qemu-kvm-one
|
ln -s /usr/bin/qemu-system-x86_64 /usr/bin/qemu-kvm-one
|
||||||
chown -R oneadmin:oneadmin /var/lib/one/datastores
|
|
||||||
systemctl restart libvirtd
|
systemctl restart libvirtd
|
||||||
```
|
```
|
||||||
Далее `nano /etc/libvirt/qemu.conf`
|
Далее `nano /etc/libvirt/qemu.conf`
|
||||||
@@ -111,18 +105,9 @@ systemctl restart libvirtd
|
|||||||
chown -R oneadmin:oneadmin /var/lib/one/datastores
|
chown -R oneadmin:oneadmin /var/lib/one/datastores
|
||||||
chmod -R 770 /var/lib/one/datastores
|
chmod -R 770 /var/lib/one/datastores
|
||||||
```
|
```
|
||||||
После этого, ради работы VNC установим FireBridge
|
|
||||||
```
|
|
||||||
apt-get install opennebula-fireedge
|
|
||||||
echo "$(openssl rand -base64 32)" > /etc/one/fireedge_key
|
|
||||||
chown oneadmin:oneadmin /etc/one/fireedge_key
|
|
||||||
chmod 600 /etc/one/fireedge_key
|
|
||||||
systemctl enable opennebula-fireedge
|
|
||||||
systemctl start opennebula-fireedge
|
|
||||||
```
|
```
|
||||||
Установим "гуакд"
|
Установим "гуакд"
|
||||||
```
|
```
|
||||||
apt-get install -y opennebula-guacd
|
|
||||||
systemctl enable --now opennebula-guacd
|
systemctl enable --now opennebula-guacd
|
||||||
```
|
```
|
||||||
Проверим его работоспособность
|
Проверим его работоспособность
|
||||||
@@ -137,137 +122,4 @@ nano /etc/one/sunstone-server.conf
|
|||||||
:public_fireedge_endpoint: http://ip_addr_of_your_server(Domain):2616
|
:public_fireedge_endpoint: http://ip_addr_of_your_server(Domain):2616
|
||||||
:fireedge_verify_ssl: false
|
:fireedge_verify_ssl: false
|
||||||
```
|
```
|
||||||
Затем нагенерим самописные-серты для fireedge
|
|
||||||
```
|
|
||||||
# Create the directory
|
|
||||||
mkdir -p /etc/one/ssl
|
|
||||||
cd /etc/one/ssl
|
|
||||||
|
|
||||||
# Generate a self-signed certificate (valid for 365 days)
|
|
||||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
|
|
||||||
-keyout opennebula.key -out opennebula.crt \
|
|
||||||
-subj "/C=US/ST=State/L=City/O=OpenNebula/CN=ip_addr_of_your_server"
|
|
||||||
|
|
||||||
# Ensure the oneadmin user can read them
|
|
||||||
chown -R oneadmin:oneadmin /etc/one/ssl
|
|
||||||
chmod 600 /etc/one/ssl/opennebula.key
|
|
||||||
chmod 644 /etc/one/ssl/opennebula.crt
|
|
||||||
```
|
|
||||||
Далее
|
|
||||||
```
|
|
||||||
nano /etc/one/fireedge-server.conf
|
|
||||||
```
|
|
||||||
Там проверяем, что
|
|
||||||
```
|
|
||||||
:host: 127.0.0.1
|
|
||||||
:port: 2617 меняем порт на 2617
|
|
||||||
```
|
|
||||||
```
|
|
||||||
nano /etc/nginx/sites-available/fireedge
|
|
||||||
```
|
|
||||||
Вставляем туда
|
|
||||||
```
|
|
||||||
server {
|
|
||||||
listen 2616 ssl;
|
|
||||||
server_name ip_addr_of_your_server;
|
|
||||||
|
|
||||||
ssl_certificate /etc/one/ssl/opennebula.crt;
|
|
||||||
ssl_certificate_key /etc/one/ssl/opennebula.key;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
proxy_pass http://127.0.0.1:2617;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
Потом
|
|
||||||
```
|
|
||||||
ln -s /etc/nginx/sites-available/fireedge /etc/nginx/sites-enabled/
|
|
||||||
rm /etc/nginx/sites-enabled/default
|
|
||||||
systemctl restart nginx
|
|
||||||
systemctl restart opennebula-fireedge
|
|
||||||
```
|
|
||||||
И в целом всё
|
|
||||||
Ваша небула будет доступна через браузер **http://your-server-ip:9869**
|
|
||||||
|
|
||||||
iptables -A INPUT -p tcp --dport 5900:6000 -j ACCEPT
|
|
||||||
|
|
||||||
# Но это ведь слишком скучно. Хочется домен, хочется ходить без порта.
|
|
||||||
Генерим конфигурационный файл для нашего облачка
|
|
||||||
```
|
|
||||||
nano /etc/nginx/sites-available/sunstone.conf
|
|
||||||
```
|
|
||||||
И вставим туда
|
|
||||||
```
|
|
||||||
server {
|
|
||||||
server_name nebula.reisber.space;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
proxy_pass http://127.0.0.1:9869;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
|
||||||
|
|
||||||
# Для WebSocket
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_read_timeout 3600;
|
|
||||||
proxy_send_timeout 3600;
|
|
||||||
|
|
||||||
proxy_request_buffering off;
|
|
||||||
proxy_buffering off;
|
|
||||||
|
|
||||||
}
|
|
||||||
location /fireedge/ {
|
|
||||||
proxy_pass http://127.0.0.1:2617; # порт FireEdge
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
|
|
||||||
proxy_read_timeout 3600;
|
|
||||||
proxy_send_timeout 3600;
|
|
||||||
|
|
||||||
proxy_buffering off;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
Сохраним и проверим наш конфиг, а так-же растартнем nginx
|
|
||||||
```
|
|
||||||
nginx -t
|
|
||||||
systemctl restart nginx
|
|
||||||
```
|
|
||||||
После этого получим серт через Certbot (да, это правда особо не нужно, но лень каждый раз смотреть, что соединение не безопасно)
|
|
||||||
```
|
|
||||||
certbot --nginx -d pu-pu-pu-pu-pu-pu.domain.com
|
|
||||||
```
|
|
||||||
Вот и всё, мы прекрасны
|
|
||||||
|
|
||||||
|
|
||||||
Для загрузки ISO лучше всего использовать scp
|
|
||||||
```scp pupu.iso oneadmin@server:/var/lib/one/datastores/0/```
|
|
||||||
Или грузить всё в домашнюю директорию рута и оттуда
|
|
||||||
Перед этим нужно подредачить настройки хранилища
|
|
||||||
|
|
||||||
```
|
|
||||||
onedatastore show 1 (ID_ХРАНИЛИЩА)
|
|
||||||
|
|
||||||
Если видим дискомфортное количество или просто "/" в `RESTRICTED_DIRS`
|
|
||||||
То:
|
|
||||||
```
|
|
||||||
onedatastore update 1
|
|
||||||
```
|
|
||||||
И просто сносим RESTRICTED_DIRS
|
|
||||||
После этого, через WEB-GUI можно будет добавлять ISO по их пути на сервере
|
|
||||||
|
|
||||||
```
|
|
||||||
sudo mv ~/pupu.iso /var/lib/one/datastores/0/
|
|
||||||
sudo chown oneadmin:oneadmin /var/lib/one/datastores/0/pupu.iso
|
|
||||||
```
|
|
||||||
470
NEBULA/nebula2.0.md
Normal file
470
NEBULA/nebula2.0.md
Normal file
@@ -0,0 +1,470 @@
|
|||||||
|
# 🚀 OpenNebula на Debian 13 (Full Setup + Networking)
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="https://img.shields.io/badge/OpenNebula-7.1-blue?style=for-the-badge">
|
||||||
|
<img src="https://img.shields.io/badge/Debian-13-red?style=for-the-badge">
|
||||||
|
<img src="https://img.shields.io/badge/KVM-required-important?style=for-the-badge">
|
||||||
|
<img src="https://img.shields.io/badge/status-working-success?style=for-the-badge">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
> ⚡ Полный production-ready гайд
|
||||||
|
> 🧠 Подходит для homelab / VPS / infra
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 📚 Содержание
|
||||||
|
|
||||||
|
- [📋 Требования](#-требования)
|
||||||
|
- [🧰 Базовая установка](#-базовая-установка)
|
||||||
|
- [🗄️ MariaDB](#️-mariadb)
|
||||||
|
- [🌐 Hostname](#-hostname)
|
||||||
|
- [📦 Установка OpenNebula](#-установка-opennebula)
|
||||||
|
- [🛠️ Конфигурация](#️-конфигурация)
|
||||||
|
- [🧪 Отладка](#-отладка)
|
||||||
|
- [🌐 Сеть и интернет для VM](#-сеть-и-интернет-для-vm)
|
||||||
|
- [🎉 Готово](#-готово)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 📋 Требования
|
||||||
|
|
||||||
|
- 🖥️ Debian 13
|
||||||
|
- ⚠️ KVM (обязательно)
|
||||||
|
- 💾 Рекомендуется:
|
||||||
|
- 4 CPU
|
||||||
|
- 8GB RAM
|
||||||
|
- SSD
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 🧰 Базовая установка
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt update
|
||||||
|
apt install nginx certbot python3-certbot-nginx -y
|
||||||
|
apt install mariadb-server curl gnupg2 -y
|
||||||
|
```
|
||||||
|
|
||||||
|
📌 Пакеты:
|
||||||
|
- `nginx` — под веб (FireEdge / прокси)
|
||||||
|
- `certbot` — SSL
|
||||||
|
- `mariadb` — база OpenNebula
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 🗄️ MariaDB
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mysql
|
||||||
|
```
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE DATABASE opennebula;
|
||||||
|
|
||||||
|
GRANT ALL PRIVILEGES ON opennebula.*
|
||||||
|
TO 'oneadmin' IDENTIFIED BY 'password';
|
||||||
|
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
EXIT;
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ `/etc/mysql/` — здесь конфиги MariaDB
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 🌐 Hostname
|
||||||
|
|
||||||
|
```bash
|
||||||
|
hostname opennebula
|
||||||
|
```
|
||||||
|
|
||||||
|
📌 Файл: `/etc/hosts`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nano /etc/hosts
|
||||||
|
```
|
||||||
|
|
||||||
|
Добавь:
|
||||||
|
|
||||||
|
```
|
||||||
|
<YOUR_IP> opennebula
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 📦 Установка OpenNebula
|
||||||
|
|
||||||
|
## 🔐 GPG ключ
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://downloads.opennebula.io/repo/repo2.key \
|
||||||
|
| gpg --dearmor -o /etc/apt/trusted.gpg.d/opennebula.gpg
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📥 Репозиторий
|
||||||
|
|
||||||
|
Файл: `/etc/apt/sources.list.d/opennebula.list`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo "deb https://downloads.opennebula.io/repo/7.1/Debian/13 stable opennebula" \
|
||||||
|
| tee /etc/apt/sources.list.d/opennebula.list
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 Установка
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt update
|
||||||
|
|
||||||
|
apt install opennebula opennebula-fireedge \
|
||||||
|
opennebula-gate opennebula-flow -y
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚙️ Зависимости
|
||||||
|
|
||||||
|
```bash
|
||||||
|
/usr/share/one/install_gems
|
||||||
|
```
|
||||||
|
|
||||||
|
📌 Скрипт ставит ruby-зависимости
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 🛠️ Конфигурация
|
||||||
|
|
||||||
|
Файл: `/etc/one/oned.conf`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nano /etc/one/oned.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
### ❌ Было:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
DB = [ BACKEND = "sqlite",
|
||||||
|
TIMEOUT = 2500 ]
|
||||||
|
```
|
||||||
|
|
||||||
|
### ✅ Стало:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
DB = [ BACKEND = "mysql",
|
||||||
|
SERVER = "localhost",
|
||||||
|
PORT = 0,
|
||||||
|
USER = "oneadmin",
|
||||||
|
PASSWD = "password",
|
||||||
|
DB_NAME = "opennebula",
|
||||||
|
CONNECTIONS = 25,
|
||||||
|
COMPARE_BINARY = "no" ]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔑 Пароль oneadmin
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat /var/lib/one/.one/one_auth
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ▶️ Сервисы
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl start opennebula opennebula-fireedge \
|
||||||
|
opennebula-flow opennebula-gate
|
||||||
|
|
||||||
|
systemctl enable opennebula opennebula-fireedge \
|
||||||
|
opennebula-flow opennebula-gate
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 🧪 Отладка
|
||||||
|
|
||||||
|
## SSH доступ
|
||||||
|
|
||||||
|
```bash
|
||||||
|
su - oneadmin
|
||||||
|
ssh -o StrictHostKeyChecking=no localhost
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Группы
|
||||||
|
|
||||||
|
```bash
|
||||||
|
usermod -a -G libvirt,kvm oneadmin
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## KVM
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ln -s /usr/bin/qemu-system-x86_64 /usr/bin/qemu-kvm-one
|
||||||
|
systemctl restart libvirtd
|
||||||
|
```
|
||||||
|
|
||||||
|
📌 Файл: `/etc/libvirt/qemu.conf`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nano /etc/libvirt/qemu.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
```ini
|
||||||
|
user = "oneadmin"
|
||||||
|
group = "oneadmin"
|
||||||
|
dynamic_ownership = 1
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## AppArmor
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt install apparmor-utils -y
|
||||||
|
aa-complain /usr/sbin/libvirtd
|
||||||
|
systemctl restart libvirtd
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Datastore
|
||||||
|
|
||||||
|
```bash
|
||||||
|
chown -R oneadmin:oneadmin /var/lib/one/datastores
|
||||||
|
chmod -R 770 /var/lib/one/datastores
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Guacd
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl enable --now opennebula-guacd
|
||||||
|
ss -tlnp | grep 4822
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Sunstone
|
||||||
|
|
||||||
|
Файл: `/etc/one/sunstone-server.conf`
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
:private_fireedge_endpoint: http://localhost:2616
|
||||||
|
:public_fireedge_endpoint: http://<YOUR_IP_OR_DOMAIN>:2616
|
||||||
|
:fireedge_verify_ssl: false
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 🌐 Сеть и интернет для VM
|
||||||
|
|
||||||
|
# OpenNebula guide up internet for VM
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Создание bridge
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt install bridge-utils -y
|
||||||
|
```
|
||||||
|
|
||||||
|
📌 Файл: `/etc/network/interfaces`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nano /etc/network/interfaces
|
||||||
|
```
|
||||||
|
|
||||||
|
```ini
|
||||||
|
# Внутренний мост для OpenNebula
|
||||||
|
auto br1
|
||||||
|
iface br1 inet static
|
||||||
|
address 192.168.100.1
|
||||||
|
netmask 255.255.255.0
|
||||||
|
bridge_ports none
|
||||||
|
bridge_stp off
|
||||||
|
bridge_fd 0
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Применение сети
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl restart networking
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. NAT (интернет для VM)
|
||||||
|
|
||||||
|
### Включаем forwarding
|
||||||
|
|
||||||
|
📌 Файл: `/etc/sysctl.d/99-opennebula-nat.conf`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-opennebula-nat.conf
|
||||||
|
sysctl -p /etc/sysctl.d/99-opennebula-nat.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### iptables
|
||||||
|
|
||||||
|
📌 Узнать интерфейс:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ip route | grep default
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
iptables -t nat -F
|
||||||
|
|
||||||
|
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
||||||
|
|
||||||
|
iptables -A FORWARD -i br1 -o eth0 -j ACCEPT
|
||||||
|
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Сохранение
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt install iptables-persistent -y
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Проброс портов
|
||||||
|
|
||||||
|
```bash
|
||||||
|
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2222 \
|
||||||
|
-j DNAT --to-destination 192.168.100.10:22
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Сеть в OpenNebula
|
||||||
|
|
||||||
|
- Network → Virtual Network
|
||||||
|
- Mode: **Bridged**
|
||||||
|
- Bridge: `br1`
|
||||||
|
|
||||||
|
📌 Addresses → `+ Address Range`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. DNS (bind9)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt install bind9 -y
|
||||||
|
```
|
||||||
|
|
||||||
|
📌 Файл: `/etc/bind/named.conf.options`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nano /etc/bind/named.conf.options
|
||||||
|
```
|
||||||
|
|
||||||
|
```ini
|
||||||
|
options {
|
||||||
|
directory "/var/cache/bind";
|
||||||
|
|
||||||
|
forwarders {
|
||||||
|
8.8.8.8;
|
||||||
|
8.8.4.4;
|
||||||
|
};
|
||||||
|
|
||||||
|
dnssec-validation auto;
|
||||||
|
listen-on { 127.0.0.1; 192.168.100.1; };
|
||||||
|
listen-on-v6 { none; };
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl restart bind9
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. DHCP
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt install isc-dhcp-server -y
|
||||||
|
```
|
||||||
|
|
||||||
|
📌 Интерфейс:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nano /etc/default/isc-dhcp-server
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
INTERFACESv4="br1"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
📌 Конфиг: `/etc/dhcp/dhcpd.conf`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nano /etc/dhcp/dhcpd.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
```conf
|
||||||
|
subnet 192.168.100.0 netmask 255.255.255.0 {
|
||||||
|
range 192.168.100.2 192.168.100.254;
|
||||||
|
option routers 192.168.100.1;
|
||||||
|
|
||||||
|
option domain-name-servers 192.168.100.1;
|
||||||
|
|
||||||
|
option subnet-mask 255.255.255.0;
|
||||||
|
option broadcast-address 192.168.100.255;
|
||||||
|
default-lease-time 600;
|
||||||
|
max-lease-time 7200;
|
||||||
|
abandon-lease-time 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
```bash
|
||||||
|
systemctl restart isc-dhcp-server
|
||||||
|
systemctl status isc-dhcp-server
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 🎉 Готово!
|
||||||
|
|
||||||
|
## ✅ У тебя теперь:
|
||||||
|
|
||||||
|
- OpenNebula
|
||||||
|
- NAT + интернет для VM
|
||||||
|
- DHCP + DNS
|
||||||
|
- Полная инфраструктура
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💡 Debug
|
||||||
|
|
||||||
|
```bash
|
||||||
|
journalctl -u opennebula -f
|
||||||
|
journalctl -u libvirtd -f
|
||||||
|
journalctl -u isc-dhcp-server -f
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
made with ❤️ for infra geeks
|
||||||
|
</p>
|
||||||
25
NEBULA/resize_of_image.md
Normal file
25
NEBULA/resize_of_image.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
### После запуска ВМ( с уже изменнёным по размеру диску в небуле )
|
||||||
|
Идём на саму ВМ
|
||||||
|
В ней
|
||||||
|
```
|
||||||
|
swapoff -a
|
||||||
|
```
|
||||||
|
Удаляем все разделы кроме /
|
||||||
|
```
|
||||||
|
d #номер раздела
|
||||||
|
w
|
||||||
|
|
||||||
|
```
|
||||||
|
Потом, когда у нас остался только основной раздел
|
||||||
|
```
|
||||||
|
apt install cloud-guest-utils -y
|
||||||
|
growpart /dev/sda №
|
||||||
|
resize2fs /dev/sda №
|
||||||
|
```
|
||||||
|
И вернём SWAP
|
||||||
|
```
|
||||||
|
fallocate -l 1G /swapfile
|
||||||
|
chmod 600 /swapfile
|
||||||
|
mkswap /swapfile
|
||||||
|
swapon /swapfile
|
||||||
|
```
|
||||||
5
docker/first-try/compose.yaml
Normal file
5
docker/first-try/compose.yaml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
services:
|
||||||
|
web:
|
||||||
|
build: .
|
||||||
|
ports:
|
||||||
|
- "${APP_PORT}:5000"
|
||||||
27
docker/first-try/dockerfile.md
Normal file
27
docker/first-try/dockerfile.md
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
```
|
||||||
|
# syntax=docker/dockerfile:1
|
||||||
|
FROM python:3.13-alpine AS builder
|
||||||
|
##выбрал 13-ый, так как уже собирал на нём
|
||||||
|
|
||||||
|
WORKDIR /test
|
||||||
|
## выбрал рабочей директоририей, директорию тест
|
||||||
|
|
||||||
|
COPY requirements.txt .
|
||||||
|
#Копируем необходимые зависимости
|
||||||
|
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
#А теперь говорим питону их установить
|
||||||
|
### STAGE 2 ###
|
||||||
|
FROM python:3.13-alpine
|
||||||
|
|
||||||
|
WORKDIR /test
|
||||||
|
|
||||||
|
copy --from=builder /usr/local/lib/python3.13 /usr/local/lib/python3.13
|
||||||
|
copy --from=builder /test /test
|
||||||
|
COPY my_first.py .
|
||||||
|
#Копируем текущую директорию '.' в проект в директорию '.'
|
||||||
|
|
||||||
|
|
||||||
|
ENTRYPOINT ["python", "my_first.py"]
|
||||||
|
#Я выбрал ENTRYPOINT так как мне не нужно менять исполняемый файл по умолчанию
|
||||||
|
```
|
||||||
14
docker/first-try/site.py
Normal file
14
docker/first-try/site.py
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
from flask import Flask
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
@app.route("/health") ##Endpoint /healt
|
||||||
|
def health():
|
||||||
|
return "Okay", 200
|
||||||
|
|
||||||
|
@app.route("/") ##main endpoint
|
||||||
|
def home():
|
||||||
|
return "Hello, World!", 200
|
||||||
|
|
||||||
|
if __name__ == "__main__": ##если имя равняется мейну, то раскручиваем сайт на 5000
|
||||||
|
app.run(host="0.0.0.0", port=5000)
|
||||||
145
linux/bird-server.md
Normal file
145
linux/bird-server.md
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
# В данном гайде я распишу процесс настройки bird сервера на линукс и настройку его на отдачу маршрутов по BGP соседу-микротику
|
||||||
|
## Начальная установка
|
||||||
|
```
|
||||||
|
apt update
|
||||||
|
apt upgrade
|
||||||
|
apt install bird2
|
||||||
|
systemctl stop bird
|
||||||
|
```
|
||||||
|
Далее отконфигурим наш исходный файл
|
||||||
|
```
|
||||||
|
echo "" > /etc/bird/bird.conf
|
||||||
|
nano /etc/bird/bird.conf
|
||||||
|
```
|
||||||
|
И вписываем туда следующее
|
||||||
|
```
|
||||||
|
log syslog all;
|
||||||
|
router id 192.168.100.22; ## ip вашего сервера
|
||||||
|
|
||||||
|
protocol kernel {
|
||||||
|
scan time 60;
|
||||||
|
|
||||||
|
ipv4 {
|
||||||
|
import none;
|
||||||
|
export none;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
protocol device {
|
||||||
|
scan time 60;
|
||||||
|
}
|
||||||
|
|
||||||
|
protocol static static_bgp {
|
||||||
|
# Указываем, что эти маршруты относятся к IPv4
|
||||||
|
ipv4;
|
||||||
|
|
||||||
|
|
||||||
|
route 10.10.10.1/32 via "enp3s0"; ## Если ваши устройства находятся в разных сетях, то используйте route
|
||||||
|
|
||||||
|
## Тут прописываем файлы с подсетями, которые будут использоваться
|
||||||
|
include "/etc/bird/ip.txt";
|
||||||
|
include "/etc/bird/Meta.txt";
|
||||||
|
include "/etc/bird/Microsoft.txt";
|
||||||
|
include "/etc/bird/Google.txt";
|
||||||
|
include "/etc/bird/CloudFlare.txt";
|
||||||
|
include "/etc/bird/GitHub.txt";
|
||||||
|
include "/etc/bird/Telegram.txt";
|
||||||
|
include "/etc/bird/ChatGPT.txt";
|
||||||
|
include "/etc/bird/Twitter.txt";
|
||||||
|
include "/etc/bird/Discord.txt";
|
||||||
|
}
|
||||||
|
## Тут указываем нашего соседа, который будет получать маршруты от нашей системы
|
||||||
|
protocol bgp Mikrot1 {
|
||||||
|
description "Mikrotik RB5009";
|
||||||
|
neighbor 10.10.10.1 as 64999;
|
||||||
|
hold time 240;
|
||||||
|
local as 64888;
|
||||||
|
multihop;
|
||||||
|
# passive on;
|
||||||
|
|
||||||
|
# Для BGP сессии тоже нужно явно открыть IPv4 канал
|
||||||
|
ipv4 {
|
||||||
|
import none;
|
||||||
|
export where proto = "static_bgp";
|
||||||
|
next hop self;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Далее необходимо получить список IP адресов
|
||||||
|
```
|
||||||
|
cd /opt
|
||||||
|
mkdir blacklist
|
||||||
|
cd blacklist
|
||||||
|
mkdir list
|
||||||
|
touch chklist
|
||||||
|
chmod +x chklist
|
||||||
|
nano chklist
|
||||||
|
```
|
||||||
|
И вставляем туда следующий скрипт (можно модифицировать по своему усмотрению)
|
||||||
|
```
|
||||||
|
#!/bin/bash
|
||||||
|
# Скрипт для скачивания IPv4 адресов и добавления их в bird
|
||||||
|
# Основан на https://habr.com/ru/articles/359268/
|
||||||
|
# Доработал AlexandrLinux (собака) bafista.ru
|
||||||
|
# Основной список адресов взят тут: https://github.com/lord-alfred/ipranges/tree/main?tab=readme-ov-file
|
||||||
|
cd /opt/blacklist/list
|
||||||
|
wget -N -O RU.lst https://github.com/ipverse/rir-ip/raw/refs/heads/master/country/ru/ipv4-aggregated.txt
|
||||||
|
wget -N https://antifilter.download/list/ipsum.lst
|
||||||
|
wget -N https://antifilter.download/list/subnet.lst
|
||||||
|
#wget -N -O ip.lst https://antifilter.network/download/ip.lst
|
||||||
|
wget -N -O Meta.lst https://raw.githubusercontent.com/SecOps-Institute/FacebookIPLists/master/facebook_ip_list.lst
|
||||||
|
wget -N -O Google.lst https://raw.githubusercontent.com/lord-alfred/ipranges/main/google/ipv4.txt
|
||||||
|
wget -N -O Microsoft.lst https://raw.githubusercontent.com/lord-alfred/ipranges/main/microsoft/ipv4.txt
|
||||||
|
wget -N -O GitHub.lst https://raw.githubusercontent.com/lord-alfred/ipranges/main/github/ipv4.txt
|
||||||
|
wget -N -O Twitter.lst https://raw.githubusercontent.com/lord-alfred/ipranges/main/twitter/ipv4.txt
|
||||||
|
wget -N -O Telegram.lst https://raw.githubusercontent.com/lord-alfred/ipranges/main/telegram/ipv4.txt
|
||||||
|
wget -N -O ChatGPT.lst https://raw.githubusercontent.com/lord-alfred/ipranges/main/openai/ipv4.txt
|
||||||
|
wget -N -O CloudFlare.lst https://raw.githubusercontent.com/lord-alfred/ipranges/main/cloudflare/ipv4.txt
|
||||||
|
wget -N -O Discord.lst https://raw.githubusercontent.com/1andrevich/Re-filter-lists/refs/heads/main/discord_ips.lst
|
||||||
|
old=$(cat /opt/blacklist/md5.txt);
|
||||||
|
new=$(cat /opt/blacklist/list/*.lst | md5sum | head -c 32);
|
||||||
|
if [ "$old" != "$new" ]
|
||||||
|
then
|
||||||
|
echo "md5 chandge"
|
||||||
|
#cat /opt/blacklist/list/ipsum.lst | sed 's_.*_route & reject;_' > /etc/bird/ipsum.txt
|
||||||
|
#cat /opt/blacklist/list/subnet.lst | sed 's_.*_route & reject;_' > /etc/bird/subnet.txt
|
||||||
|
echo "Configure bird start"
|
||||||
|
sed -i '/^#/d' /opt/blacklist/list/RU.lst && cat /opt/blacklist/list/RU.lst | sed 's_.*_route & reject;_' > /etc/bird/RU.txt
|
||||||
|
cat /opt/blacklist/list/ip.lst | sed 's_.*_route & reject;_' > /etc/bird/ip.txt
|
||||||
|
cat /opt/blacklist/list/Meta.lst | sed 's_.*_route & reject;_' > /etc/bird/Meta.txt
|
||||||
|
cat /opt/blacklist/list/Google.lst | sed 's_.*_route & reject;_' > /etc/bird/Google.txt
|
||||||
|
cat /opt/blacklist/list/Microsoft.lst | sed 's_.*_route & reject;_' > /etc/bird/Microsoft.txt
|
||||||
|
cat /opt/blacklist/list/GitHub.lst | sed 's_.*_route & reject;_' > /etc/bird/GitHub.txt
|
||||||
|
cat /opt/blacklist/list/Twitter.lst | sed 's_.*_route & reject;_' > /etc/bird/Twitter.txt
|
||||||
|
cat /opt/blacklist/list/Telegram.lst | sed 's_.*_route & reject;_' > /etc/bird/Telegram.txt
|
||||||
|
cat /opt/blacklist/list/ChatGPT.lst | sed 's_.*_route & reject;_' > /etc/bird/ChatGPT.txt
|
||||||
|
cat /opt/blacklist/list/CloudFlare.lst | sed 's_.*_route & reject;_' > /etc/bird/CloudFlare.txt
|
||||||
|
/usr/sbin/birdc configure;
|
||||||
|
logger "BGP list reconfigured";
|
||||||
|
echo "Configure bird done"
|
||||||
|
echo $new > /opt/blacklist/md5.txt;
|
||||||
|
echo "New md5 write"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
echo "MD5 not change"
|
||||||
|
echo "Bird not reconfigure"
|
||||||
|
exit 0
|
||||||
|
```
|
||||||
|
Потом запускаем скрипт
|
||||||
|
```
|
||||||
|
./chklist
|
||||||
|
```
|
||||||
|
Автоматизируем запуск скрипта
|
||||||
|
```
|
||||||
|
crontab -e
|
||||||
|
1
|
||||||
|
```
|
||||||
|
Потом добавьте туда следующую строку
|
||||||
|
```
|
||||||
|
0 0 * * * bash /opt/blacklist/chklist >> /var/log/blacklist.log 2>&1
|
||||||
|
```
|
||||||
|
При внесении изменений
|
||||||
|
```
|
||||||
|
/usr/sbin/birdc configure
|
||||||
|
```
|
||||||
|
|
||||||
106
linux/isc-dhcp.md
Normal file
106
linux/isc-dhcp.md
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
## Настройка DHCP-сервера и NAT-шлюза на базе isc-dhcp-server
|
||||||
|
|
||||||
|
Этот гайд поможет настроить раздачу IP-адресов в локальной сети и организовать доступ в интернет для клиентов через шлюз (Debian/Ubuntu).
|
||||||
|
|
||||||
|
### 1. Установка необходимых пакетов
|
||||||
|
Для работы нам понадобится сам DHCP-сервер и инструменты управления трафиком:
|
||||||
|
```bash
|
||||||
|
apt update
|
||||||
|
apt install isc-dhcp-server iptables
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Настройка сетевых интерфейсов
|
||||||
|
Прежде всего, назначим статический IP-адрес интерфейсу, который смотрит в локальную сеть.
|
||||||
|
Отредактируйте файл `/etc/network/interfaces`:
|
||||||
|
```bash
|
||||||
|
nano /etc/network/interfaces
|
||||||
|
```
|
||||||
|
Добавьте конфигурацию для вашего локального интерфейса (например, `enp4s0`):
|
||||||
|
```text
|
||||||
|
auto enp4s0
|
||||||
|
iface enp4s0 inet static
|
||||||
|
address 172.16.100.1
|
||||||
|
netmask 255.255.255.0
|
||||||
|
```
|
||||||
|
Примените настройки, перезагрузив сеть или подняв интерфейс вручную: `ifup enp4s0`.
|
||||||
|
|
||||||
|
### 3. Конфигурация DHCP-сервера
|
||||||
|
Сделаем резервную копию оригинального конфига и создадим чистый файл:
|
||||||
|
```bash
|
||||||
|
mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.ORIG
|
||||||
|
nano /etc/dhcp/dhcpd.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
Вставьте следующую конфигурацию:
|
||||||
|
```text
|
||||||
|
authoritative;
|
||||||
|
default-lease-time 600;
|
||||||
|
max-lease-time 10000;
|
||||||
|
log-facility local7;
|
||||||
|
|
||||||
|
# Параметры сети для клиентов
|
||||||
|
subnet 172.16.100.0 netmask 255.255.255.0 {
|
||||||
|
range 172.16.100.2 172.16.100.200;
|
||||||
|
option subnet-mask 255.255.255.0;
|
||||||
|
option routers 172.16.100.1; # IP этого сервера
|
||||||
|
option domain-name-servers 8.8.8.8, 8.8.4.4; # Внешние DNS (Google)
|
||||||
|
|
||||||
|
# Пример резервации IP по MAC-адресу
|
||||||
|
host special-device {
|
||||||
|
hardware ethernet 00:11:22:33:44:55;
|
||||||
|
fixed-address 172.16.100.250;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Выбор интерфейса для прослушивания
|
||||||
|
Укажите DHCP-серверу, на каком интерфейсе ожидать запросы.
|
||||||
|
Отредактируйте `/etc/default/isc-dhcp-server`:
|
||||||
|
```bash
|
||||||
|
nano /etc/default/isc-dhcp-server
|
||||||
|
```
|
||||||
|
Найдите строку и впишите ваш локальный интерфейс:
|
||||||
|
```text
|
||||||
|
INTERFACESv4="enp4s0"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Настройка маршрутизации (NAT)
|
||||||
|
Чтобы клиенты могли выходить в интернет через этот сервер, нужно включить пересылку пакетов в ядре и настроить NAT в iptables.
|
||||||
|
|
||||||
|
**Включаем IP Forwarding:**
|
||||||
|
```bash
|
||||||
|
sysctl -w net.ipv4.ip_forward=1
|
||||||
|
# Чтобы настройка сохранилась после перезагрузки:
|
||||||
|
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
**Настраиваем NAT (Маскарад):**
|
||||||
|
Укажите ваш **внешний** интерфейс (который смотрит в интернет, например `enp3s0`):
|
||||||
|
```bash
|
||||||
|
iptables -t nat -A POSTROUTING -o enp3s0 -j MASQUERADE
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. Запуск и проверка
|
||||||
|
Перезапустите DHCP-сервер для применения всех настроек:
|
||||||
|
```bash
|
||||||
|
systemctl restart isc-dhcp-server
|
||||||
|
systemctl status isc-dhcp-server
|
||||||
|
```
|
||||||
|
|
||||||
|
Теперь клиенты в локальной сети будут получать IP-адреса и выходить в интернет через ваш шлюз.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Дополнение: Сохранение правил NAT (iptables-persistent)
|
||||||
|
По умолчанию правила `iptables` сбрасываются после перезагрузки. Чтобы NAT работал всегда, используйте утилиту `iptables-persistent`:
|
||||||
|
|
||||||
|
1. Установите пакет:
|
||||||
|
```bash
|
||||||
|
apt install iptables-persistent
|
||||||
|
```
|
||||||
|
*(Во время установки выберите **Yes**, чтобы сохранить текущие правила v4).*
|
||||||
|
|
||||||
|
2. Если вы изменили правила позже, обновите сохраненный конфиг вручную:
|
||||||
|
```bash
|
||||||
|
iptables-save > /etc/iptables/rules.v4
|
||||||
|
```
|
||||||
17
proxy.md
17
proxy.md
@@ -24,8 +24,12 @@ SNI: то, что вы получили из вывода последнего
|
|||||||
Get New Cert
|
Get New Cert
|
||||||
|
|
||||||
Подтверждаем и проверяем наш новый, рабочий инбаунд
|
Подтверждаем и проверяем наш новый, рабочий инбаунд
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Так-же в качестве транспорта можно использовать xHTTP (все поля не трогать). Клиент для xHTTP (v2RayN) для TCP (NekoBox).
|
||||||
|
|
||||||
|
|
||||||
### Для настройки Double-Proxy
|
### Для настройки Double-Proxy
|
||||||
Копируем ссылку любого нашего клиента
|
Копируем ссылку любого нашего клиента
|
||||||
Создаём инбаунд и клиента на РУ сервере
|
Создаём инбаунд и клиента на РУ сервере
|
||||||
@@ -37,4 +41,15 @@ Network TCP, UDP
|
|||||||
inbound Tags (выбираем теги наших инбаундов, которые будут иметь возможность шагать за рубеж)
|
inbound Tags (выбираем теги наших инбаундов, которые будут иметь возможность шагать за рубеж)
|
||||||
outbound tag, (выбираем наш аутбаунд)
|
outbound tag, (выбираем наш аутбаунд)
|
||||||
```
|
```
|
||||||
Сохраняем, рестартим xray и радуемся жизни
|
Сохраняем, рестартим xray и радуемся жизни
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
curl -fsSL "https://raw.githubusercontent.com/Loorrr293/Auto_IPtables/main/install.sh" | sudo bash
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
239
remna.md
Normal file
239
remna.md
Normal file
@@ -0,0 +1,239 @@
|
|||||||
|
# 🖥 Установка Remna на основную ноду и настройка агентов
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🟢 Установка панели на сервер
|
||||||
|
|
||||||
|
### 1️⃣ Установка Docker
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo curl -fsSL https://get.docker.com | sh
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2️⃣ Установка обязательных файлов
|
||||||
|
|
||||||
|
Создаем директорию проекта:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir /opt/remnawave && cd /opt/remnawave
|
||||||
|
```
|
||||||
|
|
||||||
|
Скачиваем необходимые файлы:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -o docker-compose.yml https://raw.githubusercontent.com/remnawave/backend/refs/heads/main/docker-compose-prod.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3️⃣ Настройка `.env` файла
|
||||||
|
|
||||||
|
Создаем секретные ключи и пароли:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sed -i "s/^JWT_AUTH_SECRET=.*/JWT_AUTH_SECRET=$(openssl rand -hex 64)/" .env \
|
||||||
|
&& sed -i "s/^JWT_API_TOKENS_SECRET=.*/JWT_API_TOKENS_SECRET=$(openssl rand -hex 64)/" .env
|
||||||
|
|
||||||
|
sed -i "s/^METRICS_PASS=.*/METRICS_PASS=$(openssl rand -hex 64)/" .env \
|
||||||
|
&& sed -i "s/^WEBHOOK_SECRET_HEADER=.*/WEBHOOK_SECRET_HEADER=$(openssl rand -hex 64)/" .env
|
||||||
|
```
|
||||||
|
|
||||||
|
Рекомендуется изменить пароль PostgreSQL:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pw=$(openssl rand -hex 24) \
|
||||||
|
&& sed -i "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$pw/" .env \
|
||||||
|
&& sed -i "s|^\(DATABASE_URL=\"postgresql://postgres:\)[^\@]*\(@.*\)|\1$pw\2|" .env
|
||||||
|
```
|
||||||
|
|
||||||
|
Открой `.env` и отредактируй:
|
||||||
|
|
||||||
|
```text
|
||||||
|
FRONT_END_DOMAIN
|
||||||
|
SUB_PUBLIC_DOMAIN
|
||||||
|
```
|
||||||
|
|
||||||
|
- **FRONT_END_DOMAIN** — домен панели, например: `panel.yourdomain.com`
|
||||||
|
- **SUB_PUBLIC_DOMAIN** — обычно тот же домен + `/api/sub`, например: `panel.yourdomain.com/api/sub`
|
||||||
|
|
||||||
|
Файл находится здесь:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /opt/remnawave && nano .env
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4️⃣ Запуск контейнеров
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up -d && docker compose logs -f -t
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 Настройка Reverse Proxy
|
||||||
|
|
||||||
|
### 1️⃣ Установка зависимостей
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apt-get install cron socat
|
||||||
|
```
|
||||||
|
|
||||||
|
Установка acme.sh:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl https://get.acme.sh | sh -s email=EMAIL && source ~/.bashrc
|
||||||
|
```
|
||||||
|
|
||||||
|
> Используй валидный email.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2️⃣ Создание папки для сертификатов
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p /opt/remnawave/nginx && cd /opt/remnawave/nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
Выпуск сертификата (не используйте `.ru`, `.su`, `.рф`):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
acme.sh --issue --standalone -d 'DOMAIN' \
|
||||||
|
--key-file /opt/remnawave/nginx/privkey.key \
|
||||||
|
--fullchain-file /opt/remnawave/nginx/fullchain.pem \
|
||||||
|
--alpn --tlsport 8443
|
||||||
|
```
|
||||||
|
|
||||||
|
> Можно использовать Nginx Proxy Manager для других сервисов.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3️⃣ Конфигурация Nginx
|
||||||
|
|
||||||
|
Открываем файл:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /opt/remnawave/nginx && nano nginx.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
Вставляем следующий конфиг:
|
||||||
|
|
||||||
|
```nginx
|
||||||
|
upstream remnawave {
|
||||||
|
server remnawave:3000;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
server_name REPLACE_WITH_YOUR_DOMAIN;
|
||||||
|
|
||||||
|
listen 443 ssl reuseport;
|
||||||
|
listen [::]:443 ssl reuseport;
|
||||||
|
http2 on;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_pass http://remnawave;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
# SSL Configuration
|
||||||
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
|
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
|
||||||
|
|
||||||
|
ssl_session_timeout 1d;
|
||||||
|
ssl_session_cache shared:MozSSL:10m;
|
||||||
|
ssl_session_tickets off;
|
||||||
|
ssl_certificate "/etc/nginx/ssl/fullchain.pem";
|
||||||
|
ssl_certificate_key "/etc/nginx/ssl/privkey.key";
|
||||||
|
ssl_trusted_certificate "/etc/nginx/ssl/fullchain.pem";
|
||||||
|
|
||||||
|
ssl_stapling on;
|
||||||
|
ssl_stapling_verify on;
|
||||||
|
resolver 1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=60s;
|
||||||
|
resolver_timeout 2s;
|
||||||
|
|
||||||
|
# Gzip Compression
|
||||||
|
gzip on;
|
||||||
|
gzip_vary on;
|
||||||
|
gzip_proxied any;
|
||||||
|
gzip_comp_level 6;
|
||||||
|
gzip_buffers 16 8k;
|
||||||
|
gzip_http_version 1.1;
|
||||||
|
gzip_min_length 256;
|
||||||
|
gzip_types
|
||||||
|
application/atom+xml
|
||||||
|
application/geo+json
|
||||||
|
application/javascript
|
||||||
|
application/x-javascript
|
||||||
|
application/json
|
||||||
|
application/ld+json
|
||||||
|
application/manifest+json
|
||||||
|
application/rdf+xml
|
||||||
|
application/rss+xml
|
||||||
|
application/xhtml+xml
|
||||||
|
application/xml
|
||||||
|
font/eot
|
||||||
|
font/otf
|
||||||
|
font/ttf
|
||||||
|
image/svg+xml
|
||||||
|
text/css
|
||||||
|
text/javascript
|
||||||
|
text/plain
|
||||||
|
text/xml;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 443 ssl default_server;
|
||||||
|
listen [::]:443 ssl default_server;
|
||||||
|
server_name _;
|
||||||
|
|
||||||
|
ssl_reject_handshake on;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4️⃣ Создание Docker Compose для Nginx
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /opt/remnawave/nginx && nano docker-compose.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
Вставляем:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
remnawave-nginx:
|
||||||
|
image: nginx:1.28
|
||||||
|
container_name: remnawave-nginx
|
||||||
|
hostname: remnawave-nginx
|
||||||
|
volumes:
|
||||||
|
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
|
||||||
|
- ./fullchain.pem:/etc/nginx/ssl/fullchain.pem:ro
|
||||||
|
- ./privkey.key:/etc/nginx/ssl/privkey.key:ro
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- '0.0.0.0:443:443'
|
||||||
|
networks:
|
||||||
|
- remnawave-network
|
||||||
|
|
||||||
|
networks:
|
||||||
|
remnawave-network:
|
||||||
|
name: remnawave-network
|
||||||
|
driver: bridge
|
||||||
|
external: true
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 5️⃣ Запуск Nginx контейнера
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up -d && docker compose logs -f -t
|
||||||
|
```
|
||||||
297
remna_node.md
Normal file
297
remna_node.md
Normal file
@@ -0,0 +1,297 @@
|
|||||||
|
# 🚀 RemnaNode Setup Guide
|
||||||
|
|
||||||
|
> Полное руководство по установке и настройке ноды RemnaNode с использованием Docker
|
||||||
|
> Минимум боли — максимум эстетики ✨
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📦 Установка Docker
|
||||||
|
|
||||||
|
Если Docker ещё не установлен — выполни:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo curl -fsSL https://get.docker.com | sh
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 Шаг 1 — Создание директории проекта
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir /opt/remnanode && cd /opt/remnanode
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ➕ Шаг 2 — Добавление Node
|
||||||
|
|
||||||
|
1. Перейди в:
|
||||||
|
```
|
||||||
|
Nodes → Management
|
||||||
|
```
|
||||||
|
2. Нажми кнопку **➕ Add Node**
|
||||||
|
3. Заполни форму
|
||||||
|
|
||||||
|
### ⚠️ Важно
|
||||||
|
|
||||||
|
- Поле **Node Port** используется **только** для внутренних API-запросов между Panel и Node
|
||||||
|
- Этот порт **не используется** нигде больше
|
||||||
|
|
||||||
|
После заполнения:
|
||||||
|
- Нажми **Copy docker-compose.yml**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧾 Шаг 3 — Создание `docker-compose.yml`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /opt/remnanode && nano docker-compose.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
Вставь скопированную конфигурацию и сохрани файл.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ▶️ Шаг 4 — Запуск контейнеров
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up -d && docker compose logs -f -t
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ Шаг 5 — Завершение настройки
|
||||||
|
|
||||||
|
1. Вернись в панель
|
||||||
|
2. Нажми **Next**
|
||||||
|
3. Выбери нужный **Config Profile**
|
||||||
|
4. Нажми **Create**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔒 Важно
|
||||||
|
|
||||||
|
> Обязательно закрой `NODE_PORT` в firewall
|
||||||
|
> Разреши доступ **только для IP панели**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# ⚙️ Advanced Usage
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🌐 Кастомные GeoSite и GeoIP
|
||||||
|
|
||||||
|
### ⚠️ Важно
|
||||||
|
|
||||||
|
- Названия `*-zapret.dat` — **пример**
|
||||||
|
- Категория `:zapret` — **пример**
|
||||||
|
- Реальные значения могут отличаться
|
||||||
|
|
||||||
|
### Серверный routing
|
||||||
|
|
||||||
|
- Влияет **только на сервер**
|
||||||
|
- **Не влияет** на DIRECT подключения клиентов
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📂 Подключение файлов
|
||||||
|
|
||||||
|
Монтируй файлы в контейнер:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
remnanode:
|
||||||
|
container_name: remnanode
|
||||||
|
hostname: remnanode
|
||||||
|
image: remnawave/node:latest
|
||||||
|
restart: always
|
||||||
|
network_mode: host
|
||||||
|
environment:
|
||||||
|
- NODE_PORT=2222
|
||||||
|
- SECRET_KEY="supersecretkey"
|
||||||
|
volumes:
|
||||||
|
- './geo-zapret.dat:/usr/local/share/xray/geo-zapret.dat'
|
||||||
|
- './ip-zapret.dat:/usr/local/share/xray/ip-zapret.dat'
|
||||||
|
```
|
||||||
|
|
||||||
|
### ⚠️ Осторожно
|
||||||
|
|
||||||
|
- **Не** монтируй всю директорию
|
||||||
|
- Монтируй **только отдельные файлы**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧠 Использование в Xray config
|
||||||
|
|
||||||
|
```json
|
||||||
|
"routing": {
|
||||||
|
"rules": [
|
||||||
|
{
|
||||||
|
"type": "field",
|
||||||
|
"domain": [
|
||||||
|
"ext:geo-zapret.dat:zapret"
|
||||||
|
],
|
||||||
|
"inboundTag": [
|
||||||
|
"VLESS_TCP_REALITY"
|
||||||
|
],
|
||||||
|
"outboundTag": "NOT_RU_OUTBOUND"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "field",
|
||||||
|
"ip": [
|
||||||
|
"ext:ip-zapret.dat:zapret"
|
||||||
|
],
|
||||||
|
"inboundTag": [
|
||||||
|
"VLESS_TCP_REALITY"
|
||||||
|
],
|
||||||
|
"outboundTag": "NOT_RU_OUTBOUND"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 📜 Логи Node
|
||||||
|
|
||||||
|
## 📁 Подключение логов
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
remnanode:
|
||||||
|
container_name: remnanode
|
||||||
|
hostname: remnanode
|
||||||
|
image: remnawave/node:latest
|
||||||
|
restart: always
|
||||||
|
network_mode: host
|
||||||
|
environment:
|
||||||
|
- NODE_PORT=2222
|
||||||
|
- SECRET_KEY="supersecretkey"
|
||||||
|
volumes:
|
||||||
|
- '/var/log/remnanode:/var/log/remnanode'
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧠 Конфиг Xray
|
||||||
|
|
||||||
|
```json
|
||||||
|
"log": {
|
||||||
|
"error": "/var/log/remnanode/error.log",
|
||||||
|
"access": "/var/log/remnanode/access.log",
|
||||||
|
"loglevel": "warning"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📂 Создание директории
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p /var/log/remnanode
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 Logrotate
|
||||||
|
|
||||||
|
### Установка
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt update && sudo apt install logrotate
|
||||||
|
```
|
||||||
|
|
||||||
|
### Конфиг
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nano /etc/logrotate.d/remnanode
|
||||||
|
```
|
||||||
|
|
||||||
|
Вставь:
|
||||||
|
|
||||||
|
```conf
|
||||||
|
/var/log/remnanode/*.log {
|
||||||
|
size 50M
|
||||||
|
rotate 5
|
||||||
|
compress
|
||||||
|
missingok
|
||||||
|
notifempty
|
||||||
|
copytruncate
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Проверка
|
||||||
|
|
||||||
|
```bash
|
||||||
|
logrotate -vf /etc/logrotate.d/remnanode
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 🔐 SSL сертификаты для Xray
|
||||||
|
|
||||||
|
## ⚠️ Внимание
|
||||||
|
|
||||||
|
> Это нужно **только если используешь TLS**
|
||||||
|
> Например: `VLESS-Vision-TLS`
|
||||||
|
> Для Reality — **не требуется**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📂 Монтирование сертификатов
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
remnawave:
|
||||||
|
image: remnawave/backend:latest
|
||||||
|
container_name: 'remnawave'
|
||||||
|
hostname: remnawave
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- '127.0.0.1:3000:3000'
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
networks:
|
||||||
|
- remnawave-network
|
||||||
|
volumes:
|
||||||
|
- '/opt/remnawave/nginx:/var/lib/remnawave/configs/xray/ssl'
|
||||||
|
depends_on:
|
||||||
|
remnawave-db:
|
||||||
|
condition: service_healthy
|
||||||
|
remnawave-redis:
|
||||||
|
condition: service_healthy
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ℹ️ Как это работает
|
||||||
|
|
||||||
|
- Panel автоматически читает файлы
|
||||||
|
- Отправляет сертификаты на Node
|
||||||
|
- Используется директория:
|
||||||
|
|
||||||
|
```
|
||||||
|
/var/lib/remnawave/configs/xray/ssl/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧠 Использование в Xray
|
||||||
|
|
||||||
|
```json
|
||||||
|
"certificates": [
|
||||||
|
{
|
||||||
|
"keyFile": "/var/lib/remnawave/configs/xray/ssl/privkey.key",
|
||||||
|
"certificateFile": "/var/lib/remnawave/configs/xray/ssl/fullchain.pem"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚠️ Важно
|
||||||
|
|
||||||
|
- `.key` — приватный ключ
|
||||||
|
- `.pem` — сертификат
|
||||||
|
|
||||||
|
👉 Не перепутай расширения 🚀
|
||||||
Reference in New Issue
Block a user