• 利用Frp实现内网穿透(docker实现)


    • 环境配置:一台公网服务器(腾讯云)、一台笔记本电脑、WSL子系统
    • 涉及知识:docker、Frp

    1、WSL子系统配置

    之前都在VM虚拟机上创建linux系统,但是最近发现了一个宝藏软件,这是windwos系统自带的,安装非常方便,强烈推荐。参考连接:https://learn.microsoft.com/zh-cn/windows/wsl/install

    注意:因为后面使用docker,其中WSL1对docker的支持不如WSL2,推荐安装WSL2,查看版本:wsl -l -v

    wsl2的支持需要开启虚拟机功能,如下图进行开启,如果Hyper-V平台无法勾选,请在Bios中进行开启,参考链接:https://jingyan.baidu.com/article/8ebacdf0df465b49f65cd5d5.html
    在这里插入图片描述

    2、腾讯云服务器安装frps

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

    frp中文文档:https://github.com/fatedier/frp/blob/dev/README_zh.md
    完整文档:https://gofrp.org

    云服务器Centos7:已安装Docker

    安装命令:
    yum-config-manager --add-repo http://mirrors.aliyun.c om/docker-ce/linux/centos/docker-ce.repo
    yum -y install docker-ce

    2.1、创建配置文件

    cd /home
    mkdir frp
    cd frp
    vim frps.toml
    

    frps.toml (最新版镜像配置文件由frps.ini变化为frps.toml文件了)内容:

    [common]
    # 监听端口
    bind_port = 6868
    # 面板端口
    dashboard_port = 7878
    # 登录面板账号设置
    dashboard_user = admin
    dashboard_pwd = 123456789
    # 身份验证
    token = swz
    

    用的是腾讯云轻量服务器,所以要在【防火墙】中先把这些服务器上要用到的端口开一下,即:
    6868、7878 两个端口

    2.2 、创建frps容器

    • 拉取镜像:docker pull snowdreamtech/frps
    • 启动容器:docker run --restart=always --network host -d -v /home/frp/frps.toml:/etc/frp/frps.toml --name frps snowdreamtech/frps
    • 查看容器状态,创建成功:docker ps -a
      在这里插入图片描述
    • 查看frps的管理端面板:公网服务器ip:7878,用户:admin、密码:123456789
      在这里插入图片描述

    语法解析🐱‍🏍

    –network host:网络模式host
    -v /home/frp/frps.ini:/etc/frp/frps.ini:配置文件映射
    –name frps:容器名称,可以随便取
    -d 后台运行

    –network host 配置解析🎶:
        直接使用宿主机的IP地址与外界进行通信,不再需要额外进行NAT转换。容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace,同时容器将不会虚拟出自己的网卡,而是使用宿主机的IP和端口,如下图host模式所示:
    在这里插入图片描述
    参考链接:https://blog.csdn.net/Aaron_neil/article/details/128964896

    3、WSL2子系统Centos服务器安装frpc服务

    子系统安装 见上面目录一,安装后打开页面如下图所示:

    在这里插入图片描述

    3.1、安装docker

    yum update -y
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum list docker-ce --showduplicates | sort -r
    yum -y install docker-ce-18.03.1.ce
    systemctl start docker
    

    执行完systemctl start docker后发现报错:Failed to get D-Bus connection: Operation not permitted
    解决方法:https://www.jianshu.com/p/e670ae82e97a,其中内部网址打不开的话,按照链接直接修改/usr/bin/systemctl文件

    #启动docker并查看状态,保证是running
    systemctl start docker
    systemctl status docker
    

    注意:有时候docker一阵阵的会处于dead阶段,但是不影响docker ps等命令的使用,如果一阵时间后启动不起来或者启动有问题,建议重装WSL2,重装命令:

    wsl --list
    wsl --unregister 系统名
    

    3.2、创建配置文件

    cd /home
    mkdir frp
    cd frp
    vim frpc.toml
    

    frpc.toml (最新版镜像配置文件由frpc.ini变化为frpc.toml文件了)内容:

    [common]
    # server_addr为FRPS服务器IP地址,即公网服务器的ip
    server_addr = xxxxx
    # server_port为服务端监听端口,bind_port,与frps.toml中保存一致
    server_port = 6868
    # 身份验证,与frps.toml中保存一致
    token = swz
    admin_addr = 127.0.0.1
    admin_port = 7400	
    admin_user = admin
    admin_pwd = admin
    [admin_ui]
    type = tcp
    local_port = 7400
    remote_port = 5556
    [web]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 8080
    remote_port = 5555
    

    用的是腾讯云轻量服务器,所以要在【防火墙】中先把这些服务器上要用到的端口开一下,即:
    5556、5555两个端口,其中7400端口是fprc的管理端页面,会自动在WSL2机器上开启这个服务,后面[admin_ui]配置了可以通过公务服务器:5556来访问管理端页面;[web]这个配置是通过公务服务器:5555来访问WSL2(127.0.0.1)的8080端口服务,这个服务后面我会配置一个nginx服务,具体见后面讲解。

    3.3 、创建frpc容器

    • 拉取镜像:docker pull snowdreamtech/frpc

    • 启动容器:docker run --restart=always --network host -d -v /home/frp/frpc.toml:/etc/frp/frpc.toml --name frpc snowdreamtech/frpc

    • 查看容器状态,创建成功:docker ps -a
      在这里插入图片描述

    • 查看frpc的管理端面板:公网服务器ip:5556,用户:admin、密码:admin,当看到下图时,说名内网穿透已经实现了。为了进一步验证穿透的能力,下面我将单独启动一个nginx的镜像进行穿透。
      在这里插入图片描述

    4、WSL2子系统Centos服务器安装nginx服务

     docker search nginx
     docker pull nginx
     docker pull nginx:1.21.5
     docker run --rm --name nginx-test -p 8080:80 -d nginx:1.21.5
    

    注:这里nginx版本可以随意选择,有的拉取不下来,可以多试试几个版本。
    语法解析🐱‍🏍

    –name nginx-test:容器名称,可以随便取
    -d :后台运行
    -p 8080:80 : 端口映射,因为默认是桥接模式,所以需要端口映射,8080是WSL2机器(docker宿主机)的端口,80是docker服务-nginx的启动端口。
    –rm :它表示在容器退出时立即删除容器。

    使用 docker ps查看服务是否启动,如下图:
    在这里插入图片描述

    • 查看 frps 管理端
      在这里插入图片描述
    • 查看 frpc 管理端
      在这里插入图片描述
    • 以上证明配置无误,然后进行访问:http://公网服务器:5555,结果如下:
      在这里插入图片描述

    总:虽然我这本地的计算机其实也是连着互联网的,但是我没有单独的开放端口什么的,这应该就可以证明内网穿透了,可以通过将自己的笔记本电脑置于内网(局域网),然后在测试下,应该也没问题,有小伙伴测试了,可以@我下。

    参考链接:
    https://i007it.com/2022/06/18/Docker%E6%90%AD%E5%BB%BAfrp%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E6%9C%8D%E5%8A%A1%E5%99%A8/

  • 相关阅读:
    字节码进阶之JVM Attach API详解
    什么是计算机网络
    DAB-DETR源码最全讲解
    C++ static使用 面试
    非暴力沟通笔记
    企业内部培训直播能做什么
    机器学习【pandas文件读取与存储、高级处理、电影案例分析】
    科技创新引领高质发展 良性竞争激发行业活力
    WIFI产品使用指导说明
    ArcGIS 10.8中文版详细安装教程(附安装包)
  • 原文地址:https://blog.csdn.net/qq_37534947/article/details/135937212