merlin custom ddns with aliyun

首先要感谢opkg这个工具,让我们可以方便的在路由器上使用python和pip。

1
2
$ opkg install python-pip
$ pip install aliyun-python-sdk-alidns

安装好后先写一个脚本找到自己域名的RecordID。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/opt/bin/python
from aliyunsdkcore import client
from aliyunsdkalidns.request.v20150109 import DescribeDomainRecordsRequest
from aliyunsdkalidns.request.v20150109 import UpdateDomainRecordRequest
import sys
if __name__ =='__main__':
clt = client.AcsClient('Key........','Secret..................',
'cn-hangzhou')
rquest=DescribeDomainRecordsRequest.DescribeDomainRecordsRequest()
request.set_accept_format('json')
request.set_DomainName('fire3.xyz')
result = clt.do_action(request)
print result

然后写一个小脚本,放在 /jffs/scripts/home.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/opt/bin/python
from aliyunsdkcore import client
from aliyunsdkalidns.request.v20150109 import DescribeDomainRecordsRequest
from aliyunsdkalidns.request.v20150109 import UpdateDomainRecordRequest
import sys
if __name__ =='__main__':
clt = client.AcsClient('Key........','Secret..................',
'cn-hangzhou')
request=UpdateDomainRecordRequest.UpdateDomainRecordRequest()
request.set_RecordId(83035279)
request.set_Value(sys.argv[1])
request.set_RR('home')
request.set_Type('A')
request.set_TTL('600')
result = clt.do_action(request)

再写一个小脚本/jffs/scripts/ddns-start调用上面的python:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh
IP=`ip addr show ppp0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1`
if [ X"$IP" == X"" ]
then
/sbin/ddns_custom_updated 0
exit -1
fi
/jffs/scripts/home.py $IP
/sbin/ddns_custom_updated 1

大功告成。注意 /jffs/scripts/ddns-start是默认的ddns设置脚本,名字不可以变动。见这里