برنامه نویسی

پیکربندی آدرس های IP عمومی در Azure

شبکه‌های مجازی Azure از آدرس‌های IP خصوصی استفاده می‌کنند که در شبکه‌های عمومی قابل مسیریابی نیستند. برای فعال کردن شبکه‌های پشتیبانی که در محیط‌های Azure و on-prem وجود دارند، باید آدرس‌دهی IP را برای هر دو شبکه پیکربندی کنیم.

آدرس‌های IP عمومی به منابع موجود در اینترنت اجازه می‌دهند با Azure ارتباط برقرار کنند و همچنین ارتباط خروجی را برای منابع Azure به سرویس‌های عمومی در اینترنت فعال می‌کنند. در Azure می‌توانیم آدرس‌های IP عمومی ایجاد کرده و آنها را به منابع خاصی اختصاص دهیم.

در این مقاله، در مورد اینکه آدرس‌های IP عمومی چیست، چگونه می‌توانیم آدرس‌های IP پویا و استاتیک را تخصیص دهیم (و زمانی که از یکی بر دیگری استفاده می‌کنیم) صحبت خواهم کرد و سپس با مثالی از پیکربندی یک IP عمومی پایان می‌دهم. آدرس برای Azure Bastion که می توانیم برای اتصال به VM از آن استفاده کنیم.

[!NOTE]بهتر است با استفاده از Azure Bastion به Azure VM متصل شوید تا پورت 3389 را برای اتصالات RDP فعال کنید. من به جزئیات Azure Bastion برای این پست وبلاگ نمی پردازم، اما از یک آدرس IP عمومی برای آن استفاده می کنیم تا بتوانیم بدون نیاز به باز کردن پورت 3389 به VM خود متصل شویم. در اینجا درباره Azure Bastion بیشتر بدانید.

آدرس های IP عمومی در Azure چیست؟

آدرس های IP عمومی توسط منابع اینترنتی برای برقراری ارتباط ورودی به منابع در Azure استفاده می شود. ما می توانیم آدرس های IP عمومی را با آدرس IPv4 یا IPv6 ایجاد کنیم. آنها می توانند به صورت ایستا یا پویا تخصیص داده شوند و در هر دو موجود هستند اساسی یا استاندارد SKU ها

[!NOTE]IPهای عمومی عمومی SKU در 30 سپتامبر 2025 بازنشسته خواهند شد. من عمداً یک آدرس IP عمومی استاندارد SKU ایجاد می کنم تا نمونه ای که بعداً ایجاد خواهیم کرد قدیمی نشود. اما اگر در حال خواندن این مطلب هستید و از Basic SKU برای IP های عمومی استفاده می کنید، اطلاعیه رسمی را بررسی کنید و راهنمای ارتقا یک آدرس IP عمومی عمومی به یک استاندارد را بررسی کنید.

ما می توانیم منابع آدرس IP عمومی را با انواع منابع مختلف Azure، مانند ماشین های مجازی، متعادل کننده بار عمومی، دروازه های برنامه Azure و غیره مرتبط کنیم.

آدرس های IP عمومی پویا در مقابل استاتیک

آدرس های IP عمومی دارای دو نوع تخصیص هستند، ایستا یا پویا.

آدرس های IP استاتیک – این یک آدرس اختصاص داده شده است که در طول عمر منبع IP عمومی تغییر نمی کند. وقتی یک IP ثابت ایجاد می کنیم، نمی توانیم آدرس IP واقعی را که به منبع آدرس IP عمومی اختصاص داده می شود، تعیین کنیم، زیرا Azure آدرس IP را از مجموعه ای از آدرس های IP موجود در منطقه Azure که منبع IP ایجاد شده است اختصاص می دهد. در

آدرس های IP پویا – اینها آدرس هایی هستند که در طول عمر منبع IP عمومی تغییر می کنند. آدرس IP پویا زمانی تخصیص داده می شود که آن را با یک منبع مرتبط می کنید و با توقف یا حذف آن منبع آزاد می شود. به عنوان مثال، اگر آدرس IP پویا را به یک ماشین مجازی اختصاص دهید، زمانی که آن VM را متوقف کنید، این آدرس منتشر می شود. در هر منطقه Azure، آدرس های IP عمومی از یک مجموعه منحصر به فرد از آدرس ها اختصاص داده می شود.

پیشوندهای آدرس IP عمومی

