赞
踩
之前,一直有想法搭建一套属于自己的VPN服务,但是,一直苦于"拖延症"的困扰,没有真正实际去实践。最近,终于打破了这个困扰,所以,也希望记录一下整体的搭建流程,操作系统CentOS7.2,在此,做一下记录。这里,我这边主要参考的前辈的文章记录是以下这个链接:搭建VPN服务之PPTP - 熊孩子
真心很感谢前辈们的不吝指导,才使得本次有机会可以顺利搭建一下VPN服务。但是呢,实际的搭建的主要流程,有些细节与前辈的文章还是有些差异的,所以,还是想做一下对主要流程的记录:
1、查看系统是否支持PPP
- [root@node01 ~]# cat /dev/ppp
- cat: /dev/ppp: No such device or address
如果出现以上提示则说明ppp是开启的,可以正常架设pptp服务,若出现Permission denied等其他提示,你需要先去VPS面板里看看有没有enable ppp的功能开关,如果没有则需要发个消息给你的提供商帮其打开,否则无法进行安装
2、设置内核转发
- [root@node01 ~]# grep forward /etc/sysctl.conf
- [root@node01 ~]# echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
- [root@node01 ~]# grep forward /etc/sysctl.conf
- net.ipv4.ip_forward = 1
- [root@node01 ~]# sysctl -p
3、安装PPTP
- # 需要安装epel源
- [root@node01 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
- [root@node01 ~]# yum -y install pptpd
备注:实际操作的时候,epel源,我并没有去下载,直接运行了命令:
yum -y install pptpd
yum -y install iptables
yum -y install iptables-services
4、配置PPTP
- [root@node01 ~]# vim /etc/pptpd.conf
- ##增添
- .......
- localip 118.190.201.68
- remoteip 172.16.1.10-80
- # 添加本机公网IP(localip),分配VPN用户的内网网段(remoteip)
备注:localip填写公网IP,remoteip填写内网IP所在网段的地址范围
修改/etc/ppp/options.pptpd文件
- name pptpd
- refuse-pap
- refuse-chap
- refuse-mschap
- require-mschap-v2
- require-mppe-128
- proxyarp
- lock
- nobsdcomp
- novj
- novjccomp
- nologfd
- idle 2592000
- ms-dns 8.8.8.8
- ms-dns 8.8.4.4
备注:ms-dns修改为8.8.8.8与114.114.114.114,这2行值。
5、设置用户与密码
- [root@node01 ~]# vim /etc/ppp/chap-secrets
- John * 123456 *
- ###有四行第一行用户 第三行密码 其他行用*号表示
6、启动PPTP
- [root@node01 ~]# systemctl start pptpd
- [root@node01 ~]# netstat -lntup|grep 1723
- tcp 0 0 0.0.0.0:1723 0.0.0.0:* LISTEN 1651/pptpd
备注:此处可以使用systemctl status pptpd、systemctl restart pptpd、systemctl stop pptpd等命令来操作和管理此服务的开启、重启、查看服务状态等操作。
8、打开防火墙
开启47及1723端口: firewall-cmd --zone=public --add-port=47/tcp --permanent firewall-cmd --zone=public --add-port=1723/tcp --permanent 允许防火墙伪装IP: firewall-cmd --zone=public --add-masquerade 允许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 设置规则允许数据包由eth0和ppp+接口中进出 firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ppp+ -o eth0 -j ACCEPT firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o ppp+ -j ACCEPT 设置转发规则,从源地址发出的所有包都进行伪装,改变地址,由eth0发出:(192.168.0.0内网地址,子网地址前两位) firewall-cmd --permanent --direct --passthrough ipv4 -t nat -I POSTROUTING -o eth0 -j MASQUERADE -s 192.168.0.0/24 重启服务器: firewall-cmd --reload systemctl restart pptpd
备注:个人觉得比较重要的命令是下面几条:
8-1:允许防火墙伪装IP:
firewall-cmd --zone=public --add-masquerade
8-2:允许gre协议,此处感觉不一定需要执行任何命令
8-3:设置转发规则,从源地址发出的所有包都进行伪装,改变地址,由eth0发出:(192.168.0.0内网地址,子网地址前两位)
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -I POSTROUTING -o eth0 -j MASQUERADE -s 192.168.0.0/24
附图一下安全组的配置:
重点:
TCP协议:1723端口,是必须需要在安全组中开启的。
后续发现下面这几条命令可能才是最重要的:
- iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -j SNAT --to-source {服务器公网IP}
-
- iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
-
- iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
-
- iptables -A INPUT -p gre -j ACCEPT
-
- iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
添加NAT转发规则,*为云服务器的公网IP地址,命令如下:
重点:
iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -j SNAT --to-source {服务器公网IP}
备注:以上这条基本确定需要执行
使用iptables设置转发规则:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
备注:以上这条需不需要执行,待定
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
备注:以上这条需不需要执行,待定
iptables -A INPUT -p gre -j ACCEPT
备注:以上这条需不需要执行,待定
重点:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
备注:以上这条基本确定需要执行
service iptables save
systemctl restart iptables
systemctl restart pptpd
9、查看日志的方法
- 1、上线日志
- vim /etc/ppp/ip-up
-
- 在[ -x /etc/ppp/ip-up.local ] && /etc/ppp/ip-up.local "$@" 后加上
-
-
- echo "$PEERNAME 分配IP: $5 登录IP: $6 登录时间: `date -d today +%F_%T`" >> /var/log/pptpd.log
-
- 2、下线日志
- vim /etc/ppp/ip-down
-
- 在/etc/sysconfig/network-scripts/ifdown-post --realdevice ${REALDEVICE} \
- ifcfg-${LOGDEVICE}
- 后加上
-
- echo "$PEERNAME 下线IP: $6 下线时间: `date -d today +%F_%T`" >> /var/log/pptpd.log
备注:此处有条命令感觉挺实用的,用于查看在线的PPP用户
last | grep ppp | grep still
还可以通过以下文件:
/var/log/messages,来查看日志,看是否有client 端连接
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。