在Ubuntu上安装PPTP VPN服务

1

关于作者

  • 张丹(Conan), 程序员Java,R,PHP,Javascript
  • weibo:@Conan_Z
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/ubuntu-vpn-pptp/

此图完整的阐述了身为帝国平民的必备技能之一,VPN服务则是此种技能的技术实现,虚拟专用网络(Virtual Private Network ,简称VPN)指的是在公用网络上建立专用网络的技术。它涵盖了跨共享网络或公共网络的封装、加密和身份验证链接的专用网络的扩展。VPN主要采用了彩隧道技术、加解密技术、密钥管理技术和使用者与设备身份认证技术。

点对点隧道协议(PPTP)是VPN服务的一种最简单的实现协议,其它常见的VPN类型还有:使用IPsec的第2层隧道协议(L2TP/IPsec)、安全套接字隧道协议(SSL VPN)。本文主要讨论PPTP VPN服务在Ubuntu上的安装和配置。

A.使用apt源服务来安装PPTPD服务


sudo apt-get update
sudo apt-get install pptpd

B.安装完成之后编辑pptpd.conf配置文件


sudo vi /etc/pptpd.conf

#确保如下选项的配置
option /etc/ppp/pptpd-option                    #指定PPP选项文件的位置
debug                                           #启用调试模式
localip 192.168.0.1                             #VPN服务器的虚拟ip
remoteip 192.168.0.200-238,192.168.0.245        #分配给VPN客户端的虚拟ip

C.编辑PPP选项配置文件

sudo vi /etc/ppp/pptpd-options

#确保如下选项的配置
name pptpd                      #pptpd服务的名称
refuse-pap                      #拒绝pap身份认证模式
refuse-chap                     #拒绝chap身份认证模式
refuse-mschap                   #拒绝mschap身份认证模式
require-mschap-v2               #允许mschap-v2身份认证模式
require-mppe-128                #允许mppe 128位加密身份认证模式
ms-dns 8.8.8.8                  #使用Google DNS
ms-dns 8.8.4.4                  #使用Google DNS
proxyarp                        #arp代理
debug                           #调试模式
dump                            #服务启动时打印出所有配置信息
lock                            #锁定TTY设备
nobsdcomp                       #禁用BSD压缩模式
logfile /var/log/pptpd.log      #输出日志文件位置

D.编辑用户配置文件来添加用户

sudo vi /etc/ppp/chap-secrets

#格式:用户名   服务类型   密码   分配的ip地址
test    *    1234    *
#第一个*代表服务可以是PPTPD也可以是L2TPD,第二个*代表随机分配ip

E.重启PPTPD服务


sudo service pptpd restart

F.配置网络和路由规则 设置ipv4转发


sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
sudo sysctl -p

设置iptables NAT转发

#注意这里eth0代表你的外网网卡,请用ifconfig查看或者咨询网络管理员
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
#如果上面的命令报错,那么可以尝试以下的命令,其中xxx.xxx.xxx.xxx代表你的VPS外网ip地址
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source xxx.xxx.xxx.xxx

设置MTU来确保过大的包不会被丢弃(这个可以不做)


sudo iptables -I FORWARD -s 192.168.0.0/24 -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1300

iptables的设置重启之后会取消,所以可以将上面的命令加入到/etc/rc.local来确保每次重启都会执行设置。

G.至此设置全部完成,可以用任意一个客户端机器如MAC、PC或者手机来新建一个VPN连接使用用户test,密码1234进行测试。另外网上提供一种自动安装脚本,可以参见如下操作:


wget -c http://small-script.googlecode.com/files/debian-pptpd.tar.gz
tar -zxf debian-pptpd.tar.gz
sudo sh pptpd.sh

最后,如果想要实现更便利的用户管理,请参见在Ubuntu上安装FreeRADIUS服务

转载请注明出处:
http://blog.fens.me/ubuntu-vpn-pptp/

