Настройка прокси-сервера с мобильными модемами на Ubuntu 24
Полное руководство по развертыванию высокопроизводительного прокси-сервера с поддержкой LTE модемов. Система предназначена для автоматической ротации IP-адресов через модемы Huawei E3372 и другие USB LTE устройства на базе операционной системы Ubuntu 24.04 LTS.
Требования к серверу
Минимальные характеристики
- Операционная система: Ubuntu 24.04 LTS (обязательно)
- Процессор: 4+ ядра для работы
- Оперативная память: 8+ GB RAM
- Жесткий диск: 50+ GB SSD накопитель
- USB порты: Powered USB хабы с внешним питанием
- Доступ: Root права на сервере
Поддерживаемые модемы
Система протестирована и полностью совместима со следующими моделями мобильных модемов:
- Huawei E3372 в режиме HiLink (основная модель)
- Другие USB LTE модемы с поддержкой Ethernet режима работы
Важно: Модемы должны работать в режиме HiLink (Ethernet), а не в PPP режиме. Режим HiLink позволяет модему работать как сетевое устройство без необходимости установки дополнительных драйверов.
Быстрая установка
Для автоматической установки и настройки всей системы выполните последовательно две команды. Установка не требует дополнительных действий и занимает от 5 до 10 минут в зависимости от скорости интернет-соединения.
Шаг 1: Базовая установка сервера
Первый скрипт устанавливает базовое окружение, включая Node.js, 3proxy и все необходимые системные компоненты:
wget -O - https://mobileproxy.space/downloads/sp/install.sh | bash
Шаг 2: Настройка управления модемами
Второй скрипт создает систему автоматического управления модемами, настраивает маршрутизацию и создает утилиты мониторинга:
wget -O - https://mobileproxy.space/downloads/sp/setup-modem-management.sh | bash
Готово! После завершения установки сервер полностью готов к работе. Система автоматически обнаружит подключенные USB модемы и настроит их для работы через 10-15 секунд после подключения.
Установка базовой системы
Компоненты базовой установки
Первый скрипт install.sh устанавливает и настраивает следующие компоненты для работы прокси-сервера:
- Node.js версии 22 с автоматической установкой всех необходимых npm зависимостей для работы управляющего API
- 3proxy версии 0.9.4 — основной прокси-сервер, скомпилированный из исходного кода с поддержкой всех необходимых протоколов
- Системные утилиты включая curl, wget, mc (файловый менеджер), htop (мониторинг процессов), monit (мониторинг сервисов)
- Инструменты для работы с архивами — zip, gzip, p7zip для обработки обновлений
- Сетевые инструменты — iptables-persistent для сохранения правил файрвола, udhcpc как DHCP клиент для модемов
Создаваемые системные пользователи
Скрипт создает двух системных пользователей для обеспечения безопасности и разделения прав доступа:
- nodejs — пользователь для запуска Node.js приложений с ограниченными правами
- proxy3p — системный пользователь для работы 3proxy сервиса
Автоматическая оптимизация системы
Скрипт выполняет глубокую оптимизацию операционной системы для работы с большим количеством одновременных соединений. Настраиваются следующие аспекты системы:
Сетевые буферы и очереди: Увеличиваются размеры буферов приема и передачи данных до 128 МБ, что критически важно для обработки высокой нагрузки. Максимальная длина очереди соединений устанавливается в 65535, что позволяет серверу обрабатывать тысячи входящих подключений одновременно без потерь.
Управление соединениями: Таблица отслеживания соединений (conntrack) расширяется до 2 миллионов записей, что необходимо для работы с большим количеством модемов. Тайм-ауты соединений оптимизируются: установленные TCP соединения живут 30 минут, а соединения в состоянии TIME_WAIT — всего 30 секунд для быстрого освобождения ресурсов.
TCP оптимизации: Активируется повторное использование сокетов в состоянии TIME_WAIT, что значительно ускоряет работу с частыми переподключениями. Тайм-аут FIN пакетов сокращается до 15 секунд для быстрого закрытия соединений. Очередь SYN пакетов расширяется до 8192 для обработки большого количества новых подключений.
Файловые дескрипторы: Системные лимиты на количество открытых файлов увеличиваются до 1 миллиона как для soft, так и для hard лимитов. Это критически важно для работы прокси-сервера, который держит тысячи одновременных соединений.
Память и swap: Настраивается агрессивность использования swap памяти для предотвращения излишней выгрузки активных процессов. Кеширование файловой системы оптимизируется для быстрого доступа к часто используемым данным.
Сервисы systemd
Создаются и настраиваются три основных системных сервиса для автоматического запуска при загрузке системы:
3proxy.service — основной прокси-сервер. Сервис настроен на автоматический перезапуск при сбоях и запускается от имени пользователя proxy3p.
nodejs-server.service — управляющее API, обеспечивающее контроль модемов, смену IP адресов и мониторинг системы. Сервис работает от имени пользователя nodejs с автоматическим перезапуском при сбоях.
monit — система мониторинга, которая отслеживает работоспособность всех сервисов и автоматически перезапускает их при обнаружении проблем. Monit проверяет доступность портов и потребление ресурсов.
Все сервисы настроены на автоматический запуск при загрузке системы и автоматический перезапуск при сбоях, что обеспечивает высокую надежность работы.
Настройка управления модемами
Система автоматического управления
Второй скрипт setup-modem-management.sh создает комплексную систему для автоматической работы с мобильными модемами. Система включает несколько взаимосвязанных компонентов:
Таблицы маршрутизации
В системе создается таблица маршрутизации в файле /etc/iproute2/rt_tables. Каждая таблица имеет уникальный номер от 100 до 300 и соответствует отдельному модему. Это позволяет каждому модему иметь собственные правила маршрутизации независимо от других устройств.
Автоматическая настройка интерфейсов
При подключении USB модема к серверу система автоматически выполняет следующие действия:
- Обнаруживает новое сетевое устройство через правила udev
- Запускает скрипт настройки интерфейса
- Получает IP адрес от DHCP сервера модема используя быстрый клиент udhcpc
- Создает индивидуальную таблицу маршрутизации для этого модема
- Настраивает правила source-based routing
- Добавляет модем в систему мониторинга
Весь процесс занимает от 10 до 15 секунд, после чего модем полностью готов к работе.
Source-based routing
Система использует продвинутую технологию маршрутизации на основе исходящего IP адреса. Принцип работы следующий:
Каждый модем получает собственную таблицу маршрутизации с уникальными правилами. Когда трафик отправляется от прокси-сервера, система определяет, через какой модем должен идти пакет, основываясь на IP адресе источника. Это позволяет точно контролировать, через какой модем проходит каждое соединение.
Для каждого модема создаются правила, которые направляют весь исходящий трафик с IP адреса модема через шлюз этого конкретного модема. Таким образом достигается полная изоляция трафика разных модемов.
Система резервных каналов
Реализован интеллектуальный механизм автоматического переключения между каналами связи:
Основной канал: Система автоматически выбирает один модем в качестве основного маршрута по умолчанию с метрикой 10. Через этот канал проходит весь трафик, который не привязан к конкретному модему.
Резервные модемы: Все остальные модемы получают метрики от 100 до 300. Они находятся в режиме ожидания и готовы принять трафик в случае сбоя основного канала.
Автоматическое переключение: При обнаружении проблем с основным каналом (отсутствие связи, высокая задержка) система автоматически переключает трафик на резервный модем с наименьшей метрикой. Переключение происходит за 3-5 секунд без потери активных соединений.
Восстановление: Когда основной канал восстанавливается, система возвращает его в активный режим с минимальной задержкой.
Параллельная обработка
Система настройки модемов использует семафоры для ограничения количества одновременных операций. Одновременно может настраиваться максимум 5 модемов, что предотвращает перегрузку системы и конфликты при доступе к сетевым ресурсам. Каждая настройка защищена файлами блокировки для предотвращения дублирующих операций на одном интерфейсе.
Обработка APIPA адресов
Система автоматически определяет ситуации, когда модем получает локальный APIPA адрес (169.254.x.x) вместо реального IP от оператора. В таких случаях выполняется автоматическая повторная попытка получения адреса через DHCP с задержкой в 2-3 секунды. При повторном получении APIPA адреса проблема логируется для последующего анализа.
Команды управления модемами
Утилита modem-manager
Основная консольная утилита для управления всеми аспектами работы модемов. Все команды должны выполняться от имени пользователя root. Утилита предоставляет простой интерфейс для выполнения сложных операций с маршрутизацией и мониторингом.
Просмотр статуса системы
modem-manager status
Выводит полную информацию о состоянии всех модемов в системе:
- Список всех обнаруженных модемов с номерами интерфейсов
- IP адреса каждого модема и соответствующие шлюзы
- Статус сетевых интерфейсов (UP — работает, DOWN — выключен)
- Номера и содержимое таблиц маршрутизации для каждого модема
- Метрики маршрутов (10 — основной, 100-300 — резервные)
- Результаты тестов доступности через curl запросы
- Общее количество активных модемов в системе
Настройка всех модемов
modem-manager setup
Выполняет полную перенастройку всех обнаруженных USB модемов в системе. Эта команда полезна в следующих ситуациях:
- При первом подключении модемов к новому серверу
- После перезагрузки сервера для восстановления всех маршрутов
- При возникновении проблем с маршрутизацией на нескольких модемах
- После изменения сетевой конфигурации сервера
Команда последовательно перенастраивает каждый модем, пересоздает таблицы маршрутизации, обновляет правила и проверяет работоспособность.
Быстрое исправление маршрутов
modem-manager fix
Выполняет быструю проверку и исправление маршрутов без полной перенастройки модемов. Команда анализирует текущее состояние и исправляет следующие проблемы:
- Отсутствующие маршруты в таблицах модемов
- Дублирующиеся записи маршрутов, вызывающие конфликты
- Некорректные метрики, нарушающие приоритеты
- Маршруты по умолчанию в неправильных таблицах
Эта команда работает значительно быстрее полной перенастройки и подходит для оперативного устранения небольших проблем.
Тестирование резервного канала
modem-manager test
Проверяет корректность работы системы автоматического переключения на резервные каналы связи. Тест выполняется в три этапа:
- Временно отключает основной канал с метрикой 10
- Проверяет автоматическое переключение на резервный модем
- Тестирует доступность интернета через резервный канал
- Восстанавливает основной канал и проверяет возврат
Результаты теста показывают время переключения и стабильность работы резервной системы.
Перезапуск прокси-сервера
modem-manager restart-proxy
Выполняет безопасный перезапуск службы 3proxy. Используйте эту команду после внесения изменений в конфигурационные файлы прокси-сервера или при необходимости применить новые настройки без перезагрузки всей системы.
Расширенная диагностика
modem-manager status-verbose
Выводит максимально подробную информацию о состоянии системы для углубленного анализа:
- Все таблицы маршрутизации с полным списком правил
- Детальные маршруты каждого модема включая сети и шлюзы
- Статистика conntrack с количеством отслеживаемых соединений
- История событий udev для отладки проблем с подключением
- Информация о DHCP клиентах для каждого интерфейса
Мониторинг и диагностика
Комплексная диагностика системы
modem-diagnostics.sh
Запускает полную диагностику всех компонентов системы и генерирует детальный отчет о состоянии оборудования и программного обеспечения.
Разделы диагностического отчета
USB ошибки и проблемы с оборудованием: Анализирует системные логи на предмет ошибок USB подсистемы. Особое внимание уделяется протокольным ошибкам (error -71) и таймаутам передачи данных (error -110). Для каждой проблемы определяется конкретный USB порт и частота возникновения ошибок. Критическими считаются порты с более чем 10 ошибками за последние 24 часа.
Отключения сетевых интерфейсов: Отслеживает события Link DOWN за последние 24 часа для каждого модема. Определяет модемы с частыми переподключениями, что может указывать на проблемы с питанием, USB кабелями или неисправность самого модема. Для проблемных интерфейсов выводится их IP адрес и физический USB порт для упрощения поиска.
Ошибки смены IP адресов: Анализирует логи Node.js сервиса на предмет таймаутов при выполнении команд смены IP. Идентифицирует модемы, которые долго отвечают на API запросы или не могут выполнить перезагрузку. Выводится идентификатор модема (EID) и количество ошибок за последние 24 часа.
Системная нагрузка и ресурсы: Показывает текущее значение load average, список самых ресурсоемких процессов по использованию CPU и памяти. Особое внимание уделяется процессу Node.js — если он использует более 80% памяти, выводится критическое предупреждение о необходимости перезапуска.
Общий статус модемов: Выводит количество активных модемов из общего числа подключенных, результаты curl тестов на доступность интернета через каждый модем.
Рекомендации по устранению проблем: На основе анализа всех данных система генерирует список конкретных действий для решения обнаруженных проблем. Если критических проблем не обнаружено, выводится подтверждение нормальной работы системы.
Сохранение отчета
Для сохранения результатов диагностики в файл используйте перенаправление вывода:
modem-diagnostics.sh | tee /root/diagnostics-$(date +%Y%m%d).txt
Это создаст файл с текущей датой, содержащий полный отчет для последующего анализа или отправки в службу поддержки.
Работа с логами системы
Логи настройки модемов: Файл /var/log/modem-setup.log содержит записи о всех операциях по настройке интерфейсов. Здесь можно отследить процесс получения IP адресов, создания таблиц маршрутизации и возникающие при этом ошибки.
Логи проверки маршрутов: Файл /var/log/modem-routes.log ведет учет всех операций по проверке и исправлению маршрутов, включая обнаруженные проблемы и выполненные исправления.
Логи Node.js приложения: Для просмотра работы управляющего API используйте команду journalctl -u nodejs-server -f, которая показывает логи в режиме реального времени.
Логи 3proxy: Прокси-сервер ведет детальные логи всех соединений в директории /home/3p/logs/. Текущий активный лог находится в файле 3proxy.log.
Анализ системных событий
USB события: Для просмотра последних событий USB подсистемы используйте команду dmesg | grep -i usb | tail -30. Это помогает диагностировать проблемы с обнаружением модемов.
Сетевые события: Команда journalctl -k | grep -i network | tail -30 покажет последние события, связанные с сетевыми интерфейсами.
Решение проблем
Модем не обнаруживается системой
Проблема: После подключения USB модема он не появляется в списке сетевых интерфейсов и система его не видит.
Возможные причины:
- Модем не перешел в режим HiLink (остался в режиме хранилища данных)
- Недостаточное питание USB порта
- Неисправность USB кабеля или хаба
- Драйвер модема не загружен в ядре
Пошаговое решение:
- Проверьте, что модем определяется на уровне USB:
lsusb | grep Huawei. Если модем не отображается, проблема в оборудовании. - Проверьте список сетевых интерфейсов:
ip link show. Ищите интерфейсы типа ethX. - Попробуйте вручную настроить обнаруженный интерфейс:
modem-interface-setup.sh eth12(замените eth12 на ваш интерфейс). - Перезагрузите правила udev:
udevadm control --reload-rules && udevadm trigger. - Если ничего не помогает, попробуйте подключить модем к другому USB порту или проверьте питание USB хаба.
Модем получает локальный APIPA адрес
Проблема: Сетевой интерфейс модема получает адрес вида 169.254.x.x вместо нормального IP адреса от оператора.
Причины возникновения:
- DHCP сервер встроенного роутера модема не запустился
- Модем не завершил инициализацию сети оператора
- Проблемы с SIM картой или отсутствие регистрации в сети
- Недостаточное питание приводит к сбоям в работе модема
Методы решения:
- Остановите DHCP клиент для этого интерфейса:
pkill -f "udhcpc.*eth12" - Подождите 2-3 секунды для завершения процесса
- Запустите DHCP клиент заново:
udhcpc -i eth12 -q -n - Если проблема повторяется, физически отключите модем от USB на 10 секунд и подключите снова
- Проверьте веб-интерфейс модема по адресу http://192.168.8.1 для диагностики состояния
Важно: APIPA адреса 169.254.x.x являются локальными и не позволяют выходить в интернет. Модем с таким адресом не функционален для работы прокси.
Высокая нагрузка на процессор
Проблема: Значение load average превышает 10 единиц, сервер работает медленно.
Диагностика причин:
- Запустите утилиту мониторинга процессов:
topилиhtop - Определите процессы с наибольшим потреблением CPU
- Проверьте логи Node.js на циклические ошибки:
journalctl -u nodejs-server | tail -100 - Проверьте количество активных соединений в 3proxy
Решение проблемы:
- Если проблема в Node.js процессе, перезапустите сервис:
systemctl restart nodejs-server - При переполнении таблицы conntrack очистите старые соединения:
conntrack -F - Проверьте наличие DDoS атаки или аномально большого количества запросов
- Рассмотрите возможность масштабирования системы или уменьшения количества модемов на одном сервере
Частые ошибки при смене IP модемов
Проблема: API запросы на смену IP адресов модемов часто завершаются таймаутами.
Возможные причины:
- Модем слишком долго обрабатывает команду перезагрузки (более 30 секунд)
- Нестабильное USB соединение приводит к потере команд
- Проблемы с питанием вызывают сбои при перезагрузке модема
- Конкретная модель модема имеет медленный встроенный процессор
Пошаговое решение:
- Запустите диагностику для выявления проблемных модемов:
modem-diagnostics.sh - В отчете найдите секцию "ТАЙМАУТЫ И ОШИБКИ СМЕНЫ IP" и определите EID проблемных модемов
- Проверьте работоспособность конкретного модема через его веб-интерфейс:
curl http://192.168.8.1/api/device/information - Если модем отвечает медленно или не отвечает вообще, переткните его в другой USB порт с лучшим питанием
- При повторении проблемы рассмотрите замену конкретного модема на новый
Совет: Модемы с более чем 20 ошибками за 24 часа следует считать критически проблемными и заменять в первую очередь.
Прокси-сервер не запускается
Проблема: Служба 3proxy не может запуститься, ошибка при старте systemd сервиса.
Диагностика:
- Проверьте синтаксис конфигурационного файла:
3proxy -t /home/3p/cfg/3proxy.cfg - Просмотрите логи сервиса:
journalctl -u 3proxy -n 50 - Проверьте права доступа к файлам:
ls -la /home/3p/cfg/
Исправление:
- Если проблема в правах доступа, исправьте владельца:
chown -R proxy3p:proxy3p /home/3p/ - При ошибках в конфигурации запустите скрипт установки повторно для пересоздания корректной конфигурации
- Убедитесь, что порты 3128, 1080, 80 не заняты другими процессами:
ss -tulpn | grep -E ':(3128|1080|80)'
Производительность системы
Оптимальная конфигурация
На основе опыта эксплуатации тысячи серверов определены оптимальные параметры для стабильной работы:
| Параметр | Рекомендуемое значение | Описание |
|---|---|---|
| Модемов на сервер | 25-40 штук | Оптимальный баланс нагрузки и стабильности |
| CPU ядра | 4-8 ядер | Для обработки параллельных соединений |
| Оперативная память | 8-16 GB | Для кеширования и обработки соединений |
| USB хабы | Powered USB 3.0 | С внешним блоком питания 5V 10A+ |
Пропускная способность
Реальные показатели производительности системы в production окружении:
- Скорость на модем: 10-20 Mbps в зависимости от оператора и качества сигнала
- Запросов в секунду: 500-1000 запросов на один сервер с 30-40 модемами
- Задержка (latency): 50-300 миллисекунд в зависимости от оператора и расстояния до базовой станции
- Время смены IP: 15-30 секунд на полную перезагрузку модема и получение нового адреса
Системные ограничения
Факторы, влияющие на максимальную производительность:
- USB пропускная способность: Шина USB позволяет подключить до 40-50 модемов на один хаб при использовании качественных кабелей
- Таблица conntrack: Настроена на 2 миллиона одновременных соединений, чего достаточно для работы с 40 модемами под высокой нагрузкой
- Файловые дескрипторы: Лимит 1 миллион позволяет держать сотни тысяч открытых соединений без проблем
- Питание USB: Критический фактор — каждый модем потребляет 0.5-1A, необходимо использовать хабы с мощными блоками питания
Масштабирование системы
Увеличение количества модемов
Для работы с количеством модемов больше 40 на одном сервере рекомендуется:
- Увеличить объем оперативной памяти до 16 GB или более
- Использовать процессоры с 8 и более ядрами
- Установить дополнительные контроллеры USB для распределения нагрузки на шину
- Использовать отдельные блоки питания для каждой группы из 10-15 модемов
Дополнительная информация
Обновление системы
Для обновления компонентов системы до последних версий выполните скрипты установки повторно:
# Обновление базовой системы и Node.js приложения
wget -O - https://mobileproxy.space/downloads/sp/install.sh | bash
# Обновление системы управления модемами
wget -O - https://mobileproxy.space/downloads/sp/setup-modem-management.sh | bash
Безопасно для production: Скрипты разработаны для безопасного повторного запуска. Они не удаляют существующие данные, конфигурации и не прерывают работу активных соединений.
Служба поддержки
Для получения помощи, отчетов об ошибках и предложений по улучшению системы:
- Официальный сайт: https://mobileproxy.space
- Документация: Регулярно обновляется с учетом опыта пользователей
- Диагностика: Используйте
modem-diagnostics.shдля сбора информации перед обращением
Заключение
Представленная система управления мобильными прокси обеспечивает полный цикл автоматизации работы с USB модемами. Ключевые преимущества решения:
- Полная автоматизация: Модемы настраиваются автоматически при подключении за 10-15 секунд без ручного вмешательства
- Высокая масштабируемость: Поддержка до 200 модемов на одном сервере с возможностью горизонтального масштабирования
- Отказоустойчивость: Автоматическое переключение на резервные каналы при сбоях основного соединения
- Простое управление: Интуитивная CLI утилита modem-manager для всех операций
- Комплексная диагностика: Автоматический мониторинг и детальные отчеты о состоянии системы
- Production-ready: Протестировано на ~1000 серверов под реальной нагрузкой
Рекомендация по эксплуатации: Регулярно запускайте команду modem-diagnostics.sh для мониторинга состояния системы. Это позволит выявлять проблемы на ранней стадии и предотвращать серьезные сбои в работе.
Система разработана с учетом лучших практик эксплуатации прокси-серверов и включает все необходимые инструменты для стабильной работы в production окружении. Правильная настройка оборудования (качественные USB хабы с достаточным питанием) в сочетании с автоматизацией обеспечивает надежную работу сервиса ротации IP адресов.