如题:
我现在家里是 adsl 拨号,每次断网后通过动态域名自动更新对应 ip ,有时候手动重新拨号后不能马上访问家里的电脑。
我有自己的 vps 服务器,是否可以在上面放一个网页,家里通过脚本自动更新 ip 到 vps 服务器,如 post 地址为
http://abc.com/?wlan1IP=123.12.12.11&key=dsfarewtert34d7&user=3234234
当我访问 http://abc.com/?key=dsfarewtwerert34d7&user=3234232234
显示最近一次更新 ip 及线路一的 ip 是 123.12.12.11
我现在实现方式是使用 ddns 利用 ros 服务器自动更新 ip ,每次调试时一断开 ip 再次连接得等 10 多分钟,如果 ip 更新太频繁会导致 ddns 服务商不解析,而且从 ros 监测到多线路外网 ip 地址变化到更新 dns 地址,在到国内更新 dns 地址,然后收到清楚本机 dns 缓存是很耗时麻烦的事情,
而且需要申请二级域名,如果可以直接可以直接通过访问
http://vpshostIP/ToOA 直接转跳到内网 oa 就更好了
特上来看看有没有现成的方法,没有就自己在造个轮子?
1
abelyao 2016-02-14 20:53:01 +08:00
DNSPod 有动态域名解析的 API ,直接调用就可以:
https://www.dnspod.cn/docs/records.html#dns 如果使用其它的域名解析商,也可以看看有没有相应的文档; 另外如果只是要连接家里的 IP 地址,有太多现成的方案了… 花生壳之类的都是 |
3
terence4444 2016-02-14 21:08:20 +08:00
我正在用的是这家: http://www.pubyun.com/
Windows 跑了个计划任务,每 5 分钟执行一次以下 Python 代码: p_url = """http://members.3322.net/dyndns/update?system=dyndns&hostname=SAMPLE.f3322.net""" base64string = base64.encodestring('%s:%s' % ('USERNAME', 'PASSWORD')).replace('\n', '') opener = urllib2.build_opener() req = urllib2.Request(p_url) req.add_header("Authorization", "Basic %s" % base64string) rst = opener.open(req, timeout=10) print rst 另外我还加了 Pushbullet 每次 IP 变动的时候主动通知功能,供参考。 花生壳也能用,但是感觉花生壳延迟比较大,官方半屏蔽了 POST 的方法(不知道是不是我没搞好),要下载他们的客户端。 |
4
qile1 OP dnspod 时效性不行,我刚断开外网,在自动连接上 ip 马上变,但是得等 dns 更新后才是最新的 ip 。
我现在也是用的 dnspod 方案,主要是更新不及时,安装花生壳这个方案及使用 teamview 都挺好,但是当我需要在路由器 ros 上配置就没法实现了。只要是如何低成本快速更新自己的 ip 地址, 现在可以申请免费 php 空间还是有一些的,然后放一个 php 文件,让路由每 10 秒定时去 post ,而且可以不用注册二级域名(当然注册了更方便),基本可以做到 10 秒延迟,而免费的 dns 不可能让用户 10 秒更新,我记得国外那么比较出名的免费 ddns 更新是限制 15 分钟更新一次的 |
5
messyidea 2016-02-14 21:18:24 +08:00
我记得 openwrt 那个 hotplug 的文件夹里面的脚本会在网络状态发生变化时执行。直接把 ddns 的脚本放在哪里就行了。。一般连上网之后 ip 是不会变的吧。
|
7
terence4444 2016-02-14 21:50:31 +08:00
@qile1 SAE 上可以搭一个 Python 或 PHP 项目,家里 PC 或者 路由 POST IP 到 SAE 存在 Storage 里,然后请求这个 Storage 的内容就可以了。
|
9
xenme 2016-02-14 22:43:25 +08:00 via iPhone
我是 dnspodcname 到 ros 域名, ros 脚本每分钟更新一次,跑到现在快
快两年了,运行一直良好,延迟也就一两分钟。 |
10
qile1 OP @xenme 我也是 ros 使用,我现在是多线路,有问题远程处理,有时候需要重新拨号,一断开,得等一会再连接,虽然使用邮箱的短信提醒可以通过手机通知,但是美中不足的是手动断开的话,不能及时得到外网 ip ,得等很长一段时间
|
11
clanned 2016-02-15 01:41:10 +08:00 via Android
之前用 PHP 写了个用了很久,后来就干脆用 ddns 服务了,参考 https://github.com/xdtianyu/scripts/tree/master/ddns
|
12
xylophone21 2016-02-15 10:41:59 +08:00
你的思路是可行的,我这边也有个 ROS 路由,已经这样跑了 2 年多了。
服务端因为太简单了就没找现成的方案,随便用 python 写一个挂着 SAE 上,不到 200 行,基本没有消耗,也完全不用考虑优化。 ROS 上用脚本定时检查本机 IP ,与上次 post 的不同则从重新 post ,都是本机运算,时效可以做到很高,不过我设置的是 1 分钟。 |