作者:沈小然 日期:2013-11-26
目录
1 VPN服务器环境说明… 2
2 安装VPN服务器包… 2
3 配置VPN服务器… 3
4 配置VPN服务器的路由转发功能… 3
5 FAQ.. 4
5.1 /var/log/messages日志中出现下面的错误,如何解决?… 4
1 VPN服务器环境说明
操作系统:CentOS release 6.4 (Final)
本地网卡:
# ifconfig
em1 Link encap:Ethernet HWaddr 78:2B:CB:42:C3:68
inet addr:192.168.123.201 Bcast:192.168.123.255 Mask:255.255.255.0
em2 Link encap:Ethernet HWaddr 78:2B:CB:42:C3:6A
inet addr:10.100.100.201 Bcast:10.100.100.255 Mask:255.255.255.0
说明:本地网卡em1负责连接vpn客户端,em2负责与10.100.100.0网段服务器的连接。
本实验目的:
(1) vpn客户端能够成功的连接到vpn服务器上;
(2) vpn服务器可以转发来自vpn客户端对10.100.100.0网段的请求。
2 安装VPN服务器包
使用yum安装ppp和pptp包
yum -y install ppp*
yum -y install pptp*
注意:redhat5.8等老版本的yum没有提供pptp和pptp-setup的rpm包,推荐到http://rpm.pbone.net/index.php3去找,源码包可以到 http://pptpclient.sourceforge.net 下载,这里建议选用rpm包。
3 配置VPN服务器
1. 编辑/etc/pptpd.conf文件,找到“locapip”和“remoteip”这两个配置项,将前面#去掉。将后面的IP地址更改为自己需要IP
locapip表示VPN服务器自己的本地IP地址;
remoteip表示VPN客户端连到服务器上将会被分配的IP地址范围。
# vi /etc/pptpd.conf
ppp /usr/sbin/pppd
option /etc/ppp/options.pptpd
#logwtmp
localip 192.168.123.201
remoteip 192.168.0.234-238,192.168.0.245
2. 再编辑文件/etc/ppp/options.pptpd,在末尾添加DNS地址
# vi /etc/ppp/options.pptpd
name ZLZFVPN
refuse-pap 拒绝 pap 身份验证模式
refuse-chap 拒绝 chap 身份验证模式
refuse-mschap 拒绝mschap身份验证模式
require-mschap-v2
require-mppe-128
proxyarp
debug 开启调试模式,相关信息同样记录在 /var/logs/message 中
dump
lock 锁定客户端 PTY 设备文件
nobsdcomp 禁用 BSD 压缩模式
novj
novjccomp 禁用 Van Jacobson 压缩模式
nologfd 禁止将错误信息记录到标准错误输出设备(stderr)
ms-dns 202.106.196.115
ms-dns 192.168.123.5
保存退出文件。
3. 添加VPN客户端帐号和口令
# vi /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
shen pptpd 123456 *
这里,我们创建了一个vpn用户:shen,口令:123456。一个帐号一行,可以添加多个帐号。
4. 启动VPN服务器
# /etc/init.d/pptpd restart
至此VPN服务器搭建完成了,但实际环境中还需要给VPN服务器增加路由功能
pptpd成功启动以后将开启一个TCP协议的端口1723。
tcp 0 0 0.0.0.0:1723 0.0.0.0:* LISTEN 1435/pptpd
4 配置VPN服务器的路由转发功能
1. 修改内核文件,使系统支持转发
#vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
然后执行下列命令,使其生效:
#sysctl –p
2. 配置防火墙增加转发规则
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o em2 -j MASQUERADE
说明:对来自192.168.0.0网段(VPN分配的IP段,拨号网卡是em1)的访问允许转发到em2网卡(em2网卡连接10.100.100.0网段),从而访问10.100.100.201那个网段的服务器。
本例中,我只需要访问vpn服务器的10.100.100.201网卡,所以上面的路由转发操作可以不做。
提供我的路由表
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.234 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
10.100.100.0 0.0.0.0 255.255.255.0 U 0 0 0 em2
192.168.123.0 0.0.0.0 255.255.255.0 U 0 0 0 em1
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 em1
0.0.0.0 192.168.123.250 0.0.0.0 UG 0 0 0 em1
提供我的iptables,其实没有任何配置
# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
注意:vpn客户端要访问10.100.100.0网段需要在vpn客户端添加一条路由网关指向拨号以后创建的ppp0网卡,这里不说明大家可能会有点懵。
5 FAQ
5.1 /var/log/messages日志中出现下面的错误,如何解决?
错误日志内容:from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs
解决办法:
修改 /etc/pptpd.conf 文件,注释掉logwtmp 这行,重启pptpd服务。
#logwtmp
# /etc/init.d/pptpd restart
再次尝试连接vpn客户端,可以成功验证用户和口令了。
5.2 如果系统阻止了gre协议,可以使用下面的命令打开
iptables -A INPUT -p tcp -m tcp –dport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT
iptables -A OUTPUT -p gre -j ACCEPT