标签 PPTP 下的文章

一键安装拨号vpn pptp脚本

一些特殊注意事项

(1) ppp-2.4.4-14.1.rhel5.x86_64.rpm
PPTP需要PPP的支持,一般情况下linux系统都已安装有PPP软件包,最好安装较新的ppp软件包,用Uvh这个参数来更新系统的PPP组件。也可以用yum –y instll ppp命令安装。

(2) pptpd-1.3.4-2.rhel5.x86_64.rpm (pptpd服务软件)

(3) dkms-2.0.17.5-1.noarch.rpm CentOS5x/RHEL5x(内核支持mppe)不用安装
DKMS全称是 Dynamic Kernel Module Support,它可以帮我们维护内核外的这些驱动程序,在内核版本变动之后可以自动重新生成新的模块。

(4) kernel_ppp_mppe-1.0.2-3dkms.noarch(MPPE的内核补丁),CentOS5x/RHEL5x(内核支持mppe)不用安装

(5) 在ADSL拨号环境中由于PPP包头占用8字节,MTU为1492字节,MSS为1452字节,如不能正确设置会导致网络不正常,可以通过TCPMSS模块调整MSS大小
关于iptables的:MASQUERADE
假如当前系统用的是ADSL动态拨号方式,那么每次拨号,出口ip192.168.5.3都会改变
而且改变的幅度很大,不一定是192.168.5.3到192.168.5.5范围内的地址
这个时候如果按照现在的方式来配置iptables就会出现问题了
因为每次拨号后,服务器地址都会变化,而iptables规则内的ip是不会随着自动变化的
每次地址变化后都必须手工修改一次iptables,把规则里边的固定ip改成新的ip
这样是非常不好用的
MASQUERADE就是针对这种场景而设计的,他的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT
比如下边的命令:

iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE

如此配置的话,不用指定SNAT的目标ip了
不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做SNAT出去
这样就实现了很好的动态SNAT地址转换

注:
对于MASQUERADE,只是计算机的负荷稍微多一点。因为对每个匹配的包,MASQUERADE都要查找可用的IP地址,而不象SNAT用的IP地址 是配置好的。当然,这也有好处,就是我们可以使用通过PPP、 PPPOE、SLIP等拨号得到的地址,这些地址可是由ISP的DHCP随机分配的。

#!/bin/bash
wget https://fastlnmp.googlecode.com/files/dkms-2.0.17.5-1.noarch.rpm -p /usr/local/src/
wget https://fastlnmp.googlecode.com/files/ppp-2.4.4-9.0.rhel5.i386.rpm -p /usr/local/src/
wget https://acelnmp.googlecode.com/files/pptpd-1.3.4-2.rhel5.x86_64.rpm -p /usr/local/src/
yum -y install make libpcap iptables gcc-c++ logrotate tar cpio perl pam tcp_wrappers
rpm -ivh dkms-2.0.17.5-1.noarch.rpm
rpm -Uvh ppp-2.4.4-9.0.rhel5.i386.rpm
rpm -ivh pptpd-1.3.4-2.rhel5.x86_64.rpm
#mknod /dev/ppp c 108 0
echo 1 > /proc/sys/net/ipv4/ip_forward
#echo “mknod /dev/ppp c 108 0” >> /etc/rc.local
echo “echo 1 > /proc/sys/net/ipv4/ip_forward” >> /etc/rc.local
echo “localip 192.168.88.1” >> /etc/pptpd.conf
echo “remoteip 192.168.88.50-254” >> /etc/pptpd.conf
echo “ms-dns 8.8.8.8” >> /etc/ppp/options.pptpd
echo “ms-dns 8.8.4.4” >> /etc/ppp/options.pptpd
pass=`openssl rand 6 -base64`
if [ “$1” != “” ]
then pass=$1
fi
echo “vpn pptpd ${pass} *” >> /etc/ppp/chap-secrets
iptables -t nat -A POSTROUTING -s 192.168.88.0/255.255.255.0 -o eth0 -j MASQUERADE
iptables -A FORWARD -p tcp –syn -s 192.168.88.0/24 -j TCPMSS –set-mss 1356
service iptables save
chkconfig iptables on
chkconfig pptpd on
service iptables start
service pptpd start
echo “VPN service is installed, your VPN username is vpn, VPN password is ${pass}”

 

转自http://blog.coocla.org/185.html

Centos PPTP VPN yum安装配置

