准备:云服务器或者vps,作用:做数据转发 1. frp是啥? 具体可以看这里:https://gofrp.org/docs/concepts/ 简单来说,大家如果不求甚解,只需要知道下面这些就行: frp是fast reverse proxy的缩写,是一个专注于内网穿透的高性能的反向代理应用 frp项目的作者是中国人! frp支持 TCP、UDP、HTTP、HTTPS 等多种协议,可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 frp是go语言写的,支持跨平台,仅需下载对应平台的二进制文件即可执行,没有额外依赖。 frp有服务端(frps,s指service,通常搭建在有公网IP的设备上)和客户端(frpc,c指client,通常搭建在内网设备上)


在服务器上搭建FSP服务端

创建目录frp

docker npm 无法穿透 docker内网穿透frp_网络

 进入frp创建配置文件frps.ini

touch frps.ini

创建docker-compose.yml

vim docker-compose.yml

复制以下内容

version: '3.3'
services:
    frps:
        restart: always
        network_mode: host
        volumes:
            - './frps.ini:/etc/frp/frps.ini'
        container_name: frps
        image: snowdreamtech/frps

 保存退出

docker npm 无法穿透 docker内网穿透frp_网络_02

编辑frps.ini

[common]

#frp 监听端口,与客户端绑定端口

bind_port= 5443
kcp_bind_port = 5443


#dashboard用户名

dashboard_user= admin

#dashboard密码

dashboard_pwd= admin

#dashboard端口,启动成功后可通过浏览器访问如http://ip:9527

dashboard_port= 9527

#设置客户端token,对应客户端有页需要配置一定要记住,如果客户端不填写你连不上服务端

token = 8ad3d1x429a2d

注意:5443 和 9527端口不能被占用,被占了的话需要换成一个不被占用的 端口范围 1-65535

查看tcp端口使用情况

netstat -ntlp

docker npm 无法穿透 docker内网穿透frp_网络_03

启动docker-compose

docker-compose up -d

docker npm 无法穿透 docker内网穿透frp_1024程序员节_04

通过docker ps可以看到frps已经启动

docker npm 无法穿透 docker内网穿透frp_1024程序员节_05

 启动成功就可以看到5443 、9527端口被监听了

docker npm 无法穿透 docker内网穿透frp_容器_06

 ok 现在服务端启动了

我用的阿里云服务器,需要开放端口,不然外界是不能通过5443 和 7527 访问服务器的

docker npm 无法穿透 docker内网穿透frp_容器_07

使用浏览器连接看一下 http://ip:9527

docker npm 无法穿透 docker内网穿透frp_容器_08

   可能服务器的防火墙导致的,使用docker run的方式映射端口,防火墙会自动开放端口,docker-compose在配置文件中使用的是host网络模式,默认是桥接模式

查看防火墙是否开启


systemctl status firewalld


docker npm 无法穿透 docker内网穿透frp_网络_09

查看防火墙开放的端口

# 查看永久开放的端口
firewall-cmd --list-ports --permanent
# 查看所有已经开放的临时端口
firewall-cmd --list-ports

如果出现

docker npm 无法穿透 docker内网穿透frp_1024程序员节_10

表示没有端口被开放

docker npm 无法穿透 docker内网穿透frp_docker_11

docker ps 显示有端口号的防火墙都是不会显示的,只有frps没有端口显示,需要自己手动开放

开放9527和5443端口,并重新加载防火墙

firewall-cmd --zone=public --add-port=9527/tcp --permanent

firewall-cmd --zone=public --add-port=5443/tcp --permanent

firewall-cmd --reload

 

docker npm 无法穿透 docker内网穿透frp_docker_12

此时再访问frps控制面板

docker npm 无法穿透 docker内网穿透frp_docker npm 无法穿透_13

登录成功

docker npm 无法穿透 docker内网穿透frp_网络_14

 客户端搭建

我的客户端搭建在windows上

在windows怎么 下载安装docker可以看我的其他文章

客户端和服务端差不多,就不细讲了

打开ubuntu切换root用户创建目录和配制文件和docker-compose.yml

docker npm 无法穿透 docker内网穿透frp_网络_15

 docker-compose.yml

version: '3.3'
services:
    frpc:
        restart: always
        network_mode: host
        volumes:
            - './frpc.ini:/etc/frp/frpc.ini'
        container_name: frpc
        image: snowdreamtech/frpc

