1. 程式人生 > 其它 >Frp---樹莓派4B內網穿透

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。

參考文件地址

官方參考文件

伺服器端配置

上傳frps檔案

首先把 檔案frpsfrps.ini上傳至伺服器

修改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

會出現:

注如果訪問不成功的話,看看自己的對應的埠是否開啟

設定開機自啟

使用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檔案

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

}