VPN(Virtual Private Network,虚拟专用网络)是一种常用于连接中、大型企业或团体与团体间的私人网络的通讯方法。虚拟私人网络的讯息透过公用的网络架构(例如:互联网)来传送内部网的网络讯息。
使用场景
- 外网使用 VPN 访问内网资源
- 内网通过 VPN 隐私访问外网
常见类型
- PPTP
- L2TP
- IPSec
服务端搭建
本文以 PPTP 为例演示搭建过程
检查内核支持
# modprobe ppp-compress-18 && echo ok
小贴士:正常情况下官方的内核都支持,部分魔改系统或者自编译的内核可能不支持,请尝试更换内核或者重新编译。
配置软件源
# yum install epel-release -y
小贴士:本文需要的包 pptpd 在 epel 源中。
安装 PPTPD 服务
# yum install ppp pptpd -y
分配地址池
# vim /etc/pptpd.conf
localip 192.168.0.1
remoteip 192.168.0.214,192.168.0.245
小贴士:此段配置在文件最后,注意最后一行请留空行。此为连接后分配的地址,若想用户能正常上网,loaclip 则不能为内网地址。
配置 DNS 服务器
# vim /etc/ppp/options.pptpd
添加以下一行,国内机器可以使用阿里云公共DNS,国外机器推荐使用谷歌公共DNS。
ms-dns 223.5.5.5
小贴士:此段配置大概在 68 行,此段配置可存在多个。
配置账号密码
# vpnuser add kane 666666
小贴士:使用此命令可以直接添加用户并设定密码,也可以手动编辑配置文件(不推荐)。
# vim /etc/ppp/chap-secrets
配置模板
# Secrets for authentication using CHAP
# client server secret IP addresses
kane * 666666 *
启动服务
# systemctl start pptpd
# systemctl enable pptpd
服务检查
# ss -lnt | grep 1723
小贴士:有输出内容即为成功启动服务
开启内核转发
# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# sysctl -p
配置防火墙
创建规则文件
# touch /usr/lib/firewalld/services/pptpd.xml
写入规则文件
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>PPTP</short>
<description>The Point-to-Point Tunneling Protocol (PPTP) is a less used method for implementing virtual private networks. PPTP has many well known security issues.</description>
<port protocol="tcp" port="1723"/>
</service>
重载防火墙
# firewall-cmd --reload
添加服务
# firewall-cmd --permanent --zone=public --add-service=pptpd
允许伪装地址
# firewall-cmd --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发出:
# 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
部署脚本
#!/bin/bash
yum install -y epel-release
yum install -y ppp pptpd
cp /etc/pptpd.conf /etc/pptpd.conf.bak
cat >/etc/pptpd.conf<<'EOF'
option /etc/ppp/options.pptpd
logwtmp
localip 10.0.10.1
remoteip 10.0.10.2-254
EOF
cp /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak
cat >/etc/ppp/options.pptpd<<'EOF'
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
ms-dns 8.8.8.8
ms-dns 8.8.4.4
EOF
cp /etc/ppp/chap-secrets /etc/ppp/chap-secrets.bak
cat >/etc/ppp/chap-secrets<<'EOF'
USERNAME pptpd PASSWORD *
EOF
cp /etc/sysctl.conf /etc/sysctl.conf.bak
cat >/etc/sysctl.conf<<'EOF'
net.core.wmem_max = 12582912
net.core.rmem_max = 12582912
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.core.wmem_max = 12582912
net.core.rmem_max = 12582912
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.core.wmem_max = 12582912
net.core.rmem_max = 12582912
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.ipv4.ip_forward = 1
EOF
sysctl -p
chmod +x /etc/rc.d/rc.local
echo "iptables -t nat -A POSTROUTING -s 10.0.10.0/24 -o eth0 -j MASQUERADE" >> /etc/rc.d/rc.local
iptables -t nat -A POSTROUTING -s 10.0.10.0/24 -o eth0 -j MASQUERADE
systemctl restart pptpd
systemctl enable pptpd
客户端配置
安装所需包
yum install -y ppp pptp pptp-setup
测试连接
pptpsetup --create test --server <IP> --username <user> --password <passwd> --encrypt --start
小贴士:<>内为需要填写的参数
连接实例
建立连接
[root@domain ~]# pptpsetup --create test --server 10.0.0.200 --username kane --password 666666 --encrypt --start
Using interface ppp0
Connect: ppp0 <--> /dev/pts/1
CHAP authentication succeeded
MPPE 128-bit stateless compression enabled
local IP address 172.16.1.200
remote IP address 10.0.0.200
检查分配地址
[root@domain ~]# ip a | grep ppp
5: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1496 qdisc pfifo_fast state UNKNOWN group default qlen 3
link/ppp
inet 172.16.1.200 peer 10.0.0.200/32 scope global ppp0
配置默认路由
[root@domain ~]# ip route replace default dev ppp0
附录
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2018-08-27 21:01 PM