Frp 使用

什么是 Frp

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。

使用示例

服务端

  • 配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    mkdir -p /etc/frp
    cat > /etc/frp/frps.ini << EOF
    # frps.ini
    [common]
    # 服务端口
    bind_port = 7000
    # 服务端和客户端的 common 配置中的 token 参数一致则身份验证通过。
    token = 07401b.f395accd246ae52d
    EOF
  • 容器运行

    1
    2
    3
    4
    docker run --name frps \
    --network host -d --restart=always \
    -v /etc/frp/frps.ini:/etc/frp/frps.ini \
    dockerhub.azk8s.cn/snowdreamtech/frps:0.29.0

客户端

  • 配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    mkdir -p /etc/frp
    cat > /etc/frp/frpc.ini << EOF
    # frpc.ini
    [common]
    server_addr = setzero.wenqi.us
    server_port = 7000
    # 服务端和客户端的 common 配置中的 token 参数一致则身份验证通过。
    token = 07401b.f395accd246ae52d

    [ssh]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 22
    remote_port = 6000
    # 加密
    use_encryption = true
    # 压缩
    use_compression = true
    EOF
  • 容器运行

    1
    2
    3
    4
    docker run --name frpc \
    --network host -d --restart=always \
    -v /etc/frp/frpc.ini:/etc/frp/frpc.ini \
    dockerhub.azk8s.cn/snowdreamtech/frpc:0.29.0

改进

简单使用时挂卷是一个比较麻烦的事情,使用环境变量进行设置比较优雅一点。

frps
  • Dockerfile

    1
    2
    3
    4
    5
    6
    FROM dockerhub.azk8s.cn/snowdreamtech/frps:0.29.0

    ENV FRPS_PORT=7000 \
    FRPS_TOKEN=07401b.f395accd246ae52d

    COPY frps.ini /etc/frp/frps.ini
  • frps.ini

    1
    2
    3
    4
    # frps.ini
    [common]
    bind_port = {{ .Envs.FRPS_PORT }}
    token = {{ .Envs.FRPS_TOKEN }}
frpc
  • Dockerfile

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    FROM dockerhub.azk8s.cn/snowdreamtech/frpc:0.29.0

    ENV FRPS_ADDR=127.0.0.1 \
    FRPS_PORT=7000 \
    FRPS_TOKEN=07401b.f395accd246ae52d \
    FRPC_SECTION=ssh \
    FRPC_ADDR=127.0.0.1 \
    FRPC_LOCAL_PORT=22 \
    FRPC_REMOTE_PORT=6443 \
    USE_ENCRYPTION=true \
    USE_COMPRESSION=true

    COPY frpc.ini /etc/frp/frpc.ini
  • frpc.ini

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # frpc.ini
    [common]
    server_addr = {{ .Envs.FRPS_ADDR }}
    server_port = {{ .Envs.FRPS_PORT }}
    token = {{ .Envs.FRPS_TOKEN }}

    [{{ .Envs.FRPC_SECTION }}]
    type = tcp
    local_ip = {{ .Envs.FRPC_ADDR }}
    local_port = {{ .Envs.FRPC_LOCAL_PORT }}
    remote_port = {{ .Envs.FRPC_REMOTE_PORT }}
    use_encryption = {{ .Envs.USE_ENCRYPTION }}
    use_compression = {{ .Envs.USE_COMPRESSION }}

服务端

1
2
3
4
5
docker run --name frps \
--network host -d --restart=always \
-e FRPS_PORT=7000 \
-e FRPS_TOKEN=07401b.f395accd246ae52d \
dockerhub.azk8s.cn/setzero/frps:0.29.0

客户端

1
2
3
4
5
6
7
8
9
10
11
12
docker run --name frpc \
--network host -d --restart=always \
-e FRPS_ADDR=127.0.0.1 \
-e FRPS_PORT=7000 \
-e FRPS_TOKEN=07401b.f395accd246ae52d \
-e FRPC_SECTION=ssh \
-e FRPC_ADDR=127.0.0.1 \
-e FRPC_LOCAL_PORT=22 \
-e FRPC_REMOTE_PORT=6443 \
-e USE_ENCRYPTION=true \
-e USE_COMPRESSION=true \
dockerhub.azk8s.cn/setzero/frpc:0.29.0
setzero wechat