• frp+docker内网穿透安装配置


    frp是一个优秀的内网穿透服务,曾试过用ngrok做内网穿透,但用docker还比较麻烦,还需要自己编译ngrok客户端进行分发才能使用,折腾了一阵子就没搞了。frp早闻大名,趁有空尝试下,还是比较方便的,只需要写好配置文件,启动就完事了
    frp官方文档
    frp github
    docker-frps
    docker-frpc

    准备

    1.云服务器或具有公网IP的服务器,用于安装frp服务端(frps)
    2.需要内网穿透的服务器,如树莓派,将安装frp客户端(frpc)
    3.上述1和2的服务器均安装好docker

    frp服务端(frps)

    创建frp服务端配置文件/data/frp/frps.ini,根据自己实际情况修改路径

    mkdir /data/frp/frps.ini
    
    • 1
    cd /data/frp/
    nano frps.ini
    
    • 1
    • 2
    frps.ini
    [common]
    # 服务器开放给客户端的frp端口
    bind_port = 7000
    # http端口
    vhost_http_port = 8080
    # https端口
    vhost_https_port = 8081
    dashboard_addr = 0.0.0.0
    # 控制面板端口,用户名,密码
    dashboard_port = 7500
    dashboard_user = admin
    dashboard_pwd = yourpassword
    # 自己用于frp服务的域名
    subdomain_host = frp.yourdomain.com
    # frps服务token,拥有此token的客户端才允许连接
    token = yourfrptoken
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    bind_port 为必须设置,其余设置可根据需要进行取舍
    设置token可防止任何用户连接自己的frp服务端,相应地,客户端的配置文件也需要设置相同的token才能连接,如自己的frp服务开放给任何用户,可不设置
    subdomain_host设置frp服务的域名,使客户端可从*.frp.yourdomain.com访问服务,若客户端无子域名要求,可不设置

    拉取frp服务端镜像

    docker pull snowdreamtech/frps
    
    • 1

    运行docker

    docker run --restart=always --network host -d -v /data/frp/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps
    
    • 1

    搞定,去服务器IP:7500,输入账号密码,就可以看到dashboard页面了
    在这里插入图片描述

    frp客户端(frpc)

    客户端就比较灵活了,可以去frp的release下载编译好的文件,也可以跑在docker中,重点还是配置文件的内容

    frpc.ini
    [common]
    # frps服务器地址,可用域名,即服务端的frp.yourdomain.com
    server_addr = 666.666.666.666
    # 上面frps.ini配置的端口
    server_port = 7000
    # frps服务token
    token = yourfrptoken
    
    [tcp]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 8000
    remote_port = 9876
    
    [web]
    type = http
    local_port = 8000
    custom_domains = yourdomain
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    相关说明:

    • 以上演示了一个TCP类型和HTTP类型的代理,[xxx]中可随意填写,仅代表该代理的name,名称不可重复

    • 云服务器IP假设为666.666.666.666

    • TCP代理一般用于监听22端口来进行SSH,在上面的例子中,内网的8000端口跑了个服务,因此可用666.666.666.666:9876或则域名:9876来访问到内网8000端口的服务。如果改成local_port = 22,就可以ssh -oPort=9876 test@x.x.x.xSSH内网服务器了

    • HTTP代理的例子中,需要指定域名,可通过域名:8080来访问内网8000端口的服务,但不可通过666.666.666.666:8080来访问,为什么是8080呢?因为在上面的frps.ini中配置了vhost_http_port = 8080。如果服务端frps.ini设置了subdomain_host,该例中custom_domains = yourdomain可改为subdomain=myweb,此时就可通过子域名,myweb.frp.yourdomian.com:8080来访问服务,注意,子域名只能向下一级,不可subdomain=sub.myweb,会报错

    运行客户端

    写好配置文件后,可根据实际,运行编译版程序,或者运行docker版程序

    编译版

    从github下载对应平台编译好的文件,解压好,修改frpc.ini,运行即可,注意windows版要打开cmd运行

    docker

    拉取客户端镜像

    docker pull snowdreamtech/frpc
    
    • 1

    创建/data/frp/frpc.ini,写好配置文件,运行即可

    docker run --restart=always --network host -itd -v /data/frp/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc
    
    • 1

    其他配置

    客户端的管理页面

    除了上面的服务端(frps)有dashboard,客户端(frpc)也有自己的管理页面,方便客户端随时更新配置文件,不用每次都要进服务器才能修改
    因此仅需要在客户端frpc.ini添加下面内容即可

    # frpc.ini
    [common]
    admin_addr = 127.0.0.1
    admin_port = 7400
    admin_user = admin
    admin_pwd = admin
    #打开浏览器通过 http://127.0.0.1:7400 访问 Admin UI
    #如果想要在外网环境访问 Admin UI,可以将 7400 端口通过 frp 映射出去即可,但需要重视安全风险
    #用tcp的方式,外网可用frp.yourdomain.com:7400访问
    [admin_ui]
    type = tcp
    local_port = 7400
    remote_port = 7400
    #也可用http的方式,外网可用frp-admin.frp.yourdomain.com:8080访问(注意和tcp方式端口区别)
    [admin_ui_http]
    type = http
    local_port = 7400
    subdomain = frp-admin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    官方文档写的就是用tcp的方式访问,当然用http也是可以的,二选一即可
    重启,就可以访问客户端的管理页面了
    在这里插入图片描述

    去掉端口号访问

    每次访问内网服务都要加端口号*.frp.yourdomian.com:8080还是挺烦的,要去掉端口号,只需要在服务端的nginx加一个配置项,即匹配监听自己frp子域名的80端口,转发到frp的8080端口,然后就可以愉快地不带端口访问内网服务了~(前提是域名备案了哈,云服务器没有备案是用不了80端口的)

    server {
         listen	  80;
         server_name  *.frp.yourdomain.cn frp.yourdomain.cn;
         location / {
                 proxy_redirect off;
                 proxy_set_header Host $http_host;
                 proxy_set_header X-Real-IP $remote_addr;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                 proxy_pass http://127.0.0.1:8080;
         }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    如果服务端使用的是云服务器,有的云服务器填proxy_pass http://127.0.0.1:8080;会不生效,这个时候去要查一下云服务的内网地址填上就可以了

  • 相关阅读:
    Vue生命周期与自定义指令
    01-工具篇-windows与linux文件共享
    如何利用React和Flutter构建跨平台移动应用
    蓝桥杯刷题二
    Linux友人帐之命令
    [SWPU2019]Web6
    ubuntu编写makefile编译c++程序
    20个Golang片段让我不再健忘
    Redis类型
    tuend\stratis\vdo总结和课堂案例
  • 原文地址:https://blog.csdn.net/weixin_43909881/article/details/126526059