VLAN和VPC是一种网络隔离方法,我们可以借此保护自己部署在公有云中的基础设施。通过减少网络的攻击面,同时供我们对需要以及不需要访问互联网的应用程序层进行分割,这些方法有助于提高整体安全性。那么不妨考虑一个更大的话题:是否能在Linode的帮助下,实现私有网络的跨地域部署。
消除复杂性、提高创新力!Akamai 云计算服务,灵活的开放式架构,简化开发体验!
这里所说的“地域”(Region)是指一个云服务提供商内部所包含的不同地理位置,而“区域”(Zone)通常是指在一个地域内所提供的多个托管地点。例如,云服务商可能在北京设立了“北方地域”,并在广州设立了“南方地域”,每个地域都是通过当地的多个“区域”提供服务的。
除了可以通过距离大部分用户更近的地理位置提供延迟更低的服务,多地域方式部署的应用程序还可以帮助我们大幅提高应用程序的可靠性与容错性。任何可能对一个位置运行的工作负载造成影响的问题(包括硬件故障或本地网络中断),都可通过将用户重新路由到另一个位置的方式加以缓解。
部署多地域VLAN
为了在多地域部署的不同VLAN分段之间进行路由,我们可以使用虚拟专用网络(VPN)将VLAN网段捆绑在一起。
首先,我们需要使用一个充当公共路由器的Linode节点将部署在一个地域的所有相关VLAN捆绑在一起。此时,每个VLAN网段都是独立且隔离的二层域,在自己的第三层子网内运行。各个VLAN网段之间的所有流量都会流经该路由器,我们可以在路由器上通过防火墙规则来管理允许哪些流量在不同网段之间穿越。
随后可以配置这个路由器实例,借助公共互联网和VPN软件(如WireGuard或IPSec等协议)将其他网段之间的流量桥接在一起。
上述例子展示了一个包含两个地域的部署。每个地域负责通过一个路由器实例管理两个独立VLAN之间的连接,随后,每个路由器即可使用配置有多个接口的Linode路由器实例在本地桥接多个地域。路由器可通过WireGuard隧道,借助每个地域的公共互联网横跨每个地域。
配置NAT出口点
至此,流量已经可以不受地域限制在任何VLAN之间流动。此外,路由器实例可以充当网络地址转换(NAT)出口点,为本地VLAN提供互联网连接(如果部署路由器实例时未提供本地互联网连接)。这种配置下,本地路由器实例将被指定为默认网关(例如通常会在10.0.0.0/24网络中配置为10.0.0.1)。我们还可以将路由器实例当作安全套接字外壳(SSH)的管理堡垒机。
实现这类NAT配置的一种常见方法是使用防火墙规则来标记WireGuard流量,并对检测出的未包含该标记的所有流量进行IP掩蔽(IP masquerading)。
例如,路由器可配置为使用如下的iptables规则:
iptables -t nat -A POSTROUTING -o eth0 -m mark ! --mark 42 -j MASQUERADE
我们可以配置WireGuard在其配置中使用FirewallMark(如“42”),该配置保证了不对WireGuard流量进行NAT,但对所有VLAN流量进行NAT。
随后即可配置云防火墙规则允许路由节点之间的WireGuard通信(通常为udp/51820)。
最后,如果需要,我们还可以使用防火墙规则配置路由器实例,从而控制或记录流经本地和全局网段的流量。
注意事项
上述例子中的部署可用于在全球范围内跨越多个地域实现共享,并借助路由器实例控制不同VLAN网段之间的流量。在通过隧道将多个VLAN网段的流量传输至一个聚合点时,务必要了解这样做可能对性能和带宽产生的影响。此时可获得的性能主要取决于分配给路由器的计算资源所具备的上行带宽。
此外在确定要使用的VPN协议时也需要慎重,这样才能保证满足部署的特定要求。所选择的技术将对点对点带宽以及通过公共互联网所发出的流量的安全性产生极大影响。例如,WireGuard会使用Cryptography来保证流量不被拦截,相比诸如strongSwan这种IPSec实现,可以更好地减少漏洞和暴露,可信度更高。
多云部署
用来跨越多个地域的这种技术还可用于跨越多个云平台。例如,我们可以在另一个云平台的网络边界内部署一个路由器实例,并将其绑定到该实例本地且由云提供商提供的VPC中。我们可以在路由器之间通过WireGuard隧道将不同云提供商的网络桥接在一起,这种做法对于专门在私有网络中保持隔离的服务往往能起到很好的效果。
总结
最终,在设计自己的私有网络时,有很多工具可供我们使用,这样做的收益往往超过了所带来的复杂性。如果应用程序和用户数都在快速增长,妥善设计的环境将有助于降低大部分用户可能遇到的延迟,从而极大改善用户体验。另外,额外的容错能力也有助于改善服务的可靠性,并改善服务的可用性和可访问性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。