Добавлены функции для тестирования доступа к API reg.ru и обработки ошибок. Обновлены сообщения об ошибках с рекомендациями по устранению неполадок. Увеличен таймаут для запросов к API.
This commit is contained in:
170
docs/en/API_TROUBLESHOOTING_EN.md
Normal file
170
docs/en/API_TROUBLESHOOTING_EN.md
Normal file
@@ -0,0 +1,170 @@
|
||||
# 🔧 reg.ru API Troubleshooting Guide
|
||||
|
||||
## ❌ Issue: "Access to API from this IP denied"
|
||||
|
||||
This error occurs when reg.ru API is blocked for your IP address due to security settings.
|
||||
|
||||
### 🔍 Diagnostics
|
||||
|
||||
First, determine your current IP address:
|
||||
|
||||
```bash
|
||||
# Method 1: Using script's built-in function
|
||||
sudo letsencrypt-regru --test-api
|
||||
|
||||
# Method 2: Using curl
|
||||
curl -s https://ipinfo.io/ip
|
||||
|
||||
# Method 3: Using website
|
||||
# Open https://whatismyipaddress.com/
|
||||
```
|
||||
|
||||
### ✅ Solution
|
||||
|
||||
#### Method 1: Add IP to whitelist (recommended)
|
||||
|
||||
1. **Login to reg.ru control panel**
|
||||
- Open https://www.reg.ru/
|
||||
- Login to your account
|
||||
|
||||
2. **Navigate to API settings**
|
||||
- Menu → "Settings" (Настройки)
|
||||
- Section "Security" (Безопасность)
|
||||
- Subsection "API"
|
||||
|
||||
3. **Configure IP access**
|
||||
- Find "IP Restrictions" section
|
||||
- Click "Add IP address"
|
||||
- Enter your current IP address
|
||||
- Save settings
|
||||
|
||||
4. **Test settings**
|
||||
```bash
|
||||
sudo letsencrypt-regru --test-api
|
||||
```
|
||||
|
||||
#### Method 2: Disable IP restrictions (less secure)
|
||||
|
||||
⚠️ **WARNING**: This reduces your account security!
|
||||
|
||||
1. In reg.ru API settings find "IP Restrictions"
|
||||
2. Disable "Allow access only from specified IPs" option
|
||||
3. Save settings
|
||||
|
||||
### 🔒 Security Recommendations
|
||||
|
||||
1. **Use static IP**
|
||||
- If you have dynamic IP, consider purchasing static IP
|
||||
- Or regularly update allowed IP list
|
||||
|
||||
2. **Limit API access**
|
||||
- Add only necessary IP addresses
|
||||
- Regularly review and clean up the list
|
||||
|
||||
3. **Use strong passwords**
|
||||
- Complex password for reg.ru account
|
||||
- Two-factor authentication if available
|
||||
|
||||
## ❌ Issue: "Invalid username or password"
|
||||
|
||||
### ✅ Solution
|
||||
|
||||
1. **Check credentials**
|
||||
```bash
|
||||
sudo nano /etc/letsencrypt-regru/config.json
|
||||
```
|
||||
|
||||
Make sure you have correct:
|
||||
- `regru_username` - reg.ru login
|
||||
- `regru_password` - reg.ru password
|
||||
|
||||
2. **Check file permissions**
|
||||
```bash
|
||||
sudo chmod 600 /etc/letsencrypt-regru/config.json
|
||||
sudo chown root:root /etc/letsencrypt-regru/config.json
|
||||
```
|
||||
|
||||
3. **Test connection**
|
||||
```bash
|
||||
sudo letsencrypt-regru --test-api
|
||||
```
|
||||
|
||||
## ❌ Issue: Connection timeout
|
||||
|
||||
### ✅ Solution
|
||||
|
||||
1. **Check internet connection**
|
||||
```bash
|
||||
ping -c 4 api.reg.ru
|
||||
curl -I https://api.reg.ru/api/regru2
|
||||
```
|
||||
|
||||
2. **Check firewall**
|
||||
```bash
|
||||
# Temporarily disable firewall for testing
|
||||
sudo ufw status
|
||||
sudo iptables -L
|
||||
```
|
||||
|
||||
3. **Check proxy settings**
|
||||
- Ensure `HTTP_PROXY`, `HTTPS_PROXY` environment variables don't interfere
|
||||
|
||||
## 🧪 API Testing
|
||||
|
||||
Always test API before use:
|
||||
|
||||
```bash
|
||||
# Full API test
|
||||
sudo letsencrypt-regru --test-api
|
||||
|
||||
# Test with verbose output
|
||||
sudo letsencrypt-regru --test-api -v
|
||||
|
||||
# Check configuration
|
||||
sudo letsencrypt-regru --check
|
||||
```
|
||||
|
||||
## 📞 Getting Help
|
||||
|
||||
### reg.ru Technical Support
|
||||
|
||||
- **Email**: support@reg.ru
|
||||
- **Phone**: 8 (495) 580-11-11
|
||||
- **Online chat**: on reg.ru website
|
||||
|
||||
### Documentation
|
||||
|
||||
- **reg.ru API**: https://www.reg.ru/support/api
|
||||
- **Usage examples**: https://www.reg.ru/support/api/examples
|
||||
- **API FAQ**: https://www.reg.ru/support/api/faq
|
||||
|
||||
### Diagnostic Logs
|
||||
|
||||
Always include logs when contacting support:
|
||||
|
||||
```bash
|
||||
# Enable verbose logs
|
||||
sudo letsencrypt-regru --test-api -v
|
||||
|
||||
# View recent logs
|
||||
sudo tail -n 50 /var/log/letsencrypt-regru/letsencrypt_regru.log
|
||||
|
||||
# Certbot logs
|
||||
sudo tail -n 50 /var/log/letsencrypt/letsencrypt.log
|
||||
```
|
||||
|
||||
## 🔄 Alternative DNS Providers
|
||||
|
||||
If reg.ru API issues are critical, consider alternatives:
|
||||
|
||||
1. **Cloudflare** - excellent API, free DNS
|
||||
2. **Route53** (AWS) - powerful but paid
|
||||
3. **DigitalOcean DNS** - simple and reliable
|
||||
4. **Google Cloud DNS** - GCP integration
|
||||
|
||||
These require script modification or other certbot plugins.
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: October 29, 2025
|
||||
**Document Version**: 1.0
|
||||
170
docs/ru/API_TROUBLESHOOTING.md
Normal file
170
docs/ru/API_TROUBLESHOOTING.md
Normal file
@@ -0,0 +1,170 @@
|
||||
# 🔧 Решение проблем с API reg.ru
|
||||
|
||||
## ❌ Проблема: "Access to API from this IP denied"
|
||||
|
||||
Эта ошибка возникает, когда API reg.ru заблокирован для вашего IP адреса из соображений безопасности.
|
||||
|
||||
### 🔍 Диагностика
|
||||
|
||||
Сначала определите ваш текущий IP адрес:
|
||||
|
||||
```bash
|
||||
# Способ 1: Через встроенную функцию скрипта
|
||||
sudo letsencrypt-regru --test-api
|
||||
|
||||
# Способ 2: Через curl
|
||||
curl -s https://ipinfo.io/ip
|
||||
|
||||
# Способ 3: Через веб-сайт
|
||||
# Откройте https://whatismyipaddress.com/
|
||||
```
|
||||
|
||||
### ✅ Решение
|
||||
|
||||
#### Метод 1: Добавить IP в белый список (рекомендуется)
|
||||
|
||||
1. **Войдите в личный кабинет reg.ru**
|
||||
- Откройте https://www.reg.ru/
|
||||
- Войдите в личный кабинет
|
||||
|
||||
2. **Перейдите в настройки API**
|
||||
- Меню → "Настройки"
|
||||
- Раздел "Безопасность"
|
||||
- Подраздел "API"
|
||||
|
||||
3. **Настройте доступ по IP**
|
||||
- Найдите раздел "Ограничения по IP"
|
||||
- Нажмите "Добавить IP адрес"
|
||||
- Введите ваш текущий IP адрес
|
||||
- Сохраните настройки
|
||||
|
||||
4. **Проверьте настройки**
|
||||
```bash
|
||||
sudo letsencrypt-regru --test-api
|
||||
```
|
||||
|
||||
#### Метод 2: Отключить ограничения по IP (менее безопасно)
|
||||
|
||||
⚠️ **ВНИМАНИЕ**: Это снижает безопасность вашего аккаунта!
|
||||
|
||||
1. В настройках API reg.ru найдите "Ограничения по IP"
|
||||
2. Отключите опцию "Разрешить доступ только с указанных IP"
|
||||
3. Сохраните настройки
|
||||
|
||||
### 🔒 Рекомендации по безопасности
|
||||
|
||||
1. **Используйте статический IP**
|
||||
- Если у вас динамический IP, рассмотрите покупку статического
|
||||
- Или регулярно обновляйте список разрешенных IP
|
||||
|
||||
2. **Ограничьте доступ к API**
|
||||
- Добавляйте только необходимые IP адреса
|
||||
- Регулярно проверяйте и очищайте список
|
||||
|
||||
3. **Используйте сильные пароли**
|
||||
- Сложный пароль для аккаунта reg.ru
|
||||
- Двухфакторная аутентификация если доступна
|
||||
|
||||
## ❌ Проблема: "Invalid username or password"
|
||||
|
||||
### ✅ Решение
|
||||
|
||||
1. **Проверьте учетные данные**
|
||||
```bash
|
||||
sudo nano /etc/letsencrypt-regru/config.json
|
||||
```
|
||||
|
||||
Убедитесь что указаны правильные:
|
||||
- `regru_username` - логин от reg.ru
|
||||
- `regru_password` - пароль от reg.ru
|
||||
|
||||
2. **Проверьте права на файл**
|
||||
```bash
|
||||
sudo chmod 600 /etc/letsencrypt-regru/config.json
|
||||
sudo chown root:root /etc/letsencrypt-regru/config.json
|
||||
```
|
||||
|
||||
3. **Протестируйте подключение**
|
||||
```bash
|
||||
sudo letsencrypt-regru --test-api
|
||||
```
|
||||
|
||||
## ❌ Проблема: Таймаут подключения
|
||||
|
||||
### ✅ Решение
|
||||
|
||||
1. **Проверьте интернет соединение**
|
||||
```bash
|
||||
ping -c 4 api.reg.ru
|
||||
curl -I https://api.reg.ru/api/regru2
|
||||
```
|
||||
|
||||
2. **Проверьте брандмауэр**
|
||||
```bash
|
||||
# Временно отключите firewall для теста
|
||||
sudo ufw status
|
||||
sudo iptables -L
|
||||
```
|
||||
|
||||
3. **Проверьте прокси настройки**
|
||||
- Убедитесь что переменные окружения `HTTP_PROXY`, `HTTPS_PROXY` не мешают
|
||||
|
||||
## 🧪 Тестирование API
|
||||
|
||||
Всегда тестируйте API перед использованием:
|
||||
|
||||
```bash
|
||||
# Полный тест API
|
||||
sudo letsencrypt-regru --test-api
|
||||
|
||||
# Тест с подробным выводом
|
||||
sudo letsencrypt-regru --test-api -v
|
||||
|
||||
# Проверка конфигурации
|
||||
sudo letsencrypt-regru --check
|
||||
```
|
||||
|
||||
## 📞 Получение помощи
|
||||
|
||||
### Техподдержка reg.ru
|
||||
|
||||
- **Email**: support@reg.ru
|
||||
- **Телефон**: 8 (495) 580-11-11
|
||||
- **Онлайн чат**: на сайте reg.ru
|
||||
|
||||
### Документация
|
||||
|
||||
- **API reg.ru**: https://www.reg.ru/support/api
|
||||
- **Примеры использования**: https://www.reg.ru/support/api/examples
|
||||
- **FAQ по API**: https://www.reg.ru/support/api/faq
|
||||
|
||||
### Логи для диагностики
|
||||
|
||||
Всегда включайте логи при обращении в поддержку:
|
||||
|
||||
```bash
|
||||
# Включить подробные логи
|
||||
sudo letsencrypt-regru --test-api -v
|
||||
|
||||
# Посмотреть последние логи
|
||||
sudo tail -n 50 /var/log/letsencrypt-regru/letsencrypt_regru.log
|
||||
|
||||
# Логи certbot
|
||||
sudo tail -n 50 /var/log/letsencrypt/letsencrypt.log
|
||||
```
|
||||
|
||||
## 🔄 Альтернативные DNS провайдеры
|
||||
|
||||
Если проблемы с reg.ru API критичны, рассмотрите альтернативы:
|
||||
|
||||
1. **Cloudflare** - отличный API, бесплатный DNS
|
||||
2. **Route53** (AWS) - мощный, но платный
|
||||
3. **DigitalOcean DNS** - простой и надежный
|
||||
4. **Google Cloud DNS** - интеграция с GCP
|
||||
|
||||
Для них потребуется модификация скрипта или использование других плагинов certbot.
|
||||
|
||||
---
|
||||
|
||||
**Дата обновления**: 29.10.2025
|
||||
**Версия документа**: 1.0
|
||||
@@ -182,7 +182,7 @@ class RegRuAPI:
|
||||
|
||||
try:
|
||||
self.logger.debug(f"Отправка запроса к API: {method}")
|
||||
response = self.session.post(url, data=params)
|
||||
response = self.session.post(url, data=params, timeout=30)
|
||||
response.raise_for_status()
|
||||
|
||||
result = response.json()
|
||||
@@ -192,9 +192,45 @@ class RegRuAPI:
|
||||
return result
|
||||
else:
|
||||
error_msg = result.get("error_text", "Неизвестная ошибка")
|
||||
self.logger.error(f"Ошибка API: {error_msg}")
|
||||
error_code = result.get("error_code", "unknown")
|
||||
|
||||
# Обработка специфических ошибок
|
||||
if "Access to API from this IP denied" in error_msg or error_code == "IP_DENIED":
|
||||
self.logger.error("=" * 80)
|
||||
self.logger.error("🚫 ОШИБКА ДОСТУПА К API REG.RU")
|
||||
self.logger.error("=" * 80)
|
||||
self.logger.error("❌ Доступ к API заблокирован для текущего IP адреса")
|
||||
self.logger.error("")
|
||||
self.logger.error("🔧 РЕШЕНИЕ ПРОБЛЕМЫ:")
|
||||
self.logger.error("1. Войдите в личный кабинет reg.ru")
|
||||
self.logger.error("2. Перейдите в 'Настройки' → 'Безопасность' → 'API'")
|
||||
self.logger.error("3. Добавьте текущий IP адрес в список разрешенных")
|
||||
self.logger.error("4. Или отключите ограничение по IP (менее безопасно)")
|
||||
self.logger.error("")
|
||||
self.logger.error("🌐 Текущий IP можно узнать командой:")
|
||||
self.logger.error(" curl -s https://ipinfo.io/ip")
|
||||
self.logger.error(" или на сайте: https://whatismyipaddress.com/")
|
||||
self.logger.error("")
|
||||
self.logger.error("📚 Документация API: https://www.reg.ru/support/api")
|
||||
self.logger.error("=" * 80)
|
||||
elif "Invalid username or password" in error_msg:
|
||||
self.logger.error("=" * 80)
|
||||
self.logger.error("🔐 ОШИБКА АУТЕНТИФИКАЦИИ")
|
||||
self.logger.error("=" * 80)
|
||||
self.logger.error("❌ Неверные учетные данные")
|
||||
self.logger.error("🔧 Проверьте username и password в конфигурации")
|
||||
self.logger.error("=" * 80)
|
||||
else:
|
||||
self.logger.error(f"Ошибка API reg.ru: {error_msg} (код: {error_code})")
|
||||
|
||||
raise Exception(f"API Error: {error_msg}")
|
||||
|
||||
except requests.exceptions.Timeout:
|
||||
self.logger.error("Таймаут при обращении к API reg.ru (30 сек)")
|
||||
raise
|
||||
except requests.exceptions.ConnectionError:
|
||||
self.logger.error("Ошибка соединения с API reg.ru. Проверьте интернет подключение")
|
||||
raise
|
||||
except requests.exceptions.RequestException as e:
|
||||
self.logger.error(f"Ошибка HTTP запроса: {e}")
|
||||
raise
|
||||
@@ -254,6 +290,55 @@ class RegRuAPI:
|
||||
self.logger.error(f"Не удалось добавить TXT запись: {e}")
|
||||
return False
|
||||
|
||||
def get_current_ip(self) -> str:
|
||||
"""
|
||||
Получение текущего публичного IP адреса
|
||||
|
||||
Returns:
|
||||
IP адрес или 'Неизвестно'
|
||||
"""
|
||||
try:
|
||||
response = requests.get("https://ipinfo.io/ip", timeout=10)
|
||||
if response.status_code == 200:
|
||||
return response.text.strip()
|
||||
except:
|
||||
try:
|
||||
response = requests.get("https://api.ipify.org", timeout=10)
|
||||
if response.status_code == 200:
|
||||
return response.text.strip()
|
||||
except:
|
||||
pass
|
||||
return "Неизвестно"
|
||||
|
||||
def test_api_access(self) -> bool:
|
||||
"""
|
||||
Проверка доступности API reg.ru
|
||||
|
||||
Returns:
|
||||
True если API доступен
|
||||
"""
|
||||
# Получаем текущий IP
|
||||
current_ip = self.get_current_ip()
|
||||
self.logger.info(f"Текущий IP адрес: {current_ip}")
|
||||
self.logger.info("Проверка доступности API reg.ru...")
|
||||
|
||||
try:
|
||||
# Простой запрос для проверки доступа
|
||||
params = {}
|
||||
result = self._make_request("user/get_balance", params)
|
||||
|
||||
if result and result.get("result") == "success":
|
||||
balance = result.get("answer", {}).get("prepay", "Неизвестно")
|
||||
self.logger.info(f"✅ API reg.ru доступен. Баланс: {balance} руб.")
|
||||
return True
|
||||
else:
|
||||
self.logger.error("❌ API reg.ru недоступен")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
self.logger.error(f"❌ Не удалось подключиться к API reg.ru: {e}")
|
||||
return False
|
||||
|
||||
def remove_txt_record(self, domain: str, subdomain: str, txt_value: str) -> bool:
|
||||
"""
|
||||
Удаление TXT записи
|
||||
@@ -268,6 +353,7 @@ class RegRuAPI:
|
||||
"""
|
||||
self.logger.info(f"Удаление TXT записи: {subdomain}.{domain}")
|
||||
|
||||
try:
|
||||
# Сначала получаем список всех записей
|
||||
records = self.get_zone_records(domain)
|
||||
|
||||
@@ -282,20 +368,23 @@ class RegRuAPI:
|
||||
|
||||
if not record_id:
|
||||
self.logger.warning("TXT запись для удаления не найдена")
|
||||
return False
|
||||
# Не считаем это критической ошибкой
|
||||
return True
|
||||
|
||||
params = {
|
||||
"domain": domain,
|
||||
"record_id": record_id
|
||||
}
|
||||
|
||||
try:
|
||||
self._make_request("zone/remove_record", params)
|
||||
self.logger.info("TXT запись успешно удалена")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
self.logger.error(f"Не удалось удалить TXT запись: {e}")
|
||||
return False
|
||||
# Для cleanup hook не критично, если не удалось удалить
|
||||
self.logger.warning("Продолжаем выполнение, несмотря на ошибку удаления")
|
||||
return True
|
||||
|
||||
|
||||
# ==============================================================================
|
||||
@@ -1219,6 +1308,11 @@ def main():
|
||||
help="Создать самоподписанный тестовый сертификат (для разработки и тестирования)",
|
||||
action="store_true"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--test-api",
|
||||
help="Протестировать подключение к API reg.ru",
|
||||
action="store_true"
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
@@ -1233,6 +1327,41 @@ def main():
|
||||
# Настройка логирования
|
||||
logger = setup_logging(config["log_file"], args.verbose)
|
||||
|
||||
# Тестирование API
|
||||
if args.test_api:
|
||||
logger.info("=" * 80)
|
||||
logger.info("ТЕСТИРОВАНИЕ ПОДКЛЮЧЕНИЯ К API REG.RU")
|
||||
logger.info("=" * 80)
|
||||
|
||||
api = RegRuAPI(config["regru_username"], config["regru_password"], logger)
|
||||
|
||||
# Тест подключения
|
||||
if api.test_api_access():
|
||||
logger.info("")
|
||||
logger.info("=" * 80)
|
||||
logger.info("🧪 ДОПОЛНИТЕЛЬНЫЕ ТЕСТЫ")
|
||||
logger.info("=" * 80)
|
||||
|
||||
# Тест получения DNS записей
|
||||
try:
|
||||
records = api.get_zone_records(config["domain"])
|
||||
logger.info(f"✅ Получение DNS записей: успешно ({len(records)} записей)")
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Получение DNS записей: ошибка - {e}")
|
||||
|
||||
logger.info("")
|
||||
logger.info("=" * 80)
|
||||
logger.info("✅ ВСЕ ТЕСТЫ ЗАВЕРШЕНЫ")
|
||||
logger.info("=" * 80)
|
||||
logger.info("API reg.ru готов к использованию!")
|
||||
return 0
|
||||
else:
|
||||
logger.error("=" * 80)
|
||||
logger.error("❌ ТЕСТЫ НЕ ПРОЙДЕНЫ")
|
||||
logger.error("=" * 80)
|
||||
logger.error("Исправьте проблемы с API перед использованием скрипта")
|
||||
return 1
|
||||
|
||||
# Генерация тестового сертификата
|
||||
if args.test_cert:
|
||||
logger.info("=" * 80)
|
||||
@@ -1343,6 +1472,17 @@ def main():
|
||||
logger.info("СКРИПТ УПРАВЛЕНИЯ SSL СЕРТИФИКАТАМИ LET'S ENCRYPT")
|
||||
logger.info("=" * 60)
|
||||
|
||||
# Проверка доступности API reg.ru (кроме режимов только проверки)
|
||||
if not args.check:
|
||||
if not api.test_api_access():
|
||||
logger.error("=" * 80)
|
||||
logger.error("❌ КРИТИЧЕСКАЯ ОШИБКА: API reg.ru недоступен")
|
||||
logger.error("=" * 80)
|
||||
logger.error("Скрипт не может продолжить работу без доступа к API")
|
||||
logger.error("Исправьте проблему и запустите скрипт заново")
|
||||
return 1
|
||||
logger.info("")
|
||||
|
||||
# Выполнение действий
|
||||
if args.check:
|
||||
# Только проверка срока действия
|
||||
|
||||
Reference in New Issue
Block a user