pt吧 关注:221,789贴子:11,606,410
  • 11回复贴,共1

【220510】frp教程-没有公网IP,该如何访问及管理内网服务

取消只看楼主收藏回复

如题,看到有吧友在问如何访问内网这个问题,用的也是移动宽带,情况和我类似,就写个帖子分享下我的经验,正好混点经验好升级。
首先介绍下背景:五一自己组了一台itx主机做nas,因为本身是个后端开发,平时用惯了Linux,在体验了truenas scale系统后觉得成品的nas系统对于我来说局限性太强,于是装了ubuntu server 22.04。软件和docker服务什么的都装好后(docker、samba、qbittorrent、transmission、jellyfin)就跑去ptt答了个题,通过后算是正式开始了我的pt之旅(当前,提前学习了很久pt相关的知识,打算入坑的小伙伴也不要心急,先把玩法和规则学习明白,不要浪费宝贵的账号/邀请)。
接着正文,因为我也是移动的大内网,要公网ip是不可能了。但我自己有几台国内的云服务器,所以可以用frp这类反向代理程序来实现我的需求,本帖主要介绍如何使用frp来进行ssh连接内网机器及访问内网web服务(比如qbittorrent、transmission的web控制台,远程看jellyfin的影片。。)
前提:
1.有一台公网云服务器(我买的腾讯云2核4G RAM 8M上行,3年200多,每年大概70块钱)
2.懂得服务器基本操作,能够往服务器上传文件,修改配置,启动软件。


IP属地:广东1楼2022-05-10 11:58回复
    二楼:致敬开源作者和伟大的开源精神,同时致敬pter们人人为我我为人人的分享精神。
    frp仓库地址:https://github.com/fatedier/frp
    frp中文文档:https://gofrp.org
    ps:这么看程序员和pter在某些方面竟有些不谋而合


    IP属地:广东2楼2022-05-10 11:58
    回复
      2025-08-04 08:24:15
      广告
      不感兴趣
      开通SVIP免广告
      首先介绍下对吧友们来说最实用的访问web服务配置。
      我们要做的事情:
      1.下载自己系统对应的frp程序,下载地址:https://github.com/fatedier/frp/releases
      下载后解压可以看到的内容

      2.首先在云服务器上启动frps程序(frp的server端,需要修改一些配置,下面介绍)
      3.在我们的内网主机上启动frpc程序(frp的client端,需要修改一些配置,下面介绍)
      等内网主机和云服务器的frp程序建立了连接后,正常情况下我们就可以通过云服务器访问内网的web服务了,大概的原理如下图所示


      IP属地:广东3楼2022-05-10 12:00
      回复
        下面开始介绍配置文件的修改,我这里介绍最基本的配置,假设你没有域名和备案(估计大多数人都没有吧。。。)该如何操作。
        首先是云服务器上frps.ini的配置修改:
        ----------------------------------------------
        [common]
        bind_port = 7000 #frps的绑定端口,这个端口要在防火墙中打开,建议设置尽可能大避免被端口扫描
        vhost_http_port = 8080 # 虚拟主机端口,内网的web服务要通过这个端口访问,这个端口要在防火墙中打开,建议设置尽可能大避免被端口扫描
        authentication_method = token # 开启token校验机制,安全措施
        # auth token
        token = abcdefg # frpc的token必须和此token一致才能建立连接
        ----------------------------------------------
        然后就可以./frps -c ./frps.ini启动服务端了


        IP属地:广东4楼2022-05-10 12:02
        收起回复
          接下来是frpc.ini的配置
          ----------------------------------------------
          [common]
          server_addr = 你的云服务器公网ip
          server_port = 7000 # 和frps配置中的bind_port一致
          # auth token
          token = abcdefg # 和frps配置中的token一致
          [web]
          type = http
          local_port = 18881 # 你的内网服务端口,比如你的transmission服务端口是18881,那么这里就是18881
          custom_domains = 这里也填你的服务器公网ip
          ----------------------------------------------
          修改完成后可以在内网机器上使用./frpc -c ./frpc.ini启动客户端,即可和云服务器上的frps建立连接。这时候就可以通过服务器公网ip+vhost_http_port访问到内网的web服务了。


          IP属地:广东6楼2022-05-10 12:03
          回复
            如果你有已经备案的域名,还可以研究下frp子域名的配置,实现形如transmission.你的域名.com来访问内网transmission控制台的功能,这里我就不赘述了,可以参照详细配置文件进行操作。


            IP属地:广东7楼2022-05-10 12:06
            收起回复
              实现的效果




              IP属地:广东10楼2022-05-10 12:13
              回复
                ssh的下午再更 先恰个饭


                IP属地:广东11楼2022-05-10 12:14
                回复
                  2025-08-04 08:18:15
                  广告
                  不感兴趣
                  开通SVIP免广告
                  frpc配置被吞了,补个图


                  IP属地:广东13楼2022-05-10 12:16
                  收起回复
                    @-DJ- 吧主 技术贴能否加精?


                    IP属地:广东来自iPhone客户端19楼2022-05-10 14:30
                    收起回复


                      IP属地:广东20楼2022-05-10 14:33
                      回复
                        上述的办法是最简单的配置方式,但实际上并不推荐使用,因为这种做法非常危险,任何一个人都可以直接通过上面ssh -oPort=6000 root@x.x.x.x的命令访问你的内网机器,这是无法接受的。frp还提供了一种安全暴露内网服务的方式,配置起来要比上面的做法稍为麻烦一点:
                        1. 在内网主机上的配置修改为
                        -------------------------------------------------
                        [common]
                        server_addr = x.x.x.x
                        server_port = 7000
                        [ssh]
                        type = stcp #协议改为stcp
                        local_ip = 127.0.0.1
                        local_port = 22
                        sk=abcdefg #sk为访问ssh服务的安全验证密钥,远程连接必须提供一致的密钥才能访问此ssh服务
                        -------------------------------------------------
                        2. 在要访问内网ssh的主机也要启动一个frpc服务,配置如下:
                        -------------------------------------------------
                        [common]
                        server_addr = x.x.x.x
                        server_port = 7000
                        [secret_ssh_visitor]
                        type = stcp
                        role = visitor
                        server_name = ssh #和内网的stcp代理名字一样 就是[]括号里的名字
                        sk = abcdefg #和内网frpc配置的sk保持一致
                        bind_addr = 127.0.0.1 # 绑定本地地址
                        bind_port = 6000 #绑定本地端口
                        -------------------------------------------------
                        然后照旧1.启动frps 2.启动内网frpc 3.启动要访问内网的机器上的frpc服务
                        在要访问内网的机器上执行 ssh -oPort=6000 root@127.0.0.1
                        这样就会把访问本地机器6000端口的流量 通过frp转发给内网主机的22端口,root为内网机器的用户名,后面正常输入root的密码即可访问内网ssh。
                        如果内网开启了ssh的密钥登录,还可以把命令改为ssh -oPort=6000 -i ~/.ssh/id_rsa root@127.0.0.1,
                        ~/.ssh/id_rsa是指在访问内网的机器上存放的内网ssh私钥文件的路径,这样就可以实现密钥免密登录了。


                        IP属地:广东23楼2022-05-10 14:58
                        回复