一、检查是否支持PPTP
1. 在安装之前查看系统是否支持PPTP
modprobe ppp-compress-18 && echo success #应该输出:success
2. 是否开启TUN/TAP
cat /dev/net/tun #应该输出:cat: /dev/net/tun: File descriptor in bad state
3. 是否开启ppp
cat /dev/ppp #应该输出:cat: /dev/ppp: No such device or address
如果环境不满足上面3个条件,表示很可能不支持pptp
二、安装相关软件
1.安装PPP
yum install -y ppp
2.安装epel源
yum install -y epel-release
3.检查是否已添加到源列表中
yum repolist
4.没有则更新源列表
yum -y update
5.安装pptp
yum install -y pptpd
注:如出现异常:One of the configured repositories failed (Unknown)
解决方案是:先把epel卸载,更新后再装
yum remove epel-release
yum -y update
yum install epel-release
三、修改配置
1.vi /etc/pptpd.conf设置VPN内网IP段
最后IP设置改为:
localip 192.168.100.1
remoteip 192.168.100.234-238,192.168.100.245
2.vi /etc/ppp/options.pptpd
更改DNS项:
ms-dns 8.8.8.8
ms-dns 8.8.4.4
修改日志记录:
nologfd
logfile /var/log/pptpd.log
3.vi /etc/ppp/chap-secrets
设置VPN账号密码(格式:{account} pptpd {password} *)
例:pptptest pptpd 123456 *
启动pptp:service pptpd start
关闭pptp:service pptpd stop
重启pptp:service pptpd restart
关闭防火墙,windows下使用使用“添加VPN连接”填写服务IP、用户名、密码连接应该可以连上,这时候本地电脑可以访问VPN服务器,但是不能访问外网
启动防火墙:service firewalld start
关闭防火墙:service firewalld stop
重启防火墙:service firewalld restart
四、开启服务器系统路由模式,支持包转发(通过VPN访问外网)
1.vi /etc/sysctl.conf 修改内核参数支持内核转发,增加一行:
net.ipv4.ip_forward=1
sysctl -p #使设置立刻生效
2.创建规则文件: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>
3.启动防火墙:service firewalld start
4.添加服务:
firewall-cmd --permanent --zone=public --add-service=pptpd
允许防火墙伪装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.设置规则允许数据包由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
8.设置转发规则,从源地址发出的所有包都进行伪装,改变地址,由eth0发出:
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -I POSTROUTING -o eth0 -j MASQUERADE -s 192.168.100.0/24
9.重启防火墙:service firewalld restart
奇怪点,到了这步后发现还是无法上网
需要安装iptables增加规则才能访问外网,配置后卸载iptables也没有问题,或许可以用firewall-cmd命令替代,暂时不知道怎么替代命令
yum install -y iptables-services
开放pptp端口1723,允许转发
iptables -I INPUT 7 -m state --state NEW -p tcp --dport 1723 -j ACCEPT
iptables -P FORWARD ACCEPT
iptables配置,配置虚拟网段NAT支持。如果pptp客户端不需要上网,可以忽略本步骤。
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
保存iptables规则
service iptables save
10.重启防火墙:service firewalld restart
终于可以上网了,浏览器百度输入ip,发现是服务器的ip地址了
观察服务器日志/var/log/pptpd.log,连接断开都有日志打印
Plugin /usr/lib64/pptpd/pptpd-logwtmp.so loaded.
Using interface ppp0
Connect: ppp0 <--> /dev/pts/1
peer from calling number 116.22.2.240 authorized
MPPE 128-bit stateless compression enabled
Cannot determine ethernet address for proxy ARP
local IP address 192.168.0.1
remote IP address 192.168.1.1
LCP terminated by peer (8Q^WM- ^@<M-Mt^@^@^@^@)
Connect time 0.1 minutes.
Sent 2686 bytes, received 7458 bytes.
Modem hangup
Connection terminated.