虚拟专用网络——VPN介绍及搭建

VPN是什么

虚拟专用网络(Virtual Private Network,VPN)是通过公共网络(如互联网)建立私密通信的网络技术,通过身份认证、数据加密、数据验证有效保证网络和数据的安全性。VPN是企业常用的通信技术,如企业分公司和总部互访,或出差员工访问总部网络。

隧道技术:对传输的报文进行封装,利用公网建立专用的数据传输通道,完成数据的安全可靠性传输。
身份认证:VPN网关对接入VPN的用户进行身份认证,确保接入用户为合法用户。
数据加密:通过加密技术将明文变成密文,即使信息被截获,也无法识别。
数据验证:验证报文的完整性和真伪,防止数据被篡改。

VPN优势

  • 信息安全加密网络连接,只有授权人员才能访问公司的数据和信息。
  • 减少成本:利用公共网络,节省购买和维护传统网络设备的成本。
  • 灵活性高:允许员工从不同的地理位置访问公司的网络和数据。
  • 可拓展性:物理网络增加或修改节点不影响VPN部署。
  • 专用性:VPN用户资源不会被非VPN用户访问。

VPN协议分类

  • 应用层:SSL VPN
  • 传输层:MPLS L2 VPN
  • 网络层:IPSec VPN、GRE VPN、MPLS L3 VPN
  • 数据链路层:L2TP VPN、PPTP VPN

PPTP(Point-to-Point Tunneling Protocol):最早出现的VPN协议之一,易于设置和兼容性广泛,但安全性较低。
L2TP(Layer 2 Tunneling Protocol):在PPTP基础上发展而来的协议,它结合了L2TP协议和IPsec协议的优势。L2TP负责建立隧道,而IPsec进行加密和认证,从而提供更高的安全性。
IPSec(Internet Protocol Security):网络层协议,通过加密和认证机制来保护数据的安全传输,提供了较高的安全性。用于建立站点到站点的VPN连接或远程访问VPN连接。
GRE(Generic Routing Encapsulation):基于封装技术的VPN协议,GRE不提供加密和认证功能,通常与安全协议IPsec一起使用。
MPLS L2 VPN/MPLS L3 VPN: 传输层和网络层协议,基于MPLS(Multiprotocol Label Switching)技术。MPLS L2 VPN提供了以太网扩展,使不同地点的局域网能够互联,MPLS L3 VPN提供基于IP的路由,将不同地点的IP网络连接起来。
SSL VPN(Secure Socket Layer):应用层协议,通过SSL/TLS协议对通信进行加密和认证。常用Web浏览器作为客户端,通过HTTPS协议进行安全访问。具有较好的跨平台兼容性和易用性,适用于远程访问。

VPN常用软件

  • OpenVPN:流行的开源VPN方案,可在多个平台上使用,提供灵活的配置选项和强大的安全功能。
  • WireGuard:较新的开源VPN,已集成在Linux内核,成为许多Linux发行版的默认选择。
  • StrongSwan:开源的IPsec实现,支持多种协议和加密算法,并提供了灵活的配置选项。
  • OpenConnect:是商业产品思科Cisco Anyconnect的开源版本。

VPN安装步骤

以常用的OpenVPN为例,异地组网需要服务端有公网IP,社区版本配置步骤较繁琐。

1 服务端Linux(CentOS7)执行脚本

# 关闭SELinux
sed -i '/^SELINUX/s/enforcing/disabled/g' /etc/selinux/config
setenforce 0

# 安装openvpn软件
yum -y install epel-release && yum -y install openvpn easy-rsa

# 配置EASY-RSA
mkdir /etc/openvpn/easy-rsa
cp -rf /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa/
cp -p /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/easy-rsa/vars

# 创建VPN密钥
cd /etc/openvpn/easy-rsa
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-req server1 nopass
./easyrsa sign-req server server1
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
./easyrsa gen-dh
openvpn --genkey --secret /etc/openvpn/easy-rsa/ta.key
./easyrsa  gen-crl

# 复制证书
cp -p pki/ca.crt /etc/openvpn/server/
cp -p pki/issued/server1.crt /etc/openvpn/server/
cp -p pki/private/server1.key /etc/openvpn/server/
cp -p ta.key /etc/openvpn/server/
cp pki/* /etc/openvpn/server/

cp -p pki/ca.crt /etc/openvpn/client/
cp -p pki/issued/client1.crt /etc/openvpn/client/
cp -p pki/private/client1.key /etc/openvpn/client/
cp -p ta.key /etc/openvpn/client/
cp pki/dh.pem /etc/openvpn/client/
cp pki/crl.pem /etc/openvpn/client/

# 修改VPN配置
cp -p /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf /etc/openvpn/server/

vi server.conf

port 1194
proto udp
dev tun
ca ca.crt
cert server1.crt
key server1.key
dh dh.pem
crl-verify crl.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
duplicate-cn
keepalive 10 120
tls-auth ta.key 0
cipher AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
max-clients 100
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log-append  openvpn.log
verb 3
# 开启转发
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

# 修改防火墙
firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --add-interface=tun0
firewall-cmd --permanent --add-masquerade
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s  10.8.0.0/24 -o ens33 -j MASQUERADE
firewall-cmd --reload

# 启动服务
systemctl enable openvpn-server@server
systemctl start openvpn-server@server
systemctl status openvpn-server@server

# 检查服务端口号
netstat -tlunp |grep 1194

# 服务正常启动后,准备客户端配置
cd /etc/openvpn/
cp -p /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/client.conf /etc/openvpn/client/
mv /etc/openvpn/client/client.conf /etc/openvpn/client/client.ovpn
zip -q -r client.zip client

2 客户端配置(Windows10)

# 运行OpenVPN-2.5.9-I601-amd64.msi,依据向导安装
# 将前面的client.zip解压到如下路径
C:\Program Files\OpenVPN\config

# 调整配置client.ovpn
client
dev tun
proto udp
remote 公网IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3

# 服务端放行公网IP:1194,允许客户端连接

启动OpenVPN

ping测试(异地组网成功)

Linux免密登录——A登录B密钥设置(SSH SCP) WEB渲染模式——CSR SSR SSG ISR DPR区别
微信公众号