[葱头原创] 动态IP更新攻略

发表于:2007-06-09来源:作者:点击数: 标签:
葱头一直使用希网3322.org动态DNS,至于如何下载和设置客户端我就不详细说明了,3322.org里面有详细的设置方法。 使用的过程中我发现了一些问题,虽然ADSL自动拨号可以利用3322.org来更新DNS,但有些时候却会失效,这是在ADSL有时候会产生一些死IP,如果不手

葱头一直使用希网3322.org动态DNS,至于如何下载和设置客户端我就不详细说明了,3322.org里面有详细的设置方法。

使用的过程中我发现了一些问题,虽然ADSL自动拨号可以利用3322.org来更新DNS,但有些时候却会失效,这是在ADSL有时候会产生一些死IP,如果不手工删除这些"死IP",即使运行希网的客户端程序也没有用,它只会提交旧的那个"死IP"。就是这样,使葱头决心要把整个更新的过程自动化而不需要手工介入。

操作系统:FreeBSD 4.7

第一、以root身份在/sbin中创建一个叫ipupdate.sh的文件:

ipp=$(ifconfig |grep -- '-->' | awk '/inet/{print $2}')
#echo $ipp
oldip=$(echo $ipp|awk '//{print $1}')
newip=$(echo $ipp|awk '//{print $2}')
if [ "$newip" != "" ]; then
        /sbin/ifconfig tun0 delete $oldip
        echo "It have deleted the old ip address and updated the DNS";
else
        echo "There is no New IP Addess." ;
fi
/usr/local/ez-ipupdate/ez-ipupdate -c /usr/local/ez-ipupdate/qdns.conf  (这一行是希网客户端提交IP地址)

然后,chmod 744 ipaddress.sh,为什么只能root执行? 因为脚本里面删除ip地址只能root操作,所以其他人运行了这个脚本也没用。

第二,建立/etc/ppp/ppp.linkup 文件,目的是拨号后执行里面的脚本
adsl:
 !bg /sbin/ipupdate.sh     
(注意,!bg之前必须有一个空格!)

这样,当ADSL拨号的时候就会自动删除旧的IP地址,将新IP提交到希网。

欢迎大家指正!

 夜未眠 回复于:2003-05-22 18:58:05
希网的解析慢得要死。而且10次4次不成功。
以上只是个人观点,仅供参考

 redfox 回复于:2003-05-22 21:11:11
我一直用自己的脚本更新,希网自己的有问题,ip一换就不行了。

 zkinsz 回复于:2003-05-22 23:10:48
[quote:1bb2b176c3="redfox"]我一直用自己的脚本更新,希网自己的有问题,ip一换就不行了。[/quote:1bb2b176c3]

也就是不用希网啦?难道你自己有域名?到现在我还是用希网,问题多多,唉。
问个题外话,域名到底该向谁申请?

 yaako 回复于:2003-05-22 23:38:38
1.  关于ADSL有时候会产生一些死IP的问题,是FreeBSD的问题,修改配置可以解决的,只要在  ppp.linkup 里面加上"iface clear",如:
adsl:
iface clear 
!bg /usr/local/bin/ez-ipupdate -c /usr/local/bin/qdns.conf

这在希网的说明里面已经说清楚了,你没有按照说明来做:
http://www.3322.org/help/help_service.html#service_8

2、我从来没有发现希网域名解析慢的问题,请问是什么现象?

 yaako 回复于:2003-05-22 23:42:47
关于 iface clear 的使用,可以参见ppp的手册:

man ppp

 夜未眠 回复于:2003-05-22 23:49:22
问题是:
我这儿
             update suclearcase/" target="_blank" >ccessful. 并且能够能过动态域名取得更新后的IP地址
别人那儿(和我使用的是不同的dns服务器)
             cannot resolve <eg.domain>: Unknown host

 yaako 回复于:2003-05-23 00:02:34
