Połączenie VPN między Windows Azure a domowym laboratorium

Windows Azure Logo

Jedną z funkcjonalności jaką udostępnia Windows Azure jest możliwość połączenia lokalnej sieci firmowej z wirtualną siecią zlokalizowaną w chmurze. Połączenie realizowane jest za pomocą VPN Site to Site (S2S) przy wykorzystaniu szyfrowania opartego o IPSec. Microsoft w dokumentacji do Windows Azure wskazał listę oficjalnie wspieranych urządzeń i oprogramowania, dzięki którym możliwe jest zestawienie tunelu VPN. Lista ta znajduje się pod tym adresem: lista urządzeń. Pomimo kilkunastu pozycji na tej liście, ich dostępność i wykorzystanie w domowej sieci jest mało opłacalne i osiągalne. Dodatkowo, urządzenie takie musi zostać umieszczone na brzegu naszej domowej sieci i uzyskać nasz publiczny adres IP. W większości przypadków wiązałoby się to z zastąpieniem obecnego urządzenia.

Rozwiązanie problemu

Rozwiązaniem problemu jest oprogramowanie Vyatta. Miałem już okazję pisać o prostym zastosowaniu Vyatty w labie – WIRTUALNY ROUTER W LABIE, CZYLI INSTALACJA I PODSTAWOWA KONFIGURACJA VYATTY NA HYPER-V. W poprzednim wpisie znajdziecie informację jak ją zainstalować i skonfigurować podstawowe parametry.

Schemat sieci

Powyżej schemat przedstawia sieć, dla jakiej będzie opisana poniższa konfiguracja Vyatty.

Konfiguracja będzie składać się z następujących kroków:

Instalacja Vyatty

Pierwszym krokiem będzie przygotowanie maszyny wirtualnej z wirtualnym routerem i oraz jego  podstawowa konfiguracja. Odsyłam do mojego poprzedniego wpisu jak to zrealizować - WIRTUALNY ROUTER W LABIE, CZYLI INSTALACJA I PODSTAWOWA KONFIGURACJA VYATTY NA HYPER-V. Z tamtego wpisu pomijamy konfigurację dodania drugiej karty sieciowej, natowania oraz konfigurację serwera DHCP. Wystarczy tylko jedna karta sieciowa z adresem sieci domowej i włączenie SSH.

Kiedy mamy gotową Vyattę czas na domowy router. Na routerze należy przekierować porty 50, 500 oraz 4500 na adres IP Vyatta. Poniżej zrzut konfiguracji przekierowania portów z mojego routera NETGEAR JNR300.

Przekierowanie portów do IPSec na Netgear JNR3000

Konfiguracja Windows Azure

Konfigurację statycznego VPN( Static routing VPNs) po stronie Azure dokonujemy zgodnie z dokumentację dostępną tutaj. Kiedy skonfigurujemy po stronie Azure VPN trzeba odczekać około 15 minut na jego stworzenie.

Konfiguracja Vyatta

Czas teraz na Vyattę. Logujemy się do niej po SSH za pomocą putty lub innego klienta i dokonujemy konfiguracji. Przechodzimy do trybu konfiguracji na Vyatta:

configrue

Rozpoczynamy od konfiguracji ogólnych ustawień IPSec:

set vpn ipsec disable-uniqreqids  
set vpn ipsec ipsec-interfaces interface eth0  
set vpn ipsec nat-traversal enable  

Teraz konfiguracja ESP:

set vpn ipsec esp-group esp-azure lifetime 3600  
set vpn ipsec esp-group esp-azure pfs disable  
set vpn ipsec esp-group esp-azure proposal 1 encryption aes256  
set vpn ipsec esp-group esp-azure proposal 1 hash sha1  

Konfiguracja IKE:

set vpn ipsec ike-group ike-azure lifetime 28800  
set vpn ipsec ike-group ike-azure proposal 1 dh-group 2  
set vpn ipsec ike-group ike-azure proposal 1 encryption aes256  
set vpn ipsec ike-group ike-azure proposal 1 hash sha1  

Teraz konfiguracja samego połączenia z Azure. W polecaniach to adres IP bramy w Azure. Adres IP uzyskamy z portalu, z miejsca gdzie konfigurowaliśmy wirtualną sieć.

