centos 安装 PPTP VPN 服务
1 安装前检查系统
在安装之前查看系统是否支持PPTP VPN:modprobe ppp-compress-18 && echo ok
如果输出 ok
,表示系统支持。
2 安装软件包
yum install ppp
yum install pptpd
3 配置pptpd
vim /etc/pptpd.conf
,去掉 localip
和 remoteip
前的 #
号,并根据服务器网络配置ip,我的配置如下:
localip 10.0.0.254 # 设置pptp虚拟网卡接口IP地址(注意:不是服务器的公共IP)
remoteip 10.0.0.100-200 # 为拨入vpn的用户动态分配的IP地址池
vim /etc/ppp/options.pptpd
,找到 ms-dns
部分,做如下修改:
ms-dns 8.8.8.8 #添加主DNS服务器地址
ms-dns 8.8.4.4 #添加备DNS服务器地址
接下来添加VPN用户及密码:vim /etc/ppp/chap-secrets
,添加测试账号:
# Secrets for authentication using CHAP
# client server secret IP addresses
user_test1 pptpd 123456 *
user_test2 pptpd 123456 *
4 开启IP转发
vim /etc/sysctl.conf
,修改 net.ipv4.ip_forward = 0
为 net.ipv4.ip_forward = 1
,执行 sysctl -p
5 配置防火墙
以下是我测试的完整iptables规则,根据自身配置自行修改(注意nat表规则要置于filter表之前,否则无法上网):
# Generated by iptables-save v1.4.7 on Tue Sep 4 17:07:07 2018
*nat
# 10.0.0.0/24 是用户的动态ip地址段,此条表示nat转发
-A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Tue Sep 4 17:07:07 2018
# Generated by iptables-save v1.4.7 on Tue Sep 4 17:07:07 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [343:40989]
# vpn相关开始
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1723 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 47 -j ACCEPT
-A INPUT -p gre -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -s 10.0.0.0/24 -j ACCEPT
-A FORWARD -d 10.0.0.0/24 -j ACCEPT
# vpn相关结束
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Tue Sep 4 17:07:07 2018
如果是firewalld,则需要先添加pptpd.xml,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>pptpd</short>
<description>PPTP</description>
<port protocol="tcp" port="1723"/>
</service>
然后,执行下面的命令:
firewall-cmd --permanent --zone=public --add-service=pptpd
firewall-cmd --permanent --add-masquerade
firewall-cmd --permanent --zone=public --add-port=47/tcp
firewall-cmd --permanent --zone=public --add-port=1723/tcp
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
重新启动防火墙 systemctl restart firewalld.service
6 开启服务
分别执行 service iptables restart
和 service pptpd restart
由于 MacOS Sierra 不支持 PPTP,所以可尝试在服务器安装 L2TP/IPsec,GitHub上有人写了一键安装脚本(链接),本人亲测有效。但这个方案也存在一个缺点,同一局域网内只能一个账号连接。