ubuntu服务器搭建pptp服务实现vpn服务器

来源:互联网 发布:淘宝返利多少 编辑:程序博客网 时间:2024/05/17 03:05

我们知道,VPN有很多种,比如Windows Server系列自己就带了VPN服务器,安装配置都非常简单,而今天我要在日志中介绍部署的,是Linux下的VPN-Server,基于PPTP协议。Ubuntu系统是基于Debian构造的一版发行版,交流社区非常活跃,而且因为基于Debian,他自己带的包管理器能很好的处理依赖关系,方便我们安装软件。 

  1. 安装pptp服务
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. sudo apt-get install pptpd   
  • 修改pptp的配置文件
这里需要修改pptp的三个配置文件:
  • /etc/pptpd.conf 
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. vim /etc/pptpd.conf  
找到localip和remoteip,如图,localip是linux主机的ip地址,remoteip是地址池,也就是远程拨进来的计算机所分配到的ip地址

我是这样配置的,你可以根据自己的需要灵活配置。
  • 修改/etc/ppp/pptpd-options
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. vim /etc/ppp/pptpd-options  
找到ms-dns,如图,配置dns服务器,我这里用的是google的dns,你可以添加两个,另起一行再写一个即可


  • 修改/etc/ppp/chap-secrets,这个文件是用来添加vpn用户的,
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. vim /etc/ppp/chap-secrets  

按照,用户名(tab)主机名(tab)密码(tab)分配到的ip地址 这样的格式来填写,其中主机名可以用“*”代替,如果不强制指定该用户分配到哪一个ip地址,可以将最后一项也改为“*”
  • 重启pptp服务
[html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. /etc/init.d/pptpd restart  
4、检验PPTP服务器是否运行
  在控制台输入命令
    sudo netstat -anp | grep pptpd
  将得到如下结果,说明PPTP服务器运行成功。
    tcp    0    0.0.0.0:1723    0.0.0.0:*    LISTEN 6426/pptpd
    unix    2    [ ]    DGRAM    54100    6426/pptpd
  为了客户端能够顺利连接到VPN服务器,还需主机防火墙开放VPN端口(默认为1723)
    sudo iptables -I INPUT -p tcp --dport 1723 -j ACCEPT
5、在VPN服务器上设置对于客户端IP地址的网络地址转换(NAT)
  到目前为止,VPN服务器确实搭建完成,客户端也可以正常连接了,但是客户端却不能通过该VPN服务器上网,我们还需要为客户端IP地址设置网络地址转换(NAT)
  查看 "/proc/sys/net/ipv4/ip_forward" 文件中的值是否为"1",
  如果不是,则需在 "/etc/sysctl.conf" 文件中添加一行 "net.ipv4.ip_forward=1" 
  运行
    sudo /etc/init.d/procps restart
    sudo iptables --table nat --append POSTROUTING --out-interface eth0 --jump MASQUERADE
  好吧,到这里VPN服务器搭建完成!!!
稍等片刻,嘿嘿,从远程建立一个VPN连接,试试看吧。 
找一台 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 并设置后,客户端还是无法建立到服务器的连接。造成的原因可能有以下几种:
  1. 服务器端的防火墙设置:PPTP 服务需要使用 1723(tcp) 端口和 gre 协议,因此请确保您的防火墙设置允许这两者通行。
  2. 如果服务器在路由器后面,请确保路由器上做好相应的设置和端口转发。
  3. 如果服务器在路由器后面,那么请确保你的服务器支持 VPN Passthrough。
  4. 如果客户端在路由器后面,那么客户端所使用的路由器也必须支持 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 就算完成了。
断开VPN连接以及VPN关闭VPN服务器:
  运行ifconfig来查看当前的VPN连接,如果想断开某个VPN连接,首先查询其PID,如:
cat /var/run/ppp0.pid
  根据查询到得PID,将该进程结束即可断开该VPN连接
sudo kill 5834
  至于pptp的PID,运行
    sudo netstat -anp | grep pptpd
  从返回的结果便可看出pptp的PID,如从上面的运行结果来看pptp的PID为:6426,那么运行
    sudo kill 6426
  即可关闭VPN服务。
0 0
原创粉丝点击