在 docker-compose.yml复制可能会导致格式不对,可以先随便创建一个文件把内容复制进去,在把文件名修改成docker-compose.yml

fprc.init

这里面自己不需要开启的自己添加、删除

为了测试:我本地开启分布式文件系统minio服务

docker npm 无法穿透 docker内网穿透frp_docker_16

运行minio服务,我数据卷挂载带d盘下面的data目录

sudo docker run -d -p 9000:9000 -p 9001:9001 --name minio -v /mnt/d/data:/data -e "MINIO_ROOT_USER=minioadmin" -e "MINIO_ROOT_PASSWORD=minioadmin" --restart=always minio/minio server /data --console-address ":9001"

 服务运行起来了

docker npm 无法穿透 docker内网穿透frp_docker npm 无法穿透_17

 试试浏览器能不能打开minio控制台

docker npm 无法穿透 docker内网穿透frp_容器_18

# frpc.ini
[common]
server_addr = 118.31.8.238
server_port = 5443
token = 8ad3d1x429a2d

[ssh]
type = tcp
local_ip = 172.26.77.33
local_port = 22
# 这个自定义,之后再ssh连接的时候要用
remote_port = 6000 

[minio]
type = tcp
local_ip = 127.0.0.1
local_port = 9001
# 这个自定义,之后再ssh连接的时候要用
remote_port = 6001

配置文件里面设置的6000和6001端口进行数据转发的时候用到的,需要在服务器控制台开放端口和服务器防火墙开放端口

docker npm 无法穿透 docker内网穿透frp_docker_19

docker npm 无法穿透 docker内网穿透frp_容器_20

windows wsl 上的ubuntu ssh需要远程访问的,需要修改ssh配置文件

sudo vim /etc/ssh/sshd_config

1. Port 22 #默认即可,如果有端口占用可以自己修改
2. PasswordAuthentication yes # 允许用户名密码方式登录 

下载ssh查看ubuntu的本地ip

下载ssh服务

sudo apt-get install openssh-server

 下载网络工具

apt install net-tools

查看ubuntu的本地 ip

ifconfig | grep inet

 可以看到可以通过4个ip访问ubuntu,写127.0.0.1 只可以本地访问, 写 172.26.77.33可以本地可以远程。

docker npm 无法穿透 docker内网穿透frp_1024程序员节_21

查看ssh端口

netstat -tnlp | grep ssh

docker npm 无法穿透 docker内网穿透frp_docker_22

 如果通过本地ssh连接不成功

原因就是ssh服务没有启动

启动ssh

/etc/init.d/ssh start

如果报错

docker npm 无法穿透 docker内网穿透frp_docker_23

这是因为ssh没有什么共钥,需要生成一个公钥才能启动ssh

生成公钥

ssh-keygen -A

启动ssh服务

/etc/init.d/ssh start

查看ssh状态

service ssh status

 

docker npm 无法穿透 docker内网穿透frp_容器_24

docker npm 无法穿透 docker内网穿透frp_1024程序员节_25

启动frpc

docker-compose up -d

docker npm 无法穿透 docker内网穿透frp_网络_26

 客户端启动成功,通过配置文件可以看到本地的ssh和minio代理成功

docker npm 无法穿透 docker内网穿透frp_容器_27

 通过frp控制台也可以看到代理

docker npm 无法穿透 docker内网穿透frp_1024程序员节_28

测试

测试通过外网能不能访问到windows上面的服务

测试服务minio控制台,可以看到可以通过服务器的ip服务windows服务

docker npm 无法穿透 docker内网穿透frp_1024程序员节_29

 手机测试,也没问题

docker npm 无法穿透 docker内网穿透frp_网络_30

 测试ssh登录windows上wsl中的ubuntu

配置ssh工具,测试通过本地能不能连上ssh

docker npm 无法穿透 docker内网穿透frp_1024程序员节_31

通过127.0.0.1连接上ssh了

docker npm 无法穿透 docker内网穿透frp_docker npm 无法穿透_32

 测试通过远程服务器连接本地ssh

docker npm 无法穿透 docker内网穿透frp_docker npm 无法穿透_33

 远程连接、成功连接

docker npm 无法穿透 docker内网穿透frp_docker_34