Frp---树莓派4B内网穿透

Posted 机械沐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Frp---树莓派4B内网穿透相关的知识,希望对你有一定的参考价值。

Frp---树莓派4B内网穿透

吐槽一下:花生壳真tm 垃圾。啊~,舒服多了。

前言

开源免费,轻量级,很nice。

1、frp是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务, 支持tcp, udp, http, https等协议类型,并且web服务支持根据域名进行路由转发。
2、frp内网穿透主要用于没有公网IP的用户,实现远程桌面、远程控制路由器、 搭建的WEB、FTP、SMB服务器被外网访问、远程查看摄像头、调试一些远程的API(比如微信公众号,企业号的开发)等。

介绍

使用环境:

客户端-》 树莓派

服务器-》 阿里云的服务器,Ubuntu20

GitHub

releases发布版本

https://github.com/fatedier/frp/releases

客户端和服务器版本一致就可以,我用的就是最新的,一次Success。

image-20210820161935430

参考文档地址

官方参考文档

服务器端配置

上传frps文件

首先把 文件frpsfrps.ini上传至服务器

image-20210820112054212

修改frps.ini

输入

sudo vim frps.ini

frps.ini配置

[common]
#绑定的端口,
bind_port = 7000
#设置监听 HTTP 请求端口为 8080
vhost_https_port = 8080	
#使用  xx.xx.xx.xx:7500 访问frp,展示你的信息
dashboard_port = 7500
#进入   xx.xx.xx.xx:7500  所需要的用户名和密码
dashboard_user = admin
dashboard_pwd = password
# 自己设的token
privilege_token = 123456
#log_file日志文件
log_file = ./frps.log
#log_level记录的日志级别
log_level = info
#log_max_days日志留存天数
log_max_days = 3
#authentication_timeout超时时间
authentication_timeout = 0
#max_pool_count最大链接池,每个代理预先与后端服务器建立起指定数量的最大链接数
max_pool_count = 50

启动

使用命令行:

./frps -c ./frps.ini

接着使用xx.xx.xx.xx:7000访问

输入用户名和密码

admin

password

会出现:

image-20210820161310858

注如果访问不成功的话,看看自己的对应的端口是否打开

设置开机自启

使用systemd

因为Ubuntu17之后使用的是systemd管理,Ubuntu16使用的是rc.local

没有使用下面的命令可以下载

apt-get install systemd
apt-get install systemd-sysv

安装 systemd 之后,在 grub 配置文件中的 kernel 命令行指定下面的参数:

sudo vim /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash init=/lib/systemd/systemd"

然后重启

sudo reboot

设置

进入解压的目录下:

使用下面命令行

sudo cp frps /usr/local/bin/frps && sudo mkdir /etc/frp && cp frps.ini /etc/frp/frps.ini

复制frps/usr/local/bin/ ,复制frps.ini/etc/frp

编写service文件

注: 解压后有个systemd文件夹,里面有官方给的frps.service

sudo vim /usr/lib/systemd/system/frps.service 
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.ini
LimitNOFILE=1048576
TimeoutStartSec=30
ExecStop=/bin/kill $MAINPID
[Install]
WantedBy=multi-user.target

启动 frp 并设置开机启动

systemctl enable frps

启动

systemctl start frps

查看状态

systemctl status frps

部分服务器上,可能需要加 .service 后缀来操作,即:

systemctl enable frps.service
systemctl start frps.service
systemctl status frps.service

树莓派端配置

上传frpc文件

image-20210820111840407

配置 frpc.ini

[common]
server_addr = xx.xx.xx.xx
server_port = 7000
privilege_token = 123456
login_fail_exit =  false

[myRaph_pi]
type = tcp
local_ip = 192.168.137.144
local_port = 8000
remote_port = 7389

如果其他配置,请参考模板

模板

[common]
server_addr = xx.xx.xx.xx   #服务器公网IP
server_port = 7000    #frp服务端口,需与frps.ini相同
privilege_token = 123456      #特权模式密钥,需与frps.ini相同

