1、查看系统是否支持PPTP
modprobe ppp-compress-18 && echo success #应该输出:success2、是否开启TUN/TAP
cat /dev/net/tun #应该输出:cat: /dev/net/tun: File descriptor in bad state3、是否开启ppp
cat /dev/ppp #应该输出:cat: /dev/ppp: No such device or address如果环境不满足上面3个条件,表示很可能不支持pptp
二、安装相关软件1、安装PPP
yum install -y ppp2、安装PPTP
yum install -y pptpd3、安装Iptbles
yum install -y iptables-services 三、配置PPTP1、设置vpn网卡
vi /etc/pptpd.conf
# vpn服务虚拟网卡地址localip 192.168.0.1# 给连接到的机器分配的ip池remoteip 192.168.0.101-2002、修改DNS服务器及日志文件
vi /etc/ppp/options.pptpd
#更改DNSms-dns 8.8.8.8ms-dns 8.8.4.4#修改日志文件nologfdlogfile /var/log/pptpd.log3、设置VPN账号密码
vi /etc/ppp/chap-secrets
4、启动pptp
启动pptp:service pptpd start
关闭pptp:service pptpd stop
重启pptp:service pptpd restart
这时候本地电脑可以访问VPN服务器,但是不能访问外网
四、修改内核参数支持转发1、开启服务器系统路由模式,支持包转发
vi /etc/sysctl.conf(如果文件没有内容,把下面这些全部复制进去即可)
net.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1net.ipv6.conf.lo.disable_ipv6 = 1vm.swappiness = 0net.ipv4.neigh.default.gc_stale_time = 120net.ipv4.conf.all.rp_filter = 0net.ipv4.conf.default.rp_filter = 0net.ipv4.conf.default.arp_announce = 2net.ipv4.conf.lo.arp_announce = 2net.ipv4.conf.all.arp_announce = 2net.ipv4.tcp_max_tw_buckets = 5000net.ipv4.tcp_max_syn_backlog = 1024net.ipv4.tcp_synack_retries = 2kernel.sysrq = 1# 增加这一行net.ipv4.ip_forward = 12、生效
sysctl -p
五、配置firewalld1、创建规则文件
vi /usr/lib/firewalld/services/pptpd.xml
<?xml version="1.0" encoding="utf-8"?><service> <short>pptpd</short> <description>PPTP</description> <port protocol="tcp" port="1723"/></service>2、启动防火墙
service firewalld start
3、添加服务
firewall-cmd --permanent --zone=public --add-service=pptpd
注:pptpd就是上面创建的pptpd.xml4、允许防火墙伪装IP
firewall-cmd --add-masquerade
5、开启47及1723端口
firewall-cmd --permanent --zone=public --add-port=47/tcp
firewall-cmd --permanent --zone=public --add-port=1723/tcp
6、允许gre协议
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p gre -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p gre -j ACCEPT
7、设置规则允许数据包由可访问外网的网卡(上图的em1)和 vpn虚拟网卡ppp+(加号指正则匹配一个数字)中进出
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ppp+ -o em1 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i em1 -o ppp+ -j ACCEPT
注意把这里的em1改成自己可以访问外网的网卡8、设置转发规则,从指定源地址发出的所有包都进行伪装,改变地址,由可访问外网的网卡发出
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -I POSTROUTING -o em1 -j MASQUERADE -s 192.168.0.0/24
注意: em1:改成自己可访问外网网卡地址192.168.0.0/24:要和 /etc/pptpd.conf 的 remoteip 地址段对应,格式为 xxx.xxx.xxx.0/249、重启防火墙
service firewalld restart
六、配置iptables1、开放pptp端口1723(pptp的连接端口)
iptables -I INPUT 7 -m state --state NEW -p tcp --dport 1723 -j ACCEPT
2、允许转发
iptables -P FORWARD ACCEPT
3、iptables配置,配置虚拟网段NAT支持。
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
4、解决PPTP服务网速慢
(参考网页: http://www.92csz.com/52/1244.html)
iptables -I FORWARD -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1356
5、保存iptables规则
service iptables save
6、重启防火墙
service iptables restart
service firewalld restart
firewalld与iptables补充说明:
1、配置存储位置
iptables服务将配置存储在 /etc/sysconfig/iptables和/etc/sysconfig/ip6tables 中firewalld将配置存储在/usr/lib/firewalld/和/etc/firewalld/中的各种XML文件中注意,/etc/sysconfig/iptables文件不存在,因为在Red Hat Enterprise Linux上默认安装了firewalld所以两个防火墙软件配置互不相干,如果要开启端口要把两个都开启2、每次更改配置时
在iptables服务中,每次更改都意味着刷新所有旧规则并从/etc/sysconfig/iptables读取所有新规则,即一次save之后,之前的所有的设置将丢失,只会保存该次save的内容
而在firewalld中不需要重新创建所有规则。
iptables在更改配置后会丢失连接,但firewalld可以在运行时更改设置,而不会丢失现有的连接。
为了保证速度 限制一个账户登录(参考)
1、创建auth-up文件
vi /etc/ppp/auth-up
#!/哭泣的羊/sh# get the username/ppp line number from the parametersREALDEVICE=$1USER=$2# create the directory to keep pid files per usermkdir -p /var/run/pptpd-users# if there is a session already for this user, terminate the old oneif [ -f /var/run/pptpd-users/$USER ]; thenkill -HUP `cat /var/run/pptpd-users/$USER`rm /var/run/pptpd-users/$USERfi# copy the pid file of current user to /var/run/pptpd-userscp "/var/run/$REALDEVICE.pid" /var/run/pptpd-users/$USER流程如下:
1.用户登录判断是否有/var/run/pptpd-users/用户名的文件
2.如果有平滑重启这个vpn用户进程,如果没有创建这个文件,文本里面有用户进程ID
3.老的连接被踢掉,新的连接可以使用
备注:这种模式下,一个账号只允许一个用户使用。
2、保证有可执行权限
chmod a+x /etc/ppp/auth-up
3、重启pptpd
service pptpd restart
日志记录更多用户信息(参考)
vpn 登录和断开的时候,会自动执行/etc/ppp/ip-up和/etc/ppp/ip-down两个脚本,查看这两个脚本,会发现有这样一行 “This file ”should not be modified – make local changes to /etc/ppp/ip-up.local instead"
也就是说这两个脚本不要修改,如果要添加自定义的功能,修改ip-up.local脚本。
vi /etc/ppp/ip-up.local
echo "---------------Login---------------------------------------" >> /var/log/pptpd.logecho "time: `date -d today +%F_%T`" >> /var/log/pptpd.logecho "clientIP: $6" >> /var/log/pptpd.logecho "username: $PEERNAME" >> /var/log/pptpd.logecho "device: $1" >> /var/log/pptpd.logecho "vpnIP: $4" >> /var/log/pptpd.logecho "assignIP: $5" >> /var/log/pptpd.logecho "-----------------------------------------------------------" >> /var/log/pptpd.log保存后,注意chmod +x ip-up.local添加可执行权限;
vi /etc/ppp/ip-down.local
echo "---------------Logout--------------------------------------" >> /var/log/pptpd.logecho "time: `date -d today +%F_%T`" >> /var/log/pptpd.logecho "clientIP: $6" >> /var/log/pptpd.logecho "username: $PEERNAME" >> /var/log/pptpd.logecho "device: $1" >> /var/log/pptpd.logecho "vpnIP: $4" >> /var/log/pptpd.logecho "assignIP: $5" >> /var/log/pptpd.logecho "-----------------------------------------------------------" >> /var/log/pptpd.log保存后,注意chmod +x ip-down.local添加可执行权限;
最后重启pptpd服务