在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 操作系统, 网络技术

0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

49 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments

[…] 在Ubuntu上安装PPTP VPN服务 […]

[…] 关于PPTP的服务器端配置:请参考 在Ubuntu上安装PPTP VPN服务 文章 win7通过PPTP协议使用VPN:请参考 win7通过PPTP协议使用VPN 文章 […]

Gavin_Ma

感谢指导,已成功 。

Conan Zhang

🙂

[…] 自己动手架个梯子,有条件的可以搭建一个私有PPTP服务器,没条件的直接使用GoAgent,也是不错的选择。 […]

guxiang

搞定,谢谢

Conan Zhang

🙂

ShionRyuu

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

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

Conan Zhang

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

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

Conan Zhang

我没遇到你说的问题,切换到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″没有加,不知道是不是这个有影响

Conan Zhang

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

jeffiy

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

Conan Zhang

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

Rickle

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

并且

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

crayygy

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

Conan Zhang

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

HeQingbao

怎样关iptable呀

Conan Zhang

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

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

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

HeQingbao

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

Conan Zhang

调好就行.

songzhj

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

Conan Zhang

我没见过这个错误,把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

谢谢!

Conan Zhang

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

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

xuhaibing

10.172.125.87是填 10.172.125.0还是 10.172.125.1?

Conan Zhang

10.172.125.1

sunqb

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

Conan Zhang

是不是丢包了,执行下面的命令。
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,上不了谷歌和脸书,求教。

Conan Zhang

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

Vincent

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

Conan Zhang

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

Vincent

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

wei jin

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

Conan Zhang

是的。

Vincent

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

Conan Zhang

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

ivan

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

Conan Zhang

我的服务器是 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

xiao jinhua

vpn 连上,但还是访问不了,使用的是aws ec2 的机器,日志提示这样
Unsupported protocol ‘IPv6 Control Protocol’ (0x8057) received
sent [LCP ProtRej id=0x2 80 57 01 01 00 0e 01 0a e0 a4 7d 21 1c 2b a4 4b]
rcvd [IPCP ConfAck id=0x1 ]
rcvd [IPCP ConfReq id=0x2 ]
sent [IPCP ConfAck id=0x2 ]
Cannot determine ethernet address for proxy ARP
local IP address 172.31.1.1
remote IP address 192.168.0.234
pptpd-logwtmp.so ip-up ppp0 demo 223.104.63.12
Script /etc/ppp/ip-up started (pid 2659)
Script /etc/ppp/ip-up finished (pid 2659), status = 0x0
Hangup (SIGHUP)
Modem hangup
pptpd-logwtmp.so ip-down ppp0
Connect time 1.0 minutes.
Sent 14542 bytes, received 11226 bytes.
Script /etc/ppp/ip-down started (pid 2668)
MPPE disabled
sent [LCP TermReq id=0x3 “MPPE disabled”]
Connection terminated.
Waiting for 1 child processes…
script /etc/ppp/ip-down, pid 2668

Conan Zhang

这是我服务器上面的完整日志。

