在微软云使用site to site VPN连接到本地网络

557次阅读
没有评论

共计 6569 个字符,预计需要花费 17 分钟才能阅读完成。

更新记录

2023-09-07

Azure变更了虚拟子网类型,现在 VPN 所用的子网需要单独创建 ​GatewaySubnet

前言

多云是大型企业选择云提供商的发展趋势。各家不同的云提供商,均具备独特的优势。例如AWS的大而全,华为云的低廉的价格,Azure在此次AI浪潮中的先发优势等。针对不同的优势,公司在选型提供商时并不会局限于独家,而是会根据不同的业务诉求,将资源托管在不同的提供商。例如AWS的cdn边缘节点在海外覆盖最为全面;AI相关的业务,GCP和Azure的一站化更为出色。

而我司为了更好的使用openai,计划引入微软云。作为SRE,需要先于业务出发,确保基础架构稳定可拓展。此篇文章会详述如何在Azure使用site to site VPN,联通其他云提供商的VPC,拓展IDC的网络边界。

实操

业务既然上云,那么在部署服务时就会有不同的选择,即可以选择iaas,仅使用云提供的vm,服务自行在vm部署;也可以选择saas,直接利用云已经封装集成的商用产品。

通常来说,iaas运维成本高,资源成本低。而saas运维成本低,资源成本高。

本文会综合两种方式进行配置,即Azure上使用saas(site to site vpn),而本地网络​使用iaas(strongswan vpn)。

本地网络​:可以泛指任意网络,例如公司网络/IDC网络/其他云厂上的VPC网络。此处的本地网络为华为云的VPC。

在微软云使用site to site VPN连接到本地网络

费用

Azure

选用VpnGw1,价格约173$/月。价格并不高。

在微软云使用site to site VPN连接到本地网络

资源信息

后文中,资源准备章节所创建的资源信息汇总于此。

Azure

虚拟网络

  • 资源组: sre-test
  • 名称: eu-sre-test-vnet-1
  • 区域: 欧洲西部 West Europe
  • IPv4 地址空间: 10.33.0.0/16
  • 子网名称: eu-sre-test-vsubnet-1
  • 子网地址空间: 10.33.0.0/24

虚拟网络网关

即VPN网关

  • 名称:eu-sre-test-vgw-1
  • IP-1:108.143.150.131 (eu-sre-test-vgw-eip-1)

虚拟机

用于测试网络是否能够联通

  • 名称:eu02-sre-test-0001
    • 内网IP:10.33.0.4
    • 公网IP:20.56.158.61

华为云

虚拟私有云

  • 名称:hk-sre-test-vpc-1
    • IPV4 CIDR:10.32.0.0/24
    • 子网名称:hk-sre-test-subnet-1

    • 子网IPV4 CIDR:10.32.0.0/24

虚拟机

用于部署VPN

  • 名称:hk01-sre-vpn-test-0001
    • 内网IP:10.32.0.129
    • 公网IP:119.8.30.76

虚拟IP

用于高可用

  • 名称:hk01-sre-vpn-test-0001
    • 内网IP:10.32.0.200
    • 公网IP:159.138.8.237

资源准备

Azure

创建资源组

Azure的资源管理层级,由上至下,分别是

  1. 管理组
  2. 订阅
  3. 资源组
  4. 资源

任意资源都需要具备上述层级才可进行创建,而管理组和订阅在创建账号时已经进行分配,此处只需要创建资源组。

在微软云使用site to site VPN连接到本地网络

创建虚拟网络

​​​在微软云使用site to site VPN连接到本地网络

创建虚拟子网

需要创建两种类型的子网

  • 普通子网,用于虚拟机 / LB / RDS 等资源的 IP 分配
  • 网关子网,用于 托管VPN 的IP 分配

在微软云使用site to site VPN连接到本地网络

创建 VPN 网关

此处需要注意的是,VPN网关会使用虚拟网络vnet下的子网,使用的是 GatewaySubnet

在微软云使用site to site VPN连接到本地网络

创建本地网络网关

本地网络网关,在本文中即Azure的对端,也就是华为的VPN网关IP和所需联通的IPV4 CIDR.

在微软云使用site to site VPN连接到本地网络

创建 VPN 连接

​​在微软云使用site to site VPN连接到本地网络​​

华为云

创建虚拟私有云

在微软云使用site to site VPN连接到本地网络

创建虚拟机用于部署strongswan

关闭 源/目的检查

在微软云使用site to site VPN连接到本地网络

在微软云使用site to site VPN连接到本地网络

