背景
買樹莓派做開發(fā)一直是我想做的事??上乙恢睕]錢。
直到今年雙十一,我咬了咬牙,終于買了樹莓派。其實(shí)我當(dāng)時(shí)買樹莓派有一個(gè)直接原因,就是希望開發(fā)云打印項(xiàng)目。令人失望的是,由于驅(qū)動(dòng)問題,辦公室里面三臺打印機(jī),只有一臺能連上樹莓派,偏偏那一臺是性能最差的那臺。在這方面,樹莓派還不如辦公室里面一臺我?guī)淼氖荒昵暗墓P記本電腦——三臺打印機(jī)均能夠順利連接。于是,這臺樹莓派一直插著電放在創(chuàng)業(yè)園的辦公室里面吃灰。
當(dāng)然,我要是想執(zhí)行什么命令的話,拿著電腦到創(chuàng)業(yè)園,連上辦公室的網(wǎng)絡(luò),開SSH連樹莓派就可以了——甚至不用拿電腦,用那臺十一年前的電腦就可以了。我很長時(shí)間都是這樣,但是這個(gè)方法的弊端也很明顯:你如果忘記帶書和資料的話,就要在宿舍和辦公室之間跑上一來回。雖然創(chuàng)業(yè)園離宿舍并不遠(yuǎn),但是我的宿舍在六樓啊。這就讓我有了遠(yuǎn)程操作樹莓派的想法。
眾所周知,運(yùn)營商分配給用戶的IP是變化的,這種情況下就需要DDNS,就是通過客戶端將域名指向你現(xiàn)在的IP地址,動(dòng)態(tài)檢測變化。辦公室的路由器是TP-LINK的,雖說不是智能路由器,不過也有DDNS。按理說,只要設(shè)置好DDNS和端口轉(zhuǎn)發(fā),就不成問題了。但是我發(fā)現(xiàn)行不通。后來我知道DDNS實(shí)現(xiàn)的前提是路由器有公網(wǎng)IP,而不巧的是辦公室里面沒有公網(wǎng)IP,處在校園網(wǎng)內(nèi),屬于二級路由……
我在阿里云上用學(xué)生權(quán)益買了一年的入門級ECS,與此同時(shí)買了花生殼的內(nèi)網(wǎng)穿透服務(wù)。雖然經(jīng)過測試,花生殼能夠在樹莓派上運(yùn)行并進(jìn)行內(nèi)網(wǎng)穿透,但是我購買的價(jià)位的功能實(shí)在太有限了,對于學(xué)生來說還是錢要緊。
這時(shí)候我自然而然地想到了那臺ECS。ECS擁有固定的公網(wǎng)IP,完全可以通過它來實(shí)現(xiàn)內(nèi)網(wǎng)穿透啊。我本來不需要再花錢的。
說到內(nèi)網(wǎng)穿透,我就想到了……ngrok。但是ngrok第二版不再開源,第一版(GitHub上的inconshreveable/ngrok)不適合生產(chǎn)環(huán)境,而且經(jīng)測試,無法運(yùn)行。不管是我的操作有誤還是本來就不行,那個(gè)沒法放在后臺的界面也是一個(gè)問題。
ngrok的情況
正當(dāng)我失望之時(shí),另一個(gè)內(nèi)網(wǎng)穿透的工具進(jìn)入了我的視線——frp(GitHub上的fatedier/frp)。經(jīng)簡單測試,frp對于我來說是可以運(yùn)行的。
不過這里面的“測試”進(jìn)行的時(shí)候,我對遠(yuǎn)程操作樹莓派的需求沒那么強(qiáng)烈,所以就暫時(shí)擱在一邊了。直到最近氣溫驟降,我又因?yàn)榧眲x車導(dǎo)致手部受傷,實(shí)在無法在辦公室停留太長時(shí)間(雖然辦公室有空調(diào),但電費(fèi)是我出的?。?,于是這個(gè)計(jì)劃就又提上了日程。
實(shí)現(xiàn)這個(gè)計(jì)劃足足花了我三天的時(shí)間。期間查了大量的資料,由于誤操作重裝了三次系統(tǒng)。不過最后總算成功了。我就把成功的操作說一下吧。
網(wǎng)絡(luò)結(jié)構(gòu)
首先,我在此之前就通過路由器的IP-MAC綁定為樹莓派和筆記本電腦分配了固定的IP。路由器是192.168.1.1,樹莓派是192.168.1.120,筆記本電腦是192.168.1.121。于是我們得出以下網(wǎng)絡(luò)圖:
網(wǎng)絡(luò)
以下假定服務(wù)器的地址是exam,且該域名可控。
下載
接下來到GitHub上下載frp的發(fā)行版本。下載時(shí)看好對應(yīng)的平臺。ECS對應(yīng)的是linux_amd64,樹莓派對應(yīng)的是linux_arm(居然不是64位的……)。
frp發(fā)行版本
下載的時(shí)候,復(fù)制對應(yīng)的文件的鏈接,進(jìn)入一個(gè)方便的目錄,然后執(zhí)行(從下面開始,shell命令、腳本中被$()包裹的語句(包含$())替換成所述的部分):
$ wget $(鏈接)稍后你就會(huì)看到目錄里面多了一個(gè)對應(yīng)的文件。
然后解壓:
tar -xzv -f $(frp壓縮包路徑) -C $(要解壓到的路徑(不含frp文件夾本身))之后你會(huì)在對應(yīng)的目錄中看到以frp開頭的文件夾。由于名字太長不好記,我們最好把文件夾改一下名字:
mv $(frp文件夾路徑) $(改名后的frp文件夾路徑)最終,我在ECS上解壓到了/root/frps中,在樹莓派上解壓到了/home/pi/frpc中。
配置
我們在這里的目標(biāo)就是能夠在外網(wǎng)連接SSH。我們可以參考文檔來對frp進(jìn)行配置。frp的一個(gè)好處是官方文檔有中文版的。
編輯ECS上的文件,這里面的路徑是/root/frps/:
[common] # 綁定的端口 bind_port = 6000 # 為了安全,可以增加一個(gè)身份驗(yàn)證碼的設(shè)置(選填) token = abc另外,確保以上提到的這些端口號沒有被其他應(yīng)用占用。
然后編輯樹莓派上的文件:
[common] # 這里填frps所在服務(wù)器的地址 server_addr = exam # 與中[common]中的bind_port一致 server_port = 6000 # 與中[common]中的token一致(若沒有可不填) token = abc # 建立SSH連接的內(nèi)網(wǎng)穿透 [ssh] # SSH使用TCP連接 type = tcp # 填本機(jī)的IP就可以 local_ip = 127.0.0.1 # SSH服務(wù)的端口號,默認(rèn)是22,如果更改了就填更改的端口號 local_port = 22 # 服務(wù)器對應(yīng)的端口號,注意不能和服務(wù)器上的已有端口沖突 remote_port = 6022阿里云的ECS中需要對網(wǎng)絡(luò)安全組進(jìn)行設(shè)置,允許出入站方向的端口。比如在上面的例子中,我們要允許出入站方向TCP連接6000、6022的端口。
阿里云的網(wǎng)絡(luò)安全組默認(rèn)是允許所有出站端口的,所以這種情況下允許對應(yīng)的入站端口就行了。下同。
測試
我們在實(shí)際使用前,先進(jìn)行測試。
先在ECS上運(yùn)行frps:
# /root/frps/frps -c /root/frps/再在樹莓派上運(yùn)行frpc:
$ /home/pi/frpc/frpc -c /home/frpc/為了方便講解,上面的路徑使用了絕對路徑,使用對應(yīng)的相對路徑也是可以的。
觀察輸出,如果輸出沒有錯(cuò)誤,那就用SSH連接一下exam,記得把端口號改成6022。如果能夠連上,就說明沒有問題了。這時(shí)按Ctrl + C停掉兩邊的程序。
后臺運(yùn)行與自啟動(dòng)
我們實(shí)際運(yùn)行中總不能運(yùn)行這個(gè)命令,把這個(gè)窗口掛在電腦上吧,不然關(guān)掉了程序就停了。為此,我們還要想一個(gè)方法,讓它后臺運(yùn)行。
讓一個(gè)程序后臺運(yùn)行的方法比較多,我們這里使用比較方便的一個(gè)方法:將它做成服務(wù)。這樣的好處是我們能夠用一條命令實(shí)現(xiàn)它的啟動(dòng)、停止、重啟、自啟動(dòng)和取消自啟動(dòng)。尤其是自啟動(dòng),這也是是我們需要的。
創(chuàng)建服務(wù)的方式在兩臺機(jī)器上都差不多,我這里就以ECS上面的frps為例吧,在樹莓派上操作的時(shí)候記得換成frpc及相關(guān)的內(nèi)容。
首先我們在/lib/systemd/system/中創(chuàng)建一個(gè)文件(這里面.service之前的名字取一個(gè)能夠記住的就行,但是要注意前后一致),內(nèi)容如下,保存:
[Unit] # 寫一個(gè)比較容易理解的介紹,以后查日志的時(shí)候有用 Description=fraps service After=ne Wants=ne [Service] Type=simple # 這里寫之前運(yùn)行成功的frps命令 ExecStart=/root/frps/frps -c /root/frps/ [Install] WantedBy=mul之后執(zhí)行下面的命令開啟服務(wù):
# service frps start之后在樹莓派上進(jìn)行類似操作,但是還要修改,在[common]字段增加如下條目:
# 由于樹莓派沒有時(shí)鐘,開機(jī)后時(shí)間不對,frpc訪問服務(wù)器時(shí)會(huì)發(fā)生錯(cuò)誤,所以此項(xiàng)必填 authentication_timeout = 0 # 為防止網(wǎng)絡(luò)錯(cuò)誤導(dǎo)致服務(wù)退出,填上此項(xiàng) login_fail_exit = false這個(gè)操作非常重要。我之前沒有進(jìn)行設(shè)置,結(jié)果第二天樹莓派開機(jī)了,frp卻沒有啟動(dòng)成功。當(dāng)時(shí)我在宿舍,帶著電腦去了辦公室,查了日志才發(fā)現(xiàn)這個(gè)問題。
執(zhí)行對應(yīng)的frpc服務(wù)。測試一下,如果沒有問題,繼續(xù)以下操作。
在ECS上執(zhí)行以下命令以實(shí)現(xiàn)自啟動(dòng):
# systemctl enable在樹莓派上進(jìn)行類似操作。再重啟一下樹莓派進(jìn)行測試,如果重啟后能夠通過外網(wǎng)連接樹莓派,那么就成功了。
遠(yuǎn)程桌面
既然SSH能夠連接上,我們再考慮一下連接其他的東西吧,比如那臺十一年前的筆記本電腦。
遠(yuǎn)程桌面和SSH一樣,都是使用TCP進(jìn)行連接的,不過遠(yuǎn)程桌面的默認(rèn)端口號是3389。
在進(jìn)行下面的操作之前,我已經(jīng)設(shè)置了網(wǎng)絡(luò)共享,而且把電腦的遠(yuǎn)程桌面打開了。
開啟遠(yuǎn)程桌面連接
在樹莓派的中添加以下內(nèi)容:
[RDP] type = tcp # 這里填筆記本電腦的IP local_ip = 192.168.1.121 local_port = 3389 # 還是要注意不要和已有端口沖突 remote_port = 6389到ECS的控制臺中允許6389端口入站方向的TCP連接。
重啟frpc服務(wù):
# service frpc restart然后使用遠(yuǎn)程桌面連接工具連接exam:6389:
遠(yuǎn)程桌面連接
如果成功的話,就沒什么問題了。
我之前以為要讓筆記本電腦在樹莓派之下的網(wǎng)絡(luò)才行,當(dāng)時(shí)還費(fèi)很大力氣開了樹莓派的無線熱點(diǎn),之后發(fā)現(xiàn)只要筆記本電腦與樹莓派在同一網(wǎng)絡(luò)即可……
之后我成功地使用遠(yuǎn)程桌面連接在宿舍為室友遠(yuǎn)程打印了準(zhǔn)考證。
我之前在樹莓派上安裝了xrdp,可以使用遠(yuǎn)程桌面連接訪問樹莓派的圖形環(huán)境。需要讓它也能夠遠(yuǎn)程連接,如法炮制即可,不過把[RDP]改一下,把對應(yīng)的IP改成127.0.0.1,把對應(yīng)的端口號改一下就行。不過xrdp的性能不如Windows原生的遠(yuǎn)程桌面好,但是總比VNC好多了吧。
分開服務(wù)
這里注意一下,如果你在外網(wǎng)使用SSH連接樹莓派,在重啟frpc服務(wù)的時(shí)候,SSH的連接會(huì)中斷。雖然能夠重新連接,但是如果沒法重新連接的話就非常尷尬了。我就遇到過這種情況:配置文件寫錯(cuò),導(dǎo)致frp重啟失敗,不得不跑到辦公室解決問題。
經(jīng)過我的測試,發(fā)現(xiàn)在端口號不沖突的情況下,同一臺設(shè)備上能夠運(yùn)行多個(gè)frpc。這樣的話,我們可以嘗試將SSH的部分另外寫一個(gè)ini文件(注意[common]部分也要寫上),將對應(yīng)的命令寫成的服務(wù),設(shè)置開啟、自啟動(dòng)。這樣一來,當(dāng)我們在SSH上重啟frpc的時(shí)候,就不會(huì)影響到SSH了。
運(yùn)行樹莓派上的網(wǎng)站
很多人用ngrok和frp的目的就是把本地的網(wǎng)站映射到公網(wǎng)地址上進(jìn)行測試。我們假定在樹莓派的80端口上運(yùn)行著網(wǎng)站,希望將其映射到pi.exam。
可以在ECS的中的[common]字段中添加如下的配置:
# 映射到虛擬主機(jī)的HTTP端口,不要有沖突 vhost_http_port = 6080 # 這里填域名 subdomain_host = exam在樹莓派的中添加以下配置:
# 取一個(gè)易懂的不重復(fù)的名字 [web] type = http # 本地運(yùn)行HTTP服務(wù)的端口 local_port = 80 # 子域名 subdomain = pi到ECS的控制臺中允許80、6080端口入站方向的TCP連接。
在exam的域名解析配置中,添加A記錄*到ECS的IP地址。
在兩邊重啟frp相關(guān)的服務(wù)。這時(shí)候訪問pi.exam,即可訪問樹莓派上的網(wǎng)站。
類似的方法還可以以特定域名訪問、運(yùn)行HTTPS協(xié)議的網(wǎng)站,詳細(xì)的話可以看看官方的文檔。
實(shí)際操作中非常不建議使用*這樣的A記錄,可以建立*.test這樣的A記錄,對應(yīng)的部分也要做修改。
結(jié)尾
frp的配置還有很多,可以看看官方文檔。而且官方就有中文文檔,相當(dāng)方便。
1.《關(guān)于frpc怎么設(shè)置打印機(jī),你需要知道這些在二級路由下用樹莓派和frp折騰內(nèi)網(wǎng)穿透》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《關(guān)于frpc怎么設(shè)置打印機(jī),你需要知道這些在二級路由下用樹莓派和frp折騰內(nèi)網(wǎng)穿透》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實(shí),對其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請保留本站內(nèi)容來源地址,http://f99ss.com/why/3113403.html