上雲之路之企業級雲上網路解決方案

来源:https://www.cnblogs.com/smallSevens/archive/2018/03/08/8526454.html
-Advertisement-
Play Games

2017年,越來越多的企業處於內部部署解決方案和雲環境拆分的混合IT世界中。為了適應產品的服務模式和公司未來的業務運營模式,結合公司2018年業務發展計劃。計劃將部分系統遷移部署在雲平臺,從而產生對混合雲策略的需求,為企業產品提供更大的靈活性以及更多部署工作負載的選項。 混合雲 在“互聯網+”國家戰 ...


2017年,越來越多的企業處於內部部署解決方案和雲環境拆分的混合IT世界中。為了適應產品的服務模式和公司未來的業務運營模式,結合公司2018年業務發展計劃。計劃將部分系統遷移部署在雲平臺,從而產生對混合雲策略的需求,為企業產品提供更大的靈活性以及更多部署工作負載的選項。

混合雲

在“互聯網+”國家戰略的驅動下,越來越多的業務應用需要通過互聯網來提供服務,公有雲因此受到越來越多的用戶親睞,然而對於傳統IT的核心數據與業務,受安全性、相容性等多方面因素的影響,無法採用公有雲來承載,此因混合雲成為企業雲架構的不二之選。

混合雲對於已有自建IDC的企業實現雲化有很大的好處:按需定製,滿足業務的個性化需求;多級容災,能夠規避單一的採購商風險;兼得私有環境安全獨立的優勢和公有雲彈性伸縮、快速編排定製的優勢;最後,對已有的IT重資產最大化的保護和利用,極大降低成本。

解決方案

產品對比

混合雲私網通信包括兩類產品:專線(高速通道)和VPN,兩者沒有絕對的優劣,只是所針對的客戶定義不同。

專線就是自建高速公路,具有網路帶寬高、時延低的優點,但是建設周期長,成本更高;VPN就是在公有網路上承包一條線路作為專用,價格更為經濟便宜,而且即開即用,但是時延相對專線來說更高。

高速通道 (物理專線)

幫助不同網路環境間實現高速、穩定、安全的私網通信,包括雲上跨地域/跨用戶的VPC內網互通、雲下IDC專線接入雲上等場景,提高網路拓撲靈活性和跨網通信質量。

網路整體架構

通用方案 (雲購VPN)

VPN網關是一款基於Internet,通過加密通道將企業數據中心、企業辦公網路、或internet終端和阿裡雲專有網路(VPC)安全可靠連接起來的服務。阿裡雲VPN網關在國家相關政策法規下提供服務,不提供訪問Internet功能。

雲上網路架構

基於阿裡雲VPC和相關產品,用戶可自主規劃並搭建滿足各種業務場景下的網路架構。

本架構能夠解決

  • 雲上網路安全隔離
  • 應對海量訪問流量
  • 雲上雲下數據互通
  • 多業務共用帶寬

網路整體架構

通用方案(自建VPN)

雲上VPC和私有IDC是如何實現IPSEC-VPN對接的。如上圖所示,右邊邊為雲上VPC,且VPC上有多台ECS,左邊是私有IDC,IDC里包含傳統的伺服器,兩端都是私網口。

IPsec VPN 伺服器

Docker 上的 IPsec VPN 伺服器,使用這個 Docker 鏡像快速搭建 IPsec VPN 伺服器。支持 IPsec/L2TP 和 Cisco IPsec 協議。本鏡像以 Debian 9 (Stretch) 為基礎,並使用 Libreswan (IPsec VPN 軟體) 和 xl2tpd (L2TP 服務進程)。

安裝 Docker

首先,在你的 Linux 伺服器上 安裝並運行 Docker。

yum update
yum install docker -y

下載鏡像

預構建的可信任鏡像可在 Docker Hub registry 下載:

docker pull hwdsl2/ipsec-vpn-server

如何使用鏡像

環境變數

這個 Docker 鏡像使用以下三個變數,可以在一個 env 文件中定義。執行以下命令,vim vpn.env:

