FRP es una herramienta de proxy inverso de alto rendimiento. Permite exponer servicios de una red privada hacia Internet y soporta reenvío TCP, HTTP y HTTPS. Es útil cuando la red doméstica no tiene IP pública, pero se necesita acceder a servicios como Synology DS File, DS Photo o Escritorio remoto de Windows.
Dirección del proyecto:
1
|
https://github.com/fatedier/frp
|
Instalar El Servidor FRP
Descarga una versión desde la página de releases de FRP. El ejemplo original usa FRP 0.34.1 sobre Ubuntu 20.04:
1
2
|
wget https://github.com/fatedier/frp/releases/download/v0.34.1/frp_0.34.1_linux_arm64.tar.gz
tar -zvxf frp_0.34.1_linux_arm64.tar.gz
|
Después de extraer el paquete, verás binarios de cliente y servidor, archivos de configuración de ejemplo y servicios systemd:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
frp_0.34.1_linux_amd64
├── frpc
├── frpc_full.ini
├── frpc.ini
├── frps
├── frps_full.ini
├── frps.ini
├── LICENSE
└── systemd
├── frpc.service
├── frpc@.service
├── frps.service
└── frps@.service
|
Copia los binarios, configuraciones y servicios al sistema:
1
2
3
4
|
copy frp_0.34.1_linux_amd64/frpc /usr/bin/
copy frp_0.34.1_linux_amd64/frps /usr/bin/
copy frp_0.34.1_linux_amd64/*.ini /etc/fpr/
copy frp_0.34.1_linux_amd64/systemd/* /etc/systemd/system
|
Si /etc/fpr/ no existe, créalo antes.
Configuración Del Servidor
Un ejemplo de frps.ini:
1
2
3
4
5
6
7
8
9
10
11
12
|
[common]
bind_port = 10100
vhost_http_port = 10101
token = XXXXXX
dashboard_port = 10109
dashboard_user = admin
dashboard_pwd = XXXXXX
log_file = /var/log/frps.log
log_level = debug
log_max_days = 3
|
bind_port se usa para la comunicación entre servidor y clientes FRP. vhost_http_port recibe el tráfico HTTP público. Si se usa Nginx delante de FRP, Nginx debe reenviar el tráfico a este puerto.
Para más opciones, revisa frps_full.ini.

Comandos básicos del servicio:
1
2
3
4
5
|
systemctl start frps
systemctl stop frps
systemctl restart frps
systemctl status frps
systemctl enable frps
|
Proxy Nginx Opcional
Si el puerto 80 ya está ocupado por Nginx, puedes reenviar los dominios necesarios al puerto HTTP virtual de FRP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
server {
listen 80;
server_name dsphoto.youdomain.com dsfile.youdomian.com frp.yourdomian.com;
location / {
proxy_pass http://127.0.0.1:10101;
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
}
if ($http_user_agent ~* "360Spider|JikeSpider|Spider|spider|bot|Bot|2345Explorer|curl|wget|webZIP|qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot|NSPlayer|bingbot") {
return 403;
}
}
|
Configuración Del Cliente FRP
La instalación del cliente es similar. El cliente usa frpc, el archivo de configuración es frpc.ini y el servicio es frpc.
Ejemplo de configuración:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
[common]
server_addr = frp.yourdomain.com
server_port = 10100
token = XXXXXX
log_file = /tmp/frpc.log
log_level = info
log_max_days = 3
tcp_mux = true
protocol = tcp
login_fail_exit = false
user = admin
[DSphoto]
type = http
local_ip = 192.168.68.200
local_port = 80
custom_domains = dsphoto.yourdomain.com
[DSfile]
type = http
local_ip = 192.168.68.200
local_port = 5000
custom_domains = dsfile.yourdomain.com
[DSM]
type = tcp
local_ip = 192.168.68.200
local_port = 5000
remote_port = 5000
[MSTC]
type = tcp
local_ip = 192.168.68.168
local_port = 3389
remote_port = 3389
|
DSphoto expone el servicio de fotos de Synology. DSfile expone DS File por HTTP. DSM publica el puerto de administración DSM por TCP. MSTC reenvía Escritorio remoto de Windows.
Una vez conectado el cliente, accede desde Internet mediante los dominios o puertos configurados.


