<?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; pptpd</title>
	<atom:link href="http://blog.istef.info/tag/pptpd/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.istef.info</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sun, 06 Jun 2010 05:52:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<atom:link rel='hub' href='http://blog.istef.info/?pushpress=hub'/>
		<item>
		<title>单网卡 Ubuntu 服务器打造 PPTP Server</title>
		<link>http://blog.istef.info/2008/10/17/ubuntu-pptp-server/</link>
		<comments>http://blog.istef.info/2008/10/17/ubuntu-pptp-server/#comments</comments>
		<pubDate>Fri, 17 Oct 2008 15:08:20 +0000</pubDate>
		<dc:creator>iStef</dc:creator>
				<category><![CDATA[Experiences]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[pptpd]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[vpn]]></category>

		<guid isPermaLink="false">http://blog.istef.info/?p=1864</guid>
		<description><![CDATA[自从实验室放了台 Linux 服务器后，可玩的东西就越来越多了。虽然这台服务器主要的工作是 Web Server，但鉴于我们那小站压力非常之小，服务器资源绝大多数还是浪费着，所以让它多干些活是个不错的选择。实验室的内部网络中有不少非常有用的资源，例如科研用的文献资料，个人的实验数据等等，这些内容一旦离开实验室就不那么容易访问到了。解决这个问题最好的办法就是 VPN。在 Ubuntu 上搭建 VPN 服务器的方法非常多，比较著名的有 PPTP, L2TP/IPSec 和 OpenVPN。这三种方式中后两者的安全性比较好，但配置较麻烦。其中 OpenVPN 在 Windows/Mac 平台上还需要额外的客户端。而 L2TP/IPSec 方式虽然比较好，但我配置后，虽然 Windows 和 Linux 用户没有问题，但 Mac/iPhone 却始终无法连上，所以暂时删掉了，日后搞清楚是什么问题再换到这种方式。 只剩下 PPTP 了。事实上 PPTP 是这三者中配置最容易的方式，而且由于 Windows/Mac 系统中都内建相应的客户端，使用起来非常方便。下面我就简单写写我的安装过程，希望对需要的朋友有用。当然如果您有什么高见，也欢迎您提出。 首先，我所有的操作都是在之前文章中介绍的 Ubuntu 8.04 Server 系统中操作的，如果您的系统和我的不一样，请参考之前的两篇文章。我的服务器环境是单网卡 eth0。 在 Ubuntu 中建立 pptp server 需要的软件包为 pptpd，用 apt-get 即可安装： sudo apt-get install pptpd 系统会自动解决依赖关系，安装好后，需要进行一番设置。首先编辑 /etc/pptpd.conf sudo [...]]]></description>
			<content:encoded><![CDATA[<p>自从实验室放了台 Linux 服务器后，可玩的东西就越来越多了。虽然这台服务器主要的工作是 Web Server，但鉴于我们那小站压力非常之小，服务器资源绝大多数还是浪费着，所以让它多干些活是个不错的选择。实验室的内部网络中有不少非常有用的资源，例如科研用的文献资料，个人的实验数据等等，这些内容一旦离开实验室就不那么容易访问到了。解决这个问题最好的办法就是 VPN。在 Ubuntu 上搭建 VPN 服务器的方法非常多，比较著名的有 PPTP, L2TP/IPSec 和 OpenVPN。这三种方式中后两者的安全性比较好，但配置较麻烦。其中 OpenVPN 在 Windows/Mac 平台上还需要额外的客户端。而 L2TP/IPSec 方式虽然比较好，但我配置后，虽然 Windows 和 Linux 用户没有问题，但 Mac/iPhone 却始终无法连上，所以暂时删掉了，日后搞清楚是什么问题再换到这种方式。</p>
<p>只剩下 PPTP 了。事实上 PPTP 是这三者中配置最容易的方式，而且由于 Windows/Mac 系统中都内建相应的客户端，使用起来非常方便。下面我就简单写写我的安装过程，希望对需要的朋友有用。当然如果您有什么高见，也欢迎您提出。</p>
<p>首先，我所有的操作都是在<a href="http://blog.istef.info/2008/10/02/build-a-linux-light-server/">之前文章中介绍的 Ubuntu 8.04 Server 系统</a>中操作的，如果您的系统和我的不一样，请参考之前的<a href="http://blog.istef.info/2008/10/02/setup-ssh-server-on-ubuntu-server/">两篇文章</a>。我的服务器环境是单网卡 eth0。</p>
<p>在 Ubuntu 中建立 pptp server 需要的软件包为 pptpd，用 apt-get 即可安装：</p>
<blockquote>
<pre>sudo apt-get <abbr title="Thanks zz!">install</abbr> pptpd</pre>
</blockquote>
<p>系统会自动解决依赖关系，安装好后，需要进行一番设置。首先编辑 /etc/pptpd.conf</p>
<blockquote>
<pre>sudo nano /etc/pptpd.conf</pre>
</blockquote>
<p>去掉文件最末端的 localip 和 remoteip 两个参数的注释，并进行相应修改。这里，localip 是 VPN 连通后服务器的 ip 地址，而 remoteip 则是客户端的可分配 ip 地址。下面是我的配置：</p>
<blockquote>
<pre>localip 10.100.0.1
remoteip 10.100.0.2-10</pre>
</blockquote>
<p>编辑好这个文件后，我们需要编辑 /etc/ppp/pptpd-options 文件，还是用 nano 编辑，命令这里就不写了。这里绝大多数参数只需维持原来的默认值即可，我们只需要改变其中的 ms-dns 选项，为 VPN 客户端指派 DNS 服务器地址：</p>
<blockquote>
<pre>ms-dns 202.113.16.10
ms-dns 208.67.222.222</pre>
</blockquote>
<p>修改 /etc/ppp/chap-secrets 文件，这里面存放着 VPN 的用户名和密码，根据你的实际情况填写即可。如文件中注释所示，第一列是用户名，第二列是服务器名（默认写 pptpd 即可，如果在 pptpd-options 文件中更改过的话，注意这里保持一致），第三列是密码，第四列是 IP 限制（不做限制写 * 即可）。这里<a href="http://blog.istef.info">我</a>就不贴我的配置了 <img src='http://blog.istef.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>全部搞定后，我们需要重启 pptpd 服务使新配置生效：</p>
<blockquote>
<pre>sudo /etc/init.d/pptpd restart</pre>
</blockquote>
<p>找一台 Windows 电脑，新建个 VPN 链接，地址填服务器的 IP（或域名），用户名密码填刚才设置好的，域那项空着（如果你在 pptpd-options 中设置了，这里就保持一致），点连接就可以了。正常情况下您应该能够建立与服务器的 VPN 链接了。</p>
<p>建立连接之后，您会发现除了可以访问服务器的资源，其余内外和互联网的内容均无法访问。如果需要访问这些内容的话，我们还需要进一步设置：</p>
<p>首先，开启 ipv4 forward。方法是，修改 /etc/sysctl.conf，找到类似下面的行并取消它们的注释：</p>
<blockquote>
<pre>net.ipv4.ip_forward=1</pre>
</blockquote>
<p>然后使新配置生效：</p>
<blockquote>
<pre>sudo sysctl -p</pre>
</blockquote>
<p>有些时候，经过这样设置，客户端机器就可以上网了（我在虚拟机上这样操作后就可以了）。但我在实验室的服务器上这样操作后仍然无法访问网络，这样我们就需要建立一个 NAT。这里我们使用强大的 iptables 来建立 NAT。首先，先安装 iptables：</p>
<blockquote>
<pre>sudo apt-get intall iptables</pre>
</blockquote>
<p>装好后，我们向 nat 表中加入一条规则：</p>
<blockquote>
<pre>sudo iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE</pre>
</blockquote>
<p>这样操作后，客户端机器应该就可以上网了。</p>
<p>但是，只是这样，iptables 的规则会在下次重启时被清除，所以<a href="http://yangliu.name">我们</a>还需要把它保存下来，方法是使用 iptables-save 命令：</p>
<blockquote>
<pre>sudo iptables-save &gt; /etc/iptables-rules</pre>
</blockquote>
<p>然后修改 /etc/network/interfaces 文件，找到 eth0 那一节，在对 eth0 的设置最末尾加上下面这句：</p>
<blockquote>
<pre>pre-up iptables-restore &lt; /etc/iptables-rules</pre>
</blockquote>
<p>这样当网卡 eth0 被加载的时候就会自动载入我们预先用 iptables-save 保存下的配置。</p>
<p>到此，一个 VPN Server/Gateway 基本就算架设完毕。当然，也许你按照我的方法做了，还是无法成功，那么下面总结一些我碰到的问题和解决方案：</p>
<h3 style="padding-left: 30px;">无法建立 VPN 连接</h3>
<p style="padding-left: 30px;">安装好 pptpd 并设置后，客户端还是无法建立到服务器的连接。造成的原因可能有以下几种：</p>
<blockquote>
<ol>
<li>服务器端的防火墙设置：PPTP 服务需要使用 1723(tcp) 端口和 gre 协议，因此请确保您的防火墙设置允许这两者通行。</li>
<li>如果服务器在路由器后面，请确保路由器上做好相应的设置和端口转发。</li>
<li>如果服务器在路由器后面，那么请确保你的服务器支持 VPN Passthrough。</li>
<li>如果客户端在路由器后面，那么客户端所使用的路由器也必须支持 VPN Passthrough。其实市面上稍微好点的路由器都是支持 VPN Passthrough 的，当然也不排除那些最最最便宜的便宜货确实不支持。当然，如果你的路由器可以刷 DD-Wrt 的话就刷上吧，DD-Wrt 是支持的。</li>
</ol>
</blockquote>
<blockquote>
<h3>能建立链接，但“几乎”无法访问互联网</h3>
</blockquote>
<blockquote><p>这里我使用“<a href="http://hi2.me">几乎</a>”这个词，是因为并不是完全不能访问互联网。症状为，打开 Google 搜索没问题，但其它网站均无法打开；SSH 可用，但 scp 不行；ftp 能握手，但传不了文件。我就遇到了这种情况，仔细 Google 后发现原来是 MTU 的问题，用 ping 探测了一下果然是包过大了。知道问题就好办了，我们可以通过 iptables 来修正这一问题。具体原理就不讲了，需要的自己 Google。这里只说解决方案，在 filter 表中添加下面的规则：</p></blockquote>
<blockquote style="padding-left: 30px;">
<pre>sudo iptables -A FORWARD -s 10.100.0.0/24 -p tcp -m tcp --tcp-flags SYN,RST SYN
-j TCPMSS --set-mss 1200</pre>
</blockquote>
<blockquote><p>上面规则中的 1200 可以根据你的实际情况修改，为了保证最好的网络性能，这个值应该不断修改，直至能保证网络正常使用情况下的最大值。</p></blockquote>
<p>好了，至此，一台单网卡 pptp-server 就算完成了。</p>
<p>ps，最近发现我的文章被大大小小无数网站抄袭，其中不乏一些“大站”。这里我用“抄袭”这个词，是因为你们的做法已经远远超出了正常的“转载”。我每篇文章后都会强调，“<strong>转载写明出处，商业网站使用请先获得授权</strong>”，但不知道为什么对于这些小编们，发个邮件问我一下会这么难。这次我就不点名了，先警告一下。如果让我发现下次的话，那么别怪我，我会及时给您曝光的。
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.istef.info%2F2008%2F10%2F17%2Fubuntu-pptp-server%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.istef.info%2F2008%2F10%2F17%2Fubuntu-pptp-server%2F&amp;style=compact&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.istef.info/2008/10/17/ubuntu-pptp-server/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using memcached
Page Caching using memcached
Database Caching 1/5 queries in 0.003 seconds using memcached
Object Caching 323/323 objects using memcached

Served from: blog.istef.info @ 2012-02-13 11:03:55 -->