Define your own values for these variables
# - DO NOT put "" or '' around values, or add space around =
# - DO NOT use these special characters within values: \ " '
VPN_IPSEC_PSK=your_ipsec_pre_shared_key
VPN_USER=your_vpn_username
VPN_PASSWORD=your_vpn_password

這將創建一個用於 VPN 登錄的用戶賬戶,它可以在你的多個設備上使用 。 IPsec PSK (預共用密鑰) 由 VPN_IPSEC_PSK 環境變數指定。 VPN 用戶名和密碼分別在 VPN_USER 和 VPN_PASSWORD 中定義。

註: 在你的 env 文件中,不要為變數值添加 "" 或者 '',或在 = 兩邊添加空格。不要在值中使用這些字元:  " '。

運行 IPsec VPN 伺服器

重要: 首先在 Docker 主機上載入 IPsec NETKEY 內核模塊:

sudo modprobe af_key

使用本鏡像創建一個新的 Docker 容器 (將 ./vpn.env 替換為你自己的 env 文件):

docker run \
    --name ipsec-vpn-server \
    --env-file ./vpn.env \
    --restart=always \
    -p 500:500/udp \
    -p 4500:4500/udp \
    -v /lib/modules:/lib/modules:ro \
    -d --privileged \
    hwdsl2/ipsec-vpn-server
獲取 VPN 登錄信息

如果你在上述 docker run 命令中沒有指定 env 文件,VPN_USER 會預設為 vpnuser,並且 VPN_IPSEC_PSK 和 VPN_PASSWORD 會被自動隨機生成。要獲取這些登錄信息,可以查看容器的日誌:

docker logs ipsec-vpn-server

查看伺服器狀態

如需查看你的 IPsec VPN 伺服器狀態,可以在容器中運行 ipsec status 命令:

docker exec -it ipsec-vpn-server ipsec status

或者查看當前已建立的 VPN 連接:

docker exec -it ipsec-vpn-server ipsec whack --trafficstatus

腳本一鍵安裝

首先,在你的 Linux 伺服器* 上全新安裝一個 Ubuntu LTS, Debian 或者 CentOS 系統。

使用以下命令快速搭建 IPsec VPN 伺服器:

wget https://git.io/vpnsetup -O vpnsetup.sh && sudo sh vpnsetup.sh

如果使用 CentOS,請將上面的地址換成 https://git.io/vpnsetup-centos。 你的 VPN 登錄憑證將會被自動隨機生成,併在安裝完成後顯示在屏幕上。

你也可以將你自己的 VPN 登錄憑證定義為環境變數:

# 所有變數值必須用 '單引號' 括起來
# *不要* 在值中使用這些字元:  \ " '
wget https://git.io/vpnsetup -O vpnsetup.sh && sudo \
VPN_IPSEC_PSK='你的IPsec預共用密鑰' \
VPN_USER='你的VPN用戶名' \
VPN_PASSWORD='你的VPN密碼' sh vpnsetup.sh

IPsec/L2TP VPN 客戶端

Linux(CentOS )

首先安裝以下軟體包:

yum -y install epel-release
yum -y install strongswan xl2tpd

配置 strongSwan

編輯/etc/strongswan/ipsec.conf文件

# ipsec.conf - strongSwan IPsec configuration file

# basic configuration

config setup
  # strictcrlpolicy=yes
  # uniqueids = no

# Add connections here.

# Sample VPN connections

conn %default
  ikelifetime=60m
  keylife=20m
  rekeymargin=3m
  keyingtries=1
  keyexchange=ikev1
  authby=secret
  ike=aes128-sha1-modp1024,3des-sha1-modp1024!
  esp=aes128-sha1-modp1024,3des-sha1-modp1024!

conn myvpn
  keyexchange=ikev1
  left=%defaultroute
  auto=add
  authby=secret
  type=transport
  leftprotoport=17/1701
  rightprotoport=17/1701
  right=VPN伺服器IP

編輯/etc/strongswan/ipsec.secrets文件

: PSK "你的PSK"

配置 xl2tpd

編輯/etc/xl2tpd/xl2tpd.conf文件

[lac myvpn]
lns = VPN服務的IP
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd.client
length bit = yes

編輯/etc/ppp/options.xl2tpd.client文件

ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-chap
noccp
noauth
mtu 1280
mru 1280
noipdefault
defaultroute
usepeerdns
connect-delay 5000
name 你的帳戶
password 你的密碼
chmod 600 /etc/ppp/options.l2tpd.client

至此 VPN 客戶端配置已完成。按照下麵的步驟進行連接。

創建xl2tpd控制文件

mkdir -p /var/run/xl2tpd
touch /var/run/xl2tpd/l2tp-control
啟動腳本vpnc.sh
#!/bin/bash
SUDO=''
if [ "$USER" != "root" ]
then
  SUDO='sudo'
fi
$SUDO systemctl restart strongswan.service
$SUDO systemctl restart xl2tpd.service
sleep 1
$SUDO strongswan up myvpn
$SUDO tee /var/run/xl2tpd/l2tp-control > /dev/null <<< "c myvpn"
while ! $(ip route | grep -i ppp0 &>/dev/null)
do
 sleep 1
done
ip link | grep -i ppp0
# 檢查你現有的預設路由 ip route 在輸出中查找以下行: default via X.X.X.X ...。記下這個網關IP # 並且在下麵的兩個命令中使用。
$SUDO route add 你的VPN伺服器IP gw x.x.x.x
# 如果你的 VPN 客戶端是一個遠程伺服器,則必須從新的預設路由中排除你的本地電腦的公有 IP,以避免 
# SSH 會話被斷開 (替換為實際值):
$SUDO route add 你的本地電腦的公有IP gw x.x.x.x
$SUDO route add default dev ppp0

ip route | grep -i ppp0
ip address | grep -i ppp0
# 檢查 VPN 是否正常工作,以上命令應該返回 你的 VPN 伺服器 IP。
wget -qO- http://ipv4.icanhazip.com; echo
停止腳本 vpnd.sh
#!/bin/bash
SUDO=''
if [ "$USER" != "root" ]
then
  SUDO='sudo'
fi
$SUDO route del default dev ppp0
# 刪除掉VPN伺服器IP 和 本地電腦公網IP
$SUDO ip route del x.x.x.x
$SUDO ip route del x.x.x.x
$SUDO tee /var/run/xl2tpd/l2tp-control > /dev/null <<< "d vultr"
$SUDO strongswan down myvpn
ip link | grep -i ppp0
ip route | grep -i ppp0
$SUDO systemctl stop strongswan.service
$SUDO systemctl stop xl2tpd.service

啟動腳本命令,測試一下VPN伺服器內網地址是否連通:

[root@iz2ze7tgu9zb2gr6av1tysz vpn]# ping 172.17.120.102
PING 172.17.120.102 (172.17.120.102) 56(84) bytes of data.
64 bytes from 172.17.120.102: icmp_seq=1 ttl=63 time=1.96 ms
64 bytes from 172.17.120.102: icmp_seq=2 ttl=63 time=2.01 ms
64 bytes from 172.17.120.102: icmp_seq=3 ttl=63 time=1.92 ms
64 bytes from 172.17.120.102: icmp_seq=4 ttl=63 time=1.94 ms
^C
--- 172.17.120.102 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 1.926/1.961/2.010/0.062 ms

啟動腳本命令,以上命令可以ping通,說明安裝配置成功。

知識補充

內網定義

內網IP有3種:

  • 第一種10.0.0.0~10.255.255.255
  • 第二種172.16.0.0~172.31.255.255
  • 第三種192.168.0.0~192.168.255.255

相關埠

協議
PPTP 1723
L2TP UDP:500 (isakmp) UDP:4500 (nat-t) UDP:1701 (l2tp)

IPSEC/L2TP方式的VPN基礎

參考:https://blog.52itstyle.com/archives/2457/#%E7%9F%A5%E8%AF%86%E8%A1%A5%E5%85%85

參考文檔

setup-ipsec-vpn:https://github.com/hwdsl2/setup-ipsec-vpn

setup-ipsec-vpn:https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients-zh.md

ppp:http://en.wikipedia.org/wiki/Point-to-Point_Tunneling_Protocol

l2tp: http://en.wikipedia.org/wiki/Layer_2_Tunneling_Protocol

l2tp: https://baike.baidu.com/item/L2TP/609253?fr=aladdin

pptp:http://en.wikipedia.org/wiki/Point-to-Point_Tunneling_Protocol

ipsec: http://en.wikipedia.org/wiki/IPsec

ipsec: http://bbs.51cto.com/viewthread.php?tid=1119459

ipsec: https://baike.baidu.com/item/ipsec/2472311?fr=aladdin

strongSwan: https://baike.baidu.com/item/strongSwan/2873029?fr=aladdin

An Illustrated Guide to IPsec: http://www.unixwiz.net/techtips/iguide-ipsec.html

gre:http://en.wikipedia.org/wiki/Generic_Routing_Encapsulation

ms-chap-v2破解:https://www.cloudcracker.com/blog/2012/07/29/cracking-ms-chap-v2/

strongswan: https://www.strongswan.org/docs/OSTD_2013.pdf

ISAKMP、IKE、IKEv1、IKEv2、NAT-Tranversal:http://security.hsr.ch/lectures/Information_Security_2/Vorlesungsunterlagen/04.6-IKE_Notes.pdf


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天心血來潮,打開了sublime想玩玩react,然後大家都知道的先引入一大串 就是在百度靜態資源庫里找到的。 然後貼html代碼 對的,沒錯,就這麼一行,畢竟只是測試嘛 然後js代碼 大家一定要註意,在script的開頭標簽里,一定要註明,否則瀏覽器會報錯,解析不了。 就按照這樣的代碼,照理來說 ...
  • 1.url: 要求為String類型的參數,(預設為當前頁地址)發送請求的地址。 2.type: 要求為String類型的參數,請求方式(post或get)預設為get。註意其他http請求方法,例如put和delete也可以使用,但僅部分瀏覽器支持。 3.timeout: 要求為Number類型的 ...
  • 面向對象六大原則 單一職責原則——SRP 開閉原則——OCP 里式替換原則——LSP 依賴倒置原則——DIP 介面隔離原則——ISP 迪米特原則——LOD ...
  • 如今,市場環境紛繁複雜,瞬息萬變,現代企業為了更好地生存,需要有極強的適應能力。快速而輕鬆地迎接改變,成為了一個優質企業的特征之一,同時企業還要求技術團隊構建更科學的架構,搭建成本更低的平臺,這就使得這些團隊越來越傾向於使用微服務架構來應對以上要求。微服務的做法有利於軟體組件和數據的分散化,將一個整 ...
  • 工作流模塊 1.模型管理 :web線上流程設計器、預覽流程xml、導出xml、部署流程 2.流程管理 :導入導出流程資源文件、查看流程圖、根據流程實例反射出流程模型、激活掛起 3.運行中流程:查看流程信息、當前任務節點、當前流程圖、作廢暫停流程、指派待辦人 4.歷史的流程:查看流程信息、流程用時、流 ...
  • 本篇的題目其實比較大,所以在寫的時候,我其實是有些“惶恐”的,怕這篇完成後有標題檔的嫌疑。不過為了將自己過去多年的經歷和最近1年改造架構的想法,做一個階段性總結,還是有必要好好寫一寫的,所以如果寫得不好,大家多包涵,歡迎大家補充。 定義目標 既然我們的目標是做到高可用,那麼我們就有必要先明確清楚高可 ...
  • 簡單工廠模式是屬於創建型模式,又叫做靜態工廠方法(Static Factory Method)模式,但不屬於23種GOF設計模式之一。簡單工廠模式是由一個工廠對象決定創建出哪一種產品類的實例。簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是不同工廠模式的一個特殊實現. ...
  • 泛型是什麼? 泛型本質是指類型參數化。意思是允許在定義類、介面、方法時使用類型形參,當使用時指定具體類型,所有使用該泛型參數的地方都被統一化,保證類型一致。如果未指定具體類型,預設是Object類型。集合體系中的所有類都增加了泛型,泛型也主要用在集合。 泛型的定義 泛型類:public class ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...