Wave Spread...

Linux 运维手册之 VPN 虚拟专用网络

分类:Linux 评论: 0

VPN(Virtual Private Network,虚拟专用网络)是一种常用于连接中、大型企业或团体与团体间的私人网络的通讯方法。虚拟私人网络的讯息透过公用的网络架构(例如:互联网)来传送内部网的网络讯息。

使用场景

常见类型

服务端搭建

本文以 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

参考链接

回复