当前位置:   article > 正文

frp与nginx结合,实现内网设备的ssh,远程桌面和http访问_nginx frp

nginx frp

前言

一年前因为selenium运行问题在阿里云租用了一台windows的云服务器,当时费了好大工夫终于也算是搞定了frp内网穿透,实现了远程访问宿舍里的win10的功能。往后每次我掏出手机连上宿舍的电脑然后开始操作时,都感觉自己像个黑客一样……

可能也是受kiko这个角色的影响吧,从此便开始幻想自己像她一样随时掏出一个电脑

吹爆尚语贤小姐姐!!!!!!!!

最近因为c++协作项目、想转运维、阿里云网速慢等种种原因,决定再康康有没有更好的服务器商,然后便又在腾讯云购买了一个新的linux学生机。之前阿里云的有备案的域名也不能用了呜呜呜好烦,新的域名正在备案中,不知道啥时候可以搞定。

除此之外,最近心血来潮还买了一个树莓派放在宿舍,打算把之前写的内网图书馆抢座脚本改成网页,以后在外面有手机一键抢座。因此,frp再次出现在我的眼前,当时神秘的frp现在看来依旧神秘,不过我打算进一步深入了解它,由此便引发了今天的问题。


需求

掐指一算,目前我有4台电脑,分别是阿里云windows,腾讯云linux(此后简称腾讯云),自用windows(此后简称win10),树莓派linux(此后简称树莓派)。除去只是因为续费续多了才闲置的阿里云之外,还有三台电脑,我的目的有如下几条:

  1. 内网穿透win10远程桌面服务
  2. 内网穿透树莓派ssh服务
  3. 内网穿透树莓派http服务

所以我需要完成如下三件事情:

  1. 腾讯云用nginx反向代理请求到frps,frps兵分三路,win10远程桌面、树莓派ssh、树莓派网页
  2. win10配置frpc,实现远程桌面
  3. 树莓派配置frpc,实现ssh和http

解释一下,frpc为frp客户端程序,frps为frp服务端程序


实践

首先,我们来配置腾讯云

frps

注意,如果你有幸看到我的博客,请意识到,我写的从来不是教程,不会手把手教你从零开始配置xxxx。这些东西网上多的是,不重复造轮子是程序员的基本,利用搜索引擎也是。我只会写那些我搜索了许久,或者思考了许久的东西。希望这些可以帮到你,也帮到未来的我。

下载步骤直接掠过,详细请参考如何安装frp

我的frpc放在了/root/frp文件夹中

[root@VM-8-13-centos frp]# pwd
/root/frp
[root@VM-8-13-centos frp]# ls
frps  frps.ini  LICENSE  nohup.out  systemd
  • 1
  • 2
  • 3
  • 4

第一步,配置frps.ini配置文件

[root@VM-8-13-centos frp]# vim frps.ini

[common]
bind_port = 6000
vhost_http_port = 5998
  • 1
  • 2
  • 3
  • 4
  • 5

frps配置非常简单,只需要两行即可,其中:

bind_port为与客户端对接的端口号,要求客户端与服务端保持一致即可,此处为6000。注意,这个端口仅用于对接使用,内网穿透每一个服务都需要一个其他的端口。

重复,bind_port仅用于对接

vhost_http_port为http服务的端口,此处为5998,即意味着当我访问*http://腾讯云ip:5998/*时,frp会将我的所有请求通过6000(即对接端口)发送给符合要求的内网服务器。判断是否符合要求有两种形式。其一,通过客户端设置的remote_port;其二,通过客户端设置的custom_domains,这些在后面我会讲到。

如果你查阅了大量其他答案,你会发现这里少了一个vhost_https_port。这是因为我将要通过nginx反向代理,并不需要https。这也就是接下来我要讲述的nginx配置。

nginx

