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();
        }
    }

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM