3月 21

linux 简单搭建vpn服务器

[整理 :张子萌 如有转载请保留整理人信息]

测试系统为redhat linux

搭建pptpd VPN服务需要内核支持mppe,内核为2.6以后的内核支持该选项。

查看内核命名# uname -r。注意:如果要远程安装调试,首先将防火墙设置为

不随操作系统启动。

1. 需要安装ppp和pptp服务,本文为使用yum安装。如果希望手动安装请到

http://poptop.sourceforge.net下载pptp源码包。

#yum -y install ppp

#yum -y install pptpd

查看内核是否加载 mppe 模块

# lsmod | grep ppp

如下图:

linux 简单搭建vpn服务器   - simon-zzm - simon个人观点

说明pptp 所又模块加载成功

2. 修改配置文件

安装完成后修改配置文件

2.1 配置pptpd.conf文件

#vi /etc/pptpd.conf

option /etc/ppp/options.pptpd # PPP使用的配置文件位置

stimeout 10 # 控制pptp连接超时,单位为秒

localip 192.168.0.1 # 服务器VPN虚拟接口将分配的IP地址

remoteip 192.168.0.234-238,192.168.0.245 # 客户端VPN连接成功后将分配的IP或IP地址范围。

说明localip和remoteip 不需要必须在同一网段,网络可以连通网段均可。

2.2 配置options.pptpd文件,此处只是对配置文件中部分配置做说明,如无特殊要求可以使用默认配置。

# vi /etc/ppp/options.pptpd

lock

auth # 启用身份验证

name cc3 # 相当于身份验证时的域,这里填上VPN服务器的名字

refuse-pap # 拒绝pap身份验证

refuse-chap # 拒绝chap身份验证

refuse-mschap # 拒绝mschap身份验证

refuse-eap # 拒绝eap身份验证

require-mschap-v2 #使用mschap-v2身份验证,使用windows可以直接建客户端

require-mppe-128 # 要求128位MPPE加密

nomppe-stateful # 无状态,有状态有mppe-stateful

ms-dns 202.106.46.151 # VPN客户端连接成功后将被分配的DNS参数,如只是ip访问可以不用此项

ms-wins 64.32.16.8 # VPN客户端连接成功后将被分配的WINS参数

proxyarp # 启用ARP代理

2.3 创建用户名和密码,可以再文件中直接编写,也可以使用命令创建。推荐使用命令创建。

2.3.1 创建用户

账户为vpntest 密码为123

#vpnuser add vpntest 123

2.3.2 删除用户:

删除 vpntest账户

#vpnuser del vpntest

2.3.3 查看当前用户表

# vpnuser show

2.3.4 直接文件编辑修改账户

#vi /etc/ppp/chap-secrets

格式如下

test pptpd 123 *

注:末尾“*”为分配给vpn客户端ip池的地址,也就是上面设置的remoteip部分。如需要分配指定IP,可以直接打入IP地址。

3. 启动pptpd服务

#service pptpd start

# /etc/init.d/pptpd start

pptpd参数有start|stop|restart|restart-kill|status,分别为启动、停止、重启、直接杀进程后重启、查看进程运行状态。

要查看连入vpn服务器的客户端信息,可以使用route命令,Use Iface列为ppp的为连入vpn服务器的客户信息。也可以使用ifconfig查看。

到此linux pptp vpn配置完成,可以使用windows来连接看看是否正常。

4. 安全防范

VPN使用GRE协议用的47端口 也需要开放 1723,如果使用防火墙需要添加如下配置。

#i ptables -A INPUT -p gre -j ACCEPT

如果开启selinux 还需要设置

#setsebool pppd_disable_trans 1

#setsebool pptp_disable_trans 1

如果客户端想用vpn server来上网的话,需要打开vpn server上的ip_forward

# echo “1” > /proc/sys/net/ipv4/ip_forward

永久更改:

# vi /etc/sysctl.conf

net.ipv4.ip_forward = 0 将 0 改为 1

保存后运行# sysctl –p 是参数生效。

设置ip伪装

#iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to-source XXX.XXX.XXX.XXX (vpn 服务器公网ip)

#iptables -t nat -A FORWARD -o eth0 -j ACCEPT

如果还想访问vpn server所在的局域网,还需要在vpn server上添加路由

* 使用route 命令配置路由表 */

//添加到主机路由

# route add –host 192.168.168.110 dev eth0:1

# route add –host 192.168.168.119 gw 192.168.168.1

//添加到网络的路由

# route add –net IP netmask MASK eth0

# route add –net IP netmask MASK gw IP

# route add –net IP/24 eth1

//添加默认网关

# route add default gw IP

//删除路由

# route del –host 192.168.168.110 dev eth0

5. 常见问题处理

a) MGR: Maximum of 10 connections reduced to 3, not enough IP addresses given

说明配置文件中最大连接为10,但是只分配了3个地址。通过/etc/pptpd.conf配置文件修改

b)连接vpn后经常断线
pppd[18052]: Terminating on signal 15
pppd[18052]: Modem hangup
pppd[18052]: Connect time 1.0 minutes.
pppd[18052]: Sent 12143 bytes, received 4968 bytes.
pppd[18052]: MPPE disabled
pppd[18052]: Connection terminated.
pppd[18052]: Exit.

查看日志发现以上信息:

“Connect time 1.0 minutes.”说明用户连接vpn服务器后只连接了1分钟就断开了。

“Sent 12143 bytes, received 4968 bytes.”说明客户在连接后与vpn服务器间的传输量也不大。如

果流量过大,需要注意检查是否存在攻击。

“Terminating on signal 15”此条信息比较主要,说明vpn程序是被系统其它程序发出停止命令后强行

中断连接的。具体信号可以查看http://simon-zzm.blog.163.com/blog/static/8880952220103110240877/