我先摆出frp配置的nginx.conf片段

    server {
        listen          82 ssl;
        server_name     lib.chantaria.xyz;

        ssl_certificate     ssl.crt;
        ssl_certificate_key ssl.key;

        ssl_session_cache   shared:SSL:1m;
        ssl_session_timeout  10m;

        ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_prefer_server_ciphers  on;

        error_page 497  https://lib.chantaria.xyz:82$uri;

        location / {
            proxy_pass http://127.0.0.1:5998;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_pass_header Set-Cookie;
        }
   }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

前两行是nginx通用配置,监听82端口,并启用ssl证书(此处是82是因为我的备案还没下来,如果备案下来了会改成80)。同时绑定域名,即当访问的是*https://lib.chantaria.xyz:82/*时nginx才会执行这个代码块。

后几行是ssl配置,在此处也不是重点。

error_page 497 https://lib.chantaria.xyz:82$uri;是rewrite,即当访问的是http://lib.chantaria.xyz:82/时将链接重写为https://lib.chantaria.xyz:82/

后面的location片段即反向代理到frps的片段。其中:

proxy_pass为反向代理到的url,至于为什么是http://127.0.0.1:5998,请参考我在frp段的讲述。

此段中最重点的是proxy_set_header Host $host;

如果你没有这句话,那么当你访问*https://lib.chantaria.xyz:82/*时,浏览器会显示

The page you requested was not found.

而此时你的frps会告诉你:

[W] [http.go:86] do http proxy request error: no such domain: 127.0.0.1 /
  • 1

其中的原因,是frp在收到http请求后,会根据请求的url分配受理请求的客户端。而nginx在进行反向代理时,会主动擦去这些,导致frps接收不到正确的url,也就无法分配正确的客户端来处理这些请求。

至此,nginx配置也告一段落

大功告成后,记得执行nginx -s reload重新载入配置文件,然后在frp路径执行nohup ./frps -c ./frps.ini来后台启动frps服务。

树莓派配置

还是先摆上配置

在这里插入图片描述

此处复制失败了,索性放一张图片。

[common]中是frpc的基本配置,分别为远程服务器ip,以及对接用的端口。

[ssh]中是ssh配置,图片中意思即为将远程的5997端口映射到本地的22端口。

[http]中便是http服务的配置,我在此配置的ip和port是flask运行的位置(毕竟只是一个小脚本,所以就没有再配置wsgi之类的东西,flask自带的开发级服务器足够了)

其中比较重点的是custom_domains参数,这个参数便是frps所寻找的客户端特征值。切记,即使你使用的并不是80端口,也请不要自作主张在后面附加上端口号。因为frp并不管这些,它只在乎域名,不在乎你是哪个端口。(我在这里踩了好久的坑)

除此之外应该就没什么需要注意的事情了

还是同样的,在frp路径执行nohup ./frpc -c ./frpc.ini来后台启动frpc服务。

至此,树莓派配置也告一段落

win10

配置完前两个,win10其实也就没什么可说的了。

[common]
server_addr = 81.xxxxxxxx
server_port = 6000

[remove]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 5999

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

即腾讯云的5999端口被映射到了3389端口(即远程桌面端口)。

然后简单地编写一个bat批处理命令(话说虽然叫批处理命令不过我好像都用来执行单个操作了哈哈哈哈,批处理当然要用python)

@echo off
frpc.exe -c frpc.ini
  • 1
  • 2

平时只要双击bat

2020/12/18 02:53:13 [I] [service.go:288] [a0e3b36022e1d765] login to server success, get run id [a0e3b36022e1d765], server udp port [0]
2020/12/18 02:53:13 [I] [proxy_manager.go:144] [a0e3b36022e1d765] proxy added: [remove]
2020/12/18 02:53:13 [I] [control.go:180] [a0e3b36022e1d765] [remove] start proxy success
  • 1
  • 2
  • 3

便可以顺利启动,随后掏出你的手机来尽情装x吧哈哈哈哈哈

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/499697
推荐阅读
相关标签
  

闽ICP备14008679号