VPN部署技术主要有3类
点对点的隧道协议(PPTP): 两个隧道,TCP连接隧道,GRE传输隧道
互联网协议安全(IPSec): 基于IP,加密认证每个IP数据包,技术成熟,配置复杂,典型代表strongSwan和FreeS/WAN。
安全接口层/安全传输层协议(SSL/TLS): 使用证书进行认证,使用非对称算法对数据加密。通过对tun/tap设备实现用户态程序和内核的交互。典型代表OpenVPN。
OpenVPN的特性
对任何网络通过一个UDP或者TCP端口连建立隧道
可架构集群系统,支持上千用户连接
使用openSSL库的任意加密算法,可以选择静态密码或者证书公私钥加密
可以对数据流实时压缩
支持NAT,也提供windows和mac的GUI工具等等
支持对端DHCP
配置简单,学习成本低
点对点的OpenVPN部署
需求:远程数据库的备份等
client(121.22.17.88)<——>Internet<——> server(88.22.17.18)
1.安装
server和client同时执行:
# lzo库用户压缩,openssl用于加密
yum install -y lzo lzo-devel openssl openssl-devel
# 需要epel扩展
yum install -y openvpn
2.在server端生成静态密码keke.key,并把该文件传给client(也可以复制key的内容,但注意600权限)
openvpn --genkey --secret keke.key
ll keke.key
-rw------- 1 root root 637 Oct 1 12:35 keke.key
3.创建隧道
server
openvpn --remote 121.22.17.88 --dev tun0 --ifconfig 10.10.10.1 10.10.10.2 --secret keke.key --daemon
client
openvpn --remote 88.22.17.18 --dev tun0 --ifconfig 10.10.10.2 10.10.10.1 --secret keke.key --daemon
--ifconfig,指定隧道本端和对端ip地址,注意顺序
--daemon,指定使用daemon进程模式
5.验证
client
#可以ping通,可以ssh过去说明成功了
ping 10.10.10.1
ssh 10.10.10.1
#openvpn默认会使用udp的1194端口,注意开启
ss -tunlp
udp UNCONN 0 0 *:1194 *:* users:(("openvpn",10386,5))
#日志信息在/var/log/messages,可以分析排错
6.流程
tun和tap是linux的虚拟网络设备,tun可以理解为点对点的设备,tap可理解为Ethernet设备,tun工作流程如上图所示,接收过程箭头反过来。
远程访问虚拟专用网络部署
在服务器生成CA证书,服务器证书,客户端证书(方法不唯一)
yum install easy-rsa -y
cp vars.example etc/openvpn/easy-rsa/vars
cp -r /usr/share/easy-rsa/3.0.6/* /etc/openvpn/easy-rsa/
cp /usr/share/doc/openvpn-2.4.7/sample/sample-config-files/server.conf /etc/openvpn/
cat >> /etc/openvpn/easy-rsa/vars <<EOF
export KEY_COUNTRY="CN"
export KEY_PROVINCE="js"
export KEY_CITY="hah"
export KEY_ORG="ha"
export KEY_EMAIL="haha@keke.cn"
export KEY_OU="I see you"
EOF
source ./vars
./easyrsa init-pki
./easyrsa build-ca
./easyrsa gen-req vpnserver
./easyrsa sign server vpnserver
./easyrsa gen-req vpnclient
./easyrsa sign client vpnclient
./easyrsa gen-dh
openvpn --genkey --secret ta.key
#证书生成过程中,会填写一个common name字段,建议不要乱写
2.服务端配置openvpn
cat /etc/openvpn/server.conf
port 1194
proto udp
dev tun
#证书文件的位置按实际
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/vpnserver.crt
key /etc/openvpn/easy-rsa/pki/vpnserver.key
dh /etc/openvpn/easy-rsa/pki/dh.pem
server 10.10.10.0 255.255.255.0 #分配给客户端的隧道ip池
push "route 172.16.88.0 255.255.255.0" #允许客户端访问内网
route 192.168.0.0 255.255.255.0 #配置服务器增加一条到客户端网络的路由
client-to-client
keepalive 10 120
comp-lzo #启用压缩
max-clients 100
user nobody
group nobody
persist-key #收到SIGUSR1时不重新读取key文件
persist-tun #收到SIGUSR1时不关闭tun虚拟网口
status /var/log/openvpn-status.log #指定状态日志位置
log-append /var/log/openvpn.log
verb 4
启用iptables转发(此步骤当需要直接访问后端服务器时才需要)
echo 1 >/proc/sys/net/ipv4/ip_forward
#tun0本质还是网卡,所以要配置转发支持
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
#同时在后端服务器增加一条路由
route add -net 192.168.0.0/24 gw 172.16.88.2
启动
openvpn --daemon --config etc/openvpn/server.conf
3.客户端配置(一般为windows)
下载地址:https://files02.tchspt.com/storage2/temp/openvpn-install-2.4.7-I606-Win10.exe
安装就不说了,把需要的证书文件及配置文件vpnclient.ovpn放入config即可,配置文件内容如下。
client
proto udp
dev tun
remote 22.22.22.22 1194 #按实际地址修改
nobind
ca ca.crt
cert vpnclient.crt
key vpnclient.key
ns-cert-type server
keepalive 10 120
comp-lzo
max-clients 100
persist-key
persist-tun
verb 4
log-append /var/log/openvpn.log
最后启动连接就行了,如果有问题(应该不会有),请查看日志。
部分内容来自网络,如有侵权请联系作者删除。