单网卡Ubuntu服务器打造PPTP Server

来源:岁月联盟 编辑:exp 时间:2012-03-05
自从实验室放了台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 nano /etc/pptpd.conf去掉文件最末端的localip 和remoteip 两个参数的注释,并进行相应修改。这里,localip 是VPN 连通后服务器的ip 地址,而remoteip 则是客户端的可分配ip 地址。下面是我的配置:
 
localip 10.100.0.1
remoteip 10.100.0.2-10编辑好这个文件后,我们需要编辑/etc/ppp/pptpd-options 文件,还是用nano 编辑,命令这里就不写了。这里绝大多数参数只需维持原来的默认值即可,我们只需要改变其中的ms-dns 选项,为VPN 客户端指派DNS 服务器地址:
 
ms-dns 202.113.16.10
ms-dns 208.67.222.222修改/etc/ppp/chap-secrets 文件,这里面存放着VPN 的用户名和密码,根据你的实际情况填写即可。如文件中注释所示,第一列是用户名,第二列是服务器名(默认写pptpd 即可,如果在pptpd-options 文件中更改过的话,注意这里保持一致),第三列是密码,第四列是IP 限制(不做限制写* 即可)。这里我就不贴我的配置了 
 
全部搞定后,我们需要重启pptpd 服务使新配置生效:
 
sudo /etc/init.d/pptpd restart找一台Windows 电脑,新建个VPN 链接,地址填服务器的IP(或域名),用户名密码填刚才设置好的,域那项空着(如果你在pptpd-options 中设置了,这里就保持一致),点连接就可以了。正常情况下您应该能够建立与服务器的VPN 链接了。
 
建立连接之后,您会发现除了可以访问服务器的资源,其余内外和互联网的内容均无法访问。如果需要访问这些内容的话,我们还需要进一步设置:
 
首先,开启ipv4 forward。方法是,修改/etc/sysctl.conf,找到类似下面的行并取消它们的注释:
 
net.ipv4.ip_forward=1然后使新配置生效:
 
sudo sysctl -p有些时候,经过这样设置,客户端机器就可以上网了(我在虚拟机上这样操作后就可以了)。但我在实验室的服务器上这样操作后仍然无法访问网络,这样我们就需要建立一个NAT。这里我们使用强大的iptables 来建立NAT。首先,先安装iptables:
 
sudo apt-get intall iptables装好后,我们向nat 表中加入一条规则:
 
sudo iptables -t nat -A POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE这样操作后,客户端机器应该就可以上网了。
 
但是,只是这样,iptables 的规则会在下次重启时被清除,所以我们还需要把它保存下来,方法是使用iptables-save 命令:
 
sudo iptables-save > /etc/iptables-rules然后修改/etc/network/interfaces 文件,找到eth0 那一节,在对eth0 的设置最末尾加上下面这句:
 
pre-up iptables-restore < /etc/iptables-rules这样当网卡eth0 被加载的时候就会自动载入我们预先用iptables-save 保存下的配置。
 
到此,一个VPN Server/Gateway 基本就算架设完毕。当然,也许你按照我的方法做了,还是无法成功,那么下面总结一些我碰到的问题和解决方案:
 
无法建立VPN 连接
安装好pptpd 并设置后,客户端还是无法建立到服务器的连接。造成的原因可能有以下几种:
 
服务器端的防火墙设置:PPTP 服务需要使用1723(tcp) 端口和gre 协议,因此请确保您的防火墙设置允许这两者通行。
如果服务器在路由器后面,请确保路由器上做好相应的设置和端口转发。
如果服务器在路由器后面,那么请确保你的服务器支持VPN Passthrough。
如果客户端在路由器后面,那么客户端所使用的路由器也必须支持VPN Passthrough。其实市面上稍微好点的路由器都是支持VPN Passthrough 的,当然也不排除那些最最最便宜的便宜货确实不支持。当然,如果你的路由器可以刷DD-Wrt 的话就刷上吧,DD-Wrt 是支持的。
能建立链接,但“几乎”无法访问互联网
这里我使用“几乎”这个词,是因为并不是完全不能访问互联网。症状为,打开Google 搜索没问题,但其它网站均无法打开;SSH 可用,但scp 不行;ftp 能握手,但传不了文件。我就遇到了这种情况,仔细Google 后发现原来是MTU 的问题,用ping 探测了一下果然是包过大了。知道问题就好办了,我们可以通过iptables 来修正这一问题。具体原理就不讲了,需要的自己Google。这里只说解决方案,在filter 表中添加下面的规则:
 
sudo iptables -A FORWARD -s 10.100.0.0/24 -p tcp -m tcp --tcp-flags SYN,RST SYN
-j TCPMSS --set-mss 1200上面规则中的1200 可以根据你的实际情况修改,为了保证最好的网络性能,这个值应该不断修改,直至能保证网络正常使用情况下的最大值。
 
好了,至此,一台单网卡pptp-server 就算完成了。
 
ps,最近发现我的文章被大大小小无数网站抄袭,其中不乏一些“大站”。这里我用“抄袭”这个词,是因为你们的做法已经远远超出了正常的“转载”。我每篇文章后都会强调,“转载写明出处,商业网站使用请先获得授权”,但不知道为什么对于这些小编们,发个邮件问我一下会这么难。这次我就不点名了,先警告一下。如果让我发现下次的话,那么别怪我,我会及时给您曝光的。
 
原文链接**:花儿开了- 单网卡Ubuntu 服务器打造PPTP Server