來(lái)源:公眾號(hào)【魚鷹談單片機(jī)】,ID ??:emOsprey
前面的筆記《如何像訪問(wèn)百度一樣訪問(wèn)家里的服務(wù)器?(三)》已經(jīng)通過(guò)公網(wǎng) IP +?橋接,完成了基本功能,已經(jīng)可以通過(guò)公網(wǎng) IP?在全國(guó)各地訪問(wèn)家里的服務(wù)器了。
但是有個(gè)麻煩的地方是,雖然運(yùn)營(yíng)商給我的是公網(wǎng) IP,但卻是動(dòng)態(tài)的,兩三天就更換一次,因此我們需要一種服務(wù),實(shí)時(shí)告訴我們家里寬帶的當(dāng)前 IP 是多少才能訪問(wèn)。
我們可以讓家里的服務(wù)器主動(dòng)發(fā)郵件的方式告訴我們當(dāng)前的 IP,但是樹(shù)莓派操作了一番,還挺麻煩的,沒(méi)成功,因此我們可以借由第三方免費(fèi)的 DDNS 服務(wù)實(shí)時(shí)更新 IP。這樣我們可以直接通過(guò)固定域名訪問(wèn)家里的服務(wù)器,我們只要記住域名即可。
這里魚鷹選擇的是公云:https://www.pubyun.com/products/dyndns/
手機(jī)注冊(cè)好之后,你就可以申請(qǐng)一個(gè)免費(fèi)域名了。
可以看到我已經(jīng)新建了一個(gè)域名,如?embedded_osprey.f3322.net,前面的?embedded_osprey 主機(jī)名可以自己設(shè)定,后面的 .f3322.net?是固定的,畢竟用的是別人的免費(fèi)服務(wù)。
現(xiàn)在我們只是有個(gè)域名,但是并沒(méi)有告訴它這個(gè)域名指向的地址是多少,因此我們需要一個(gè)客戶端告訴公云的服務(wù)器我們現(xiàn)在的 IP。
目前客戶端只支持 window,當(dāng)然Linux 的話不需要客戶端,直接用命令即可(需安裝 lynx,一般都有)。
我使用的是樹(shù)莓派,因此直接使用命令行形式即可。
本來(lái)只要執(zhí)行一次命令即可上傳 IP,但是因?yàn)槲覀兊?IP 是動(dòng)態(tài)的,因此我們需要定時(shí)執(zhí)行這條命令,讓他更新當(dāng)前公網(wǎng) IP。
有點(diǎn)類似定時(shí)發(fā)郵件告訴 公云 服務(wù)器自己的 IP,以便更新 IP。
這里我們可以使用 crontab 實(shí)現(xiàn)定時(shí)功能。
首先寫一個(gè)非常簡(jiǎn)單的更新腳本 update_ddns.sh(這里根據(jù)需要填寫公云網(wǎng)站的用戶名和密碼,自定義域名等信息,如上圖顯示):
#!/bin/bash
ipaddr=`lynx?-mime_header?-auth=username:password?"http://members.3322.net/dyndns/update?system=dyndns&hostname=xxxx.f3322.net"?| tail??-n?1?|?awk?'{print?$2}'`
date=`date?"+%y-%m-%d?%H:%M"`
echo?$date?$ipaddr
將腳本存放到合適位置,如?/usr/local/bin/,并給腳本可執(zhí)行權(quán)限:
sudo chmod +x /usr/local/bin/update_ddns.sh
現(xiàn)在可以嘗試一下執(zhí)行腳本,正常情況下,應(yīng)該能輸出當(dāng)前公網(wǎng) IP,可以對(duì)比一下 https://www.ip138.com/ 的 ip 查詢結(jié)果 。
正常命令執(zhí)行結(jié)果如下:
確認(rèn)腳本工作無(wú)誤后,即可加入定時(shí)器中定時(shí)執(zhí)行(可以使用 nano 編輯器,操作更簡(jiǎn)單),如圖:
*/10 * * * * root /usr/local/bin/update_ddns.sh
這里我們定時(shí) 10 分鐘更新一次。
總結(jié)下來(lái)就是,樹(shù)莓派定時(shí)執(zhí)行登錄公云服務(wù)器并更新域名 IP 的任務(wù),這樣公云的服務(wù)器就一直更新著我們最新的 IP 地址,當(dāng)我們使用域名登錄時(shí),會(huì)查詢到公云的服務(wù)器,從而就可以知道最新的 IP,最終登錄我們家里的服務(wù)器樹(shù)莓派了。
我們可以使用如下方式查詢域名所所對(duì)應(yīng)的 IP 是否正常:
當(dāng)我們通過(guò) nslookup 查詢?cè)O(shè)定域名的 IP 地址,和家里的寬帶IP是一致的話,證明我們的域名成功了。
此時(shí)我們可以在全國(guó)任何一個(gè)地方通過(guò)域名直接訪問(wèn)服務(wù)器了。類似訪問(wèn)百度一樣,YYDS??!
http://osprey.f3322.net:20080/
大家可以嘗試使用瀏覽器訪問(wèn)上面網(wǎng)頁(yè),看看是否能訪問(wèn)魚鷹搭建的簡(jiǎn)單網(wǎng)頁(yè)(大佬輕踩,不要攻擊咱的服務(wù)器哈,不值得)
注意事項(xiàng)
1、因?yàn)槲覀冃枰卿浌品?wù)器更新我們的寬帶 IP,因此不要輕易更換密碼(因?yàn)楦鼡Q了密碼,樹(shù)莓派無(wú)法登錄公云,也就意味著無(wú)法更新 IP,當(dāng)你使用域名登錄時(shí),就無(wú)法通過(guò)公云查詢到 IP 了)
2、因?yàn)槲覀儗?duì)公云服務(wù)器非常依賴,萬(wàn)一公云服務(wù)器出現(xiàn)問(wèn)題,那我們自己的服務(wù)器可能就登錄不了,因此需要有備選方案。
1)通過(guò)郵件之類的方式在 IP 更新后主動(dòng)將最新 IP 發(fā)到我們的郵箱,這樣我們可以在域名訪問(wèn)出現(xiàn)問(wèn)題的情況下,仍然可以通過(guò) IP 訪問(wèn)。
2)使用可以遠(yuǎn)程查看路由器 IP 的路由器。比如 tp-link 手機(jī)客戶端,可以隨時(shí)在手機(jī)查看當(dāng)前的路由器 IP 地址,相當(dāng)方便。
3、注意更換 SSH 常用登錄端口 22 為其他端口號(hào),防止被黑客暴力破解。更保險(xiǎn)的方式是,關(guān)閉 ssh 密碼登錄方式,只能通過(guò)私鑰方式登錄,防止被掃描端口號(hào),從而被暴力破解??梢詤⒖歼B接:https://zhuanlan.zhihu.com/p/89872671
到此,個(gè)人服務(wù)器算是搭建好了,目前魚鷹主要當(dāng)云盤使用,后期可能會(huì)為其他聯(lián)網(wǎng)設(shè)備做內(nèi)網(wǎng)穿透服務(wù),或者搭建調(diào)試日志服務(wù)器,亦或者個(gè)人網(wǎng)頁(yè)等等,后期有時(shí)間也可能會(huì)繼續(xù)更新這個(gè)系列,歡迎繼續(xù)關(guān)注。
總之,個(gè)人服務(wù)器,YYDS?。?!