关于作者
- 张丹(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/
[…] 在Ubuntu上安装PPTP VPN服务 […]
[…] 关于PPTP的服务器端配置:请参考 在Ubuntu上安装PPTP VPN服务 文章 win7通过PPTP协议使用VPN:请参考 win7通过PPTP协议使用VPN 文章 […]
感谢指导,已成功 。
🙂
[…] 自己动手架个梯子,有条件的可以搭建一个私有PPTP服务器,没条件的直接使用GoAgent,也是不错的选择。 […]
搞定,谢谢
🙂
执行sysctl -p时出现“sysctl: permission denied on key ‘net.nf_conntrack_max’”,这个有没有影响?
“可以将上面的命令加入到/etc/rc.local来确保每次重启都会执行设置。” 这里上面的命令是指“设置MTU”一条还是所有的iptables命令?
1. permission denied,没有加sudo吧。
2. 上面的命令执行一次就行了,不用每次重启都加载的。
sysctl -p是用root用户执行的,网上找到答案了
报错”error: permission denied on key ‘net.nf_conntrack_max’”等需执行以下命令后再次执行”sysctl -p”:
rm -f /sbin/sysctl
ln -s /bin/true /sbin/sysctl
/bin/true这个命令返回0,在shell里是true的意思
上面这两个命令的意思是,把sysctl的执行文件删了
然后把/bin/true连接过去,相当于创建了一个叫sysctl的快捷方式,当你调用sysctl的时候,实际上运行的是/bin/true
除了返回0什么都没干。而且,你的sysctl再也不可能执行正确了。
然后呢?
关于/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).
请问你搭建成功了吗?遇到了和你一样的问题
我没遇到你说的问题,切换到root操作就可以。
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的网段一致还是随便什么?谢谢。
网卡名字无所谓,网段是必须要一致的。
XEN的默认网卡为eth0,OpenVZ的默认网卡为venet0
并且
OpenVZ VPS有点特别,默认的venet0网卡存放的是ip为127.0.0.1,绑定ipv6地址(如果有),ipv4地址绑定在venet0:0上。
能够连上VPN,但是无法访问外网,不知道哪里出了问题。
iptable的问题吧,先把iptable关了吧。
怎样关iptable呀
查看防火墙状态:
/etc/init.d/iptables status
暂时关闭防火墙:
/etc/init.d/iptables stop
重启iptables:
/etc/init.d/iptables restart
谢谢,已经搞定了。不是配置问题,我家的WIFI好像有问题,总是连不上,但是上4G连VPN是可以的。
调好就行.
按照很多教程装过很多遍了, 每次结果都是连接的时候显示错误800 , 这是为什么…
我没见过这个错误,把pptp服务器日志贴出来。
我也遇到错误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 #输出日志文件位置
这里配置的日志,应该是有的吧。
10.172.125.87是填 10.172.125.0还是 10.172.125.1?
10.172.125.1
你好,我可以连接上,但是访问不了网络。请问是什么原因呢?
是不是丢包了,执行下面的命令。
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
连接成功了,能上instagram,上不了谷歌和脸书,求教。
不应该啊,你的国外服务器,本身是否能上谷歌?
我手机连这个VPN可以正常翻墙,电脑经常不行。手机和电脑都是苹果。会是什么原因?求解答,谢谢!
是不是接入的网络的问题?手机和PC都是通过一个wifi吗?
搞定了,要点击 Advanced,勾选Send All Traffic Using VPN
您好 你上面所说的所有代码 是不是要用ssh链接到vps服务器上安装?
是的。
博主,按照你的方法配置,我的云主机VPN正常使用几个月了,非常感谢🙏。但最近连上VPN后(能正常连接),却打不开网页,只能ping通VPN主机的IP地址;断开VPN连接后,国内网页能正常访问。 我到主机里面,能ping通谷歌。 你能告诉我可能是哪里出错了吗?
检查一下VPN主机的DNS,再检查一下VPN的日志,看看什么情况。
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
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
这是我服务器上面的完整日志。
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
我觉得问题,是你的local IP address 172.31.1.1,和服务器IP网段不一样。
[…] 程序员都知道,不多说了。VPN服务器搭建,请参考文章在Ubuntu上安装IPSEC VPN服务,在Ubuntu上安装PPTP VPN服务 […]