frp内网穿透配置以及相关端口、过程解释

介绍

假设现有外网笔记本、云服务器、内网工作站三台设备,希望使用外网笔记本通过云服务器转发,访问内网工作站;这里使用frp进行内网穿透。先在内部基本流程和解释 这一章节通俗解释下内部发生的事情,帮助理解和debug,如果只想穿透,可以跳过,并从云服务器端配置 一节开始。

内部基本流程和解释

基本概念

在frp穿透方法中,将会在云服务器上部署frps(frp服务端),内网工作站上部署frpc(frp客户端);其中涉及到几个概念:

  • bind_port:定义在frps的配置文件中,用于指定云服务器上 用于监听内网工作站与该端口的连接请求的一个端口,内网工作站会通过云服务器公网ip地址,向云服务器该bind_port端口发送连接请求,通过该端口发送token后建立与云服务器的连接。 (但是云服务端并不通过这个口向内网工作站转发外部数据)
  • server_port: 定义在frpc的配置文件中,指向刚才定义的云服务器上的bind_port端口,两者数值一致; 用处是,告诉内网工作站:“应该向云服务器的哪个端口发送建立连接请求?” 本质上和bind_port相同,都指的是云服务器上的某个端口,只是定义位置不同。
  • remote_port: 定义在frpc的配置文件中,用于指定云服务器上的一个端口(转发端口),假设remote_port=7000,它的作用是,在内网工作站和云服务器建立和保持连接之后,内网工作站根据自己配置文件中指定的remote_port=7000 告诉云服务器:“我要听传输到你7000端口的数据,请把你7000端口接收到的数据转发给我”。
  • local_port:定义在frpc的配置文件中,假设local_port=22,它用于告诉云服务器:“你把7000端口接收的数据转发给我的22端口,我在那里听着”。
    在这里插入图片描述

基本流程

在云服务器上预先开放两个端口,一个7000端口作为bind_port,以及另一个6000端口作为接受外网访问的转发端口。

  1. 内网工作站通过frpc配置中的server_port和云服务器ip,通过一个随机端口发送token和连接请求;
  2. 建立连接后,内网工作站根据frpc配置中的remote_port=6000指向云服务器中已经开放的6000端口,告诉云服务器请求将该6000端口数据转发给自己的local_port端口;
  3. 云服务器随即监听请求中的6000端口接收到的数据,并通过自己的随机端口,将接收到的外部访问数据转发给内网工作站frpc配置中定义的local_port端口。
  4. 内网工作站根据转发的数据,判断是否通过ssh密码验证,是否建立ssh通讯。

云服务器端配置

  • 登录腾讯轻量型云服务器控制台,开放转发端口bind_port以及deshboad端口,其中deshboad端口用来测试,可以不写。

在这里插入图片描述

  • 测试与公网服务器ssh链接

    假设公网云服务器ip地址为xx.xxx.xxx.xxx,那么在外网笔记本的终端中,执行

    ssh ubuntu@xx.xxx.xxx.xxx
    
  • 公网服务器端安装frp程序包

    ssh进入云服务器中之后,执行

    wget https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64.tar.gz
    tar -zxvf frp_0.37.1_linux_amd64.tar.gz
    cp -r frp_0.37.1_linux_amd64 frp
    
  • 查看文件

    cd frp
    tree
    

    frp文件夹中,他们的文件结构是

    .                                     
    ├── frpc              
    ├── frpc_full.ini      
    ├── frpc.ini           
    ├── frps        #云服务器中使用
    ├── frps_full.ini         
    ├── frps.ini    #云服务器中使用  
    ├── LICENSE                      
    ├── nohup.out                  
    └── systemd          
      ├── frpc.service     
      ├── frpc@.service    
      ├── frps.service          
      └── frps@.service          
    1 directory, 12 files 
    
  • 修改frps.ini文件

    vim frps.ini
    

    修改为如下内容,注意,其中的端口6871,6289都是提前已经在防火墙中自定义好了的

    [common]
    # 云服务器仪表盘端口的用户
    dashboard_user = xxx
    # 云服务器仪表盘端口的密码
    dashboard_pwd = xxxxx
    dashboard_port = 6289
    # 云服务器和内网工作站之间的连接建立端口
    bind_port = 6000
    # 通讯口令,写复杂一些
    token = xxxxxx
    
  • 移动到系统文件夹下

    cd ..
    sudo mv frp  /usr/local/
    
  • 设置开机启动云服务器frps服务

    sudo vim /etc/init.d/frps_start.sh
    

    写入

    #!/bin/bash
    ### BEGIN INIT INFO
    # Provides:          tuzixini
    # Required-Start:    $local_fs $network
    # Required-Stop:     $local_fs
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: self define auto start
    # Description:       self define auto start
    ### END INIT INFO
    sudo nohup /usr/local/frp/frps -c /usr/local/frp/frps.ini &
    

    赋予权限

    sudo chmod 755 /etc/init.d/frps_start.sh
    

    设置自启动

    cd /etc/init.d
    sudo update-rc.d frps_start.sh defaults 90
    
  • 启动服务: 重启云服务器,或者执行以下指令

    需要注意的是,如果重启之后,云服务器的frp服务没有打开,就会导致个人工作站的frp服务启动失败,因此保证在启动内网工作站的时候,云服务器的frp一定要是打开的。

    cd /usr/local/frp
    sudo nohup ./frps -c frps.ini &
    
  • 查看服务,或者停止服务(optional)

    # 可以查看到刚才的任务的进程id,假设为32567
    ps -aux | grep frps
    # 杀掉进程
    kill -9 32567   
    
  • 测试

    在笔记本电脑中,打开浏览器输入你的公网ip:6289 输入账户密码,如果看到仪表盘就说明服务启动成功了

