爲了使家中的樹莓派能經過公網訪問,咱們須要一款內網穿透軟件,筆者在這裏選擇的是frp,相比其餘方式具備開源免費,配置簡單,無故口數限制的優點。linux
下載地址:https://github.com/fatedier/f...git
1、下載安裝包
服務端和客戶端都在同一個安裝包裏,但須要根據本身系統分別下載對應的安裝包
筆者樹莓派安裝32位CentOS操做系統,做爲客戶端下載的版本爲frp_0.21.0_linux_arm.tar.gz
服務端爲某雲服務器安裝64位CentOS操做系統,做爲服務端下載版本爲frp_0.21.0_linux_amd64.tar.gzgithub
2、配置
將壓縮包分別解壓,能夠看到frps爲服務端啓動腳本,frpc爲客戶端啓動腳本。
服務端建立frps.ini文件,具體配置項能夠參照frps_full.ini文件
客戶端建立frpc.ini文件,具體配置項能夠參照frpc_full.ini文件瀏覽器
筆者服務端配置以下:服務器
[common] # frp 服務端端口(必須) bind_port = 7000 # frp 服務端密碼(必須) token = 請設置本身的密碼 # 認證超時時間,因爲時間戳會被用於加密認證,防止報文劫持後被他人利用 # 所以服務端與客戶端所在機器的時間差不能超過這個時間(秒) # 默認爲900秒,即15分鐘,若是設置成0就不會對報文時間戳進行超時驗證 authentication_timeout = 0 # 儀表盤端口,只有設置了才能使用儀表盤(即後臺) dashboard_port = 7500 # 儀表盤訪問的用戶名密碼,若是不設置,則默認都是 admin dashboard_user = admin dashboard_pwd = admin
客戶端配置以下:網絡
[common] server_addr = 請填寫雲服務器ip地址 server_port = 7000 token = 請填寫服務端設置的密碼 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 use_encryption = false use_compression = false remote_port = 6001
3、運行
服務端啓動:nohup ./frps -c ./frps.ini &
客戶端啓動:
客戶端因爲遠程操做須要重啓系統或者客戶端進程被意外殺掉後,服務端沒法再鏈接上。爲了能保證客戶端服務的高可用只設置客戶端開機自啓是不行的,筆者的處理辦法爲加一個定時腳本每隔一段時間掃描客戶端進程,若是不存在就啓動。
筆者的定時啓動腳本以下monitor.sh:ssh
#!/bin/sh Monitor() { ps -fe|grep frpc |grep -v grep if [ $? -ne 0 ];then echo "start process....." nohup /usr/local/frp/frp_0.21.0_linux_arm/frpc -c /usr/local/frp/frp_0.21.0_linux_arm/frpc.ini & fi } Monitor>>/usr/local/frp/monitor.log
編輯 /etc/crontab文件在最後一行加入如下代碼,設置每一分鐘掃描一次tcp
*/1 * * * * root /bin/sh /usr/local/frp/monitor.sh
4、完結
在瀏覽器訪問服務端IP地址加映射的SSH端口號便可查看儀表盤頁面以下:工具
SSH工具配置服務端IP地址,端口爲映射的SSH端口(此處筆者的爲6001),用戶名和密碼爲客戶端的用戶名密碼,便可經過公網直接訪問局域網內的機器了。加密
另外若是服務端配置設置了authentication_timeout參數且不爲0須要保證客戶端和服務端時間同步,否則會啓動失敗。
須要設置的同窗能夠參照如下方式進行設置:
ntpdate 0.asia.pool.ntp.org #同步網絡時間 timedatectl set-timezone Asia/Shanghai #設置時區
然而樹莓派並不像咱們目前的筆記本或者主機同樣存在cmos電池,在斷電以後,時間就停留在當前這個時間點,下次開機依然從此次開始。
所以可參照前邊在定是腳本文件加入如下代碼:
/1 * * * * ntpdate 0.asia.pool.ntp.org