内网部署OpenVPN实现远程管理EXSI服务器
最近一直在困惑一个事情,EXSI无法远程登录。对EXSI的443及902端口进行映射后,在外网远程连接的时候,Web是没问题,但是Workstation出现了可以连接,但是虚拟机桌面无法连接的情况。查阅了网上很多资料,没办法解决,只能曲线救国了。 现在有个想法就是,在内网架设一台OpenVPN服务器,需要管理时,通过vpn接入到内网,然后再对EXSI进行相应的管理,也可以对EXSI上的虚拟机进行相关的管理。
1、OpenVPN的安装本次我们使用的环境是CentOS 7 X64这个版本的操作系统。我们使用使用epel源进行安装OpenVPN。
#关闭selinux
vim /etc/selinux/config
更改 SELINUX=disabled
#安装epel源
yum install -y epel-release
#安装依赖包
yum install -y openssl lzo pam openssl-devel lzo-devel pam-devel zip
yum install -y easy-rsa
#安装openvpn
yum install -y openvpn
然后设置日志目录
mkdir -p /var/log/openvpn/
chown openvpn:openvpn /var/log/openvpn
服务器证书生成
cp -rf /usr/share/easy-rsa/3.0.8 /etc/openvpn/server/easy-rsa
cd /etc/openvpn/server/easy-rsa
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa build-server-full server nopass
./easyrsa gen-dh
openvpn --genkey --secret ta.key
将证书拷贝到统一目录
$ mkdir -p /etc/openvpn/server/certs
$ cp -a pki/ca.crt /etc/openvpn/server/certs
$ cp -a pki/private/server.key /etc/openvpn/server/certs
$ cp -a pki/issued/server.crt /etc/openvpn/server/certs
$ cp -a pki/dh.pem /etc/openvpn/server/certs
$ cp -a ta.key /etc/openvpn/server/certs
2、网络规划
本次我们实施的网络拓扑结构如下。
NET1为无公网IP网络,通过拨号连接入因特网;NET2为有公网网络,通过固定IP接入因特网。在系统内部,存在有三台EXSI服务器。其中2号机和3号机为双线接入,1号机仅为NET1网络接入。
我们想通过互联网直接连接进入到该网络内部,以便访问及管理各个EXSI服务器。
3、服务器端配置打开或者新建server.ovpn
vim /etc/openvpn/server.conf
然后编辑该文件
port 1194 # 监听的端口号
proto udp # 服务端用的协议,udp 能快点,所以我选择 udp
dev tun
# CA 根证书路径
ca /etc/openvpn/server/certs/ca.crt
# open VPN 服务器证书路径
cert /etc/openvpn/server/certs/server.crt
# open VPN 服务器密钥路径,This file should be kept secret
key /etc/openvpn/server/certs/server.key
# Diffie-Hellman 算法密钥文件路径
dh /etc/openvpn/server/certs/dh.pem
# tls-auth key,参数 0 可以省略,如果不省略,那么客户端
tls-auth /etc/openvpn/server/certs/ta.key 0
# 配置相应的参数该配成 1。如果省略,那么客户端不需要 tls-auth 配置
# 该网段为 open VPN 虚拟网卡网段,不要和内网网段冲突即可。open VPN 默认为 10.8.0.0/24
server 10.8.0.0 255.255.255.0
keepalive 10 120
comp-lzo
persist-key
persist-tun
# open VPN 进程启动用户,openvpn 用户在安装完 openvpn 后就自动生成了
user openvpn
group openvpn
# 指定 log 文件位置
log /var/log/openvpn/server.log
log-append /var/log/openvpn/server.log
status /var/log/openvpn/status.log
verb 3
explicit-exit-notify 1
启动openvpn服务
openvpn --daemon --config /etc/openvpn/server.conf
客户端证书生成模板
新建或编辑sample.ovpn
vim /etc/openvpn/client/sample.ovpn
client
proto udp
dev tun
remote Your Server IP 1194 //服务器公网ip和端口
route-nopull //指定ip段路由转发
route 10.8.0.0 255.255.255.0 vpn_gateway
route 192.168.9.0 255.255.255.0 vpn_gateway
route 172.100.0.0 255.255.0.0 vpn_gateway
ca ca.crt //如果是在windows系统使用的话请使用C:\\\\该文件目录
cert admin.crt //如果是在windows系统使用的话请使用C:\\\\该文件目录
key admin.key //如果是在windows系统使用的话请使用C:\\\\该文件目录
tls-auth ta.key 1 //如果是在windows系统使用的话请使用C:\\\\该文件目录
remote-cert-tls server
persist-tun
persist-key
comp-lzo
verb 3
mute-replay-warnings
客户端生成脚本
vim /etc/openvpn/client/open_user.sh
set -e
OVPN_USER_KEYS_DIR=/etc/openvpn/client/keys
EASY_RSA_VERSION=3
EASY_RSA_DIR=/etc/openvpn/server/easy-rsa/
PKI_DIR=$EASY_RSA_DIR/pki
for user in "$@"
do
if [ -d "$OVPN_USER_KEYS_DIR/$user" ]; then
rm -rf $OVPN_USER_KEYS_DIR/$user
rm -rf $PKI_DIR/reqs/$user.req
sed -i '/'"$user"'/d' $PKI_DIR/index.txt
fi
cd $EASY_RSA_DIR
# 生成客户端 ssl 证书文件
./easyrsa build-client-full $user nopass
# 整理下生成的文件
mkdir -p $OVPN_USER_KEYS_DIR/$user
cp $PKI_DIR/ca.crt $OVPN_USER_KEYS_DIR/$user/ # CA 根证书
cp $PKI_DIR/issued/$user.crt $OVPN_USER_KEYS_DIR/$user/ # 客户端证书
cp $PKI_DIR/private/$user.key $OVPN_USER_KEYS_DIR/$user/ # 客户端证书密钥
cp /etc/openvpn/client/sample.ovpn $OVPN_USER_KEYS_DIR/$user/$user.ovpn # 客户端配置文件
sed -i 's/admin/'"$user"'/g' $OVPN_USER_KEYS_DIR/$user/$user.ovpn
cp /etc/openvpn/server/certs/ta.key $OVPN_USER_KEYS_DIR/$user/ta.key # auth-tls 文件
cd $OVPN_USER_KEYS_DIR
zip -r $user.zip $user
done
exit 0
这样就架设成功了。将配置文件下载后,使用OPENVPN就可以连接了。