README | Документация на китайском
frp — это быстрый обратный прокси, который поможет вам вывести локальный сервер, находящийся за NAT или брандмауэром, на интернет. Сейчас frp поддерживает протоколы tcp, udp, http и https, когда запросы могут быть перенаправлены доменами на обратные веб-сервисы.
Выставить любой http и https сервис за NAT или брандмауэр в интернет через сервер с публичным IP-адресом (поддержка Name-based Virtual Host).
Выставить любой tcp или udp сервис за NAT или брандмауэр в интернет через сервер с публичным IP-адресом.
frp находится в разработке и вы можете попробовать его с последней версией релиза. Основная ветка для выпуска стабильной версии, а ветка dev для разработки.
Мы можем изменить любой протокол и не можем гарантировать обратную совместимость. Пожалуйста, проверяйте лог релиза при обновлении.
Сначала загрузите последние программы с страницы релизов по вашей ОС и архитектуре.
Установите frps и frps.ini на ваш сервер с публичным IP-адресом.
Установите frpc и frpc.ini на ваш сервер в локальной сети.
# frps.ini
[common]
bind_port = 7000
./frps -c ./frps.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
./frpc -c ./frpc.ini
ssh -oPort=6000 test@x.x.x.x
Иногда вы хотите выставить локальный веб-сервис за NAT-сетью для тестирования с вашим собственным доменным именем, но не можете разрешить доменное имя на локальный IP-адрес.
Однако, вы можете выставить HTTP или HTTPS сервис с помощью frp.
frps.ini
, настройте порт HTTP 8080:# frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080
frps
:./frps -c ./frps.ini
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
frpc
:./frpc -c ./frpc.ini
Разрешите A запись www.yourdomain.com
на IP x.x.x.x
или CNAME запись на ваше исходное доменное имя.
Теперь посетите ваш локальный веб-сервис по адресу http://www.yourdomain.com:8080
.
frps.ini
:# frps.ini
[common]
bind_port = 7000
frps
:./frps -c ./frps.ini
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
frpc
:./frpc -c ./frpc.ini
dig
:dig @x.x.x.x -p 6000 www.google.com
### Передача Unix-доменного сокета
Использование TCP-порта для подключения к Unix-доменному сокету, как это делает демон Docker.
Настройте frps
так же, как выше.
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
curl
:curl http://x.x.x.x:6000/version
Простой способ просмотра файлов в локальной сети.
Настройте frps
так же, как выше.
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
http://x.x.x.x:6000/static/
с помощью вашего браузера, введите правильного пользователя и пароль, чтобы увидеть файлы в /tmp/file
.Для некоторых сервисов, если обнародовать их напрямую в публичную сеть, это будет представлять собой угрозу безопасности.
stcp (secret tcp) поможет вам создать прокси, избегая доступа к нему любым образом.
Настройте frps
так же, как выше.
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
ssh -oPort=6000 test@127.0.0.1
xtcp предназначен для передачи большого объема данных напрямую между двумя клиентами.
В настоящее время он не может проникать через все типы устройств NAT. Вы можете попробовать stcp, если xtcp не работает.
bind_udp_port = 7001
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
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
ssh -oPort=6000 test@127.0.0.1
Настройте frps
так же, как выше.
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, чтобы он предоставлял 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 в frp введена с версии v0.10.0, аналогично HTTP2 Multiplexing. Все запросы пользователей к одному frpc могут использовать только одно TCP-соединение.Вы можете отключить эту функцию, изменяя файлы frps.ini и frpc.ini:
# frps.ini и frpc.ini должны быть одинаковыми
[common]
tcp_mux = false
Поддержка протокола KCP в frp введена с версии v0.12.0.
KCP — это быстрый и надежный протокол, который может обеспечить снижение среднего времени задержки на 30% до 40% и снижение максимального времени задержки в три раза, при этом затрачивая на 10% до 20% больше полосы пропускания по сравнению с TCP.
Использование KCP в frp:
# frps.ini
[common]
bind_port = 7000
# KCP требует привязки к UDP-порту, он может совпадать с 'bind_port'
kcp_bind_port = 7000
# frpc.ini
[common]
server_addr = x.x.x.x
# Укажите 'kcp_bind_port' в frps
server_port = 7000
protocol = kcp
По умолчанию frps отправляет сообщение frpc для создания нового соединения с обратным сервисом при получении запроса от пользователя. Если пул соединений для прокси-сервера включен, будет предварительно установлено определенное количество соединений.
Эта функция подходит для большого количества краткосрочных соединений.
# frps.ini
[common]
max_pool_count = 5
[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 будет перезаписан, чтобы соответствовать части имени хоста в адресе перенаправления.
Функции для 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
.
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.
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
.
Заинтересованы в участии? Мы будем рады помочь вам!* Просмотрите наш список проблем и рассмотрите возможность отправки Pull Request на ветку dev.
Примечание: Мы предпочитаем, чтобы вы давали свои советы в проблемах, чтобы другие с тем же вопросом могли быстро найти его и нам не пришлось повторно отвечать на него.
Если frp очень помог вам, вы можете поддержать нас следующими способами:
Группа QQ frp: 606194980
Перечислите деньги через PayPal на мой аккаунт fatedier@gmail.com.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )