frp内网穿透
2024-04-17 05:22:01

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

公网服务器部署配置

根据系统名称及架构下载frp:https://github.com/fatedier/frp/releases

1
2
sudo uname -s
sudo uname -m

上传压缩包到 /opt/frp 目录,修改 frps.toml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#服务绑定的IP与端口
bindAddr = "0.0.0.0"
bindPort = 7000
#web dashboard配置
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "frp"
webServer.password = "frp"
#启用prometheus监控指标
enablePrometheus = true
#token权限验证,需与客户端配置一致
auth.method = "token"
auth.token = "123456"
#日志配置
log.to = "./frps.log"
log.level = "info"
log.maxDays = 3

启动frps服务:

  • 命令行

    1
    ./frps -c ./frps.toml
  • 后台启动

    1
    nohup ./frps -c ./frps.toml &> /dev/null &
  • 系统服务 sudo vim /etc/systemd/system/frps.service

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [Unit]
    Description=FRP Server Service
    After=network.target

    [Service]
    Type=simple
    ExecStart=/opt/frp/frps -c /opt/frp/frps.toml
    Restart=on-failure
    RestartSec=5s
    User=frps
    Group=frps

    [Install]
    WantedBy=multi-user.target

    配置 frps 用户和用户组

    1
    sudo useradd -r -s /bin/false frps

    -r 选项创建一个系统用户。

    -s /bin/false 选项确保该用户无法登录。

    配置用户权限

    1
    sudo chown -R frps:frps /opt/frp

    启动服务

    1
    2
    3
    sudo systemctl daemon-reload
    sudo systemctl start frps
    sudo systemctl enable frps

    查看日志

    1
    sudo journalctl -u frps -f

内网客户端部署配置

修改 frpc.toml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#配置公网服务器上frp服务的IP与端口
serverAddr = ""
serverPort = 7000
# web dashboard配置
webServer.addr = "0.0.0.0"
webServer.port = 7400
# webServer.user = "admin"
# webServer.password = "admin"
#日志配置
log.to = "./frpc.log"
log.level = "info"
log.maxDays = 3
#token权限验证,需与服务端配置一致
auth.method = "token"
auth.token = ""
#代理配置,这里使用引用文件的方式
includes = ["./proxy_conf/*.toml"]

代理服务配置:proxy_conf 目录下 xxx.toml 文件

1
2
3
4
5
6
[[proxies]]
name = "demo" #名称
type = "tcp" #代理类型
localIP = "127.0.0.1" #本地IP
localPort = 8000 #内网服务监听的端口
remotePort = 8500 #需要在公网服务器上监听的端口

官方示例配置

中文: https://gofrp.org/zh-cn/docs/examples/

其他内网穿透方案

花生壳:https://hsk.oray.com

cloudflare:https://one.dash.cloudflare.com/networks/tunnels

ngrok: https://ngrok.com

tailscale: https://tailscale.com

zerotier: https://www.zerotier.com