frp实现内网穿透

背景

    如果我们希望在家里搭建一台服务器,并且能够被外网访问,那可以行的方案有两种:1、向宽带运营商申请家庭的公网ip,然后配置防火墙,开放端口,就直接可以被外网访问了。2、通过内网穿透,所谓内网穿透其实就是利用代理服务器进行转发,假设你现在有一台存在有公网ip的服务器(比如租一台阿里云服务器,就会有公网ip)A,然后已有一台本地的内网服务器B。我们通过B连接A,然后我们向A请求数据时,A会将请求转发给B进行请求处理,最后在将结果返回给用户。这样用户就能间接通过A来访问B了。
    在可能的情况下通过第一种方式实现自己搭一台服务器是最好的,但是由于公网ip本身就很紧张(数量有限,不够分)以及其他的一些不可控因素,往往第一种方式是行不通的,这个时候就需要方法二:内网穿透了。内网穿透也分两种方式:1、自己搭建第三方服务器。2、使用第三方服务商的服务器。即上面说的服务器A(有公网ip的这台服务器)是我们自己搭建还是直接使用第三方服务商的,这种第三方服务商(比如花生壳,nat123,ngork)都会收取一定费用,而且费用跟映射(端口映射)数有关。其中nat123如果充值50元,可以体验到无限端口的免费服务,但是那个网速真的感人(如果实在是舍不得钱,这也是将就着用的)。在衡量了第三方服务商的价格和自己买云服务器后,还是自己购买云服务器划算(前提是可以通过各种优惠方式购买到低价服务器的,直接购买服务器也是不便宜的)。

frp实现内网穿透

    基于以上的背景,下面来讲如何自己来搭建第三方服务器实现本地内网穿透,首先需要有一台有公网ip的服务器(阿里云,百度云,华为云等等,自行购买吧),然后利用内网穿透的软件来搭建(frp,ngrok),我们这里选择frp来进行实现。

下载

    我们从github上下载frp,下载地址:https://github.com/fatedier/frp/releases 。如果我们在linux安装可以直接通过wget下载,当然也可以本地现在之后上传上去:

wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz

如果windows的话直接下载到本地。下载的压缩包里既有frp的客户端部分也有服务端部分,看我们自己选择。

服务端搭建

    所谓服务端就是进行转发的第三方服务器,我们这里是基于阿里云linux服务器。

  1. 解压frp

    tar -zxvf frp_0.36.2_linux_amd64.tar.gz
    
  2. 进入frp文件

    cd frp_0.36.2_linux_amd64
    
  3. 修改服务端的配置文件

    vi frps.ini
    

    编辑内容如下:

    [common]
    # frp监听的端口,默认是7000,可以改成其他的
    bind_port = 7000
    # 授权码,请改成更复杂的,这个token之后在客户端会用到
    token = dsfsgefgsfwe  
    
    # frp管理后台端口,请按自己需求更改
    dashboard_port = 7500
    # frp管理后台用户名和密码,请改成自己的
    dashboard_user = admin
    dashboard_pwd = admin
    enable_prometheus = true
    
    # frp日志配置
    log_file = /var/log/frps.log
    log_level = info
    log_max_days = 3
    
  4. 启动frp
    如果只是单次启动的话,我们直接利用frp文件下的frps可执行的二进制文件就可以启动一个frp服务端:

    ./frps -c ./frps.ini
    

    启动之后我们可以打开服务端的admin后台查看,打开时需要我们输入账号密码,就是我们配置文件中配置的admin,admin。
    在这里插入图片描述

    可以看到上面tcp模块已经有四个服务在进行转发服务了,如果我们客户端还没有配上对应的服务,这里应该还是啥也没有。

  5. 服务化配置
    我们肯定不希望每次通过这种方式来启动,想着能linux一启动就能自动启动。所以这里还需要做一些配置,仍然在frp的目录下执行一下命令:

    mkdir -p /etc/frp
    cp frps.ini /etc/frp
    cp frps /usr/bin
    cp systemd/frps.service /usr/lib/systemd/system/
    systemctl enable frps
    systemctl start frps
    
客户端搭建

    这里所说的客户端就是我们的本地服务器。本地我们是window系统,同样我们将前载到本地的zip文件解压,然后点击进入解压后的文件夹,我们对客户端的配置文件进行修改;

# 客户端配置
[common]
server_addr = 服务器ip
# 与frps.ini的bind_port一致
server_port = 7000 
# 与frps.ini的token一致
token = dsfsgefgsfwe 

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

# 配置http服务,可用于小程序开发、远程调试等,如果没有可以不写下面的
[web]
type = http
local_ip = 192.168.0.5
local_port = 8080
# web域名
subdomain = test.hijk.pw  
自定义的远程服务器端口,例如8080
remote_port = 8080

可以注意到我配置文件中的local_ip写的不是127.0.0.1或者localhost或者192.168.0.1。这是因为我的服务器并不是我的window,而是电脑里的一台虚拟机,虚拟机配置了局域网可访问,ip即是:192.168.0.5。而local_port也不是window的端口,而是虚拟机里的每个服务的端口。所以我们这里不仅可以配置当前主机进行内网穿透,而且可以配置局域网里任意一台主机进行内网穿透。前提是局域网里的这个服务对应的这些端口都是可访问的(防火墙开放了这些端口)。
    配置好之后就可以启动客户端了,在cmd中执行:

frpc.exe -c frpc.ini

启动之后,我么你就可以在前面服务端的那个控制台上看到对应的服务了。

服务端防火墙设置

最后我们就可以进行测试了,记住我们访问的是第三方服务器的ip和端口,比如我的阿里云ip是50.0.0.2,然后我要访问本地服务器的ssh服务,这是需要指定的端口则是上麦你的6000,而不是22:

ssh -P 6000 root@50.0.0.2

最后的最后要提一下,云服务器的安全组打开,比如这里我们就要打开6000端口,最终才能调的通。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值