Skip to content
  • Категории
  • Последние
  • Метки
  • Популярные
  • World
  • Пользователи
  • Группы
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • По умолчанию (Darkly)
  • Нет скина
Collapse

База знаний (кластер NBICS)

  1. Главная
  2. Другие сервисы
  3. FRP (Fast Reverse Proxy) - обратный прокси-сервер

FRP (Fast Reverse Proxy) - обратный прокси-сервер

Запланировано Прикреплена Закрыта Перенесена Другие сервисы
4 Сообщения 1 Posters 5 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • A Не в сети
    A Не в сети
    Admin
    написал отредактировано
    #1

    FRP — это быстрый обратный прокси-сервер, позволяющий сделать локальный сервер, расположенный за NAT или брандмауэром, доступным из интернета. В настоящее время он поддерживает протоколы TCP и UDP, а также HTTP и HTTPS, что позволяет перенаправлять запросы к внутренним сервисам через доменное имя.

    • Что умеет: Пробрасывает TCP, UDP, HTTP и HTTPS.
    • Веб-интерфейс: У него есть встроенный Dashboard (на порту 7500 по умолчанию), где можно смотреть состояние всех туннелей, трафик и ошибки.
    • Плюс: Очень легкий, работает на одном конфиг-файле (.toml).
    • Сложность: Низкая (похоже на настройку SSH, но удобнее).
    1 ответ Последний ответ
    0
    • A Не в сети
      A Не в сети
      Admin
      написал отредактировано Admin
      #2

      Задача - сделать обратный туннель наподобие autossh, чтобы был постоянный доступ к серверу, у которого временно "слетел" внешний ip-адрес, или случайно заблокированы файрволом порты, необходимые для прямого доступа к серверу извне. При этом, исходящий трафик не заблокирован, то есть доступ в интернет у сервера есть.
      Назовём этот сервер "Сервер А1".


      Для этого нужен второй сервер, не имеющий проблем с прямым доступом. Этот сервер обозначим как "Сервер Б".
      К серверу "Сервер Б" можно подключать не только "Сервер А1", но и "Сервер А2", "Сервер А3", и так далее.


      Важный нюанс:
      Когда вы подключаетесь через FRP, вы фактически идете по цепочке:

      Ваш компьютер -> Сервер Б -> Туннель FRP -> Сервер А1 (порт 22).

      1 ответ Последний ответ
      0
      • A Не в сети
        A Не в сети
        Admin
        написал отредактировано Admin
        #3

        Пошаговая инструкция по установке и настройке FRP.


        Шаг 1: Скачивание (на обоих серверах)

        Внимание!
        SSH-сервер должен быть установлен на всех серверах, если его нет, устанавливаем:

        sudo apt install openssh-server
        

        Далее, скачиваем FRP.

        FRP — это один архив с двумя файлами: frps (server) и frpc (client).

        1. Зайдите на страницу релизов GitHub.
        2. Скопируйте ссылку на актуальную версию для Linux (обычно _linux_amd64.tar.gz).
        3. Скачайте и распакуйте на обоих серверах.

        Пример:

        # Переходим в домашнюю папку
        cd ~
        # Скачиваем архив (версия 0.61.1 актуальна на текущий момент)
        wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz
        tar -xvzf frp_0.61.1_linux_amd64.tar.gz
        # Для удобства переименуем папку
        mv frp_0.61.1_linux_amd64 frp
        
        

        Шаг 2: Настройка сервера "Сервер Б" (Стабильный) — FRPS

        Здесь нам нужен файл конфигурации frps.toml (Server).

        1. Отредактируйте конфиг: mcedit frps.toml
        2. Вставь следующее:
        bindPort = 7000       # Порт, по которому "Сервер А1" будет стучаться к "Сервер Б"
        
        [auth]
        token = "<секретный_токен_связи>"
                                                                                                                                                                                                                          
        [webServer]                                                                                                                                                                                                       
        addr = "0.0.0.0"                                                                                                                                                                                                  
        port = 7500
        user = "admin"
        password = "<пароль_админа>"
        
        

        Секретный токен связи можно создать командой

        cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1
        

        1. Запуск:
        ./frps -c frps.toml
        
        

        (Если всё ок, панель будет доступна по адресу http://IP_SERVER_B:7500).


        Шаг 3: Настройка "Сервер А1" (Проблемный) — FRPC

        Здесь нам нужен файл frpc.toml (Client).

        1. Отредактируйте конфиг: mcedit frpc.toml
        2. Вставьте следующее:
        serverAddr = "<IP_SERVER_B>"
        serverPort = 7000
        
        [auth]
        token = "секретный_токен_связи"   # Должен совпадать с тем, что на "Сервер Б"
        
        [[proxies]]
        name = "ssh-tunnel"   # Имя выбирайте любое, чтобы отличать по именам сервера
        type = "tcp"
        localIP = "127.0.0.1"
        localPort = 22                # Локальный SSH
        remotePort = 2222        # Порт, который откроется на "Сервер Б" для входа
        
        

        Внимание!

        localPort = 22 Это для стандартных случаев.
        Посмотрите, на каком порту работает ssh вашего сервера, и вставьте нужный номер порта.

        1. Запуск:
        ./frpc -c frpc.toml
        
        

        Шаг 4: Автоматизация (Systemd)

        Чтобы всё работало само после перезагрузки, создадим сервисы.

        На Сервере Б (Server):
        Создай файл /etc/systemd/system/frps.service:

        [Unit]
        Description=FRP Server
        After=network.target
        
        [Service]
        Type=simple
        User=USER
        Restart=on-failure
        RestartSec=5s
        ExecStart=/home/USER/frp/frps -c /home/USER/frp/frps.toml
        
        [Install]
        WantedBy=multi-user.target
        
        

        Вместо USER вставьте имя пользователя, от которого запускается FRPS

        На Сервере А1 (Client):
        Создайте файл /etc/systemd/system/frpc.service:

        [Unit]
        Description=FRP Client
        After=network-online.target
        
        [Service]
        Type=simple
        User=USER
        ExecStart=/home/USER/frp/frpc -c /home/USER/frp/frpc.toml
        Restart=always
        RestartSec=10s
        
        [Install]
        WantedBy=multi-user.target
        
        

        Вместо USER вставьте имя пользователя, от которого запускается FRPC

        Не забудьте прописать полные пути к бинарникам и конфигам! После этого:

        sudo systemctl daemon-reload
        sudo systemctl enable --now frps  # На сервере "Сервер Б"
        
        sudo systemctl daemon-reload
        sudo systemctl enable --now frpc  # На сервере "Сервер А1"
        

        Как пользоваться?

        Теперь, чтобы попасть на Сервер А1, вам достаточно подключиться к Серверу Б на порт 2222:

        ssh user_A1@IP_SERVER_B -p 2222
        
        

        Внимание!
        Вводите пароль именно для сервера "Сервер А1"

        Почему FRP лучше Autossh в данном конкретном случае?

        1. Авто-переподключение: FRP гораздо «умнее» восстанавливает сессии при смене IP.
        2. Веб-панель: Вы всегда видите в браузере, подключен ли "Сервер А1" прямо сейчас.
        3. Масштабируемость: Захотите пробросить веб-сайт или базу данных — просто добавляете пару строк в frpc.toml без перезапуска SSH-процессов.

        Чтобы зайти в веб-интерфейс:
        Откройте в браузере http://<IP_СЕРВЕРА_Б>:7500. Вы увидите в разделе "Proxies -> TCP", что туннель ssh-tunnel активен (Online).

        1 ответ Последний ответ
        0
        • A Не в сети
          A Не в сети
          Admin
          написал отредактировано
          #4

          Разные вопросы и нюансы


          1. Как часто серверы «опрашивают» основной?

          FRP работает не совсем как «опрос» (poll), а как постоянное TCP-соединение.

          • Принцип: Клиент (frpc) устанавливает соединение с сервером (frps) при старте и удерживает его открытым. Это не «запрос-ответ», а «труба», которая всегда открыта.
          • Heartbeat (пульс): Чтобы соединение не разрывалось из-за бездействия или NAT-таймаутов, внутри FRP есть механизм heartbeat. По умолчанию он отправляет маленькие контрольные пакеты примерно каждые 30 секунд. Это минимальная нагрузка на сеть — доли килобайт.
          • Настройка: Вы можете регулировать это в frpc.toml параметром heartbeatInterval (в секундах). Если сеть очень нестабильная, можно поставить меньше, если всё хорошо — оставить по умолчанию.

          2. Сколько серверов можно «повесить» на один основной?

          Здесь всё зависит от ресурсов Сервера Б (Стабильного). FRP крайне эффективен, так как написан на Go.

          • Оперативная память (RAM): Один клиент frpc потребляет очень мало (от 5 до 20 МБ в зависимости от количества прокси). Если у вас 1 ГБ ОЗУ на Сервере Б, вы легко можете держать сотни (200–500+) подключенных серверов.
          • Процессор (CPU): Пока туннели простаивают, нагрузка близка к нулю. Она вырастает только тогда, когда по туннелю идет реальный трафик (например, вы копируете файлы через SSH или передаёте данные).
          • Сетевой канал (Bandwidth): Это узкое место. Если 50 серверов начнут одновременно качать гигабайты данных через Сервер Б, он станет "бутылочным горлышком".

          Есть ли предел?

          Технического лимита внутри FRP практически нет, но есть ограничения операционной системы (Linux):

          • Лимит файлов (File Descriptors): Каждое соединение — это открытый файл. В Linux по умолчанию лимит обычно 1024, но его легко поднять в настройках ulimit или через системные настройки sysctl.
          • Суммарная пропускная способность: Один мощный сервер (например, с 2–4 ядрами и 4 ГБ ОЗУ) легко "переварит" 1000+ туннелей в режиме ожидания.

          Итого:

          1. Нагрузка на сеть: Мизерная (контрольные пакеты раз в 30 секунд).
          2. Масштабирование: Можно цеплять сотни клиентов.
          3. Совет: Если планируете более 50–100 серверов, обязательно добавьте в настройки [common] параметр maxPoolCount на Сервере Б, чтобы управлять пулом соединений и не забить все порты.

          Если планируете подключать целую «ферму» из десятков серверов, лучше заранее выделить отдельный конфиг для каждого или использовать динамическую конфигурацию (когда frps берет настройки из БД или отдельной папки), чтобы не раздувать один файл до бесконечности.

          1 ответ Последний ответ
          0
          Ответить
          • Ответить, создав новую тему
          Авторизуйтесь, чтобы ответить
          • Сначала старые
          • Сначала новые
          • По количеству голосов


          • Войти

          • Login or register to search.
          Powered by NodeBB Contributors
          • Первое сообщение
            Последнее сообщение
          0
          • Категории
          • Последние
          • Метки
          • Популярные
          • World
          • Пользователи
          • Группы