Debian 做 ADSL NAT 的 MTU 问题

2006-05-09 | 16:12分类:Debian, Network | 标签: | 2,706 Views

以前用网关路由器拨号上网时使用微软的东西是没有问题的。现在换成用 Debian 拨号再使用 iptables SNAT 后,MSN 就不能登陆了,打开 www.msn.com.cn 非常慢且只能打开页面的头部,而 windowsupdate.microsoft.com 根本就打不开了。
 
google 后得知修改 PC 网卡的 MTU 值可以解决这个问题。
在 Windows 2000/XP 下修改注册表:
『HKEY_Local_Machine』->『SYSTEM』->『CurrentControlSet』->『Services』->『Tcpip』->『Parameters』->『interface』
找到所使用的网卡,『编辑』->『新增』->『DWORD值』之后,建立一个名为『MTU』的机码,右键『修改』,选择十进制,填入 1480 。
 
但是,这个方法很蹩脚呢,内网中的机器那么多,一个一个去改是很不现实的。
对网关进行修改才是正道。
 
在网关服务器上,
# ip addr sh
发现 ppp 设备的 mtu 值是 1492 。
就在 /etc/ppp/peers/dsl-provider 文件中取消了“mtu 1492”这行的注释并改为了 1480 ,重新拨号却没有变化。在 /var/log/messages 中还看到这样的信息:
Couldn't increase MTU to 1500
Couldn't increase MRU to 1500

没有设置 mtu 值的时候也会有这样的信息,这就意味着 pppoe 忽略了 mtu 这个参数。
 
没办法,继续 google ,有说 plugin rp-pppoe.so 有 bug ,就注释掉这行,改用
pty "/usr/sbin/pppoe -I eth1 -T 80 -m 1480"
结果根本不能拨号了。-_-!
软的不行就来硬的,直接
# ifconfig ppp0 mtu 1480
这下 MSN 能登陆了,但是微软的网站还是打不开。
 
注:Redhat 可以修改 /etc/sysconfig/networking-script/ifcfg-ppp0 ,添加 CLAMPMSS=1480 。
 
最后的解决办法——用 iptables 改 MTU 值。
# iptables -A FORWARD -o ppp0 -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j
TCPMSS --clamp-mss-to-pmtu
把出站包大小改为 ppp0 的 MTU 尺寸,这下就一切正常了。
MSS 既 Max Segment Size 。
 
参考资料:鸟哥的 Linux 私房菜——连不上一些网站的处理方法 MTU 修改
 
 
另记:
由于 Microsoft Windows 系列操作系统传送的 TCP 包请求的 segment 太大,超出了 PPPoE 的 frame 所能够接受的范围,导致 PPPoE 传送“don't fragment”的 ICMP 而不是“must fragment”,最终导致网站没有响应。这种情况称为“Black Hole Router”。
—— 2006.05.13 00:30
 
又看了一下 /etc/ppp/ip-up.d 下的脚本,发现 0clampmss 里的内容是这样的:
#!/bin/sh
# Enable MSS clamping (autogenerated by pppoeconf)
iptables -o "$PPP_IFACE" --insert FORWARD 1 -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu
看来 Debian 的 pppoe 也早有考虑。我在做 SNAT 前清空了 iptables 规则,造成 pppoe 添加的 iptables 规则失效了。
—— 2006.06.01 13:48

Redhat autofsck

2006-05-08 | 23:59分类:Redhat/CentOS | 标签: | 687 Views

非正常重启后,系统缺省只会提示“Press Y in 5 seconds to force file system integrity check”。
对于无人看守的服务器,系统只会在等待5秒之后继续正常启动而不会做 fsck 操作。
解决办法:
# echo "AUTOFSCK_TIMEOUT=5" > /etc/sysconfig/autofsck
# echo "AUTOFSCK_DEF_CHECK=yes" >> /etc/sysconfig/autofsck

修复 rpmdb

2006-05-08 | 18:48分类:Redhat/CentOS | 标签: | 913 Views

时常能遇到 rpmdb 损坏的情况,修复其实就是重建的过程:
# rm -f /var/lib/rpm/__db.*
# rpm -vv –rebuilddb

Debian 上使用 rc.local

2006-04-30 | 15:44分类:Debian | 标签: | 473 Views

# touch /etc/init.d/rc.local
设置为可执行:
# chmod +x /etc/init.d/rc.local
用 update-rc.d 设置启动级别:
# update-rc.d rc.local start 99 2 3 4 5 . stop 99 0 1 6 .
为了编辑方便,创建一个链接:
# ln -s /etc/init.d/rc.local /etc/rc.local
# cat /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

## start apache
/usr/local/apache/bin/apachectl start

Resin 增加 JVM 可使用内存

2005-08-23 | 17:52分类:Linux | 标签: | 2,584 Views

最近频繁出现 java.lang.OutOfMemoryError 错误,造成 Resin 挂掉,查看进程,发现 java 进程只使用了 80M 的内存,这是 Resin 的默认值,看来需要增加 JVM 可使用的内存了。
# vi /etc/init.d/resin
找到
ARGS="-java_home $JAVA_HOME -resin_home $RESIN_HOME"
改为
ARGS="-java_home $JAVA_HOME -resin_home $RESIN_HOME -J-ms512m -J-mx512m"
这里根据应用的状况把 JVM 内存使用量提高到了 512M 。
注意,过度增加这个值的大小会造成系统的不稳定。

Pages: Prev 1 2 3 4 5 6 7 8 9 10 Next