dns 是分级授权的,如果一个域名,如 aa.com 归3322来管理,则只要你这里的域名服务器解析正确了,说明3322就工作正常了。如果其他地方的DNS不能解析,一般是由于那里的服务器工作不正常,不能将错误归结到aa.com的属主服务器3322的错误。
现在电信很多域名服务器的设置和管理有问题,解析的时候有问题的。
你将出问题的域名以及解析出错的dns服务器的IP贴出来看看,一起分析一下,到底是3322的问题,还是其他地方域名服务器的问题。

 红袖添香 回复于:2003-05-23 00:23:16
[quote:b5754b8d38="葱头"]" != "" ]; then
        /sbin/ifconfig tun0 delete $oldip
        /usr/local/ez-ipupdate/ez-ipupdate -c /usr/local/ez-ipupdate/qdns.conf  (这一行是希网客户端提交IP地址)
        echo "It have dele..........[/quote:b5754b8d38]


有些地方不明白的地方:

[code:1:b5754b8d38]
     1  ipp=$(ifconfig |grep -- '-->' | awk '/inet/{print $2}') 
     2  # echo $ipp
     3  oldip=$(echo $ipp|awk '/ /{print $1}')
     4  newip=$(echo $ipp|awk '/ /{print $2}')
     5  if [ "$newip" != "" ]; then
     6     echo  /sbin/ifconfig tun0 delete $oldip
     7     echo  /usr/local/ez-ipupdate/ez-ipupdate -c /usr/local/ez-ipupdate/qdns.conf
     8     echo "It have deleted the old ip address and updated the DNS";
     9  else
    10     echo "There is no New IP Addess." ;
    11  fi
[/code:1:b5754b8d38]

第1行:如果用 awk 了,当中还用 grep 就显多余了,其实既然你用 --> 作为参照了,直接在 awk 中匹配就可以了。  ipp=$(ifconfig -a | awk '/--\>/{print $2}')

第3、4行,它们输出有什么不同吗?都是对一个IP进行处理, 没有第二域呀。“/ /” 又是干什么用的?

 夜未眠 回复于:2003-05-23 00:29:21
