Mikrotik w Azure – step by step

Pokażę Wam dziś jak uruchomić router Mikrotik w Azure, aby móc za jego pomocą np. wystawić VPN SSTP dla maszyn wirtualnych w Azure, bądź też wykorzystać go jako VPN Site-to-Site.

Do uruchomienia środowiska potrzebujemy obraz systemu Mikrotik dla Hyper-V, w tym celu pobieramy ze strony https://mikrotik.com/download aktualny obraz systemu CHR w formacie VHDX (polecam wydanie “current”).

Definiujemy zmienne dla Azure, w naszym scenariuszu przyjąłem iż posiadamy już konto Storage w Azure, sieć VNET i w niej dwa SubNety.

Logujemy się do naszej subskrypcji i wybieramy właściwą, do której będziemy dodawać maszynę. Oczywiście w miejsce gwiazdek wpisujemy własny numer subskrypcji. Poprawiamy też ścieżkę do pliku VHDX (pliku jeśli nie mamy – to zmieniamy ją analogicznie – skrypt dokona konwersji), podajemy nazwy sieci, region, rozmiar VM itp.

Login-AzureRmAccount
$SubscriptionId = "********-****-****-****-************"
$MikrotikVHDX = "C:\Downloads\chr-6.39.2.vhdx"
$MikrotikVHD = "C:\Downloads\chr-6.39.2.vhd"
$ResourceGroup = "Mikrotik"
$Location = "northeurope"
$VNETName = "vnet-northeurope01"
$SubnetName_eth0 = "northeurope01-dmz"
$SubnetName_eth1 = "northeurope01-pvt"
$VMName = "Mikrotik"
$VMSize = "Basic_A1"
$StorageAccountName = "nazwakontastorage"
Select-AzureRmSubscription -SubscriptionId $SubscriptionId

Nasz skrypt automatycznie dokona konwersji pliku VHDX na VHD, oraz utworzy brakującą grupę zasobów (ResourceGroup)


if ( ( Test-Path -Path $MikrotikVHD ) -eq $false )
{
 Convert-VHD -Path $MikrotikVHDX -DestinationPath $MikrotikVHD -VHDType Fixed
}

if ( ( Get-AzureRmResourceGroup -Name $ResourceGroup -ErrorAction SilentlyContinue ) -eq $null )
{
 Write-Host "Create Resource Group $ResourceGroup"
 New-AzureRmResourceGroup -Name $ResourceGroup -Location $Location
}

Wybieramy sieć VNET oraz dwa Subnety. Oczywiście jeśli potrzebujesz możesz dodać ich więcej – i tym samym dodać więcej kart sieciowych, sprawdź jednak czy wybrany rozmiar VM wspiera więcej kart sieciowych niż dwie (https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sizes-general).

Tworzymy też adres publiczny dla naszego routera. Adres może być dynamiczny jeśli połączenia będziemy nawiązywać z Azure. W przeciwnym wypadku musisz wybrać adres statyczny, bowiem ten może się zmienić po restarcie usługi.

# Select VNET
$VNET = Get-AzureRmVirtualNetwork | Where-Object { $_.Name -like $VNETName }

# Select Subnets
$Subnet_ether1 = Get-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $VNET -Name $SubnetName_ether1
$Subnet_ether2 = Get-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $VNET -Name $SubnetName_ether2

# Create Public IP
$PublicIP = New-AzureRmPublicIpAddress -ResourceGroupName $ResourceGroup -Location $Location -AllocationMethod Dynamic -IdleTimeoutInMinutes 4 -Name "mt$(Get-Random)"

Kolejny krok to ustawienie firewall dla usługi. W podanym przykładzie ustawiam go tylko dla ruchu przychodzącego z Internetu do Mikrotika. Domyślnie włączyłem port 8291 (Winbox) oraz 80, oczywiście Ty możesz włączyć/wyłączyć inne porty. Jeśli Mikrotika będziesz chciał wykorzystać w ramach serwera VPN Point-2-Site pamiętaj by otworzyć też porty odpowiednie dla usług (np. 443 dla SSTP).

Zwróć też uwagę na parametr -EnableIPForwarding – jest on niezbędnymy Mikrotik mógł przesyłać pakiety dalej (jako Router).

# Create an inbound network security group rule for port 8291
$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig -Name MikrotikManage -Protocol Tcp -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 8291 -Access Allow
# Create an inbound network security group rule for port 80
$nsgRuleWeb = New-AzureRmNetworkSecurityRuleConfig -Name MikrotikWWW -Protocol Tcp -Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 80 -Access Allow