log_file = /bin/frpc.log    #日志文件存储路径
log_level = info    #日志记录级别
log_max_days = 3    #日志最大存储天数
pool_count = 5
tcp_mux = true

[mytest]    #服务名称,可自定义
type = tcp    #协议类型(tcp)
#这个是我树莓派的内网地址,使用127.0.0.1连接错误
local_ip = 192.168.137.144
local_port = 8000    #本地服务端口
remote_port = 7389    #穿透后SSH服务访问端口

#还未使用

[web]    #服务名称,可自定义
type = http    #协议类型(http)
local_ip = 127.0.0.1
local_port = 80    #本地web服务端口
use_encryption = false
use_compression = true
subdomain = web    #二级域名,建议与此项的服务名称"web"设置为相同
custom_domains = web.frp.com    #自定义域名

启动

./frpc -c ./frpc.ini

出现 日志信息,连接成功之类的。

设置开机自启

使用systemd

因为Ubuntu17之后使用的是systemd管理,Ubuntu16使用的是rc.local

没有使用下面的命令可以下载

apt-get install systemd
apt-get install systemd-sysv

安装 systemd 之后,在 grub 配置文件中的 kernel 命令行指定下面的参数:

sudo vim /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash init=/lib/systemd/systemd"

然后重启

sudo reboot

设置

进入解压的目录下:

使用下面命令行

sudo cp frps /usr/local/bin/frpc && sudo mkdir /etc/frp && cp frpc.ini /etc/frp/frpc.ini

复制frpc/usr/local/bin/ ,复制frpc.ini/etc/frp

编写service文件

注: 解压后有个systemd文件夹,里面有官方给的frpc.service

sudo vim /usr/lib/systemd/system/frpc.service 
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Restart=on-failure
RestartSec=5s
TimeoutStartSec=30
ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.ini
ExecReload=/usr/local/bin/frpc reload -c /etc/frp/frpc.ini
ExecStop=/bin/kill $MAINPID

[Install]

WantedBy=multi-user.target

启动 frp 并设置开机启动

systemctl enable frpc

启动

systemctl start frpc

查看状态

systemctl status frpc

部分服务器上,可能需要加 .service 后缀来操作,即:

systemctl enable frpc.service
systemctl start frpc.service
systemctl status frpc.service

测试

树莓派端 ---python

#  服务器端代码
from socket import *
print (\'我是服务端!\')
HOST = \'\'
PORT = 8000
BUFSIZ = 1024


ADDR = (HOST, PORT)  # 创建端口,规定缓冲区大小
s = socket(AF_INET, SOCK_STREAM) # 创建TCP socket对象
s.bind(ADDR)  # 绑定地址
s.listen(4)  # 监听TCP,4代表:操作系统可以挂起(未处理请求时等待状态)的最大连接数量。该值至少为1

while 1:
    print("等待连接...")
    client, addr = s.accept()  # 开始被动接受TCP客户端的连接。
    print (\'连接的地址\',addr)
    data = client.recv(BUFSIZ*1024).decode()  # 接受TCP数据 decode是由于此处接受bytes而不是 str类型
    print("接收到数据:",data)

    client.close()
s.close()


windows端 ---java

package pojo;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;


public class SocketClient {

    public static void main(String[] args) throws InterruptedException {
        Scanner input = new Scanner(System.in);
        try {
            // 和服务器创建连接   
            Socket socket = new Socket("你的服务器公网ip",7389);
            // 要发送给服务器的信息
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);
            System.out.println("请输入:");
            String res = input.next();
            pw.write(res);
            pw.flush();
            socket.shutdownOutput();
            os.close();
            pw.close();
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

以上是关于Frp---树莓派4B内网穿透的主要内容,如果未能解决你的问题,请参考以下文章

树莓派FRP内网穿透及自启动

利用cpolar-内网穿透家中的树莓派,并开机自启动

树莓派安装frp服务

《树莓派4B家庭服务器搭建指南》第七期:使用树莓派解锁网易云灰色音乐

有没有可以自定义内网穿透到哪台有公网ip服务器的硬件成品?

校园网内网穿透,搭建校园网vpn