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ą
- 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 🙂
- 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
A jak to wygląda z licencja Mikrotika? Dostep tylko przez 60 minut?
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
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 🙂
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.