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

现如今IPV4枯竭无法正常分配到公网IP,IPV6也不普及,家里有NAS或者Download蓝光电影非常不方便,所以我们可以用使用公网的服务器部署FRP进行端口转发,从而实现远程访问。

既然使用Docker部署那必然要安装Docker环境了,怎么安装Docker前面已经有文章进行讲解了,就不继续啰嗦了,下面我们开始上干货。

首先进行Dockerfile构建FRP镜像,镜像分为客户端和服务端,服务端(FRPS)为外网服务器,客户端(FRPC)为家里的内网。

# FRPS Dockerfile
FROM alpine:latest

LABEL maintainer="Tyson <longtaijun@msn.cn>"

ENV FRP_VERSION 0.45.0

RUN cd /root \
    &&  wget --no-check-certificate -c https://github.com/fatedier/frp/releases/download/v${FRP_VERSION}/frp_${FRP_VERSION}_linux_amd64.tar.gz \
    &&  tar zxvf frp_${FRP_VERSION}_linux_amd64.tar.gz  \
    &&  cd frp_${FRP_VERSION}_linux_amd64/ \
    &&  cp frps /usr/bin/ \
    &&  mkdir -p /etc/frp \
    &&  cp frps.ini /etc/frp \
    &&  cd /root \
    &&  rm frp_${FRP_VERSION}_linux_amd64.tar.gz \
    &&  rm -rf frp_${FRP_VERSION}_linux_amd64/ 

ENTRYPOINT /usr/bin/frps -c /etc/frp/frps.ini
# FRPC Dockerfile
FROM alpine:latest

LABEL maintainer="Tyson <longtaijun@msn.cn>"

ENV FRP_VERSION 0.45.0

RUN cd /root \
    &&  wget --no-check-certificate -c https://github.com/fatedier/frp/releases/download/v${FRP_VERSION}/frp_${FRP_VERSION}_linux_amd64.tar.gz \
    &&  tar zxvf frp_${FRP_VERSION}_linux_amd64.tar.gz  \
    &&  cd frp_${FRP_VERSION}_linux_amd64/ \
    &&  cp frpc /usr/bin/ \
    &&  mkdir -p /etc/frp \
    &&  cp frpc.ini /etc/frp \
    &&  cd /root \
    &&  rm frp_${FRP_VERSION}_linux_amd64.tar.gz \
    &&  rm -rf frp_${FRP_VERSION}_linux_amd64/ 

ENTRYPOINT /usr/bin/frpc -c /etc/frp/frpc.ini

嫌复制麻烦可以直接去我的Git进行Clone,拉取完毕后就可以直接开始进行构建了。

# Build FRPS
docker build -t svipc/frps .
# Build FRPC
docker build -t svipc/frpc .

镜像构建好了,我们就可以开始弄配置文件进行挂载启动了,下面是我自己的一些配置可以借鉴,根据自己需求修改配置,注意在服务器防火墙打开相应的通信端口。

# FRPS configuration
[common]
bind_port = 7000
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = your-passwd
token = your-token
vhost_http_port = 80
vhost_https_port = 443
tcp_mux = ture
privilege_mode = ture
subdomain_host = open.svipc.com
# FRPC configuration
[common]
server_addr = 125.14.110.250
server_port = 7000
token = your-token

[router]
type = http
local_ip = 192.168.1.1
local_port = 80
remote_port = 80
custom_domains = open.svipc.com

[down]
type = http
local_ip = 192.168.3.5
local_port = 6880
remote_port = 80
custom_domains = down.svipc.com

[aira]
type = http
local_ip = 192.168.3.4
local_port = 6800
remote_port = 80
custom_domains = aira.svipc.com

服务器端配置挺简单的,重点是客户端配置,也没什么难的,就是把自己想要映射的服务转发出去,检查没问题我们就可以开始挂载配置启动Container。

# Run FRPS
docker run --restart=always --network host -d -v /etc/frp/frps.ini:/etc/frp/frps.ini --name frps svipc/frps
# Run FRPC
docker run --restart=always --network host -d -v /etc/frp/frpc.ini:/etc/frp/frpc.ini --name frpc svipc/frpc