部署openvpn服务器
目标:
为实现集群内网环境能和办公室内网通信
模拟环境:
双网口centos7系统,网口1为公网IP地址:61.160.212.111;网口2为内网地址:192.168.59.111
部署流程:
0、同步时间(不然生成的证书不能用)参考:open*** gui 启动报错 VERIFY ERROR: depth=1, error=cert_LIVE_FOR的技术博客_51CTO博客
ntpdate 61.160.213.184
1、开启路由转发功能
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
2、创建证书
#安装证书创建工具
yum install -y openvpn easy-rsa
#创建CA证书(根证书)
mkdir -p /opt/easy-ras
cd /opt/easy-ras
cp -a /usr/share/easy-rsa/3.0.8/* /opt/easy-ras/
cp -a /usr/share/doc/easy-rsa-3.0.8/vars.example /opt/easy-ras/
egrep -v '^$|#' vars.example >vars
cat >>vars<<EOF
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "Jiangsu"
set_var EASYRSA_REQ_CITY "Changzhou"
set_var EASYRSA_REQ_ORG "oldni.cn"
set_var EASYRSA_REQ_EMAIL "oldni@qq.com"
set_var EASYRSA_NS_SUPPORT "yes"
EOF
#初始化,在当前目录创建pki目录,用于存储证书
./easyrsa init-pki
#创建证书,要设置密码(www.123.nyc),用于CA对之后生成的server和client证书签名时使用,其它默认,要交互的
./easyrsa build-ca
同时在/opt/easy-ras/pki/private/目录下生成了CA的私钥文件
#创建server证书和私钥(回车即可,不需要输入内容),需要交互
#创建请求文件及服务端私钥,nopass表示不加密私钥文件
./easyrsa gen-req server nopass
#签约服务端证书,需要交互
#输入yes确认
#输入 之前设置的ca密码www.123.nyc
./easyrsa sign server server
服务端两个文件就创建好了:
Certificate created at: /opt/easy-ras/pki/issued/server.crt
key: /opt/easy-ras/pki/private/server.key
#创建客户端证书,交互
./easyrsa gen-req client nopass
#签约客户端证书,交互
#输入yes确认
#输入 之前设置的ca密码www.123.nyc
./easyrsa sign client client
客户端的两个文件就创建好了:
Certificate created at: /opt/easy-ras/pki/issued/client.crt
key: /opt/easy-ras/pki/private/client.key
3、创建dh-pem(diffie-hellman)算法文件
#有点慢
./easyrsa gen-dh
加密算法文件存放在:
/opt/easy-ras/pki/dh.pem
4、配置服务端
#创建服务端的配置文件
cat >/etc/openvpn/server/server.conf<<EOF
port 1194
proto udp
dev tun
ca server/ca.crt
cert server/server.crt
key server/server.key
dh server/dh.pem
server 10.8.0.0 255.255.255.0
#注意网络的修改
push "route 192.168.59.0 255.255.255.0"
keepalive 10 120
max-clients 100
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3
client-to-client
persist-key
persist-tun
duplicate-cn
EOF
#拷贝证书和私钥
cp /opt/easy-ras/pki/ca.crt /etc/openvpn/server/
cp /opt/easy-ras/pki/dh.pem /etc/openvpn/server/
cp /opt/easy-ras/pki/issued/server.crt /etc/openvpn/server/
cp /opt/easy-ras/pki/private/server.key /etc/openvpn/server/
5、修改systemctl配置文件,启动服务
sed -i 's#%i#&/%i#g' /usr/lib/systemd/system/openvpn@.service
systemctl daemon-reload
systemctl enable --now openvpn@server
此时就多了个tun0网卡
查看端口:
openvpn客户端配置(windows)
本地下载:
http://61.160.213.184/dl/winsoft/OpenVPN-2.5.3-I601-amd64.msi
安装并记录安装路径
创建目录并下载client证书和私钥
安装完会提示没有配置文件,没关系,我们一步一步配置。
记住软件的安装路径!!C:\Program Files\OpenVPN\
当客户要连接多个VPN环境时,我们要在C:\Program Files\OpenVPN\config创建以域名为名字的目录,方便存放对应的文件:openstack目录
ca.crt #ca证书
client.crt #客户端证书
client.key #客户端私钥
client.ovpn #客户端配置文件,类型与Linux里的client.conf
从openvpn服务器上下载证书和私钥到客户机上
sz /opt/easy-ras/pki/ca.crt
sz /opt/easy-ras/pki/issued/client.crt
sz /opt/easy-ras/pki/private/client.key
client.ovpn配置文件最终内容:
client
dev tun
proto udp
#注意IP地址的修改
remote 61.160.212.111 1194
resolv-retry infinite
nobind
ca ca.crt
cert client.crt
key client.key
verb 3
persist-key
remote-cert-tls server
最终openstack目录下的内容
也可以在服务端一起准备好再下载到客户端(推荐)
cd ~
mkdir client && cd client
cp /opt/easy-ras/pki/ca.crt .
cp /opt/easy-ras/pki/issued/client.crt .
cp /opt/easy-ras/pki/private/client.key .
cat >client.ovpn<<EOF
client
dev tun
proto udp
#注意IP地址的修改
remote 61.160.212.111 1194
resolv-retry infinite
nobind
ca ca.crt
cert client.crt
key client.key
verb 3
persist-key
remote-cert-tls server
EOF
cd ~
yum install -y zip
zip -r client.zip client
sz client.zip
注意修改配置:
连接成功:
此时的客户端就会生成一个openvpn的需要网卡:
解决外部网络无法访问内网服务器的问题
此时客户端ping 服务端(openvpn服务器)的内网是通的,但ping内网里的其它服务器是不通的
解决方法:参考:第三十讲:OpenVPN服务器搭建完整过程(客户端配置)_哔哩哔哩_bilibili
在openvpn服务器上添加一条iptables规则
#清空已有的规则(确认没用)
iptables -t nat -F
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
此时再去ping内网服务器的地址