# Create a network security group
$nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $ResourceGroup -Location $Location -Name Mikrotik_NSG -SecurityRules $nsgRuleRDP,$nsgRuleWeb

# Create a virtual network card and associate with public IP address and NSG
$nic_ether1 = New-AzureRmNetworkInterface -Name ether1 -ResourceGroupName $ResourceGroup -Location $Location -SubnetId $Subnet_ether1.Id -PublicIpAddressId $PublicIP.Id -NetworkSecurityGroupId $nsg.Id -EnableIPForwarding
# Create additional virtual network card
$nic_ether2 = New-AzureRmNetworkInterface -Name ether2 -ResourceGroupName $ResourceGroup -Location $Location -SubnetId $Subnet_ether2.Id -EnableIPForwarding

Wgrywamy obraz systemu do Azure do konta Storage

# Upload VHD do Storage Account
$StorageAccount = Get-AzureRmStorageAccount | Where-Object { $_.StorageAccountName -like $StorageAccountName }
$urlOfUploadedVhd = "https://"+$StorageAccountName+".blob.core.windows.net/vhds/"+$(Split-Path $MikrotikVHD -Leaf)
Add-AzureRmVhd -ResourceGroupName $StorageAccount.ResourceGroupName -LocalFilePath $MikrotikVHD -Destination $urlOfUploadedVhd

I tworzymy właściwą maszynę wirtualną.

# Prepare VM Config
$vm = New-AzureRmVMConfig -VMName $VMName -VMSize $VMSize

# Add NIC
$vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nic_ether1.Id -Primary
$vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nic_ether2.Id

# Attach Disk
$vm = Set-AzureRmVMOSDisk -VM $vm -Name "MT_OS" -VhdUri $urlOfUploadedVhd -Caching ReadWrite -CreateOption Attach -Linux
$vm.OSProfile = $null

# Create the new VM
New-AzureRmVM -ResourceGroupName $ResourceGroup -Location $Location -VM $vm -Verbose

Po kilku-kilkunastu minutach powinniśmy móc zalogować się poprzez WinBox do nowego routera. Pamiętaj o zmianie hasła na początku 🙂

Dodatkowe informacje

Kilka osób mnie o to pytało – zarówno na blogu jak i na FB co z licencją

  1. Po pierwsze – bo to ważne. Na dzień pisania artykułu – Mikrotik nie ma wsparcia ze strony MS w Azure. Co oznacza, że jeśli działa to ok, ale jak nie działa to MS nie pomoże… i kropka 🙂
  2. Mikrotik w wersji CHR (a ta może być wirtualizowana) jest dostępny w czterech planach licencyjnych, które w praktyce różnią się przepustowością interfejsów sieciowych:
    License Speed limit Price
    Free 1Mbit FREE
    P1 1Gbit $45
    P10 10Gbit $95
    P-Unlimited Unlimited $250

    https://wiki.mikrotik.com/wiki/Manual:CHR#Hyper-V

 

Post Author: chris

4 thoughts on “Mikrotik w Azure – step by step

    dzejzipl

    (2017-06-15 - 15:30)

    A jak to wygląda z licencja Mikrotika? Dostep tylko przez 60 minut?

      chris

      (2017-06-16 - 11:23)

      1. rozwiązanie nie jest formalnie wspierane przez MS – mam nadzieję, że wkrótce się to zmieni bo jest też dostępne na AWS.
      2. licencje dla MT są czterech typów – ograniczeniem jest przepustowość urządzenia, za FREE mamy 1mbps
      https://wiki.mikrotik.com/wiki/Manual:CHR#CHR_Licencing

    Michal

    (2019-03-12 - 12:02)

    Masz bląd. W linii parametrów zamiast $SubnetName_eth0 = “northeurope01-dmz”
    $SubnetName_eth1 = “northeurope01-pvt” powinno być zmienne $SubnetName_ether1 = “northeurope01-dmz”
    $SubnetName_ether2 = “northeurope01-pvt”. Dobry wpis 🙂

    Mateusz

    (2019-07-26 - 15:46)

    Najnowsza wersja CHR u mnie wymagała zalogowania się przez serial console i wykonania komendy “/system reset-configuration”. Dopiero wtedy mogłem zalogować sie przez WinBox.

Dodaj komentarz

This site uses Akismet to reduce spam. Learn how your comment data is processed.