Adres IP bramy w Azure

set vpn ipsec site-to-site peer <AzureIP>  
set vpn ipsec site-to-site peer <AzureIP> connection-type respond  
set vpn ipsec site-to-site peer <AzureIP> default-esp-group esp-azure  
set vpn ipsec site-to-site peer <AzureIP> ike-group ike-azure  
set vpn ipsec site-to-site peer <AzureIP> local-address 192.168.1.3  
set vpn ipsec site-to-site peer <AzureIP> tunnel 1 local prefix 192.168.1.0/24  
set vpn ipsec site-to-site peer <AzureIP> tunnel 1 remote prefix 172.16.0.0/16  

W ostatniej linijce zdefiniowaliśmy adres wirtualnej sieci w Azure. Ważne jest, aby podać cały adres sieci wirtualnej, a nie tylko jednej z utworzonych podsieci w ramach Azure, ponieważ połączenie IPSec nie zadziała.

Ostatnim poleceniem do wykonania przy konfiguracji VPNu jest podanie współdzielonego klucza do uwierzytelnienia połączenia IPSec. Klucz uzyskujemy z tej samej strony, co adres IP bramy Azure.

VPN shared key

Kiedy mamy już klucz możemy go wprowadzić do konfiguracji:

set vpn ipsec site-to-site peer <AzureIP> authentication pre-shared-secret <klucz do uwierzytelnienia>

Pozostaje tylko zapisać konfigurację Vyatty.

commit

W moim przypadku cała konfiguracja VPN wygląd następująco:

vpn {
 ipsec {
  disable-uniqreqids
  esp-group esp-azure {
   lifetime 3600
   pfs disable
   proposal 1 {
    encryption aes256
    hash sha1
   }
  }
  ike-group ike-azure {
   lifetime 28800
   proposal 1 {
    dh-group 2
    encryption aes256
    hash sha1
   }
  }
  ipsec-interfaces {
   interface eth0
  }
  nat-traversal enable
  site-to-site {
   peer 137.117.241.21 {
    authentication {
     pre-shared-secret ncyj3RF1E3uYA95zRmfqzLWJo6RhiA6p
    }
    connection-type respond
    default-esp-group esp-azure
    ike-group ike-azure
    local-address 192.168.1.3
    tunnel 1 {
     local {
      prefix 192.168.1.0/24
     }
     remote {
      prefix 172.16.0.0/16
     }
    }
   }
  }
 }
}

Po stronie Vyatty możemy sprawdzić stan połączenia za pomocą polecenia show vpn ipsec sa.

Jeżeli wszystko skonfigurowaliśmy dobrze to wynik polecenia będzie następujący dla powyższej konfiguracji:

Peer ID / IP                            Local ID / IP

------------                            -------------

137.117.241.21                          192.168.1.3

Tunnel  State  Bytes Out/In   Encrypt  Hash  NAT-T  A-Time  L-Time  Proto

------  -----  -------------  -------  ----  -----  ------  ------  -----

1       up     9.5K/9.6K      aes256   sha1  yes    1201    3600    all

Szczegółowe logi IPSec są dostępne z polecenia show log vpn ipsec.

Po stronie Azure po prawidłowym połączniu będziemy mogli zobaczyć taki widok:

Udane połączenie do azure

Ostatnim krokiem jest konfiguracja routingu w sieci domowej. Ponieważ Vyatta nie jest bramą domyślaną dla urządzeń w sieci lokalnej trzeba skonfigurować routing do Azure przez nią. Możemy dokonać tego na dwa sposoby:

Opcja pierwsza wymaga konfiguracji na każdym z urządzeń. W systemach Windows dokonamy tego poleceniem:

route add 172.16.0.0 mask 255.255.0.0 192.168.1.3 –p  

Drugą możliwością jest ustawienie statycznego routingu na domowym routerze. Większość urządzeń dedykowanych do domowych sieci pozwala na realizację takiej konfiguracji. Pozwoli to na dostęp wszystkich urządzeń w sieci lokalnej do wirtualnej sieci w Windows Azure.

Poniżej zrzut konfiguracji z mojego routera NETGEAR JNR300.

Statyczny routing na Netgear JNR3000