1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/IoTServ-frp

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

frp

Статус сборки

README | Документация на китайском

Что такое frp?

frp — это быстрый обратный прокси, который поможет вам вывести локальный сервер, находящийся за NAT или брандмауэром, на интернет. Сейчас frp поддерживает протоколы tcp, udp, http и https, когда запросы могут быть перенаправлены доменами на обратные веб-сервисы.

Содержание

* [Что я могу сделать с frp? ](#что-я-могу-сделать-с-frp)

Статус

frp находится в разработке и вы можете попробовать его с последней версией релиза. Основная ветка для выпуска стабильной версии, а ветка dev для разработки.

Мы можем изменить любой протокол и не можем гарантировать обратную совместимость. Пожалуйста, проверяйте лог релиза при обновлении.

Архитектура

архитектура

Пример использования

Сначала загрузите последние программы с страницы релизов по вашей ОС и архитектуре.

Установите frps и frps.ini на ваш сервер с публичным IP-адресом.

Установите frpc и frpc.ini на ваш сервер в локальной сети.

Доступ к компьютеру в локальной сети по SSH

  1. Измените frps.ini:
# frps.ini
[common]
bind_port = 7000
  1. Запустите frps:

./frps -c ./frps.ini

  1. Измените frpc.ini, server_addr — это IP-адрес вашего сервера frps:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
  1. Запустите frpc:

./frpc -c ./frpc.ini

  1. Подключитесь к серверу в локальной сети по SSH, предполагая, что имя пользователя — test. ssh -oPort=6000 test@x.x.x.x

Доступ к вашему веб-сервису в локальной сети по пользовательским доменам

Иногда вы хотите выставить локальный веб-сервис за NAT-сетью для тестирования с вашим собственным доменным именем, но не можете разрешить доменное имя на локальный IP-адрес.

Однако, вы можете выставить HTTP или HTTPS сервис с помощью frp.

  1. Измените frps.ini, настройте порт HTTP 8080:
# frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080
  1. Запустите frps:

./frps -c ./frps.ini

  1. Измените frpc.ini и установите IP-адрес удаленного сервера frps как x.x.x.x. local_port — это порт вашего веб-сервиса:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com
  1. Запустите frpc:

./frpc -c ./frpc.ini

  1. Разрешите A запись www.yourdomain.com на IP x.x.x.x или CNAME запись на ваше исходное доменное имя.

  2. Теперь посетите ваш локальный веб-сервис по адресу http://www.yourdomain.com:8080.

Передача запроса DNS-запроса

  1. Измените frps.ini:
# frps.ini
[common]
bind_port = 7000
  1. Запустите frps:

./frps -c ./frps.ini

  1. Измените frpc.ini, установите IP-адрес удаленного сервера frps как x.x.x.x, а также перенаправьте запрос DNS на сервер DNS Google 8.8.8.8:53:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[dns]
type = udp
local_ip = 8.8.8.8
local_port = 53
remote_port = 6000
  1. Запустите frpc:

./frpc -c ./frpc.ini

  1. Отправьте запрос DNS с помощью dig:

dig @x.x.x.x -p 6000 www.google.com### Передача Unix-доменного сокета

Использование TCP-порта для подключения к Unix-доменному сокету, как это делает демон Docker.

Настройте frps так же, как выше.

  1. Запустите frpc с конфигурацией:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[unix_domain_socket]
type = tcp
remote_port = 6000
plugin = unix_domain_socket
plugin_unix_path = /var/run/docker.sock
  1. Получите версию Docker с помощью команды curl:

curl http://x.x.x.x:6000/version

Обнародование простого HTTP-сервера

Простой способ просмотра файлов в локальной сети.

Настройте frps так же, как выше.

  1. Запустите frpc с конфигурацией:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[test_static_file]
type = tcp
remote_port = 6000
plugin = static_file
plugin_local_path = /tmp/file
plugin_strip_prefix = static
plugin_http_user = abc
plugin_http_passwd = abc
  1. Посетите http://x.x.x.x:6000/static/ с помощью вашего браузера, введите правильного пользователя и пароль, чтобы увидеть файлы в /tmp/file.

Обнародование вашего сервиса в безопасном режиме

Для некоторых сервисов, если обнародовать их напрямую в публичную сеть, это будет представлять собой угрозу безопасности.

stcp (secret tcp) поможет вам создать прокси, избегая доступа к нему любым образом.

Настройте frps так же, как выше.

  1. Запустите frpc, перенаправьте порт SSH и remote_port не используется:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[secret_ssh]
type = stcp
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
```2. Запустите другой `frpc`, в котором вы хотите подключиться к этому SSH-серверу:

```ini
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[скрытый_ssh_посетитель]
type = stcp
role = visitor
server_name = secret_ssh
sk = abcdefg
bind_addr = 127.0.0.1
bind_port = 6000
  1. Подключитесь к серверу в локальной сети по SSH, предполагая, что имя пользователя — test:

ssh -oPort=6000 test@127.0.0.1

Режим P2P

xtcp предназначен для передачи большого объема данных напрямую между двумя клиентами.

В настоящее время он не может проникать через все типы устройств NAT. Вы можете попробовать stcp, если xtcp не работает.

  1. Настройте UDP-порт для xtcp:
bind_udp_port = 7001
  1. Запустите frpc, перенаправьте SSH-порт и remote_port не используется:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[p2p_ssh]
type = xtcp
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
  1. Запустите другой frpc, к которому вы хотите подключиться к этому SSH-серверу:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[p2p_ssh_visitor]
type = xtcp
role = visitor
server_name = p2p_ssh
sk = abcdefg
bind_addr = 127.0.0.1
bind_port = 6000
  1. Подключитесь к серверу в локальной сети по SSH, предполагая, что имя пользователя — test:

ssh -oPort=6000 test@127.0.0.1

Подключение к веб-сайту через сеть frpc

Настройте frps так же, как выше.

  1. Запустите frpc с конфигурациями:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[http_proxy]
type = tcp
remote_port = 6000
plugin = http_proxy # или socks5
```2. Установите HTTP-прокси или SOCKS5-прокси `x.x.x.x:6000` в вашем браузере и посетите веб-сайт через сеть frpc.

## Функции

### Файл конфигурации

Вы можете найти функции, которые не упомянуты в этом документе, в полных примерах конфигурационных файлов.

[полный конфигурационный файл frps](./conf/frps_full.ini)

[полный конфигурационный файл frpc](./conf/frpc_full.ini)

### Панель управления

Проверьте статус frp и статистику прокси-серверов с помощью панели управления.

Настройте порт для панели управления, чтобы включить эту функцию:

```ini
[common]
dashboard_port = 7500
# имя пользователя и пароль панели управления не обязательны, если они не установлены, по умолчанию они равны admin.
dashboard_user = admin
dashboard_pwd = admin

Затем посетите http://[server_addr]:7500, чтобы увидеть панель управления, по умолчанию имя пользователя и пароль равны admin.

панель управления

Аутентификация

С версии v0.10.0 достаточно установить параметр token в файлах frps.ini и frpc.ini.

Обратите внимание, что время, прошедшее с момента последней аутентификации между сервером frpc и frps, не должно превышать 15 минут, так как используется метка времени для аутентификации.

Однако это время ожидания можно изменить, установив параметр authentication_timeout в конфигурационном файле frps. Значение по умолчанию равно 900, что соответствует 15 минутам. Если значение равно 0, то frps не будет проверять время ожидания аутентификации.### Шифрование и сжатие

Значение по умолчанию — false. Вы можете определить, будет ли прокси использовать шифрование или сжатие:

# frpc.ini
[ssh]
type = tcp
local_port = 22
remote_port = 6000
use_encryption = true
use_compression = true

Горячая перезагрузка конфигурации frpc

Сначала вам нужно установить порт администратора в конфигурационном файле frpc, чтобы он предоставлял HTTP API для дополнительных функций.

# frpc.ini
[common]
admin_addr = 127.0.0.1
admin_port = 7400

Затем выполните команду frpc reload -c ./frpc.ini и подождите около 10 секунд, чтобы frpc перезагрузил конфигурацию, создал, обновил или удалил прокси.

Обратите внимание, что параметры в разделе [common] не будут изменяться, кроме параметра 'start' в настоящий момент.

Получение статуса прокси с клиента

Используйте команду frpc status -c ./frpc.ini для получения статуса всех прокси. Вам нужно установить порт администратора в конфигурационном файле frpc.

Список разрешенных портов

Параметр allow_ports в файле frps.ini используется для предотвращения злоупотребления портами:

# frps.ini
[common]
allow_ports = 2000-3000,3001,3003,4000-50000

Параметр allow_ports состоит из одного или нескольких портов или диапазонов портов, разделенных запятыми.

Умножение потоков TCP

Поддержка умножения потоков TCP в frp введена с версии v0.10.0, аналогично HTTP2 Multiplexing. Все запросы пользователей к одному frpc могут использовать только одно TCP-соединение.Вы можете отключить эту функцию, изменяя файлы frps.ini и frpc.ini:

# frps.ini и frpc.ini должны быть одинаковыми
[common]
tcp_mux = false

Поддержка протокола KCP

Поддержка протокола KCP в frp введена с версии v0.12.0.

KCP — это быстрый и надежный протокол, который может обеспечить снижение среднего времени задержки на 30% до 40% и снижение максимального времени задержки в три раза, при этом затрачивая на 10% до 20% больше полосы пропускания по сравнению с TCP.

Использование KCP в frp:

  1. Включение протокола KCP в frps:
# frps.ini
[common]
bind_port = 7000
# KCP требует привязки к UDP-порту, он может совпадать с 'bind_port'
kcp_bind_port = 7000
  1. Настройте протокол, используемый в frpc для подключения к frps:
# frpc.ini
[common]
server_addr = x.x.x.x
# Укажите 'kcp_bind_port' в frps
server_port = 7000
protocol = kcp

Пул соединений

По умолчанию frps отправляет сообщение frpc для создания нового соединения с обратным сервисом при получении запроса от пользователя. Если пул соединений для прокси-сервера включен, будет предварительно установлено определенное количество соединений.

Эта функция подходит для большого количества краткосрочных соединений.

  1. Настройте ограничение на количество соединений в пуле для каждого прокси в frps.ini:
# frps.ini
[common]
max_pool_count = 5
  1. Включите и укажите количество соединений в пуле: ```ini

frpc.ini

[common] pool_count = 1


### Перезапись заголовка Host

При перенаправлении на локальный порт, frp не изменяет перенаправленные HTTP-запросы вообще, они копируются на ваш сервер байт-за-байтом, как они получены. Некоторые серверы приложений используют заголовок Host для определения, какой сайт разработки отображать. По этой причине, frp может перезаписывать ваши запросы с измененным заголовком Host. Используйте переключатель `host_header_rewrite` для перезаписи входящих HTTP-запросов.

```ini
# frpc.ini
[web]
type = http
local_port = 80
custom_domains = test.yourdomain.com
host_header_rewrite = dev.yourdomain.com

Если host_header_rewrite указан, заголовок Host будет перезаписан, чтобы соответствовать части имени хоста в адресе перенаправления.

Получение реального IP-адреса

Функции для HTTP-прокси только.

Вы можете получить реальный IP-адрес пользователя из заголовков HTTP-запроса X-Forwarded-For и X-Real-IP.

Обратите внимание, что теперь вы можете получить эти два заголовка только в первом запросе каждого соединения пользователя.

Защита вашего веб-сервиса паролем

Любой, кто может угадать ваш URL-адрес туннеля, может получить доступ к вашему локальному веб-серверу, если вы не защитите его паролем.

Это включает HTTP Basic Auth на всех запросах с указанным вами именем пользователя и паролем в конфигурационном файле frpc.Это можно включить только при использовании типа прокси HTTP.

# frpc.ini
[web]
type = http
local_port = 80
custom_domains = test.yourdomain.com
http_user = abc
http_passwd = abc

Посетите http://test.yourdomain.com и теперь вам нужно ввести имя пользователя и пароль.

Пользовательские поддомены

Использование конфигурации subdomain для типов HTTP и HTTPS удобно, когда много людей используют один сервер frps вместе.

# frps.ini
subdomain_host = frps.com

Разрешите *.frps.com на IP-адрес сервера frps.

# frpc.ini
[web]
type = http
local_port = 80
subdomain = test

Теперь вы можете посетить ваш веб-сервис по хосту test.frps.com.

Обратите внимание, что если subdomain_host не пуст, custom_domains не должны быть поддоменами subdomain_host.

Маршрутизация URL

frp поддерживает перенаправление HTTP-запросов на различные обратные веб-сервисы с помощью маршрутизации URL.

locations указывают префикс URL, используемый для маршрутизации. frps сначала ищет самый конкретный префикс-локацию, заданный строковыми литералами, независимо от порядка списка.

# frpc.ini
[web01]
type = http
local_port = 80
custom_domains = web.yourdomain.com
locations = /

[web02]
type = http
local_port = 81
custom_domains = web.yourdomain.com
locations = /news, /about

HTTP-запросы с префиксом URL /news и /about будут перенаправлены на web02, а остальные — на web01.

Подключение к frps через HTTP PROXY

frpc может подключаться к frps через HTTP PROXY, если вы установите переменную окружения HTTP_PROXY или настроите параметр http_proxy в файле frpc.ini.Это работает только при использовании протокола TCP.

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
http_proxy = http://user:pwd@192.168.1.128:8080

Маппинг диапазона портов

Имя прокси-сервера с префиксом range: поддерживает маппинг диапазона портов.

# frpc.ini
[range:test_tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 6000-6006,6007
remote_port = 6000-6006,6007

frpc сгенерирует 6 прокси-серверов, таких как test_tcp_0, test_tcp_1 и так далее.

Плагины

По умолчанию frpc перенаправляет запросы только на локальные TCP или UDP-порты.

Плагины используются для предоставления расширенных функций. Встроенные плагины включают unix_domain_socket, http_proxy, socks5, static_file и другие. Вы можете посмотреть пример использования.

Укажите, какой плагин использовать, с помощью параметра plugin. Параметры конфигурации плагина должны начинаться с plugin_. Параметры local_ip и local_port бесполезны для плагинов.

Использование плагина http_proxy:

# frpc.ini
[http_proxy]
type = tcp
remote_port = 6000
plugin = http_proxy
plugin_http_user = abc
plugin_http_passwd = abc

plugin_http_user и plugin_http_passwd — это параметры конфигурации, используемые в плагине http_proxy.

План развития

  • Логирование информации HTTP-запросов в frps.
  • Прямое обратное проксирование, как haproxy.
  • Балансировка нагрузки на различные сервисы в frpc.
  • Поддержка kubernetes ingress.

Внесение вклада

Заинтересованы в участии? Мы будем рады помочь вам!* Просмотрите наш список проблем и рассмотрите возможность отправки Pull Request на ветку dev.

  • Если вы хотите добавить новую функцию, пожалуйста, создайте проблему, чтобы описать новую функцию, а также подход к её реализации. Как только предложение будет принято, создайте реализацию новой функции и отправьте её как Pull Request.
  • Простите за мой плохой английский, любые улучшения для этого документа приветствуются, в том числе исправление опечаток.
  • Если у вас есть замечательные идеи, отправьте письмо на fatedier@gmail.com.

Примечание: Мы предпочитаем, чтобы вы давали свои советы в проблемах, чтобы другие с тем же вопросом могли быстро найти его и нам не пришлось повторно отвечать на него.

Донат

Если frp очень помог вам, вы можете поддержать нас следующими способами:

Группа QQ frp: 606194980

AliPay

donation-alipay

Wechat Pay

donation-wechatpay

PayPal

Перечислите деньги через PayPal на мой аккаунт fatedier@gmail.com.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Для самостоятельного скачивания релиза внутри страны Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/IoTServ-frp.git
git@api.gitlife.ru:oschina-mirror/IoTServ-frp.git
oschina-mirror
IoTServ-frp
IoTServ-frp
master