创建虚拟IP并绑定虚拟机网卡

此处并非必选项,而是因为选择自行部署strongwan后,单机部署就可能存在单点故障的隐患。

华为云可以提供虚拟IP,那么我们即可以选择多机部署,在华为云上将虚拟IP绑定所有部署了strongwan vm的网卡,在通过keepalived实现高可用。

创建虚拟IP

在微软云使用site to site VPN连接到本地网络

给虚拟IP绑定EIP

在微软云使用site to site VPN连接到本地网络

将虚拟IP绑定至虚拟机

在微软云使用site to site VPN连接到本地网络

操作系统内给网卡绑定虚拟ip

nmcli connection​:查看并记录需要绑定虚拟IP的网卡及对应连接。

nmcli connection modify "System eth0" ipv4.addresses 10.32.0.200​ :在目标连接中添加虚拟IP。

nmcli connection up "System eth0"​ :使配置生效。

[root@hk01-sre-vpn-test-0001 ~] # nmcli connection
NAME         UUID                                  TYPE      DEVICE 
System eth0  5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  ethernet  eth0   
System eth1  9c92fad9-6ecb-3e6c-eb4d-8a47c6f50c04  ethernet  --   
System eth2  3a73717e-65ab-93e8-b518-24f5af32dc0d  ethernet  --   
System eth3  c5ca8081-6db2-4602-4b46-d771f4330a6d  ethernet  --   
System eth4  84d43311-57c8-8986-f205-9c78cd6ef5d2  ethernet  --   

[root@hk01-sre-vpn-test-0001 ~] # nmcli connection modify "System eth0" ipv4.addresses 10.32.0.200

[root@hk01-sre-vpn-test-0001 ~] # nmcli connection up "System eth0"
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@hk01-sre-vpn-test-0001 ~] # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether fa:16:3e:70:50:d1 brd ff:ff:ff:ff:ff:ff
    inet 10.32.0.200/32 brd 10.32.0.200 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 10.32.0.129/24 brd 10.32.0.255 scope global noprefixroute dynamic eth0
       valid_lft 107999993sec preferred_lft 107999993sec
    inet6 fe80::f816:3eff:fe70:50d1/64 scope link 
       valid_lft forever preferred_lft forever

[root@hk01-sre-vpn-test-0001 ~] # ping 10.32.0.200
PING 10.32.0.200 (10.32.0.200) 56(84) bytes of data.
64 bytes from 10.32.0.200: icmp_seq=1 ttl=64 time=0.022 ms
64 bytes from 10.32.0.200: icmp_seq=2 ttl=64 time=0.017 ms
^C
--- 10.32.0.200 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1017ms
rtt min/avg/max/mdev = 0.017/0.019/0.022/0.005 ms

答疑 为什么不用ELB?

一般来说云厂我们都会选择使用Elastic Load Balance,即弹性负载均衡器来实现服务高可用。

此处不选择的原因是,部署了strongswanVPN并提供通信的IP,会作为VPC路由表中的下一跳地址,将对远端网段的流量路由到strongwan。而华为云路由表中,下一跳并不支持选择ELB。

在微软云使用site to site VPN连接到本地网络

strongswan部署和配置

部署
# yum install strongswan -y

配置

密钥配置文件:/etc/strongswan/ipsec.secrets

格式为:[本机公网IP] [远端公网IP] : PSK “密钥”

此处本机公网IP​应写虚拟IP的EIP,远端公网IP​写Azure VPN提供的公网IP

[root@hk01-wpscloud-sre-vpn-0001 /etc/strongswan] # cat ipsec.secrets 
# ipsec.secrets - strongSwan IPsec secrets file
159.138.8.237 90.84.42.7 : PSK "123456testpass"

隧道配置文件:/etc/strongswan/ipsec.conf

[root@hk01-wpscloud-sre-vpn-0001 /etc/strongswan] # cat /etc/strongswan/ipsec.conf
config setup
conn %default
        auto=start
        type=tunnel
        compress=no
        authby=psk
        ikelifetime=86400s
        lifetime=3600s
        keyexchange=ikev2
        ike=aes128-sha256-modp2048!
        esp=aes128-sha256-modp2048!
        dpddelay=15
        dpdtimeout=45
        dpdaction=restart

conn huawei_hk_to_azure_eu
        leftid=159.138.8.237
        left=10.32.0.200
        leftsubnet={,10.32.0.0/24}
        rightsubnet={,10.31.0.0/24}
        rightid=114.119.172.224
        right=114.119.172.224

安全组

