CentOS 6 / 7 x64 使用pptpd搭建VPN服务 7使用 FirewallD 添加规则

VPN
原理:PPTP 使用 PPP 协议对用户数据进行封装,然后将 PPP 数据帧封装在 IP 数据包里,pptpd 更多是负责客户端到服务器的连接,ppp协议负责用户数据包的封装和转发,当客户端连接到服务器时pptpd服务就是创建一个虚拟网卡ppp0进行用户数据包的封装,和转发到物理网卡,进入以太网
1:验证内核是否加载MPPE模块

modprobe ppp-compress-18 && echo MPPE is Success

#打印Success表示已加载
2:安装ppp软件

yum install ppp -y

3:安装pptpd

rpm -ivh http://poptop.sourceforge.net/yum/beta/packages/pptpd-1.4.0-1.el6.x86_64.rpm

4:配置pptpd和ppp

vim /etc/ppp/options.pptpd #把以下选项的注释#去掉
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd

以上至于不知道指定什么的,可以看配置文件的解释,虽然都是英文但是解释还是挺清楚
5:添加用户

vim /etc/ppp/chap-secrets #打开配置文件
username1 pptpd passwd1 * #一行一个用户
username2 pptpd passwd2 * #分别是 用户名 服务 密码 来源ip(这个可以指定网段或者唯一IP)如果不符合全都拒绝掉,*号知道正则表达式的都知道是什么

6;配置pptpd服务

vim /etc/pptpd.conf #把以下行的注释去掉
option /etc/ppp/options.pptpd
logwtmp
localip 172.16.36.254
remoteip 172.16.36.1-250

7:打开内核转发

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #找到这个选项并且改成1

#保存后执行

sysctl -p

8:启动pptpd服务

chkconfig pptpd on #加入开机自动启动
service pptpd start #启动pptpd服务

9:添加防火墙规则 (CentOS 7 的用户,推荐使用Firewalld,没必要多多此一举安装iptables)

#备份原来的防火墙规则
cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
iptables -P INPUT ACCEPT #设置全部为允许,以免等下清除防火墙规则时,ssh断开
iptables -F
iptables -X
iptables -Z #清除防火墙规则结束
#添加防火墙规则
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
iptables -A FORWARD -p tcp --syn -s 172.16.36.0/24 -j TCPMSS --set-mss 1356
#设置共享ip,nat表预路由
iptables -t nat -A POSTROUTING -s 172.16.36.0/24 -o eth0 -j MASQUERADE
#因为命令生成的重启后就会失效,所以我们要把它不保存到配置文件中
iptables-save > /etc/sysconfig/iptables
#重启iptables
service iptables restart

10: FirewallD 添加规则

# 新建 pptpd 服务项
vim /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> 
# 列出我们修改前FirewallD的配置内容
firewall-cmd --list-all
# 下面是新系统的Firewalld默认配置
public (default)
interfaces:
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

# 添加 pptpd 服务规则
firewall-cmd --permanent --add-service=pptpd
# 开启伪装功能
firewall-cmd --permanent --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 POSTROUTING 0 -t nat -s 172.16.36.0/24 -o eno16777728 -j MASQUERADE -t nat
# 重新加载防火墙
firewall-cmd --reload
# 列出全部启用的区域的特性
firewall-cmd --list-all

public (default)
interfaces:
sources:
services: dhcpv6-client pptpd ssh
ports:
masquerade: yes
forward-ports:
icmp-blocks:
rich rules: 

firewall-cmd --permanent --direct --get-all-rules

ipv4 filter INPUT 0 -p gre -j ACCEPT
ipv4 filter POSTROUTING 0 -t nat -s 172.16.36.0/24 -o eth0 -j MASQUERADE -t nat

↑以上橙色部分为我们刚才所添加的内容.

windows客户端若遇到拨通VPN后无法访问内网资源请 CMD 下输入

route -p add 172.16.0.0 mask 255.255.0.0 192.168.10.254

注:172.16.0.0为VPN网段,根据个人情况可以使用192.168.1.0 或 192.168.10.0,具体情况根据你VPN网段设置而定;
255.255.0.0为掩码,通常使用 255.255.255.0 即可;
192.168.10.254 为局域网网关IP地址,请根据个人情况设置。

You may also like...

2 回复

  1. 说道:

    第9条那里配置的时候OUTPUT也应该配置成ACCEPT吧

发表评论

电子邮件地址不会被公开。 必填项已用*标注