root@li478-194:~# tail -f /var/log/pptpd.log
Connect time 1.3 minutes.
Sent 658266 bytes, received 83103 bytes.
Script /etc/ppp/ip-down started (pid 14992)
sent [LCP TermAck id=0x2]
rcvd [LCP TermReq id=0x3 “MPPE disabled”]
sent [LCP TermAck id=0x3]
Script /etc/ppp/ip-down finished (pid 14992), status = 0x0
Hangup (SIGHUP)
Modem hangup
Connection terminated.
Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
pptpd-logwtmp: $Version$
pppd options in effect:
debug # (from /etc/ppp/pptpd-options)
logfile /var/log/pptpd.log # (from /etc/ppp/pptpd-options)
dump # (from /etc/ppp/pptpd-options)
plugin /usr/lib/pptpd/pptpd-logwtmp.so # (from command line)
require-mschap-v2 # (from /etc/ppp/pptpd-options)
refuse-pap # (from /etc/ppp/pptpd-options)
refuse-chap # (from /etc/ppp/pptpd-options)
refuse-mschap # (from /etc/ppp/pptpd-options)
name pptpd # (from /etc/ppp/pptpd-options)
remotenumber 61.148.242.186 # (from command line)
pptpd-original-ip 61.148.242.186 # (from command line)
115200 # (from command line)
lock # (from /etc/ppp/pptpd-options)
crtscts # (from /etc/ppp/options)
local # (from command line)
asyncmap 0 # (from /etc/ppp/options)
lcp-echo-failure 4 # (from /etc/ppp/options)
lcp-echo-interval 30 # (from /etc/ppp/options)
hide-password # (from /etc/ppp/options)
novj # (from /etc/ppp/pptpd-options)
novjccomp # (from /etc/ppp/pptpd-options)
ipparam 61.148.242.186 # (from command line)
ms-dns xxx # [don’t know how to print value] # (from /etc/ppp/pptpd-options)
proxyarp # (from /etc/ppp/pptpd-options)
192.168.0.1:192.168.0.200 # (from command line)
nobsdcomp # (from /etc/ppp/pptpd-options)
require-mppe-128 # (from /etc/ppp/pptpd-options)
noipx # (from /etc/ppp/options)
using channel 29
Using interface ppp0
Connect: ppp0 /dev/pts/1
sent [LCP ConfReq id=0x1 ]
rcvd [LCP ConfReq id=0x1 ]
sent [LCP ConfAck id=0x1 ]
rcvd [LCP ConfAck id=0x1 ]
sent [LCP EchoReq id=0x0 magic=0x77dd7d38]
sent [CHAP Challenge id=0x50 , name = “pptpd”]
rcvd [LCP EchoReq id=0x0 magic=0x66cebcaa]
sent [LCP EchoRep id=0x0 magic=0x77dd7d38]
rcvd [LCP EchoRep id=0x0 magic=0x66cebcaa]
rcvd [CHAP Response id=0x50 , name = “xxxx”]
sent [CHAP Success id=0x50 “S=E7C483DA1681BE638040E25134B64D4C81340A63 M=Access granted”]
peer from calling number 61.148.242.186 authorized
sent [CCP ConfReq id=0x1 ]
rcvd [CCP ConfReq id=0x1 ]
sent [CCP ConfNak id=0x1 ]
rcvd [CCP ConfAck id=0x1 ]
rcvd [CCP ConfReq id=0x2 ]
sent [CCP ConfAck id=0x2 ]
MPPE 128-bit stateless compression enabled
sent [IPCP ConfReq id=0x1 ]
rcvd [IPCP ConfReq id=0x1 ]
sent [IPCP ConfNak id=0x1 ]
rcvd [IPV6CP ConfReq id=0x1 ]
Unsupported protocol ‘IPv6 Control Protocol’ (0x8057) received
sent [LCP ProtRej id=0x2 80 57 01 01 00 0e 01 0a 0d c5 28 54 cd c6 6d 79]
rcvd [IPCP ConfAck id=0x1 ]
rcvd [IPCP ConfReq id=0x2 ]
sent [IPCP ConfAck id=0x2 ]
Cannot determine ethernet address for proxy ARP
local IP address 192.168.0.1
remote IP address 192.168.0.200
pptpd-logwtmp.so ip-up ppp0 conan 61.148.242.186
Script /etc/ppp/ip-up started (pid 16858)
Script /etc/ppp/ip-up finished (pid 16858), status = 0x0
Hangup (SIGHUP)
Modem hangup
pptpd-logwtmp.so ip-down ppp0
Connect time 0.1 minutes.
Sent 8292 bytes, received 3534 bytes.
Script /etc/ppp/ip-down started (pid 16869)
MPPE disabled
sent [LCP TermReq id=0x3 “MPPE disabled”]
Connection terminated.
Script /etc/ppp/ip-down finished (pid 16869), status = 0x0

Conan Zhang

我觉得问题,是你的local IP address 172.31.1.1,和服务器IP网段不一样。

[…] 程序员都知道,不多说了。VPN服务器搭建,请参考文章在Ubuntu上安装IPSEC VPN服务,在Ubuntu上安装PPTP VPN服务 […]

49
0
Would love your thoughts, please comment.x
()
x