最近在CentOS上安装了OpenVZ,需要安装OpenVZ Web Panel,
但是最终安装失败,查看脚本发现要下载googlecode的文件,原因在此了。
安装pptp和pptp-setup
pptp就不用解释了,pptp-setup是一个设置脚本,通过该脚本可以使用方便地进行初始化设置,生成配置文件。
1 |
yum install pptp pptp-setup |
创建配置
1 |
pptpsetup --create codelife --server vpn.codelife.me --username codelife --password me --encrypt |
若报如下错误
1 2 |
FATAL: Module ppp_mppe not found. /usr/sbin/pptpsetup: couldn't find MPPE support in kernel. |
则需要执行
1 |
modprobe ppp_mppe |
向内核注册ppp_mppe模块
连接VPN
1 |
pppd call codelife |
验证连接情况
然后通过如下命令验证连接情况
1 |
ip a |grep ppp |
排错
如果上面命令没有任何返回,则说明连接失败了,可以参看/var/log/message文件了解错误的原因
1 |
tail -f /var/log/message | grep ppp |
服务端不支持MPPE
若错误为
1 |
MPPE required but peer negotiation failed |
说明服务端不支持MPPE加密,pptpsetup时不需要使用—encrypt选项。可以手工修改/etc/ppp/peers/codelife文件
1 |
vim /etc/ppp/peers/codelife |
去除或者注释掉require-mppe-128
客户端不支持MPPE
若错误为
1 |
LCP terminated by peer (MPPE required but peer refused) |
说明服务端要求MPPE加密,但是客户端不支持,pptpsetup时漏掉了—encrypt选项。解决方法正好相反,往/etc/ppp/peers/codelife文件添加一行require-mppe-128
配置路由表
连接成功后,通过route命令可参看路由表信息:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
20*.*.*.*3 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0
192.168.0.50 0.0.0.0 255.255.255.255 UH 0 0 0 venet0
172.16.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
可见,只添加了一条访问172.16.1.1 IP的路由信息。
访问特定网段
假设你想让登陆VPN服务器的客户端互相访问,那么,你需要在客户端上加入172.16.1网段,即:
1 |
route add -net 172.16.1.0 netmask 255.255.255.0 dev ppp0 |
路由表信息:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
20*.*.*.*3 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0
192.168.0.50 0.0.0.0 255.255.255.255 UH 0 0 0 venet0
172.16.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
172.16.1.0 0.0.0.0 255.255.255.0 U 0 0 0 ppp0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
然后使用ping命令测试
# ping 172.16.1.21 -c 3
PING 172.16.1.21 (172.16.1.21) 56(84) bytes of data.
64 bytes from 172.16.1.21: icmp_seq=1 ttl=63 time=43 ms
64 bytes from 172.16.1.21: icmp_seq=2 ttl=63 time=40 ms
64 bytes from 172.16.1.21: icmp_seq=3 ttl=63 time=49 ms--- 172.16.1.21 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 132ms
rtt min/avg/max/mdev = 40.011/44.167/49.366/9.355 ms
这里,172.16.1.21是另一台客户端,同样,若希望访问网段也需要加入类似的路由信息。
全部流量都通过VPN
如果您想连接VPN后,全部流量都通过VPN出去(爬-墙),就像Windows 那样。那么按上面的步骤可能会遇到一些问题。因为,Linux的默认网关只能是一个,所以,这需要分两种情况。
a)没有默认网关
这时,你只需设置一个默认路由即可,例如:
1 |
route add -net 0.0.0.0 dev ppp0 |
b)已有默认网关
但更多情况下,默认网关都是存在的。例如,在这里的局域网内部已经设置了默认网关为192.168.0.1
若像上面那样添加一条路由肯能不行的,需要先让访问VPN服务端的流量可通过,然后才能转发其他的数据包。(20*.*.*.*3为PPTP服务器IP)。由于我的系已经自动添加了这条路由,所以无需执行第一条命令。但是没有这条路由的情况下一定要执行。切记!
1 2 |
ip route replace 20*.*.*.*3 via 192.168.0.1 dev eth0 src 192.168.0.100 ip route replace default dev ppp0 |
最后的路由信息:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
20*.*.*.*3 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0
192.168.0.50 0.0.0.0 255.255.255.255 UH 0 0 0 venet0
172.16.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
当然,关闭连接时,也是需要恢复默认网关的:
1 2 |
ip route del 20*.*.*.*3 via 192.168.0.1 dev eth0 src 192.168.0.100 ip route add default via 192.168.0.1 |
关闭连接
注意:启动连接很简单,但停止不能使用ifconfig pp0 down,否则只是禁用了ppp0网卡,后台连接还是存在的。当然,可以杀进程(
1 |
killall pppd |
)来断开连接。不过,ppp工具包提供了更好用的脚本。但需要您进行一些额外的工作:
1 2 3 4 |
cp /usr/share/doc/ppp-2.4.5/scripts/pon /usr/sbin/ cp /usr/share/doc/ppp-2.4.5/scripts/poff /usr/sbin/ chmod +x /usr/sbin/pon chmod +x /usr/sbin/poff |
然后使用下面的命令启动和关闭连接即可:
1 2 |
pon vpn poff vpn |
原文链接:CentOS 6下配置PPTP VPN客户端,转载请注明来源!