目錄
- 在校園網内實作區域網路域名通路
-
- 一、準備
-
-
- 域名
- 擷取ip位址
- 定時解析
-
- 二、 域名解析
-
-
-
- 1.購買域名[阿裡雲](https://wanwang.aliyun.com/domain/1yuan/)
- 2.RAM鑒權
-
- 2.1建立使用者
- 2.2 授權管理。在使用者找到你的賬戶進行權限管理。
- 3.api準備。
- 4.SDK準備。
- 5.需要解析的IP準備。
-
- 5.1 stok擷取
- 5.2擷取ip
- 6.更新記錄值。
-
- 6.1RecordId擷取。
- 6.1 設定記錄值。
- 7.定時運作。
- 8.端口映射。
-
-
- 完成
- 其他
在校園網内實作區域網路域名通路
在大學校園裡一般在同一網段且能互相通路,基于這個原理,我用阿裡雲域名和DNS+ tp路由器實作使用域名通路
一、準備
域名
- 我适用了阿裡雲的域名 。理由便宜(新使用者首年1元起),api友善
- 大家也可用其他的。據我了解cloudflare也比較好用但是api沒寫過
擷取ip位址
- 我本人用的是TP的路由器,使用python爬蟲的方式爬取路由器的ip
- 如果大家使用其他的路由器大同小異都可爬取IP位址
- 如果是直接接入校園網更簡單,随便一搜就是方法。(注意不是192.168.x.x網段的)
定時解析
- 使用域名提供商的api+python+linux 的定時運作任務實作定時解析
- 關于伺服器裝置選擇,都可以通用各種平台。有資本可以跑一個PC機,低成本實作就在樹莓派上跑。
- linux的定時任務 使用crontab,友善簡單
二、 域名解析
1.購買域名阿裡雲
注意全程要實名認證的前提下
2.RAM鑒權
所謂RAM鑒權就是給api接口通路的權限,這是阿裡的一種安全措施。
2.1建立使用者
在控制台頁面滑鼠在頭像處懸停有通路控制項,進入
在使用者中建立使用者,之後選中控制台通路和程式設計通路
登入名稱和顯示名稱自定義。會有短信的二級驗證。之後會生成AccessKey ID和AccessKey Secret,記得儲存,之後會用。
2.2 授權管理。在使用者找到你的賬戶進行權限管理。
更多授權方式參考api文檔-RAM鑒權
本次授權DNS相關操作,權限政策名稱為 AliyunDNSFullAccess添權重限即可,至此RAM鑒權完成。
3.api準備。
在2.1步驟中我們得到了AccessKey ID和AccessKey Secret。然後查詢api文檔-API 預覽。你可以手動添加一個域名之後更新記錄隻,或者更據api文檔通過接口添加域名,顯然前者要更簡單一點。下面我們來說api接口,在阿裡給的調試工具裡可以提前實驗。
參數解釋都有,自行閱讀。下面有執行個體代碼,複制即可。但是RecordId(解析記錄的ID)沒有給出我們要通過另一個api擷取——擷取子域名解析記錄。
同上即可擷取RecordId。
4.SDK準備。
在阿裡雲的SDK市場選擇安裝所需SDK。詳細資訊閱讀 API文檔-SDK。
目前我們使用核心庫和DNS庫。使用
python3 -m pip install aliyun-python-sdk-core
和
python3 -m pip install aliyun-python-sdk-alidns
安裝,注意是python3。至此SDK安裝完成。
5.需要解析的IP準備。
我使用了tp模拟登入方式,大家可以使用其他的。
5.1 stok擷取
def loginInRouter():
""" 登陸路由器或者對應的stok
Args:
None
Returns:
toke:路由器傳回的stok
-1:為擷取失敗
"""
url = "http://192.168.1.1/"
request_body = '{"method":"do","login":{"password":"********"}}'
header = {"Content-Type": "application/json"}
res = requests.post(url, data=request_body, headers=header)
res = res.json()
code, stok = int(res["error_code"]), res["stok"]
if(code == 0):
info("get stok and stok:{}".format(stok))
return stok
else:
error("擷取stok失敗")
return -1
對于password可以在浏覽器裡檢視,他不是路由的輸入密碼,而是路由器根據的登陸密碼轉換過來的。
路由器首頁打開浏覽器network。192.168.1.1的POST請求的傳回時有password。
此時stok擷取了,在根據stok擷取IP位址,注意每次登入的stok不相同是以要每次都要擷取一邊stok,但是password不變。
5.2擷取ip
def getRouterIp(stok):
""" 擷取路由器目前的擷取的内網ip
Args:
stok:登陸時擷取到的stok
Returns:
None
"""
if(stok != -1):
url = "http://192.168.1.1/stok={}/ds".format(stok)
request_body = '''
{
"network": {
"name": "wan_status"
},
"cloud_config": {
"name": [
"new_firmware",
"device_status",
"bind"
]
},
"wireless": {
"name": [
"wlan_wds_2g",
"wlan_wds_5g"
]
},
"method": "get"
}
'''
header = {"Content-Type": "application/json"}
res = requests.post(url, data=request_body, headers=header)
res = res.json()
return res['network']['wan_status']['ipaddr']
else:
error("擷取ip失敗")
return -1
此時傳回的值便是ip位址。
6.更新記錄值。
6.1RecordId擷取。
def GetRecordId():
accessKeyId='your accessKeyId'
accessSecret='your accessSecret '
client = AcsClient(accessKeyId, accessSecret, 'cn-hangzhou')
request = DescribeSubDomainRecordsRequest()
request.set_accept_format('json')
request.set_SubDomain("your domain")
response = client.do_action_with_exception(request)
RecordId=json.loads(str(response, encoding='utf-8'))['DomainRecords']['Record'][0]['RecordId']
# print(RecordId)
return RecordId
這段代碼是阿裡雲給的執行個體代碼。
6.1 設定記錄值。
def setDns(ip="8.8.8.8",RecordId='4512578625647894589'):
accessKeyId='your accessKeyId'
accessSecret='your accessSecret '
client = AcsClient(accessKeyId,accessSecret, 'cn-hangzhou')
request = UpdateDomainRecordRequest()
request.set_accept_format('json')
print(RecordId)
request.set_RecordId(RecordId)
request.set_RR("RR")
request.set_Type("A")
# print(ip)
request.set_Value(ip)
response = client.do_action_with_exception(request)
# print(response)
return True
此時就算基本完成。然後處理一下代碼之間的邏輯關系,有興趣可以寫寫log友善調試。值得注意的是,如果更新記錄值沒有改變,會傳回400的錯誤
HTTP Status: 400 Error:DomainRecordDuplicate The DNS record already exists. RequestID: 1E20C9A1-BFDF-4E22-ACC4-2CA5CC690CE2
。是以有必要寫寫如果沒有變化不送出的步驟。
7.定時運作。
我使用了crontab方法,簡單易用。
這裡有一個工具——crontab時間計算工具,供大家參考。
8.端口映射。
此時設定的域名是路由器一級或者網關一級的,并不能通路到具體裝置,要進行端口映射。在路由器裡找到虛拟伺服器。
外部端口自定義,建議選擇未被占用的,典型的80 443 1080 3389 22 23 8080就不要用了。
常見端口 | 功能 |
---|---|
80 | http服務 |
443 | https服務 |
22 | SSH |
1080 | SOCK5 |
3389 | windows遠端桌面 |
21 | FTP |
110 | POP3 Post Office Protocol(E-mail) |
端口映射前要綁定IP和MAC位址,以防DHCP變化裝置IP造成無法通路。
完成
到這裡你可以在校園網内自由通路,最爽的是windows的Remote Desktop各平台都有軟體,想想能在pad或者手機幾乎零延時遠端控制。或者任意地方通路SSH不爽嗎???
其他
1.西安電子科技大學不做修改可直接應用
2.歡迎大家通路我的部落格
3.完整代碼下載下傳