通过 yum 方式安装的好处是便于管理,可以通过 yum update 命令来升级程序版本。
安装 ppp 和 iptalbes
yum install ppp iptables
安装 pptpd
加入 yum 源
rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel6/pptp-release-current.noarch.rpm
安装 pptpd
yum install pptpd
——————————— 设置 ————————————
开启路由转发
vim  /etc/sysctl.conf
修改
net.ipv4.ip_forward = 1
执行:
/sbin/sysctl -p 让修改的内核参数生效
配置
vim /etc/ppp/options.pptpd
修改:
ms-dns 4.2.2.1 当地能用的dns
ms-dns 4.2.2.2
vim  /etc/pptpd.conf
修改 :
localip 10.8.8.1 为vpn管道的ip (VPN主机IP)
remoteip 10.8.8.2-245 为给客户端连接分配的ip地址范围
开机启动、运行
chkconfig pptpd on
service pptpd start
添加账号
echo -e ‘vpntest * vpntestpassword *’ >> /etc/ppp/chap-secrets
注:chap-secrets保存的信息客户端连接信息依次是:用户名,服务名,密码,允许的ip。服务名在options.pptpd的name定义,默认为pptpd
iptables 配置
chkconfig iptables on
/sbin/iptables -A INPUT -p tcp –dport 1723 -j ACCEPT
/sbin/iptables -A INPUT -p tcp –dport 47 -j ACCEPT
/sbin/iptables -A INPUT -p gre -j ACCEPT
iptables -A POSTROUTING -t nat -s 10.10.10.0/24 -o eth0 -j MASQUERADE
service iptables start

 

Pptp+FreeRadius+Ldap实现VPN用户认证

由于公司使用OpenLDAP统一管理员工的账号密码信息
而现在需要搭建VPN以方便出差员工能访问公司内部网络
在对比流行的几种VPN类型后,选择了PPTP方式
OpenVPN/ipsec VPN虽然安全性比较高,但操作较麻烦,而公司大多数的员工对电脑都不是太懂,所以放弃
PS: 本人只讲如何结合PPTP+Freeradius+LDAP,并不涉及PPTP及LDAP的配置
系统环境: Centos 6.4 x86_64      已经配置好PPTP及LDAP

配置Radius
1.安装Radius:

[root@ldap ~]# yum install freeradius freeradius-ldap freeradius-utils

2.测试
编辑

/etc/raddb/users

 ,在最后加入一行

test Cleartext-Password := "123456"

启动radius

[root@ldap ~]# /etc/init.d/radiusd start

测试服务器是否连通

[root@ldap ~]# radtest test 123456 localhost 0 testing123
# 解释: # radtest username password server port key

如果看到Access-Accept就说明连接成功了。如果看到类似“Ignoring request to authentication address * port 1812 from unknownclient”的文字, 可能需要去修改

/etc/raddb/clients.conf

,将

client localhost

段下的

ipaddr

改为服务器的IP,而不是127.0.0.1。

在测试成功之后,就可以将 

/etc/raddb/users

中添加的内容删除掉了

3. 下载ppp源码,需要用到其中radius的配置文件

[root@ldap ~]# tar zxvf ppp-2.4.5.tar.gz
[root@ldap ~]# cp

 

-R

 

/root/ppp-2.4.5/pppd/plugins/radius/etc/ /etc/radiusclient

4. 编辑

/etc/radiusclient/servers

,添加服务器和密钥

1
[root@ldap ~]# echo 'localhost MyVPN' >> /etc/radiusclient/servers

5. 下载

dictionary.microsoft

字典文件

[root@ldap ~]# cp dictionary.microsoft /etc/radiusclient/

 

-f

6. 更改 

/etc/radiusclient/dictionary

 文件
在文件末尾加入两行
INCLUDE /etc/radiusclient/dictionary.merit
INCLUDE /etc/radiusclient/dictionary.microsoft

7. 修改 /etc/raddb/clients.conf 文件

[root@ldap ~]# grep

 

-v

 

'#' /etc/raddb/clients.conf  | grep

 

-v
'^$'
client localhost {
    
ipaddr = 127.0.0.1
    
secret  = MyVPN
    
require_message_authenticator = no
    
shortname   = pptp
}

8. 更改 /etc/raddb/radiusd.conf

[root@ldap ~]# grep

 

-v

 

'#' /etc/raddb/radiusd.conf  | grep

 

-v
'^$'
prefix = /usr
exec_prefix = /usr
sysconfdir = /etc
localstatedir = /var
sbindir = /usr/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
name = radiusd
confdir = ${raddbdir}
run_dir = ${localstatedir}/run/${name}
db_dir = ${raddbdir}
libdir = /usr/lib64/freeradius
pidfile = ${run_dir}/${name}.pid
user = radiusd
group = radiusd
max_request_time = 30
cleanup_delay = 5
max_requests = 1024
listen {
    
type = auth
    
ipaddr = *
    
port = 0
}
listen {
    
ipaddr = *
    
port = 0
    
type = acct
}
hostname_lookups = no
allow_core_dumps = no
regular_expressions = yes
extended_expressions    = yes
log {
    
destination = files
    
file = ${logdir}/radius.log
    
syslog_facility = daemon
    
stripped_names = no
    
auth = no
    
auth_badpass = no
    
auth_goodpass = no
}
checkrad = ${sbindir}/checkrad
security {
    
max_attributes = 200
    
reject_delay = 1
    
status_server = yes
}
proxy_requests  = yes
$INCLUDE proxy.conf
$INCLUDE clients.conf
thread pool {
    
start_servers = 5
    
max_servers = 32
    
min_spare_servers = 3
    
max_spare_servers = 10
    
max_requests_per_server = 0
}
modules {
    
mschap {
        
use_mppe = yes
        
require_encryption = yes
        
require_strong = yes
    
}
    
$INCLUDE ${confdir}/modules/
    
$INCLUDE eap.conf
}
instantiate {
    
exec
    
expr
    
expiration
    
logintime
}
$INCLUDE policy.conf
$INCLUDE sites-enabled/

