ARM 虚拟机使用同一个公共 IP 访问公网的解决方案

news/2024/7/7 15:46:41

Azure 目前有两种部署模型:资源管理器 ARM 和经典部署模型 ASM。ASM 的虚拟机默认公用云服务的 VIP 来访问 Internet,ARM 的虚拟机默认使用自己的公共 IP 访问 Internet。因为有的服务器有访问白名单的设置,因此有的客户可能想实现的一个需求就是 ARM 的多个虚拟机也公用一个公共 IP 来访问公网的某个服务器,这样就不需要在对方的白名单上添加多个虚拟机的公共 IP 地址。下面介绍如何实现这个方案。

virtual-network

虚拟网络的 Subnet01 子网中的多台虚拟机将公用 Subnet02 中的虚拟机 ForwardVM 访问 Internet 上的某台服务器。假设 Internet 上的这台服务器的地址是 42.159.4.113,这里是以 Azure 的经典管理门户为例。下面介绍操作步骤 :

  1. 首先借助 Azure 的自定义路由功能,创建一个路由表,将 Subnet01 这个子网访问 Internet 服务器的流量定向到虚拟机 ForwardVM。下面通过 Azure Powershell 来操作。其实也可以在门户上创建。

    #创建一个路由条目
    $route = New-AzureRmRouteConfig -Name subnet01route -AddressPrefix 42.159.4.113/8 -NextHopType VirtualAppliance -NextHopIpAddress 10.200.2.4
    #创建一个路由表,关联上面创建的路由条目
    $routeTable = New-AzureRmRouteTable -ResourceGroupName TestVnetGroup –Location “China North” -Name tableforsubnet01 -Route $route
    #将上面创建的路由条目关联到子网Subnet01
    $vnet = Get-AzureRmVirtualNetwork -ResourceGroupName TestVnetGroup -Name TestVnet
    Set-AzureRmVirtualNetworkSubnetConfig -Name subnet01 -VirtualNetwork $vnet -AddressPrefix 10.200.1.0/24 –RouteTable $routeTable
    #保存虚拟网络的配置
    Set-AzureRmVirtualNetwork -VirtualNetwork $vnet
    

    保存成功后,我们看到 Subnet01 上已经关联了上面创建的路由表。

    subnet01

  2. 在虚拟机 ForwardVM 上开启 IP 转发并对 Subnet01 子网中访问 Azure 经典管理门户的流量做 SNAT。

    1. 在平台层面,开启虚拟机的 IP 转发功能。 在门户上看到,虚拟机 ForwardVM 的网卡名称为 forwardvm350 :

      forwardvm

      #获取网卡对象
      $nicfwvm=Get-AzureRMNetworkInterface -ResourceGroupName TestVnetGroup -Name forwardvm350
      #开启IP转发
      $nicfwvm.EnableIPForwarding = 1
      #保存配置
      Set-AzureRmNetworkInterface -NetworkInterface $nicfwvm
      
    2. 在虚拟机 ForwardVM 内部开启 IP 转发功能 :

      echo 1 >/proc/sys/net/ipv4/ip_forward
      

      ip-forward

    3. 在虚拟机 ForwardVM 内做一个 SNAT,将 Subnet01 中虚拟机访问 Azure 管理门户(Internet)的数据包的源地址改为虚拟机 ForwardVM 的地址 :

      iptables -t nat -A POSTROUTING -s 10.200.1.0/24 -j SNAT --to-source 10.200.2.4
      

      iptables

  3. 在 Subnet01 内的一台虚拟机 BackServer1 上进行测试。用 Paping 测试 Azure 经典管理门户地址 42.159.4.113 的 443 端口,一直可以访问 :

    paping

    同时在 ForwardVM 上进行抓包,发现 BackServer1 访问 42.159.4.113 的数据包确实发往了 ForwardVM。

    backserver1

    从上面的数据包可以看出,ForwardVM 对这个数据包确实做了地址转换。将访问数据包的源地址转换为了 ForwardVM 自己的 IP 10.200.2.4.

因此上面的操作,实现了多个虚拟机公用一台虚拟机的公有 IP 访问 Internet 服务器的操作。

立即访问http://market.azure.cn


http://www.niftyadmin.cn/n/4076666.html

相关文章

搭建wamp+sqli-labs教程win10虚拟机2021/4/2

wamp安装 下载wamp,没啥好说的,在官网下载,我看也有人用phpstudy,都可 wamp官网 安装过程中遇到报错 msvcr120.dll报错 查询原因,缺少VC环境,下载了VC运行库集合,一步到位,但是我提…

python-greenlet模块(协程)

from greenlet import greenletdef test1():print(12)gr2.switch()print(34)gr2.switch() def test2():print(56)gr1.switch()print(78)gr1 greenlet(test1)#启动一个协程 gr2 greenlet(test2)#启动一个协程 gr1.switch()#switch是协程切换高并发,单线程的实现上万…

《大话设计模式》--简单工厂模式SimpleFactory(1)

上图为UML图,简单工厂模式解决对象的创建问题。 一、创建一个Operation基类: using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace DesignModeDemo{public class Operation{public double Num1{get;set;}public double …

jsp注释问题

2019独角兽企业重金招聘Python工程师标准>>> jsp常用注释包含三种&#xff1a; HTML注释&#xff08;输出注释&#xff09;&#xff1a; 指在客户端查看源代码时能看见注释。例如&#xff0c; <!-- this is an html comment.it will show up int the response. -…

灯塔arl安装centos7-docker

灯塔arl安装centos7-docker 参考链接 参考链接 https://blog.csdn.net/ydtsh_/article/details/115629346感谢这位作者 https://github.com/TophantTechnology/ARL/wiki/Docker-%E7%8E%AF%E5%A2%83%E5%AE%89%E8%A3%85-ARL环境的安装就按照第一个链接安装。 但是在拉去环境过程…

《大话设计模式》--商场促销--策略模式Strategy(2)

面向对象编程&#xff0c;并不类越多越好&#xff0c;类的划分是为了封装&#xff0c;但分类的基础是抽象&#xff0c;具有相同属性和功能的对象的抽象类集合才是类。 策略模式定义了算法家族&#xff0c;分别封装了起来&#xff0c;让它们之间可以互相替换&#xff0c;此模式…

前端记录代码1

2019独角兽企业重金招聘Python工程师标准>>> 1、页面返回 <a class"retrun-btn" id"returnclick" href"">返回></a> 对应的javascript为&#xff1a; $(function(){ $("#returnclick").click(function(){ h…

如何开放 Azure 虚拟机 Ping 功能

前言 文章《使用 PsPing & PaPing 进行 TCP 端口连通性测试》中提到&#xff0c;ICMP 协议的数据包无法通过 Azure 的防火墙和负载均衡器&#xff0c;所以不能直接使用 Ping 来测试 Azure 中的虚拟机和服务的连通性。实际上&#xff0c;我们仍然能够通过一些特殊设置&#…