内网工作站配置

直接打开命令终端,或者你自己ssh进去,

  • 同样下载安装frp

    wget https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64.tar.gz
    tar -zxvf frp_0.37.1_linux_amd64.tar.gz
    cp -r frp_0.37.1_linux_amd64 frp
    
  • 修改frpc.ini文件

    [common]
    # 你的云服务器公网ip
    server_addr = xx.xxx.xxx.xxx
    # 云服务器端与工作站建立连接的端口,与bind_port一致
    server_port = 6000
    # 通信口令,与frps.ini文件中定义的一致
    token = xxxxxx
    
    [ssh]   
    type = tcp
    # 内网工作站在局域网中的ip,填写127.0.0.1就行,不用管具体的值
    local_ip = 127.0.0.1
    # 设置内网工作站 要监听ssh的端口
    local_port = 22
    # 云服务器监听外部访问的端口,即转发端口
    remote_port = 7000
    
  • 移动到系统文件夹下

    cd ..
    sudo mv frp  /usr/local/
    
  • 设置开机启动内网工作站frpc

    sudo vim /etc/init.d/frpc_start.sh
    

    写入

    #!/bin/bash
    ### BEGIN INIT INFO
    # Provides:          tuzixini
    # Required-Start:    $local_fs $network
    # Required-Stop:     $local_fs
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: self define auto start
    # Description:       self define auto start
    ### END INIT INFO
    sudo nohup /usr/local/frp/frpc -c /usr/local/frp/frpc.ini &
    

    赋予权限

    sudo chmod 755 /etc/init.d/frpc_start.sh
    

    设置自启动

    cd /etc/init.d
    sudo update-rc.d frpc_start.sh defaults 90
    
  • 重启内网工作站,或者执行以下指令启动服务

    需要注意的是,如果重启之后,云服务器的frp没有打开,就会导致个人工作站的frp服务启动失败,因此保证在启动内网工作站的时候,云服务器的frp一定要是打开的。

    cd /usr/local/frp
    sudo nohup ./frpc -c frpc.ini &
    
  • 查看服务,或者停止服务(optional)

    #可以查看到刚才的任务的进程id,假设为32567
    ps -aux | grep frpc
    # 杀掉进程
    kill -9 32567   
    

第二个内网工作站

这里介绍如何用同一个云服务器来穿透多个内网设备。

云服务器端

和第一个工作站配置相似,只是它的frps.ini中的bind_port和第一个工作站不相同,需要在云服务器上面手动开放对应的端口号

  • 重新创建一个新的frps.ini文件,假设为frps1.ini,里面写上新的口,再使用frps运行它

    # 随便设置一个不同的端口
    bind_port = 1212
    # 通信口令,可以跟第一个内网工作站的口令不同
    token = XXXXXXX
    

