frp内网穿透搭建流程,UDP通讯测试

Github地址:https://github.com/fatedier/frp

参考文档地址:https://gofrp.org/docs/

安装包下载地址(参考。本次以此版本安装):https://github.com/fatedier/frp/releases/tag/v0.35.1

安装包下载

  • Centos7 64位可选择此版本frp_0.35.1_linux_amd64.tar.gz
  • 本次部署及测试环境:
    • 测试协议UDP
    • win10:访问测试
    • 阿里云ECS Centos 7:frp服务端
    • 虚拟机Centos 7 : frp客户端

frp安装

由于我的服务端和客户端都是Linux系列,所以我下载一个即可。

如何区分服务端和客户端:

看文件后缀:frp_
frps为服务端。后缀为s
frpc为客户端。后缀为c

解压命令:

tar -zxvf frp_0.35.1_linux_amd64.tar.gz
  • 下载后解压,文件目录如下:

  • systemd内文件如下:

frp配置

  • 服务端简单配置:

    frps.ini

    [common]
    bind_port = 7000             #绑定端口,用于和客户端连接
    privilege_token = zxc1234    #用于连接认证,可以省略
    
    dashboard_port = 7001        #启动服务端UI页面,可以看到一些信息,无管理功能
    dashboard_pwd = zxc1234  #设置访问页面用户的密码。默认用户名为:admin
    
  • 客户端的简单配置:

    frpc.ini

    [common]
    server_addr = 39.156.69.79     #frp服务端的地址,换成你的公网IP
    server_port = 7000             #frp服务端的端口
    privilege_token = zxc1234      #连接认证
    
    [web]
    privilege_token = true        #是否使用认证
    type = udp                    #连接类型
    local_ip = 127.0.0.1          #默认值
    local_port = 6002             #本机服务端口,比如ssh的22,则填入22。6000可能会被系统使用。
    remote_port = 6001            #服务端转发至本机对外开放的端口
    
    

frp启动测试

启动顺序为:先服务端,后客户端。

阿里云ECS需在网络规则中增开6001端口,协议选择UDP(默认TCP,会导致本次测试失败)>。

两台主机都临时关闭防火墙:

systemctl stop firewalld
  • 服务端:

    ./frps -c frps.ini
    #设置后台运行,开机启动参见文章末尾内容
    #检查端口监听情况使用命令:netstatus -nltp   (此处frp应监听三个端口:7000、7001、6001)
    #7000接收frp客户端连接、7001为UI面板、6001转发至frp客户端端口6001
    
  • 客户端:

    ./frpc -c frpc.ini
    #设置后台运行,开机启动参见文章末尾内容
    #检查端口监听情况使用命令:netstatus -nltp  (此处frp应监听两个端口:6001、6002)
    #6001接收外部流量转发至内部6002端口,6002端口由UDP服务端监听
    
  • 查看服务端UI面板(frp客户端未启动)

    访问:http://公网地址:7001

  • 查看服务端UI面板(frp客户端启动后)

UDP通讯测试

  • win10下的一个UDP 客户端python脚本内容:

    import socket
    import time
    
    client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    num = 0
    while 1:
        if num == 100:
            break
            
        #此处IP地址换成你的公网IP
        client.sendto("from client message".encode("utf-8"),("39.156.69.79",6001))
        data,server = client.recvfrom(1024)
        print("接收到服务端消息:", data.decode("utf-8"))
        
        num += 1
        print("发送第", num, "条")
        time.sleep(1)
    client.close()
    
  • 虚拟机中的一个UDP 服务端python脚本内容:

    #python3
    #coding:utf8
    import socket
    
    server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server.bind(("127.0.0.1", 6002))
    print("服务器已经启动")
    while True:
        data, client = server.recvfrom(1024)
        print("接受到客户端的消息:", data.decode("utf-8"))
        server.sendto("from server message".encode("utf-8"), client)
    
    
  • 如果能通则会输出对应内容,如果不通,建议先使用局域网进行测试(将39.156.69.79改为192.168.28.131[vmware虚拟网卡])

使用systemctl 管理frp

  • 配置frp服务端service文件:

    移动frps.service文件至指定目录:

    cp ./frp_0.35.1_linux_amd64/systemd/frps.service /usr/lib/systemd/system/
    

    vi查看frps.service文件内容,记录frps文件位置和frps.ini文件位置(也可创建一个):

    vi /usr/lib/systemd/system/frps.service
    
    [Unit]
    Description=Frp Server Service
    After=network.target
    
    [Service]
    Type=simple
    User=nobody
    Restart=on-failure
    RestartSec=5s
    ExecStart=/usr/bin/frps -c /etc/frp/frps.ini     #注意此处内容
    
    [Install]
    WantedBy=multi-user.target
    
    

    frps文件和frps.ini复制到指定位置:

    cp ./frp_0.35.1_linux_amd64/frps /usr/bin/
    mkdir /etc/frp
    cp ./frp_0.35.1_linux_amd64/frps.ini /etc/frp
    

    测试启动:

    systemctl start frps 
    systemctl status frps
    #设置开机启动:
    systemctl enable frps
    #关闭开机启动:
    systemctl disable frps
    

  • 配置frp客户端service文件:

    参考服务端配置流程

原文地址:https://www.cnblogs.com/lisicn/p/14448280.html