Skip to content

public_network_access_vm

遇见王斌 edited this page Feb 26, 2018 · 4 revisions

公网访问 OpenStack 中的虚拟机

1 说明

OpenStack 创建的虚拟机的使用场景有

  • 公网访问(演示类服务 / 对外业务)
  • 自己使用的服务(测试或者自用)

2 方法

2.1 公网访问

OpenStack 中的虚拟机如果想公网访问,而又没有那么多的公网 IP,则可以使用端口转发的方式

  • 端口转发工具 Rinetd

2.1.1 端口转发规则

登陆类端口

  • 22 对应 10000 加上实例 IP 后三位,例如 172.12.12.117 对应要填端口号为 10117
  • 3389 对应 11000 加上实例 IP 后三位,例如 172.12.12.117 对应要填端口号为 10117

网页类端口

  • 80 对应 20000 加上实例 IP 后三位
  • 443 对应 21000 加上实例 IP 后三位

其他应用端口

  • 30000-59000 端口加实例 IP 后三位

2.2 内网访问

在 OpenStack 上架设 VPN 服务器,需要访问虚拟机的人通过连接 VPN 可以和虚拟机在同一个网段,则可以连接到虚拟机

2.2.1 OpenStack 中架设 OpenVPN 网络图

image

2.2.2 OpenVPN server 部署

在 OpenStack 平台创建的虚拟机中安装 Docker 环境,然后进行部署 OpenVPN

// 第一步
docker pull kylemanna/openvpn

OVPN_DATA="/data/ovpn-data"
// 下面的全局变量换成你的服务器的外网 ip
IP="xxx.xxx.xxx.xxx"
mkdir -p ${OVPN_DATA}

// 第二步
docker run -v ${OVPN_DATA}:/etc/openvpn --rm kylemanna/openvpn ovpn_genconfig -u tcp://${IP}

// 第三步
docker run -v ${OVPN_DATA}:/etc/openvpn --rm -it kylemanna/openvpn ovpn_initpki

// ---------------------------------------------------------
Enter PEM pass phrase: 输入 123456(你是看不见的)
Verifying - Enter PEM pass phrase: 输入 123456(你是看不见的)
Common Name (eg: your user, host, or server name) [Easy-RSA CA]: 回车一下
Enter pass phrase for /etc/openvpn/pki/private/ca.key: 输入 123456
// ---------------------------------------------------------

// 第五步
docker run -v ${OVPN_DATA}:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full CLIENTNAME nopass

// ---------------------------------------------------------
Enter pass phrase for /etc/openvpn/pki/private/ca.key: 输入 123456
// ---------------------------------------------------------

// 第六步
docker run -v ${OVPN_DATA}:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient CLIENTNAME > ${OVPN_DATA}/CLIENTNAME.ovpn

// 第七步
docker run --name openvpn -v ${OVPN_DATA}:/etc/openvpn -d -p 1194:1194 --privileged kylemanna/openvpn

2.2.2 OpenVPN client 使用

下载 OpenVPN,并安装。

将 CLIENTNAME.ovpn 复制到安装目录的 config 目录中,如 C:\Program Files\OpenVPN\config 中。

运行 OpenVPN GUI,在桌面右下角,可以看到 OpenVPN 的图标。右键点击 connect 即可连接 VPN。不信,你可以在百度输入 IP,查看下自己的 IP。

3 常用操作

3.1 新增 OpenVPN 密钥

上面部署 OpenVPN 采用静态密钥(static-key)的方式,相对于证书方式,static-key 不需要 TLS 握手,不易被干扰,缺点也显而易见,那就是只能配置一对一的网络

OVPN_DATA="/data/ovpn-data"
docker run -v ${OVPN_DATA}:/etc/openvpn --rm -it kylemanna/openvpn easyrsa build-client-full meetbill nopass

// ---------------------------------------------------------
Enter pass phrase for /etc/openvpn/pki/private/ca.key: 输入 123456
// ---------------------------------------------------------

docker run -v ${OVPN_DATA}:/etc/openvpn --rm kylemanna/openvpn ovpn_getclient meetbill > ${OVPN_DATA}/meetbill.ovpn

4 已走过的坑

4.1 为何 OpenVPN 不能部署到 OpenStack 物理机上

Client 可以访问的地址是 OpenVPN server 容器可以访问的地址,在 OpenStack 物理机上使用 Docker 部署后,容器中无法访问 OpenStack 的实例 IP(因为实例网段在物理机上的物理网卡是由 OpenStack 重新管理的)

4.2 为何 OpenVPN 的容器不使用 host 网络模式

使用 host 网络模式后,连接的 client 只能连接 server 所在的机器