اگر بخواهیم یک آدرس IP عمومی ثابت از یک محدوده شناخته شده اختصاص دهیم، می توانیم از پیشوندهای آدرس IP عمومی برای این کار استفاده کنیم. هر آدرسی که از پیشوند ایجاد می کنیم را می توان به هر منبع Azure که می خواهیم از یک آدرس IP عمومی استاندارد برای آن استفاده کنیم، اختصاص داد.

هنگامی که آدرس IP عمومی فردی را حذف می کنیم، به محدوده معکوس برمی گردد که بعداً می توانیم از آن استفاده کنیم. هر آدرس IP در پیشوند آدرس IP عمومی ما برای استفاده ما رزرو می شود تا زمانی که پیشوند را حذف کنیم.

ما می توانیم اندازه های پیشوند زیر را اختصاص دهیم:

  • /28 (IPv4) یا /124 (IPv6) = 16 آدرس
  • /29 (IPv4) یا /125 (IPv6) = 8 آدرس
  • /30 (IPv4) یا /126 (IPv6) = 4 آدرس
  • /31 (IPv4) یا /127 (IPv6) = 2 آدرس

فرض کنید ماشین های مجازی Azure دارید که می خواهید یک IP عمومی را با آنها مرتبط کنید. می‌توانید کل پیشوند را با یک قانون فایروال اضافه کنید، بنابراین همانطور که مقدار ماشین‌های مجازی را در Azure مقیاس می‌کنید، می‌توانید IPها را از همان پیشوند مرتبط کنید. این به سربار مدیریت در هنگام اضافه کردن آدرس های IP کمک می کند!

همانطور که گفته شد، در حالی که می توانید مشخص کنید کدام IP را از پیشوند می خواهید، در واقع نمی توانید مجموعه ای از آدرس های IP را برای پیشوند مشخص کنید. شما فقط اندازه پیشوند را ارائه می دهید و Azure آدرس های IP را برای پیشوندها بر اساس آن می دهد.

همچنین باید آدرس های IP عمومی را از پیشوند در همان منطقه Azure و اشتراک پیشوند ایجاد کنیم و به منابع در همان منطقه و اشتراک اختصاص دهیم.

پیکربندی یک آدرس IP عمومی برای Azure Bastion با استفاده از Bicep

بیایید دستمان را کثیف کنیم و یک آدرس IP Static عمومی ایجاد کنیم که می توانیم برای میزبان Azure Bastion از آن برای اتصال به ماشین مجازی استفاده کنیم.

توضیحات تصویر

اگر می خواهید دنبال کنید، به موارد زیر نیاز دارید:

برای شروع، ما به یک گروه منبع نیاز داریم تا VNET خود را در آن مستقر کنیم. ما می توانیم با استفاده از دستور AZ CLI زیر این کار را انجام دهیم:

az group create --name  --location 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اولین چیزی که نیاز داریم ایجاد یک شبکه مجازی با دو زیرشبکه است. یکی برای ماشین مجازی و دیگری برای میزبان Bastion:

param vmName string = 'vmprodaewv001'
param location string = resourceGroup().location

var addressPrefix = '10.0.0.0/16'
var vmSubnetPrefix = '10.0.0.0/24'
var bastionSubnetPrefix = '10.0.1.0/24'
var vnetName="vnet-prod-ae-wv-001"
var vmSubnetName="VMSubnet"
var bastionSubnetName="AzureBastionSubnet"