安全组放行Azure的子网和VPN IP

虚拟网络

虚拟网络

  • 资源组: sre-test
  • 名称: eu-sre-test-vnet-1
  • 区域: 欧洲西部 West Europe
  • IPv4 地址空间: 10.33.0.0/16
  • 子网名称: eu-sre-test-vsubnet-1
  • 子网地址空间: 10.33.0.0/24

虚拟网络网关

虚拟网络网关

即VPN网关

  • 名称:eu-sre-test-vgw-1
  • IP-1:108.143.150.131 (eu-sre-test-vgw-eip-1)

路由

在华为云的VPC路由表下,配置到Azure 子网 10.33.0.0/24的路由,下一跳为 虚拟IP

在微软云使用site to site VPN连接到本地网络

测试和验证

‍华为云虚拟机

  • 名称:hk01-sre-vpn-test-0001
    • 内网IP:10.32.0.129
    • 公网IP:119.8.30.76

华为云VPN EIP

  • 名称:hk01-sre-vpn-test-0001
    • 内网IP:10.32.0.200
    • 公网IP:159.138.8.237 (300Mbps)

AWS虚拟机

  • 名称:eu02-sre-test-0001
    • 内网IP:10.33.0.4
    • 公网IP:20.56.158.61

ping

测试从 hk01-sre-vpn-test-0001 –> eu02-sre-test-0001ping

[root@hk01-sre-vpn-test-0001 /etc/strongswan] # ping 10.33.0.4
PING 10.33.0.4 (10.33.0.4) 56(84) bytes of data.
64 bytes from 10.33.0.4: icmp_seq=1 ttl=64 time=191 ms
********
64 bytes from 10.33.0.4: icmp_seq=52825 ttl=64 time=190 ms
^C
--- 10.33.0.4 ping statistics ---
52826 packets transmitted, 52735 received, 0% packet loss, time 52864723ms
rtt min/avg/max/mdev = 187.536/190.242/642.411/20.297 ms

结论

  • 平均延时:190.242ms
  • 丢包率:0%

端口连通性

[root@hk01-sre-vpn-test-0001 /etc/strongswan] # nc -vz 10.33.0.4 22
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.33.0.4:22.
Ncat: 0 bytes sent, 0 bytes received in 0.20 seconds.

结论

tcp端口可正常通信

文件传输

[ansible@hk01-sre-vpn-test-0001 /tmp] $ dd if=/dev/zero of=bigfile bs=1G count=1
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB) copied, 0.751271 s, 1.4 GB/s
[ansible@hk01-sre-vpn-test-0001 /tmp] $ scp bigfile 10.33.0.4:/tmp
The authenticity of host '10.33.0.4 (10.33.0.4)' can't be established.
ECDSA key fingerprint is SHA256:T4n58SecFgBNyQp3xvHO237b30raJQGN6TlH/kjYmm0.
ECDSA key fingerprint is MD5:d2:d6:75:99:5a:e2:89:0b:82:dc:91:c3:32:58:19:6d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.33.0.4' (ECDSA) to the list of known hosts.
bigfile                                                                           100% 1024MB   7.1MB/s   02:23  

结论

传输1GB文件,平均传输速率7.1MB/s。

华为的EIP带宽限制为300Mbps,Azure的VpnGw1带宽限制为650Mbps。

即从华为香港到Azure欧洲,在国际公网环境下,网络吞吐达不到VPN的上限。

总结

架构的设计应在成本可控的情况下,保证可维护性和高可用性。一般而言,云厂托管的解决方案更佳。

本文之所以在本地网络(华为香港)采用自部署strongswan VPN,而在Azure选择托管VPN,理由如下:

  • 不同云之间的托管VPN,可能存在兼容性问题。曾经测试过华为和AWS的托管VPN无法正常协商打通隧道。咨询过双方的技术人员,却互相推诿是对方有问题。
  • strongswan是一个社区流行的软件定义网络解决方案。云托管VPN,一般会对自建strongswan VPN保证兼容性。

实际的业务架构中,华为的新加坡为枢纽,联通国内和海外的IDC机房。枢纽为了保障最大的兼容性,采取strongswan而不是托管VPN是最合适的选择。

而作为最远端的业务region,例如本文中的Azure欧洲,亦或是AWS美国。直接采用托管VPN可降低维护成本,也具备更好的稳定性。

本文属于专题:公有云

正文完
 
pengyinwei
版权声明:本站原创文章,由 pengyinwei 2023-07-19发表,共计6569字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处:https://www.opshub.cn
评论(没有评论)