<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>蓝色数据 &#187; nat</title>
	<atom:link href="http://bluedata.org/tag/nat/feed/" rel="self" type="application/rss+xml" />
	<link>http://bluedata.org</link>
	<description>奋斗是幸福的……</description>
	<lastBuildDate>Mon, 14 Sep 2009 01:53:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>内网用户通过 Linux 网关服务器向外网发布 Web 服务</title>
		<link>http://bluedata.org/2006/07/11/lan-wan-webserver/</link>
		<comments>http://bluedata.org/2006/07/11/lan-wan-webserver/#comments</comments>
		<pubDate>Tue, 11 Jul 2006 06:36:43 +0000</pubDate>
		<dc:creator>Bluedata</dc:creator>
				<category><![CDATA[应用技术]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[nat]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[rewrite]]></category>

		<guid isPermaLink="false">http://blog.bluedata.org/lan-wan-webserver/</guid>
		<description><![CDATA[环境：ADSL 动态 IP ，内网用户通过 Linux 网关服务器 NAT 上网。
 
1. 先到 3322.org 免费注册一个动态的二级域名。
 
2. 网关服务器上
# vi /etc/ppp/ip-up
在最后加入：
/usr/local/network/setup.sh
lynx -mime_header -auth=USERNAME:PASSWORD "http://www.3322.org/dyndns/update?system=dyndns&#38;hostname=HOST.3322.org"
 
第一个是执行 iptables 做 NAT 以及 TC 流量控制等脚本的集合。
第二个是在拨号成功时向 3322.org 提交新的 IP 地址。
 
3. 安装 Apache ，configure 的时候加上 --enable-proxy=shared
在虚拟主机配置中加上：
RewriteEngine on
RewriteRule ^/(.*)$ http://192.168.0.254/$1 [P,L]
 
注：如果有注册静态域名，做 CNAME 到 HOST.3322.org 就可以实现 IP 的自动“更新”了。
    可以配置多个虚拟主机为多部内网机器提供发布到外网的 Web 服务。
]]></description>
			<content:encoded><![CDATA[<p>环境：ADSL 动态 IP ，内网用户通过 Linux 网关服务器 NAT 上网。<br />
 <br />
1. 先到 3322.org 免费注册一个动态的二级域名。<br />
 <br />
2. 网关服务器上<br />
# vi /etc/ppp/ip-up<br />
在最后加入：<br />
/usr/local/network/setup.sh<br />
lynx -mime_header -auth=USERNAME:PASSWORD "http://www.3322.org/dyndns/update?system=dyndns&amp;hostname=HOST.3322.org"<br />
 <br />
第一个是执行 iptables 做 NAT 以及 TC 流量控制等脚本的集合。<br />
第二个是在拨号成功时向 3322.org 提交新的 IP 地址。<br />
 <br />
3. 安装 Apache ，configure 的时候加上 --enable-proxy=shared<br />
在虚拟主机配置中加上：<br />
RewriteEngine on<br />
RewriteRule ^/(.*)$ http://192.168.0.254/$1 [P,L]<br />
 <br />
注：如果有注册静态域名，做 CNAME 到 HOST.3322.org 就可以实现 IP 的自动“更新”了。<br />
    可以配置多个虚拟主机为多部内网机器提供发布到外网的 Web 服务。</p>
]]></content:encoded>
			<wfw:commentRss>http://bluedata.org/2006/07/11/lan-wan-webserver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian 做 ADSL NAT 的 MTU 问题</title>
		<link>http://bluedata.org/2006/05/09/debian-adsl-nat-mtu/</link>
		<comments>http://bluedata.org/2006/05/09/debian-adsl-nat-mtu/#comments</comments>
		<pubDate>Tue, 09 May 2006 08:12:06 +0000</pubDate>
		<dc:creator>Bluedata</dc:creator>
				<category><![CDATA[应用技术]]></category>
		<category><![CDATA[操作系统]]></category>
		<category><![CDATA[adsl]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[mtu]]></category>
		<category><![CDATA[nat]]></category>
		<category><![CDATA[tcpmss]]></category>

		<guid isPermaLink="false">http://blog.bluedata.org/debian-adsl-nat-mtu/</guid>
		<description><![CDATA[以前用网关路由器拨号上网时使用微软的东西是没有问题的。现在换成用 Debian 拨号再使用 iptables SNAT 后，MSN 就不能登陆了，打开 www.msn.com.cn 非常慢且只能打开页面的头部，而 windowsupdate.microsoft.com 根本就打不开了。
 
google 后得知修改 PC 网卡的 MTU 值可以解决这个问题。
在 Windows 2000/XP 下修改注册表：
『HKEY_Local_Machine』-&#62;『SYSTEM』-&#62;『CurrentControlSet』-&#62;『Services』-&#62;『Tcpip』-&#62;『Parameters』-&#62;『interface』
找到所使用的网卡，『编辑』-&#62;『新增』-&#62;『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 [...]]]></description>
			<content:encoded><![CDATA[<p>以前用网关路由器拨号上网时使用微软的东西是没有问题的。现在换成用 Debian 拨号再使用 iptables SNAT 后，MSN 就不能登陆了，打开 www.msn.com.cn 非常慢且只能打开页面的头部，而 windowsupdate.microsoft.com 根本就打不开了。<br />
 <br />
google 后得知修改 PC 网卡的 MTU 值可以解决这个问题。<br />
在 Windows 2000/XP 下修改注册表：<br />
『HKEY_Local_Machine』-&gt;『SYSTEM』-&gt;『CurrentControlSet』-&gt;『Services』-&gt;『Tcpip』-&gt;『Parameters』-&gt;『interface』<br />
找到所使用的网卡，『编辑』-&gt;『新增』-&gt;『DWORD值』之后，建立一个名为『MTU』的机码，右键『修改』，选择十进制，填入 1480 。<br />
 <br />
但是，这个方法很蹩脚呢，内网中的机器那么多，一个一个去改是很不现实的。<br />
对网关进行修改才是正道。<br />
 <br />
在网关服务器上，<br />
# ip addr sh<br />
发现 ppp 设备的 mtu 值是 1492 。<br />
就在 /etc/ppp/peers/dsl-provider 文件中取消了“mtu 1492”这行的注释并改为了 1480 ，重新拨号却没有变化。在 /var/log/messages 中还看到这样的信息：<br />
<font color="#008000">Couldn't increase MTU to 1500<br />
Couldn't increase MRU to 1500</font><br />
没有设置 mtu 值的时候也会有这样的信息，这就意味着 pppoe 忽略了 mtu 这个参数。<br />
 <br />
没办法，继续 google ，有说 plugin rp-pppoe.so 有 bug ，就注释掉这行，改用<br />
pty "/usr/sbin/pppoe -I eth1 -T 80 -m 1480"<br />
结果根本不能拨号了。-_-!<br />
软的不行就来硬的，直接<br />
# ifconfig ppp0 mtu 1480<br />
这下 MSN 能登陆了，但是微软的网站还是打不开。<br />
 <br />
注：Redhat 可以修改 /etc/sysconfig/networking-script/ifcfg-ppp0 ，添加 CLAMPMSS=1480 。<br />
 <br />
最后的解决办法——用 iptables 改 MTU 值。<br />
# iptables -A FORWARD -o ppp0 -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j<br />
TCPMSS --clamp-mss-to-pmtu<br />
把出站包大小改为 ppp0 的 MTU 尺寸，这下就一切正常了。<br />
MSS 既 Max Segment Size 。</p>
<p>另记：<br />
由于 Microsoft Windows 系列操作系统传送的 TCP 包请求的 segment 太大，超出了 PPPoE 的 frame 所能够接受的范围，导致 PPPoE 传送“don't fragment”的 ICMP 而不是“must fragment”，最终导致网站没有响应。这种情况称为“Black Hole Router”。<br />
—— 2006.05.13 00:30<br />
 <br />
又看了一下 /etc/ppp/ip-up.d 下的脚本，发现 0clampmss 里的内容是这样的：<br />
#!/bin/sh<br />
# Enable MSS clamping (autogenerated by pppoeconf)<br />
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<br />
看来 Debian 的 pppoe 也早有考虑。我在做 SNAT 前清空了 iptables 规则，造成 pppoe 添加的 iptables 规则失效了。<br />
—— 2006.06.01 13:48</p>
]]></content:encoded>
			<wfw:commentRss>http://bluedata.org/2006/05/09/debian-adsl-nat-mtu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