resource vnet 'Microsoft.Network/virtualNetworks@2024-05-01' = {
    name: vnetName
    location: location
    properties: {
        addressSpace: {
            addressPrefixes: [
                addressPrefix
            ]
        }
        subnets: [
            { 
                name: vmSubnetName
                properties: {
                    addressPrefix: vmSubnetPrefix
                }
            }
            {
                name: bastionSubnetName
                properties: {
                    addressPrefix: bastionSubnetPrefix
                }
            }
        ]
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

[!NOTE]هنگام نامگذاری زیر شبکه برای میزبان Azure Bastion خود، باید آن را فراخوانی کنید AzureBastionSubnet، در غیر این صورت استقرار با شکست مواجه خواهد شد.

اکنون می توانیم VM و NIC (رابط شبکه) ایجاد کنیم:

param vmName string = 'vmprodaewv001'
param adminUsername string = ''
param adminPassword string = ''

var nicName="nic-prod-ae-wv-001"
var vmSize="Standard_DS1_v2"

resource nic 'Microsoft.Network/networkInterfaces@2024-05-01' = {
    name: nicName
    location: location
    properties: {
        ipConfigurations: [
            {
                name: 'ipconfig1'
                properties: {
                    subnet: {
                        id: vnet.properties.subnets[0].id
                    }
                    privateIPAllocationMethod: 'Dynamic'
                }
            }
        ]
    }
}

resource vm 'Microsoft.Compute/virtualMachines@2024-07-01' = {
    name: vmName
    location: location
    properties: {
        hardwareProfile: {
            vmSize: vmSize
        }
        osProfile: {
            computerName: vmName
            adminUsername: adminUsername
            adminPassword: adminPassword
        }
        networkProfile: {
            networkInterfaces: [
                {
                    id: nic.id
                }
            ]
        }
        storageProfile: {
            imageReference: {
                publisher: 'MicrosoftWindowsServer'
                offer: 'WindowsServer'
                sku: '2019-Datacenter'
                version: 'latest'
            }
            osDisk: {
                createOption: 'FromImage'
            }
        }
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا، ما یک رابط شبکه ایجاد می کنیم و سپس آن را به VM متصل می کنیم. برای رابط شبکه خود، ما به زیرشبکه ماشین مجازی در شبکه مجازی خود ارجاع می دهیم و سپس از تخصیص IP خصوصی پویا برای آن استفاده می کنیم.

ما به خودی خود دسترسی عمومی برای VM نمی‌خواهیم، ​​آن را از طریق Bastion فعال می‌کنیم:

var publicIpName="pip-prod-ae-wv-001"
var bastionHostName="bastion-prod-ae-wv-001"

resource publicIP 'Microsoft.Network/publicIPAddresses@2024-05-01' = {
    name: publicIpName
    location: location
    sku: {
        name: 'Standard'
    } 
    properties: {
        publicIPAllocationMethod: 'Static'
    }
}

resource bastionHost 'Microsoft.Network/bastionHosts@2024-05-01' = {
    name: bastionHostName
    location: location
    properties: {
        ipConfigurations: [
            {
                name: 'bastionIpConfig'
                properties: {
                    subnet: {
                        id: vnet.properties.subnets[1].id
                    }
                    publicIPAddress: {
                        id: publicIP.id
                    }
                }
            }
        ]
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این بلوک کد، یک منبع آدرس IP عمومی با یک روش تخصیص استاتیک و یک SKU استاندارد تعریف می کنیم. این بدان معنی است که آدرس IP در طول عمر منبع IP عمومی یکسان خواهد ماند. سپس Bastion Host خود را ایجاد می کنیم و آن را پیکربندی می کنیم تا در ما مستقر شود AzureBastionSubnet با آدرس IP عمومی ما برای آن فعال شده است.

می‌توانیم قالب را با استفاده از دستور AZ CLI زیر مستقر کنیم:

az deployment group create --resource-group  --template-file .\main.bicep
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هنگامی که قالب ما مستقر شد، می توانیم به Bastion Host خود برویم و ببینیم که منبع آدرس IP عمومی ما به آن اختصاص داده شده است:

توضیحات تصویر

با پیمایش به منبع IP عمومی ما، می‌توانیم ببینیم که با منبع Bastion ما مرتبط است:

توضیحات تصویر

اکنون تنها کاری که باید انجام دهیم این است که به VM خود برویم و از طریق Bastion به آن متصل شویم. زیر اتصال در منبع VM خود، روی سنگر. باید ببینید که نمونه Bastion شما برای این ماشین مجازی پیکربندی شده است و می توانید با استفاده از نام کاربری و رمز عبور آن به VM متصل شوید.

توضیحات تصویر

از آنجایی که آدرس IP عمومی برای میزبان Bastion پیکربندی شده است، شما آن را به جای VM برای اتصالات خروجی در دسترس قرار می دهید. اگر تلاش ما برای ورود موفقیت آمیز بود، باید بتوانیم به ماشین مجازی خود دسترسی داشته باشیم:

توضیحات تصویر

اگر می خواهید پس از اتمام کار، منابع خود را پاکسازی کنید، کافی است گروه منابع را با استفاده از این دستور AZ CLI حذف کنید:

az group delete --name 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بسته شدن

امیدواریم درک بهتری از آدرس های IP عمومی در Azure و نحوه کار آنها داشته باشید. اگر می خواهید نگاهی به کدی که در این پست از آن عبور کردیم بیاندازید، لطفاً آن را در GitHub من بررسی کنید.

اگر در این مورد سؤالی دارید، لطفاً به یکی از آنها پاسخ دهید در زیر نظر دهید یا در BlueSky با من تماس بگیرید! اگر فقط می‌خواهید به کد این پست وبلاگ نگاه کنید، آن در GitHub من است!

تا دفعه بعد، کد نویسی مبارک! 🤓🖥️

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا