LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1010|回复: 4

内网proftp在动态域名下开启PASV的问题解决

[复制链接]
发表于 2006-4-18 13:28:50 | 显示全部楼层 |阅读模式
原文:
http://tyf.9966.org/discuz/viewt ... &extra=page%3D1

环境简介
2M电信ADSL,带网关、防火墙、DHCP、端口映射等功能的路由器,内网一PC做虚拟服务器
PC单网卡,上安装Debian Sid。安装proftp。


PC上打开PASV端口
PassivePorts 65500 65505

路由器里做65500~65505的端口映射

配置发送给用户的地址信息
MasqueradeAddress tyf.9966.org

重启proftpd
发现proftp将域名转换为当时的外网IP

这时可以PASV模式正常访问
当IP地址改变时,虽然动态域名解析正确,但由于proftp反馈给用户的地址仍然是原来的外网IP,所以PASV模式访问失败。须重启proftpd

问题是如何检测外网IP已经变化,当然是命令行的方式。
这样就可以在shell脚本里侦测外网IP是否变化,如已经变化则重启proftpd。

参考文章:
http://www.donews.net/charlee/archive/2004/12/02/190451.aspx


解决办法

在http的主目录编写反馈客户IP的ip.php脚本
  1. <?php
  2. print ( $_SERVER['REMOTE_ADDR']);
  3. ?>
复制代码


编写检测脚本/etc/qdns
  1. #!/bin/sh

  2. mv -f /etc/ip-new /etc/ip-old >/dev/null
  3. lynx -dump http://www.tyf.9966.org/ip.php >/etc/ip-new

  4. date >> /etc/qdns.log
  5. cat /etc/ip-new >> /etc/qdns.log

  6. oldip=`cat /etc/ip-old`
  7. newip=`cat /etc/ip-new`
  8. if [ "$newip" != "$oldip" ];then
  9. /etc/init.d/proftpd restart >> /etc/qdns.log
  10. exit
  11. fi
复制代码


在/etc/crontab里设置,让检测脚本定时运行。你还可以设置一周清理一下qdns.log
发表于 2006-4-18 23:00:41 | 显示全部楼层
你的服务器总重起的话,那下载的人不是太痛苦了么?你这太麻烦了,也不稳定阿,我还是建议你更换一个支持微软upnp的网关,全解决了。另外你网关上21口没开么,肯定开了,要说清楚,省得新手看了胡涂。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-19 11:10:07 | 显示全部楼层
如果IP地址变化了,PASV用户就无法下载,这时候重启ftp服务会对用户有什么影响?当然不会有什么影响。对主动模式访问的用户影响也是由于IP地址变化引起的,重启FTP服务只会让数据传输间断几秒而已。
本文是针对内网proftp在动态域名下开启PASV的问题,不是给什么都不懂的新手看的,没有必要说得面面俱到。:p
回复 支持 反对

使用道具 举报

发表于 2006-4-19 21:32:28 | 显示全部楼层
唉 。。。              。。。
回复 支持 反对

使用道具 举报

发表于 2006-4-19 23:09:29 | 显示全部楼层
不错,道理说清楚了就可以了。。谢谢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表