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="http://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)自建數據庫,配置連接信息并單擊測試連接進行連通性測試,如果連通性測試成功則表示能正常連接,反向代理配置成功。