概述
内网穿透可以解决本地服务器无法被公网访问的问题。所以内网穿透的前提是需要有一台在公网的服务器(既然有公网服务器了,为什么还要访问本地网络?比如调试、比如公网服务器性能差等等都是原因)。
frp是开源的内网穿透解决访问,现在用于很多商业场景,比其他的比较稳定。
本教程是针对docker环境搭建的,如果要使用其他方法搭建,可以参考官网教程:官网
服务端搭建
在任意一台可以通过公网服务器上部署服务端
镜像
当前镜像是官网0.44.0版本:
registry.cn-hangzhou.aliyuncs.com/yangqiang-pub/frp-server:0.44.0
准备
-
docker-compose.yml:docker-compose配置文件
version: '3' services: frp: image: ${image} container_name: frp restart: always ports: - 7000:7000 - 7500:7500 - 4000-4100:4000-4100 volumes: - ${docker_volume_directory:-.}/frp/server/frps.ini:/app/frp/frps.ini command: ./frps -c /app/frp/frps.ini
注意:4000-4100:4000-4100是代表服务端的4000-4100的端口可以被指定到客户端使用。如果没有配置这个客户端配置了内网穿透后是无法访问的,这是因为服务端在docker容器里面,需要从宿主机转发端口到容器里面然后由容器里面的frp服务端去转发流量。
-
.env: docker-compose环境变量配置
image=registry.cn-hangzhou.aliyuncs.com/yangqiang-pub/frp-server:0.44.0 docker_volume_directory=/data/docker-data
- 如果要指定配置文件地址,配置文件路径:/data/docker-data/frp/server/frps.ini
- 如果不指定配置就删除这个配置,配置文件路径(docker-compose.yml所在目录):./frp/server/frps.ini
-
frps.ini: frp服务端配置
[common] bind_addr = 0.0.0.0 bind_port = 7000 dashboard_addr = 0.0.0.0 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = admin #log_file = /data/docker-data/frp/log/frps.log #log_level = debug #log_max_days = 3 # 客户端连接时候的认证方式和内容 authentication_method = token token = aFB4Xruu
启动
把上面的文件准备好后,在同一个目录中应该是下面这种结构
docker-compose.yml
.env
frp/server/frps.ini
执行: docker-compose up -d
客户端搭建
在任意一个内网的机器上部署客户端,让所有通过服务器的流量可以访问指定的内网服务。
镜像
当前镜像是官网0.44.0版本:
registry.cn-hangzhou.aliyuncs.com/yangqiang-pub/frp-client:0.44.0
准备
- docker-compose.yml:docker-compose配置文件
version: '3' services: frp-client: image: ${image} container_name: frp-client restart: always ports: - 7400:7400 volumes: - ${docker_volume_directory:-.}/frp/client/frpc.ini:/app/frp/frpc.ini command: ./frpc -c /app/frp/frpc.ini
- .env: docker-compose环境变量配置
image=registry.cn-hangzhou.aliyuncs.com/yangqiang-pub/frp-client:0.44.0 docker_volume_directory=/root/docker-data
- 如果要指定配置文件地址,配置文件路径:/data/docker-data/frp/client/frpc.ini
- 如果不指定配置就删除这个配置,配置文件路径(docker-compose.yml所在目录):./frp/client/frpc.ini
- frpc.ini: frp客户端配置(注意和服务器端配置名字上的区别)
[common] # 服务端配置的token token = aFB4Xruu # 服务端服务器的地址 server_addr = 10.2.138.104 # 服务端服务器配置的端口 server_port = 7000 # 下面是客户端的dashboard访问 admin_addr = 0.0.0.0 admin_port = 7400 admin_user = admin admin_pwd = admin # 配置dashboard可以通过服务器访问 [dashboard] type = tcp # 启动客户端的宿主机地址 local_ip = 10.51.233.239 local_port = 7400 remote_port = 4000 # 配置一个ssh [ssh-10.51.233.145] type = tcp local_ip = 10.51.233.145 local_port = 22 remote_port = 4022
启动
把上面的文件准备好后,在同一个目录中应该是下面这种结构
docker-compose.yml
.env
frp/client/frpc.ini
执行: docker-compose up -d
快速开始
如果服务端ip是:10.10.10.10
- 通过服务端ip访问本地10.51.233.145机器的ssh:10.10.10.10:4022
- 通过服务端ip访问客户端的dashboard:10.10.10.10:4000
总结
- 服务端一定要部署到一台公网机器,并且公网机器被使用到的端口是需要开放出来的
- 客户端可以部署到任意一台本地机器,只要本地机器可以连接到服务器就行
- 客户端除了通过frpc.ini配置内网端口转发之外,还可以通过dashboard去动态的配置转发