很多地方
( 其实也不是很多地方,夸张一下,呵呵,哈尔滨哈工大,杭州古荡区,广东揭阳,上海长宁,重庆江津,我只在这些地方有朋友, 
 的dns服务器解析(都用的是电信给他们的)都有超时的问题,都说要试好几次才能解析成功,
有时候我这儿更新好了。并且能够解析。不过过了一段时间和我同一幢楼的哥们,居然无法解析,也试了几次才成功。

 yaako 回复于:2003-05-23 00:35:25
那么你将你在3322的域名贴出来,让这里的朋友解析着看看。
如果不成功,就贴出是哪里的DNS(著名 DNS 的IP)

 zkinsz 回复于:2003-05-23 00:36:01
红袖都有不明白的地方啊!上次的shell程序还是先用你的才改好的!

 夜未眠 回复于:2003-05-23 00:42:01
[quote:a54ed74546="yaako"]那么你将你在3322的域名贴出来,让这里的朋友解析着看看。
如果不成功,就贴出是哪里的DNS(著名 DNS 的IP)[/quote:a54ed74546]

早就没用3322的了,现在用的是dns0755的。

 葱头 回复于:2003-05-23 00:49:14
[quote:691a559ea7="红袖添香"]
第1行:如果用 awk 了,当中还用 grep 就显多余了,其实既然你用 --> 作为参照了,直接在 awk 中匹配就可以了。  ipp=$(ifconfig -a | awk '/--\>/{print $2}')

第3、4行,它们输出有什么不同吗?都是对?..........[/quote:691a559ea7]

1.Shell编程的方法有多种,只要得到最终结果的话就可以了.采用awk的确是可以直接得到结果而不需要grep

2.当你存在"死IP"的时候,第1行的代码将在一行中同是列出旧IP和新IP,
第三行$1为旧,第四行$2为新,判断$2是否为空作为条件.

 葱头 回复于:2003-05-23 00:56:23
[quote:97cb7ab2e6="yaako"]1.  关于ADSL有时候会产生一些死IP的问题,是FreeBSD的问题,修改配置可以解决的,只要在  ppp.linkup 里面加上"iface clear",如:
adsl:
iface clear 
!bg /usr/local/bin/ez-ipupdate -c /usr/local/bin/qdns...........[/quote:97cb7ab2e6]


关于你的问题,即使是设置了iface clear,也偶然会出现死IP的情况. 没有设置iface clear,也不是每次都会出现死IP,断线了正常拨号的话也是正常的. 产生死IP并不完全是在ppp.linkup添加iface clear可以解决的.

ADSL重新分配IP有很多种情况,例如断线,局端DHCP重新分配IP等等.

 红袖添香 回复于:2003-05-23 01:01:02
[quote:705999e1ef="葱头"]2.当你存在"死IP"的时候,第1行的代码将在一行中同是列出旧IP和新IP,$1为旧,$2为新,判断$2是否为空作为条件..........[/quote:705999e1ef]

是这样?从来没碰到过死 IP 的情况。

 yaako 回复于:2003-05-23 01:07:39
[quote:e10155af08="葱头"]


关于你的问题,即使是设置了iface clear,也偶然会出现死IP的情况. 没有设置iface clear,也不是每次都会出现死IP,断线了正常拨号的话也是正常的. 产生死IP并不完全是在ppp.linkup添加iface clear可以解决的.

A..........[/quote:e10155af08]

使用 iface clear ,则 FreeBSD在每次重新拨号的时候,自动调用 /sbin/ifconfig tun0 delete [IP addr]来清除老的IP。
我在家里、公司、很多网吧都使用这种方法来拨号和自动更新希网的动态域名,都没有出现死地址的问题。

         iface clear [INET | INET6]
             If this command is used while ppp is in the OPENED state or while
             in -auto mode, all addresses except for the NCP negotiated
             address are deleted from the interface.  If ppp is not in the
             OPENED state and is not in -auto mode, all interface addresses
             are deleted.

             If the INET or INET6 arguments are used, only addresses for that
             address family are cleared.

 redfox 回复于:2003-05-23 09:33:26
[quote:ead769252d="yaako"]1.  关于ADSL有时候会产生一些死IP的问题,是FreeBSD的问题,修改配置可以解决的,只要在  ppp.linkup 里面加上"iface clear",如:
adsl:
iface clear 
!bg /usr/local/bin/ez-ipupdate -c /usr/local/bin/qdns...........[/quote:ead769252d]这个到没注意,有空试试。

 redfox 回复于:2003-05-23 09:37:46
[quote:92279d2be3="yaako"]1.  关于ADSL有时候会产生一些死IP的问题,是FreeBSD的问题,修改配置可以解决的,只要在  ppp.linkup 里面加上"iface clear",如:
adsl:
iface clear 
!bg /usr/local/bin/ez-ipupdate -c /usr/local/bin/qdns...........[/quote:92279d2be3]对了,你指的"死ip"是啥意思?电信的服务器会不定时的更换客户adsl的ip,用这个可能不行把?

 darkcc 回复于:2003-07-01 23:39:24
>>>>>>>>>>>>>ddns.csh>>>>>>>>
You do #csh /root/ddns.csh &
or 
./ddns.csh &
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#!/bin/csh
set num=1
set oldip=""

while($num)

 set newip=`ifconfig -a|awk '/--\>/{print $2}'`
 if($newip !~ $oldip)then

 set oldip = $newip
 /usr/local/bin/lynx 'http://www.XX.org/XXX/XXX.cgi?XXXX' -dump >/dev/null


 endif
sleep 180
end

 powerplane 回复于:2003-07-04 23:35:51
我觉得oldip应该是ping你的域名得出的ip,然后跟你现在的ip比较。
个人认为,应该搞定时查询,像darkcc那样。但是用corntab搞比较好。
电讯可能会动态更换你拨号得到的ip的。

我用的是adsl路由,如何才能够知道自己在internet上的ip呢?

原文转自:http://www.ltesting.net