9.  编辑 /etc/raddb/sites-available/default

authorize {
    
preprocess
    
chap
    
mschap
    
digest
    
suffix
    
eap {
        
ok = return
    
}
    
files
    
ldap
    
expiration
    
logintime
    
pap
}
authenticate {
    
Auth-Type PAP {
        
pap
    
}
    
Auth-Type CHAP {
        
chap
    
}
    
Auth-Type MS-CHAP {
        
mschap
    
}
    
digest
    
unix
    
Auth-Type LDAP {
        
ldap
    
}
    
eap
}
preacct {
    
preprocess
    
acct_unique
    
suffix
    
files
}
accounting {
    
detail
    
unix
    
radutmp
    
exec
    
attr_filter.accounting_response
}
session {
    
radutmp
}
post-auth {
    
exec
    
Post-Auth-Type REJECT {
        
attr_filter.access_reject
    
}
}
pre-proxy {
}
post-proxy {
    
eap
}

10.  编辑 /etc/raddb/modules/ldap

[root@ldap ~]# grep

 

-v

 

'#' /etc/raddb/modules/ldap  | grep

 

-v
'^$'
ldap {
    
server = "localhost"
    
identity = "cn=root,dc=verystar,dc=cn"
    
password = 此处为LDAP root的密码
    
basedn = "ou=Users,dc=verystar,dc=cn"
    
filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
    
password_attribute = userPassword
    
ldap_connections_number = 5
    
timeout = 4
    
timelimit = 3
    
net_timeout = 1
    
tls {
        
start_tls = no
    
}
    
dictionary_mapping = ${confdir}/ldap.attrmap
    
edir_account_policy_check = no
    
keepalive {
        
idle = 60
        
probes = 3
        
interval = 3
    
}
}

11. 编辑  /etc/raddb/proxy.conf

[root@ldap ~]# grep

 

-v

 

'#' /etc/raddb/proxy.conf  | grep

 

-v
'^$'
proxy server {
    
default_fallback = no
}
home_server localhost {
    
type = auth
    
ipaddr = 127.0.0.1
    
port = 1812
    
secret = testing123
    
require_message_authenticator = yes
    
response_window = 20
    
zombie_period = 40
    
revive_interval = 120
    
status_check = status-server
    
check_interval = 30
    
num_answers_to_alive = 3
    
max_outstanding = 65536
    
coa {
        
irt = 2
        
mrt = 16
        
mrc = 5
        
mrd = 30
    
}
}
home_server_pool my_auth_failover {
    
type = fail-over
    
home_server = localhost
}
realm example.com {
    
auth_pool = my_auth_failover
}
realm LOCAL {
    
type        = radius
    
authhost    = LOCAL
    
accthost    = LOCAL
}
realm NULL {
    
authhost    = LOCAL
    
accthost    = LOCAL
    
secret      = MyVPN
    
type        = radius
    
nostrip
}
# 更改最后两段就行了

12. 为LDAP添加radius支持

[root@ldap ~]# cp /usr/share/doc/freeradius-2.1.12/examples/openldap.schema /etc/openldap/schema/radius.schema
[root@ldap ~]# vim /etc/openldap/slapd.conf
添加一行
include         /etc/openldap/schema/radius.schema

13. 修改 /etc/ppp/options.pptpd ,添加对radius的支持
在文件最后添加以下三行
plugin /usr/lib64/pppd/2.4.5/radius.so
plugin /usr/lib64/pppd/2.4.5/radattr.so
radius-config-file      /etc/radiusclient/radiusclient.conf

14.修改 /etc/radiusclient/radiusclient.conf ,将里面所有配置文件路径由 /usr/local/etc/xxx 改为 /etc/xxx

[root@ldap ~]# grep

 

-v

 

'#' /etc/radiusclient/radiusclient.conf  | grep

 

-v

 

'^$'
auth_order  radius
login_tries 4
login_timeout   60
nologin /etc/nologin
issue   /etc/radiusclient/issue
authserver  localhost:1812
acctserver  localhost:1813
servers     /etc/radiusclient/servers
dictionary  /etc/radiusclient/dictionary
login_radius    /usr/local/sbin/login.radius
seqfile     /var/run/radius.seq
mapfile     /etc/radiusclient/port-id-map
default_realm
radius_timeout  10
radius_retries  3
login_local /bin/login

15. 重启 radius / pptpd / slapd

[root@ldap ~]# /etc/init.d/slapd restart
[root@ldap ~]# /etc/init.d/pptpd restart
[root@ldap ~]# /etc/init.d/radiusd restart