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.

  • Domowa sieć IP to 192.168.1.0/24.
  • Sieć wirtualna w Windows Azure to 172.16.0.0/16.
  • Domowy router jest podłączony do Internetu z publicznym adresem IP.
  • Domowy router od strony LANu ma adres 192.168.1.1
  • Serwery testowe są w sieci domowej.
  • Vyatta posiada tylko jedną kartę sieciową.
  • Vyatta ma adres 192.168.1.3

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

  • Instalacja Vyatty i konfiguracja adresu IP oraz włączenie SSH.
  • Konfiguracja przekierowania portów potrzebnych dla IPSec na domywam routerze na Vyattę.
  • Konfiguracja statycznego VPN w Azure.
  • Konfiguracja VPN w Vyatta.
  • Konfiguracja routingu.

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:

[sourcecode language="plain"]configrue[/sourcecode]

Rozpoczynamy od konfiguracji ogólnych ustawień IPSec:

[sourcecode language="plain"]set vpn ipsec disable-uniqreqids
set vpn ipsec ipsec-interfaces interface eth0
set vpn ipsec nat-traversal enable
[/sourcecode]

Teraz konfiguracja ESP:

[sourcecode language="plain"]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
[/sourcecode]

Konfiguracja IKE:

[sourcecode language="plain"]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
[/sourcecode]

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

Adres IP bramy w Azure

[sourcecode language="plain"]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
[/sourcecode]

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:

[sourcecode language="plain"]set vpn ipsec site-to-site peer <AzureIP> authentication pre-shared-secret <klucz do uwierzytelnienia>[/sourcecode]

Pozostaje tylko zapisać konfigurację Vyatty.

[sourcecode language="plain"]commit
save[/sourcecode]

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:

  • Skonfigurować routing statyczny na maszynach, które mają dostawać się do Azure.
  • Skonfigurować routing statyczny na domowym routerze.

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

[sourcecode language="plain"]
route add 172.16.0.0 mask 255.255.0.0 192.168.1.3 –p
[/sourcecode]

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