打赏作者

This entry was posted in 操作系统

  • Pingback: win7通过PPTP协议使用VPN | 粉丝日志()

  • Pingback: Ubuntu通过PPTP协议使用VPN | 粉丝日志()

  • Gavin_Ma

    感谢指导,已成功 。

  • Pingback: GoAgent代理配置 | 粉丝日志()

  • guxiang

    搞定,谢谢

  • ShionRyuu

    执行sysctl -p时出现“sysctl: permission denied on key ‘net.nf_conntrack_max’”,这个有没有影响?

    “可以将上面的命令加入到/etc/rc.local来确保每次重启都会执行设置。” 这里上面的命令是指“设置MTU”一条还是所有的iptables命令?

    • 1. permission denied,没有加sudo吧。
      2. 上面的命令执行一次就行了,不用每次重启都加载的。

      • ShionRyuu

        sysctl -p是用root用户执行的,网上找到答案了

        报错”error: permission denied on key ‘net.nf_conntrack_max’”等需执行以下命令后再次执行”sysctl -p”:
        rm -f /sbin/sysctl
        ln -s /bin/true /sbin/sysctl

        • SR1

          /bin/true这个命令返回0,在shell里是true的意思
          上面这两个命令的意思是,把sysctl的执行文件删了
          然后把/bin/true连接过去,相当于创建了一个叫sysctl的快捷方式,当你调用sysctl的时候,实际上运行的是/bin/true
          除了返回0什么都没干。而且,你的sysctl再也不可能执行正确了。

          • ivan

            然后呢?

        • SR1

          关于/bin/true可以看stackoverflow上这个问题的答案:

          http://stackoverflow.com/questions/2175405/what-is-bin-true

          /bin/true is a command that returns 0 (a truth value in the shell).

          Its purpose is to use in places in a shell script where you would normally use a literal such as “true” in a programming language, but where the shell will only take a command to run.

          /bin/false is the opposite that non-zero (a false value in the shell).

        • sunqb

          请问你搭建成功了吗?遇到了和你一样的问题

        • 我没遇到你说的问题,切换到root操作就可以。

  • ShionRyuu

    VPN搭建完了,不过能连上,但是访问不了其它网络。不知道是不是转发有问题,下面那条命令是加到/etc/rc.local中了

    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT –to-source xxx.xxx.xxx.xxx(VPS外网IP)

    ifconfig没有看到eth0(有个venet0:0),所以”-o eth0″没有加,不知道是不是这个有影响

    • 1. eth0,默认是第一块网卡的,和这个应该没有关系。
      2. 你启动VPN的时候,要看一下是什么网段的,有可能是10.0.0.x,把192.168.0.0 替换成10.x网段就行了。

      • 我的网卡也是只有个venet0:0,那这里是应该怎么写呢?还有这个网段必须和vpn的网段一致还是随便什么?谢谢。

        • 网卡名字无所谓,网段是必须要一致的。

    • Rickle

      XEN的默认网卡为eth0,OpenVZ的默认网卡为venet0

      并且

      OpenVZ VPS有点特别,默认的venet0网卡存放的是ip为127.0.0.1,绑定ipv6地址(如果有),ipv4地址绑定在venet0:0上。

  • crayygy

    能够连上VPN,但是无法访问外网,不知道哪里出了问题。

    • iptable的问题吧,先把iptable关了吧。

      • 怎样关iptable呀

        • 查看防火墙状态:
          /etc/init.d/iptables status

          暂时关闭防火墙:
          /etc/init.d/iptables stop

          重启iptables:
          /etc/init.d/iptables restart

          • 谢谢,已经搞定了。不是配置问题,我家的WIFI好像有问题,总是连不上,但是上4G连VPN是可以的。

          • 调好就行.

  • songzhj

    按照很多教程装过很多遍了, 每次结果都是连接的时候显示错误800 , 这是为什么…

    • 我没见过这个错误,把pptp服务器日志贴出来。

      • dh

        我也遇到错误800。。。

        请问哪里查看pptp服务器日志?/var/log/pptpd.log是空白的。

        关于网段,如下网络是10.×网段的?iptables该如何设置呢?
        eth1 Link encap:Ethernet HWaddr fa:16:3e:7f:b8:a7
        inet addr:10.1.5.6 Bcast:10.1.5.255 Mask:255.255.255.0

        谢谢!

        • vi /etc/ppp/pptpd-options
          logfile /var/log/pptpd.log #输出日志文件位置

          这里配置的日志,应该是有的吧。

  • xuhaibing

    10.172.125.87是填 10.172.125.0还是 10.172.125.1?

  • sunqb

    你好,我可以连接上,但是访问不了网络。请问是什么原因呢?

    • 是不是丢包了,执行下面的命令。
      sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
      sudo iptables -I FORWARD -s 192.168.0.0/24 -p tcp –syn -i ppp+ -j TCPMSS –set-mss 1300

  • Vincent

    连接成功了,能上instagram,上不了谷歌和脸书,求教。

    • 不应该啊,你的国外服务器,本身是否能上谷歌?

      • Vincent

        我手机连这个VPN可以正常翻墙,电脑经常不行。手机和电脑都是苹果。会是什么原因?求解答,谢谢!

        • 是不是接入的网络的问题?手机和PC都是通过一个wifi吗?

      • Vincent

        搞定了,要点击 Advanced,勾选Send All Traffic Using VPN

  • wei jin

    您好 你上面所说的所有代码 是不是要用ssh链接到vps服务器上安装?

  • Vincent

    博主,按照你的方法配置,我的云主机VPN正常使用几个月了,非常感谢🙏。但最近连上VPN后(能正常连接),却打不开网页,只能ping通VPN主机的IP地址;断开VPN连接后,国内网页能正常访问。 我到主机里面,能ping通谷歌。 你能告诉我可能是哪里出错了吗?

    • 检查一下VPN主机的DNS,再检查一下VPN的日志,看看什么情况。

  • ivan

    pptpd.conf配置文件 /etc/ppp/pptpd-option 现在是/etc/ppp/options.pptpd了~
    哈哈 前年的帖子又被挖出来拉~

    • 我的服务器是 Ubuntu 12.04 LTS (GNU/Linux 4.1.5-x86_64-linode61 x86_64),还是/etc/ppp/pptpd-option

      root@li478-194:~# ls -l /etc/ppp/
      total 76
      -rw——- 1 root root 114 Jan 9 2015 chap-secrets
      -rwxr-xr-x 1 root root 1754 Feb 4 2011 ip-down
      drwxr-xr-x 2 root root 4096 Apr 26 2012 ip-down.d
      -rwxr-xr-x 1 root root 1892 Feb 4 2011 ip-up
      drwxr-xr-x 2 root root 4096 Apr 26 2012 ip-up.d
      -rwxr-xr-x 1 root root 784 Feb 4 2011 ipv6-down
      drwxr-xr-x 2 root root 4096 Feb 4 2011 ipv6-down.d
      -rwxr-xr-x 1 root root 922 Feb 4 2011 ipv6-up
      drwxr-xr-x 2 root root 4096 Feb 4 2011 ipv6-up.d
      -rw-r–r– 1 root root 13480 Jun 15 2013 options
      -rw——- 1 root root 1628 Apr 26 2012 pap-secrets
      drwxr-s— 2 root dip 4096 Apr 26 2012 peers
      -rwxr-xr-x 1 root root 137 Feb 4 2011 pppoe_on_boot
      -rw-r–r– 1 root root 295 Jun 15 2013 pptpd-options
      -rw-r–r– 1 root root 3228 Jan 17 2013 pptpd-options.old
      drwxr-xr-x 2 root root 4096 Dec 13 2011 resolv