本帖最后由 seaprince 于 2019-1-8 06:55 编辑
自从大神们告知N1的神奇魅力之后,立马在PDD下单,70收了一个当矿机废弃的N1回家,开始我的N1之旅。
在论坛前辈的指引下,完成下面几步:
- 降级,矿机都是最新版本了,必须降级
- 刷官改,这步完了就可以当电视盒子用了。(然而并不是我的目标啦)
- 刷armbian,到此就有了一个Ubuntu Linux环境,是我们的主战场了
那么问题来了,虽然从4G或办公室都可以通过家里的外网IP访问到家里的N1,但家里的IP老变,怎么知道最新的IP地址呢?
这就是本文解决的问题。
论坛里有许多alidns的教程了,但我更喜欢怀旧,我的域名依然是Dnspod解析的(目前腾讯云也是Dnspod)。
1. 首先,登陆Dnspod后台,生成一个API Token. 你会得到一个ID和一长串的Token,两个都要。
https://www.dnspod.cn/console/user/security
然后把ID和Token用逗号连接,得到一个login_token串,存储备用。再创建一个新的A记录,用于以后访问家里路由器
2. 其次,用如下命令获取你的domain_id和record_id:
#这里的login_token由上一步获得,从结果中找你的域名,拿到domain_id
curl -k [url=https://dnsapi.cn/Domain.List]https://dnsapi.cn/Domain.List[/url] -d "login_token=12345,b0c540bb26ef7331874ed123123abcde&format=xml"
# 这里的domain_id从上一步获得,找到刚才新加的A记录的record_id
curl -k [url=https://dnsapi.cn/Record.List]https://dnsapi.cn/Record.List[/url] -d "login_token=12345,b0c540bb26ef7331874ed123123abcde&format=xml&domain_id=333333"
3. 下来,就是要找到自己的外网IP地址了,可以百度搜索ip得到,或通过ip138.com,ip111.cn这样的第三方网站拿到,或者自己有服务器的话,在服务器放这样的一个php脚本:
<?php
echo $_SERVER['REMOTE_ADDR'];
4. 最后,调用Dnspod的API把ip刷上去:
#这里的login_token由上一步获得
curl -k [url=https://dnsapi.cn/Domain.List]https://dnsapi.cn/Domain.List[/url] -d "login_token=12345,b0c540bb26ef7331874ed123123abcde&format=xml"
# 这里的login_token、domain_id、result_id、ip均从上述步骤获得
# sub_domain是你想用来做动态解析的子域名
# record_line_id是解析线路,0是默认
# value就是ip
curl -k [url=https://dnsapi.cn/Record.Ddns]https://dnsapi.cn/Record.Ddns[/url] -d "login_token=12345,b0c540bb26ef7331874ed123123abcde&format=xml&domain_id=333333&record_id=4444444&sub_domain=home&record_line_id=0&value=2.2.2.2"
重复以上3、4两步即可更新IP地址到域名上,以后就可以随便玩了。比如搭个网站、远程访问hassio、SSH远程连接看下。
什么,还是不知道怎么弄?那直接拷下面代码,保存为 /root/ddns.py
import urllib
import re
login_token = '12345,b0c540bb26ef7331874ed123123abcde'
domain_id = '333333'
record_id = '4444444'
sub_domain = 'home'
f = open('/var/run/ddns.ip', 'r+')
cip = f.readline()
u = urllib.urlopen('http://ip111.cn/')
html = u.read()
rip = re.findall(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b", html)[0]
def setip(ip):
global f, login_token, domain_id, record_id, sub_domain
uri = 'https://dnsapi.cn/Record.Ddns'
data = {
'login_token': login_token,
'format': 'json',
'domain_id': domain_id,
'record_id': record_id,
'sub_domain': sub_domain,
'record_line_id': '0',
'value': ip,
}
params = urllib.urlencode(data)
ret = urllib.urlopen(uri, params)
code = ret.getcode()
resp = ret.read()
f.write(ip)
print(resp)
print 'Local cache ip is ' + cip
print 'Remote detected ip is ' + rip
if (cip != rip):
print 'IP changed'
setip(rip)
else:
print 'IP is not changed'
添加到crontab,定时执行:
#命令行输入
crontab -e
# 弹出的编辑器中写入,含意是每5分钟看一次IP变了没
*/5 * * * * python /root/ddns.py >/dev/null 2>&1
大功告成!!
|