Archive

Archive for January, 2006

再度遭遇MTU导致的无法上网问题

January 28th, 2006 Fwolf No comments

以前使用主机用ADSL拨号,然后用internet共享的方式带另外1台机器上网(用交叉线联网),曾经提到过铁通ADSL共享上网无法访问某些网页问题的解决的问题,但现在不是过年了嘛,家里又新添了一台电脑,现在一共是3台了,再用交叉线联网效率就太低了,于是乎搞了一个SOHO宽带路由器(TP-LINK TL-R402M)来用,谁知道又遇到了可恶的MTU问题。

首先宽带路由器和铁通的ADSL猫地址冲突,铁通的ADSL猫默认内网地址是192.168.1.1,宽带路由器也是,不过这个问题好解决,因为宽带路由器是可配置的,将地址改为192.168.0.1就好了,并且由于这个地址和原来共享上网设置的网关地址相同,所以客户端上网的机器配置也不用作什么改动……这些配置都很简单的。

然后就是我原来那台主机出现了问题了,就是和原来MTU导致的问题一样,需要修改MTU为合适的值才能正常上网。要说也有意思,这台机器直接拨号上网就没问题,通过宽带路由器上网就有问题,也许是因为MTU设置是针对网卡的吧,然而DLS拨号自动分配地址或者安装PPPOE协议的时候会自动设置正确的MTU值的缘故。

幸好我还有能上网的机器。。。查询之后,把结果总结在这里吧。不过突然想到铁通也许是在通过MTU限制用户同时带多台机器上网,因为原来也发现用交叉线共享的时候,先联网后主机再拨号就不行,先拨号再联网就可以用,有趣的铁通思维。

找到MAXMTU值

主要是用ping主机的方式,比如:

C:\WINDOWS>ping 192.168.0.1 -f -l 1500 Pinging 192.168.0.1 with 1500 bytes of data: Packet needs to be fragmented but DF set. Packet needs to be fragmented but DF set. Packet needs to be fragmented but DF set. Packet needs to be fragmented but DF set. Ping statistics for 192.168.0.1: Packets: Sent = 4, Received = 0, Lost = 4 (100% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms

这就说明MTU值1500过大,逐步减小,直到ping成功:

C:\WINDOWS>ping 192.168.0.1 -f -l 1464 Pinging 192.168.0.1 with 1464 bytes of data: Reply from 192.168.0.1: bytes=1464 time=10ms TTL=64 Reply from 192.168.0.1: bytes=1464 time<10ms TTL=64 Reply from 192.168.0.1: bytes=1464 time<10ms TTL=64 Reply from 192.168.0.1: bytes=1464 time<10ms TTL=64 Ping statistics for 192.168.0.1: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 10ms, Average = 2ms

这时就找到了最大的MTU值。在这里要注意两个问题: 1、如果ping的是外网地址,那么得到的数值就直接是MTU最大值,但如果ping的是内网主机,比如ping宽带路由器的地址,得到的数值就需要加上28,也就是协议在封包的时候加的头,才是MAXMTU值。 2、有的时候MTU值过大,不提示“Packet needs to be fragmented but DF set.”,而是timeout,解决方式:可以通过ping内网网关间接找出MAXMTU,参见1。

更改MAXMTU设置

在这里忽略掉98的设置方法吧,现在还有人用98么?

1、启用PMTUD的backhole传输 打开注册表,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\分支下,找到主键 EnablePMTUBHDetect ,如果没有则创建这个Dword值,将其键值设置为1,保存后重启计算机。(未测试)

2, 手工设置网卡的MTU值 打开注册表,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\ Parameters\Interfaces\主键下,下面会有几个文件夹,分别代表机器的安装的每一块网卡,依次浏览每个文件夹,并察看窗口右边IPAddress或其他的键值,找到你连接 Internet所用网卡的文件夹,进入,找到一个名为MTU的主键,如果没有则创建这个Dword值,修改键值为十进制的MAXMTU(就是你用上面的方法找到的MTU值),重启。(不重启好像无效,我就因此浪费了2个小时 :-(

参考资料

修改MTU值的方法[ system win98 win2000] MTU数值完全功略-通过2000做NAT后部分网站不可访问问题解决 MTU[最大传输单位]

Related posts

Categories: Internet Tags:

RSSFWD偷懒,吞了两篇文章

January 19th, 2006 Fwolf No comments

一直用RSSFWD订阅我自己的Blog,然后转发到bloggermsn space的,但是今天发完两篇文章,过了几个小时以后,最新的文章已经发到邮箱里面来了,而前两天文章却迟迟没有送来。怎么会丢掉两篇呢?难道是我今天升级wordpress的时候,他正在访问,然后访问失败?我承认自己的主机不是很稳定,但是访问失败的应该稍后重试才对啊。以前使用RSSFWD一直很放心的,但这次还是心有余悸。

没办法,之后手工把文章贴到GMAIL里面手工发送更新邮件了,不过自己写mail实在麻烦,效果、格式也不理想,都没有用RSSFWD收邮件然后转发舒服。

另外,经过一段时间对Yahoo Alerts的使用,感觉要比RSSFWD获取信息的速度要快,但是Yahoo Alerts不发送全文内容的,并且帖子更新的监测不够及时,当然这可能也和PHPWIND论坛的缓存机制有关。

今天还在Opera也申请了一个Blog,这个虽然不支持邮件发帖,但是可以导入Blogger的Blog内容,用来作为Blog的备份又是一个不错的选择。并且Opera的默认模板很不错,访问速度也行,广告也不那么讨人厌,都规规矩矩的在边角旮旯里待着,比msn spaces厚道多了。不过Opera Blog的内容管理功能似乎比较弱,我用导入Blogger功能倒重了好多帖子,还得一个一个删累死了,以后可怎么导啊。

Related posts

Categories: Internet, Tools Tags:

升级WordPress从1.5到2.0

January 19th, 2006 Fwolf 2 comments

今天正好有些空闲时间,就顺便把WordPress 1.5升级成了2.0,升级很简单,上传所有新文件,然后吧wp-config.php配置好,把原来旧的theme目录、.htaccess文件等拷贝过来,然后运行wp-admin/upgrade.php基本上就差不多了。

同时还是不要忘记添加mysql要求的set names(文件是wp-includes/wp-db.php):

function wpdb($dbuser, $dbpassword, $dbname, $dbhost) { $this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword); //加上下面这行 $this->query(‘SET NAMES “utf8″‘);

还有修改一下生成摘要的方式,参见更改WordPress自动生成摘要的方式

一点点使用感受:

  • 默认下载的版本好像没有带新的模板,所以仍然拿原来的模板用上了。
  • 分类Category的链接地址处理和1.5有些不同,2.0可以在链接前面和网站地址之间添加“Category base”,这样分类页面的地址定制就更灵活了。
  • 增加了缓存机制,缓存存在wp-content\cache目录下,如果发现更改设置没有生效,可以清空这个目录试一下。
  • 增加了WYSIWYG所见即所得的编辑器,不过我更喜欢直接控制HTML的感觉,几个简单的b、link、img就足够我用了。
  • Permalink定制的功能更强大和方便了,不过原来我用的.htaccess文件拿来照样能用。
  • 依然会将单引号替换成‘ ’,双引号替换成”,源码中还发现了更多的替换条件。
  • 后台管理界面更好看了,现在的蓝色背景和blogger有点像。
  • 增加了导入其他blog或rss内容的功能,对有些朋友应该很有帮助。
  • 没有了设置上传文件路径的选项,可能上传文件都要存储到wp自己的目录下面了吧。

update @ 2006-8-9 升级wp 2.0到2.04步骤完全相同,升级后启用了Akismet来防止spam。

Related posts

Categories: Blog Tags: , ,

才发现DNS原来这么重要

January 19th, 2006 Fwolf No comments

公司本来上网好好的,突然所有都无法访问了,刚开始以为是线路的问题,因为硬件、网络环境什么都没有变动,并且是大家都无法访问,不是某台机器的问题,可是就是查不出原因。更加令人疑惑的人,看股票用的大智慧、聊天用的qq居然都还能够正常工作!ping河北省网通的DNS服务器202.99.160.68,反应正常,说明网络线路是连通的,那为什么网站都无法访问呢。后来给网通的技术人员打电话询问,才明白问题的所在,原来202.99.160.68这台机器,也就是河北省网通的主dns服务器,刚才ping正常的,它上面的dns功能不正常了,所以才出现网站无法访问的情况——dns无法正常解析了。而大智慧、qq等都是直接用ip地址通信的,不存在dns解析的问题,所以仍然工作正常。

在dns服务器中增加备用dns服务器202.99.166.4(在唐山,辅DNS服务器),一切恢复正常。

顺便整理一些DNS使用方面的资料(转):

在DNS缓存中记录条目每隔一段时间将被更新一次,长时间不用的条目将被丢弃,这个时间间隔称为生存时间(TTL)。默认情况下,得到肯定响应的条目TTL为86,400 秒(1 天),否定响应的TTL win2000下是300秒(5分钟),在winXP和2003中 是 900 秒(15 分钟)。 查看本地DNS缓存记录的命令为:ipconfig /displaydns,清空DNS缓存:ipconfig /flushdns。 关于DNS缓存机制设定的键值都在如下路径中:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
其中MaxCacheEntryTtlLimit为DNS缓存条目TTL最大值,在XP和2003系统中此项名称为MaxCacheTtl。肯定响应条目的TTL,将由在DNS解析器收到的查询响应中指定的秒数和此项数值两者中最小值决定。如果将此项键值设为1 秒,则DNS 缓存看起来已被禁用。NegativeCacheTime为否定响应条目的TTL,XP和2003中此项名称为 MaxNegativeCacheTtl。可以将此项键值改小或直接改为0,则不缓存否定的响应。而NetFailureCacheTime子项为常规网络缓存失败的控制时间,默认30秒。若系统重复发送多次DNS请求,而完全得不到任何DNS服务器的响应,系统会认为网络连接失效,在默认30秒的时间中将不会再向外发送任何DNS查询请求,此项也可减小或置0。

Related posts

Categories: Internet Tags:

利用SVN更新网站

January 19th, 2006 Fwolf 3 comments

如果你有一个假设在公网上的SVN服务器,而你的网站所在的主机允许你使用SVN客户端,并且开放了php的exec函数,那么你有福了,你可以利用SVN作为中转,更新你的网站程序。

首先,也是前提,就是你的网站程序是用SVN管理的,那么只要你的网站主机能够访问SVN,就能够使用SVN的update功能来更新程序。

准备工作一:将网站程序加上svn的控制标记,由于SVN的控制信息都存在程序所在目录的.svn子目录中,所以需要找一个空目录,并且将网站现有程序checkout到这个目录里面来,注意是checkout而不是export,因为接下来要将最新的网站程序连同他里面包含的很多个.svn目录一同上传到服务器上去。为了不让.svn目录泄露机密,要在.htaccess文件或者是httpd.conf中设定如下规则,禁止对.svn目录的访问。

	<directory ~ "\.svn">
		Order Allow,Deny
		Deny from all
	</directory>

准备工作二:作一段小程序,调用服务器上的svn命令行命令,update网站程序,下面是一个写好了的简单例子。

	//setup update target path
	$target_ar['fwolf'] = 'd:\fwolf';
 
	//setup commandline
	$svn_cmd1 = 'd:\server\svn\bin\svn.exe update ';
	$svn_cmd2 = ' --username updatebot --password xxxxxx --no-auth-cache';
 
	//output html string
	$html = '';	
 
	//recieve get parameter
	$target = isset($_GET['target']) ? $_GET['target'] : '';
	if (empty($target) || !isset($target_ar[$target]))
	{
		$html = 'Target does not correct.';
	}
	else
	{
		//execute svn update command
		$cmd = $svn_cmd1 . $target_ar[$target] . $svn_cmd2;
		$ar = array();
		$status = 0;
		exec($cmd, $ar, $status);
		for ($i=0; $i < count($ar); $i++)
			$ar[$i] = htmlspecialchars($ar[$i]);
		$html .= 'Status: ' . $status . "<br />\r\n";
		$html .= implode('<br />' . "\r\n", $ar);
	}
	echo $html;

把这个程序放到服务器上能够访问到的地方,也可以在此基础上加上一些访问限制,那么只要访问这个程序/页面,服务器就会自动更新你的网站啦。

	Status: 0
	D H:\cvswork\svntest\update_from_svn.php
	Updated to revision 44.

这样,在利用SVN很好的管理网站程序的基础上,还实现了服务器程序的很方便的更新,一举两得!尤其是在程序上传不是十分方便的场合,用起来就更舒服了,我就是在更换了一个劣质防火墙,ftp无法正常使用的情况下想出这个怪招儿的:-)。

Update @ 2007-07-31

如果在windows主机上使用本方法,而svn服务器是采用了ssl的https://…地址,那么会遇到一点小麻烦,就是在执行svn update的时候,由于使用的是web的用户,在出现确认证书的提示信息时,用户是无法输入的:

Error validating server certificate for 'https://20070731.fwolf.com':
 - The certificate is not issued by a trusted authority. Use the
   fingerprint to validate the certificate manually!
Certificate information:
 - Hostname: 20070731.fwolf.com
 - Valid: from Jul 31 06:49:53 2007 GMT until Jul 28 06:49:53 2017 GMT
 - Issuer: Fwolf, US
 - Fingerprint: 38:43:0b:29:75:1t:ba:d8:29:8f:94:9a:10:42:a0:fe:ae:93:4d:91
(R)eject, accept (t)emporarily or accept (p)ermanently?

这时就只能用变通的方法了,首先在dos方式中使用svn up,svn会自动缓存身份验证以及ssl确认信息,这些信息保存在C:\Documents and Settings\Administrator\Application Data\Subversion目录下,然后把这个目录整体拷贝到C:\Documents and Settings\Default User\Application Data\Subversion就可以了,测试环境windows2003,并且试过复制到All Users的对应目录无效。

另外修改配置文件servers,添加ssl-trust-default-ca = yes的方式在windows下好像没有作用。

Update @ 2009-04-07

Git(ssh证书登录)也可以这样用,略有不同,我使用的客户端是msysgit

  • Admin用户使用桌面操作(Git Bash)时,.ssh目录位于C:\Documents and Settings\Administrator\下。
  • 直接使用C:\Program Files\Git\bin\ssh.exe当ssh客户端时,.ssh目录要放到C:\Program Files\Git\下,并且似乎忽略.ssh/config文件,私钥文件只认identity id_rsa id_dsa三个。
  • 系统服务比如Apache运行时,使用上面一条的设置,很是诡异。

说公钥文件只认固定的三个,是从这里猜到的:

	Program Files/Git$ grep identity share -R
	share/git-gui/lib/sshkey.tcl:   foreach name {~/.ssh/id_dsa.pub ~/.ssh/id_rsa.pub ~/.ssh/identity.pub} {

好像是写死了,并且我用config定义其他私钥它也不认。第一条中使用Git的时候没事,很正常。

同时,为了安全起见,apache里还要增加如下设置:

	<Directory ~ "\.(git|svn)">
		Order allow,deny
		Deny from all
		Satisfy All
	</Directory>

Related posts

Categories: Internet, Svn/Git Tags: , , , , ,