VPN网关ECS反向代理方案即通过阿里云私有网络(VPC)的VPN服务创建VPN并与本地IDC数据中心进行组网后,通过阿里云ECS云服务器反向代理至本地IDC数据中心的数据服务方式,进行Dataphin与数据源的连接。
方案说明
VPN连接方式可能会受到Internet抖动、阻塞等公网质量问题而中断。若业务对网络连接质量要求很高时,可以考虑阿里云高速通道接入,但因为采用专线的方式接入,成本较高。更多信息,具体参考专线连接介绍。
VPN网关ECS反向代理方案只需要ECS和VPN带宽费用,不需要购买公网地址,成本较低。
网络架构
VPN网关ECS反向代理连接Dataphin的网络架构如下:
前提条件
使用IPsec-VPN功能建立VPC到本地数据中心的VPN连接前,需要确保满足以下条件:
检查本地数据中心的网关设备。阿里云VPN网关支持标准的IKEv1和IKEv2协议。因此,只要支持这两种协议的设备都可以和云上VPN网关互连。例如,华为、华三、山石、深信服、Cisco ASA、Juniper、SonicWall、Nokia、IBM和Ixia等。
本地数据中心的网关已经配置了静态公网IP。
本地数据中心的网段和专有网络的网段不能重叠。
操作步骤
步骤一:开通ECS和VPC
准备资源 | 开通指引 |
开通并购买ECS。 说明 建议先选择按量付费的模式,确定连通后再转为包年包月。本文以ecs.c5.xlarge(计算型4C8G+40GB高效云盘)的ECS按量付费为例。 | |
开通VPC。 |
步骤二:建立VPN连接
步骤1:建立VPC到本地数据中心的连接
本解决方案使用IPsec-VPN建立VPC到本地数据中心的VPN连接,从而实现本地数据中心与VPC的互通。
步骤2:创建专有网络
登录专有网络管理控制台。
单击左侧导航栏专有网络。
在专有网络页面,单击创建专有网络。
在创建专有网络页面,根据以下信息配置专有网络。
参数
描述
专有网络
地域
根据Dataphin所在地域选择对应地域。例如,Dataphin所在地域为杭州,则私有网络地域选择杭州。
名称
填写私有网络名称,128个字符以内,不能以
http://
或https://
开头。本文以本地数据中心上杭州VPC网络为例。IPv4网段
填写私有网络的IPv4网段。建议您使用RFC私网地址作为专有网络的网段。例如,
10.0.0.0/8
、172.16.0.0/12
、192.168.0.0/16
,在多VPC互通场景或混合云场景中需确保地址规划不能冲突。本文以192.168.0.0/16
为例。重要不能使用
100.64.0.0/10
、224.0.0.0/4
、127.0.0.0/8
或169.254.0.0/16
网段作为VPC的网段。IPv6网段
系统为VPC分配的IPv6网段为全球单播地址段,VPC中的实例分配IPv6地址后可以通过IPv6网关连接互联网。本方案默认不分配。
描述
填写私有网络的简单描述,256个字符以内。
交换机
为保证产品跨可用区的高可用性,需要创建两个不同可用区下的虚拟交换机。
名称
填写交换机名称,128个字符以内。本文以主交换机为例。
可用区
可用区是指在同一地域内,电力和网络互相独立的物理区域。同一可用区内实例之间的网络延时更小,其用户访问速度更快。本文以可用区H为例。
IPv4网段
交换机的网段必须是其所属VPC网段的真子集且掩码需在16位到29位之间,可提供8~65536个地址。本文以
192.168.1.0/24
为例。单击确定,完成私有网络的创建。
步骤3:创建VPN网关
单击左侧导航栏VPN->VPN网关。
在VPN网关页面,单击创建VPN网关。
在VPN网关购买页面,根据以下信息配置VPN网关。
参数
描述
实例名称
填写VPN网关的实例名称。
资源组
您可以选择已创建的资源组对云账号下的资源做分类分组管理,以组为单元进行权限管理、资源部署、资源监控等,而无需单独处理各个资源。例如,选择默认资源组。
地域和可用区
确保VPC的地域和VPN网关的地域相同。选择华东1(杭州)。
网关类型
选择普通型。
网络类型
默认公网。
隧道
默认双隧道。
VPC
选择本地数据中心上杭州VPC网络。
虚拟交换机1
选择主交换机。
虚拟交换机2
选择备交换机。
带宽规格
选择一个带宽规格。带宽规格是VPN网关所具备的公网带宽。默认5Mbps。
IPsec-VPN
选择开启IPsec-VPN功能。
SSL-VPN
SSL-VPN功能允许您从任何位置的单台计算机连接到专有网络。默认关闭。
计费周期
选择购买时长。默认一个月。
单击立即购买并完成支付,即可完成VPN网关的创建。
说明VPN网关的创建一般需要1-5分钟。
步骤4:创建用户网关
单击左侧导航栏VPN->用户网关。
在用户网关页面,单击创建用户网关。
在创建用户网关抽屉页面,根据以下信息配置用户网关。
参数
描述
名称
输入用户网关的名称,100个字符以内。
IP地址
输入VPC要连接的本地数据中心网关设备的公网IP。
自治系统号
请输入0-4294967295的正整数,支持按照两段位输入,即:前16位比特,后16位比特,每个段位使用十进制输入。默认不填写。
描述
填写用户网关的简单描述,100个字符以内。不能以
http://
或https://
开头。资源组
您可以选择已创建的资源组对云账号下的资源做分类分组管理,以组为单元进行权限管理、资源部署、资源监控等,而无需单独处理各个资源。例如,选择默认资源组。
标签
输入标签键和标签值。为用户网关绑定标签,便于后续基于标签进行管理。
单击确认,完成用户网关创建。
步骤5:创建IPsec连接
单击左侧导航栏VPN->IPsec连接。
在IPsec连接页面,单击创建IPsec连接。
在创建IPsec连接页面,根据以下信息配置IPsec连接。
参数
描述
名称
输入IPsec连接的名称,100个字符以内。
资源组
您可以选择已创建的资源组对云账号下的资源做分类分组管理,以组为单元进行权限管理、资源部署、资源监控等,而无需单独处理各个资源。例如,选择默认资源组。
绑定资源
选择VPN网关。
VPN网关
选择已创建的VPN网关。
路由模式
如果选择目的路由模式,本端网段和对端网段均为
0.0.0.0/0
,需要在创建IPsec连接后再在VPN网关内手动添加策略路由或目的路由。立即生效
是:配置完成后立即进行协商。
否:当有流量进入时进行协商。
用户网关
选择要连接的用户网关。
预共享密钥
输入共享密钥,该值必须与本地网关设备的预共享密钥一致。
启用BGP
需要您的网关设备的品牌支持边界网关协议(BGP),如果您的客户网关设备不支持BGP,请不要开启BGP。默认关闭。
加密配置、健康检查、高级配置
本方案使用系统默认配置,无需修改。
标签
输入标签键和标签值。为IPsec绑定标签,便于后续基于标签进行管理。
单击确定,完成用户网关创建。
步骤6:在本地网关设备中加载VPN配置
单击左侧导航栏VPN->IPsec连接。
在IPsec连接页面,选择创建的IPsec连接,然后单击操作列下的下载对端配置。
根据本地网关设备的配置要求,将下载的配置添加到本地网关设备中。配置说明,请参见如何配置本地网关设备。
重要下载的配置中RemotSubnet和LocalSubnet与创建IPsec连接时的本端网段和对端网段相反。因为阿里云VPN网关对端是本地IDC的网段,本端是VPC网段;而本地网关设备,LocalSubnet就是指本地IDC的网段,RemotSubnet则是指阿里云VPC的网段。
步骤7:配置VPN网关路由
单击左侧导航栏VPN->VPN网关。
在VPN网关页面,选择目标VPN网关并单击实例ID/名称列下的实例ID。
在目的路由表页签,单击添加路由条目。
在添加路由条目页面,根据以下信息配置目标路由。
参数
描述
目标网段
填写本地IDC数据中心的私有网络网段。
下一跳
选择IPsec连接实例。
发布到VPC
选择是否将新添加的路由发布到VPC路由表。本例选择是。
权重
选择权重值。本例选择100。
单击确定,完成VPN网关路由配置。
步骤三:VPN连接测试
登录到阿里云VPC内一台无公网IP的ECS实例,并通过
ping
命令ping
本地IDC数据中心内一台服务器的私网IP地址,验证通信是否正常。若统计结果的
packet loss
为0%,rtt avg
在10ms以内,证明网络情况良好。[root@iZuf61cvux96rhus9ufhq0Z conf]# ping -c 100 xxx.xxx.xxx.xxx 64 bytes from xxx.xxx.xxx.xxx: icmp_seq=1 ttl=61 time=7.52 ms 64 bytes from xxx.xxx.xxx.xxx: icmp_seq=2 ttl=61 time=7.38 ms 64 bytes from xxx.xxx.xxx.xxx: icmp_seq=3 ttl=61 time=7.10 ms 64 bytes from xxx.xxx.xxx.xxx: icmp_seq=4 ttl=61 time=7.55 ms 64 bytes from xxx.xxx.xxx.xxx: icmp_seq=5 ttl=61 time=7.11 ms ........ --- xxx.xxx.xxx.xxx ping statistics --- 100 packets transmitted, 100 received, 0% packet loss, time 99121ms rtt min/avg/max/mdev = 6.999/7.454/8.415/0.267 ms
使用
telnet
命令确定后端服务器接口情况。若出现以上响应信息,表示端口已经处于监听的状态。[root@iZuf61cvux96rhus9ufhq0Z conf]# telnet xxx.xxx.xxx.xxx 1521 Trying xxx.xxx.xxx.xxx... Connected to xxx.xxx.xxx.xxx. Escape character is '^]'.
步骤四:反向代理数据源服务与keeplive配置
步骤1:安装Nginx并反向代理数据源服务
使用SSH命令登录ECS云服务器。示例命令如下:
ssh root@192.168.***.1 //root为登录ECS云服务器的用户名,同时需要将192.168.***.1修改为ECS云服务器IP地址。
在Shell的命令终端下,按照以下命令编译安装Nginx。
mkdir -p /usr/local/src && cd /usr/local/src //创建src目录并切换 wget https://nginx.org/download/nginx-1.16.1.tar.gz //下载Nginx tar zxvf nginx-1.16.1.tar.gz && cd /usr/local/src/nginx-1.16.1 //解压安装包 um install lrzsz python-devel gcc gcc-c++ pcre pcre-devel patch unzip zlib zlib-devel openssl openssl-devel git jemalloc -y //安装依赖包 ./configure --with-http_ssl_module --with-http_stub_status_module --prefix=/usr/local/nginx --with-http_v2_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-pcre-jit --with-pcre --with-stream //编译nginx,注意一定要安装stream用于四层代理 make && make install //安装nginx
安装Nginx成功后,根据以下步骤配置Nginx反向代理数据源服务。
备份
nginx.conf
配置文件。cd /usr/local/nginx/conf/ && cp nginx.conf nginx.conf.bak
使用
vim nginx.conf
编辑配置文件并替换为以下配置。user nobody; worker_processes 8; events { worker_connections 1024; } stream { server{ listen 61521 so_keepalive=on; ##配置监听端口和socket连接的keepalive,否则无法支持长连接。 proxy_pass xxx.xxx.xxx.xxx :1521; ##配置本地IDC数据中心需要反向代理的数据库服务ip和端口,ip端口请根据数据库服务的端口自行替换。 proxy_timeout 72h; ## 配置代理的超时时间,建议配置为72小时。 } }
使用
vim /etc/init.d/nginx
编辑并配置Nginx开机自启。#!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: NGINX is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /etc/nginx/nginx.conf # config: /etc/sysconfig/nginx # pidfile: /var/run/nginx.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/local/nginx/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="//usr/local/nginx/conf/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx make_dirs() { # make required directories user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` if [ -z "`grep $user /etc/passwd`" ]; then useradd -M -s /bin/nologin $user fi options=`$nginx -V 2>&1 | grep 'configure arguments:'` for opt in $options; do if [ `echo $opt | grep '.*-temp-path'` ]; then value=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done } start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { configtest || return $? stop sleep 1 start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac
增加至开机自启。
chmod a+x /etc/init.d/nginx && chkconfig --add /etc/init.d/nginx
重新启动Nginx。
service nginx status && service nginx restart
步骤2:测试反向代理是否生效
使用netstat
命令查看端口是否监听。以下61521端口已监听。
root@iZuf61cvux96rhus9ufhq0Z conf]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:61521 0.0.0.0:* LISTEN 1333/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1346/sshd
步骤3:添加Dataphin至ECS安全组
在阿里云ECS安全组内,添加Dataphin的IP段。Datapin出网IP地址,请参见Dataphin出网IP地址。
步骤4:测试反向代理端口是否连通
在任意非Nginx代理服务器中使用telnet
命令至Nginx代理服务器,确认接口情况。以下61521端口可以连通。
lxxxx@liaxxxxxook-Pro: telnet xxx.xxx.xxx.xxx 61521
Trying xxx.xxx.xxx.xxx...
Connected to xxx.xxx.xxx.xxx.
Escape character is '^]'.
步骤五:测试代理的服务数据源与Dataphin是否连通
在Dataphin上创建数据源时,类型选择ECS(VPC)自建数据库,配置连接信息并单击测试连接进行连通性测试,如果连通性测试成功则表示能正常连接,反向代理配置成功。