内网工作站端

和第一个工作站配置相似,只是它的frpc.ini中的server_portremote_port都和第一个工作站不相同,需要在云服务器上面手动开放对应的端口号

  • 重新创建一个新的frpc.ini文件,假设为frpc1.ini,里面写上新的口,再使用frpc运行它

    [common]
    # 你的云服务器公网ip
    server_addr = xx.xxx.xxx.xxx
    # 随便设置一个不同的端口(需要提前在云服务器上手动开放)
    server_port = 1212
    # 通信口令,要跟 frpc1.ini中的保持一致
    token = XXXXXXX
    
    [ssh]   
    type = tcp
    # 内网工作站在局域网中的ip,填写127.0.0.1就行,不用管具体的值
    local_ip = 127.0.0.1
    # 设置内网工作站frp要监听的端口
    local_port = 22
    # 不同的转发端口,同样需要提前在云服务器上手动开放
    remote_port = 5101
    
  • 自动启动方式,和第一个内网工作站相同。

使用

  • 在外网笔记本的终端中,输入

    ssh -p [转发端口][用户名]@[ip]
    

    其中,用户名是想要访问的内网工作站的对应账户名称,ip是云服务器公网ip;输入的密码也是内网工作站的密码,转发端口是上面提到的remote_port

注意点

  • 建立连接后,云服务器,一律将访问remote_port的ssh类型数据转发到内网工作站local_port端口上;内网工作站local_port不管,也不知道是云服务器上到底哪个port跟自己通讯的,甚至不知道是从云服务器上过来的数据,还是同一个内网的访问数据,local_port 只是接收请求,但是能不能进一步建立ssh连接还需要进行密码验证。
  • bind_port 端口和remote_port端口的设定不用担心安全问题;bind_port 端口的通讯建立需要通过frpc以及frps配置文件中的token相互匹配验证。云服务器remote_port端口本身就是要暴露在外部接收外部访问的,它只是转发remote_port端口的接受数据,与内网工作站的ssh建立需要通过内网工作站自身的账户密码验证。
  • 通过内网穿透的方式,实现了将自己内网工作站的账户暴露在公网中,此时知道公网ip、转发端口的人,都可以使用常见的“用户名+密码”组合尝试登录你的内网工作站,因此自己内网工作站的密码需要非常复杂,否则可能会被外部暴力尝试攻破。推荐在做好穿透之后,改成禁止密码登录,仅允许公钥登录。
  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Frp是一款高性能的内网穿透工具,可以方便地将内网服务映射到公网上,从而实现外网访问内网服务的目的。下面是Frp内网穿透配置步骤: 1. 下载Frp客户端和服务端 在官网下载Frp客户端和服务端,根据操作系统选择对应的版本并下载。 2. 配置Frp服务端 解压下载的Frp服务端文件,进入解压后的文件夹,在该文件夹下创建一个名为frps.ini的文件,用于配置Frp服务端。 在frps.ini中添加以下内容: ``` [common] bind_port = 7000 ``` 其中,bind_port为Frp服务端使用的端口号,可以根据实际情况进行修改。 3. 启动Frp服务端 在命令行中进入Frp服务端所在的文件夹,执行以下命令启动Frp服务端: ``` ./frps -c frps.ini ``` 4. 配置Frp客户端 解压下载的Frp客户端文件,进入解压后的文件夹,在该文件夹下创建一个名为frpc.ini的文件,用于配置Frp客户端。 在frpc.ini中添加以下内容: ``` [common] server_addr = 服务器IP地址 server_port = 7000 [web] type = http local_port = 80 custom_domains = 域名 ``` 其中,server_addr为Frp服务端的IP地址,server_port为Frp服务端使用的端口号,local_port为要映射的内网服务的端口号,custom_domains为自定义的域名,可以在公网上通过该域名访问内网服务。 5. 启动Frp客户端 在命令行中进入Frp客户端所在的文件夹,执行以下命令启动Frp客户端: ``` ./frpc -c frpc.ini ``` 6. 测试内网服务 在浏览器中输入自定义域名,即可访问内网服务。 至此,Frp内网穿透配置就完成了。需要注意的是,Frp服务端和客户端都需要在公网上可访问的服务器上运行,否则无法实现内网穿透

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值