Как подключить linux box к лазурному межсетевому шлюзу?

Первоначальной попыткой было попытаться использовать общий доступ к интернет-соединению и выделить компьютер для внешнего интерфейса Linux (только для пересылки большого количества портов), но общий доступ к соединению не работает при подключении к лазеру VPN (я пробовал Windows). 10, и win2008R2 пока).

Я также не могу найти программное обеспечение VPN для Linux, которое поддерживает необходимые протоколы.

3 ответа

Возможно подключить Linux к Azure P2S, используя strongSwan (IKEv2). Microsoft просто не заморачивается этим вопросом и настаивает на прохождении курса "P2S для Linux не поддерживается" (это то, что они ответили мне в билетах поддержки). Вот как вы можете настроить IKEv2 на основе аутентификации сертификатов.

Установить зависимости

Вот необходимые пакеты для Ubuntu:

apt-get install strongswan-ikev2 strongswan-plugin-eap-tls
# in Ubuntu 16.04 install libstrongswan-standard-plugins for p12 keypair container support
apt-get install libstrongswan-standard-plugins

Если вы установите libstrongswan-extra-plugins пакет в Ubuntu 16.04, он сломает strongSwan. Этот пакет содержит af-alg, ctr а также gcrypt плагины и они конфликтуют с openssl плагин. В этом случае вы должны удалить libstrongswan-standard-plugins пакет, содержащий openssl плагин или отключить openssl плагин:

sudo sed -i 's/\sload =.*/ load = no/g' /etc/strongswan.d/charon/openssl.conf

или же af-alg, ctr а также gcrypt плагины:

sudo sed -i 's/\sload =.*/ load = no/g' /etc/strongswan.d/charon/{af-alg,ctr,gcrypt}.conf

Генерация ключей и сертификатов

Сначала вы должны сгенерировать свой собственный ЦС, затем необходимо сгенерировать сертификат пользователя с расширением альтернативного имени субъекта (SAN) X509v3 ( FAQ по strongSwan), которое должно соответствовать общему имени субъекта сертификата (CN). Т.е. справка с CN=client предмет должен содержать DNS:client SAN. Это позволит вам указать личность EAP без CN= префикс в сильном зване. По умолчанию strongSwan передает полную тему сертификата как идентификатор EAP, но шлюз Azure VPN не поддерживает это. Вы можете прочитать больше об истории CN против SAN: http://unmitigatedrisk.com/?p=381.

# Generate CA
ipsec pki --gen --outform pem > caKey.pem
ipsec pki --self --in caKey.pem --dn "CN=VPN CA" --ca --outform pem > caCert.pem
# Print CA certificate in base64 format, supported by Azure portal. Will be used later in this document.
openssl x509 -in caCert.pem -outform der | base64 -w0 ; echo

# Generate user's certificate and put it into p12 bundle.
export PASSWORD="password"
export USERNAME="client"
ipsec pki --gen --outform pem > "${USERNAME}Key.pem"
ipsec pki --pub --in "${USERNAME}Key.pem" | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "CN=${USERNAME}" --san "${USERNAME}" --flag clientAuth --outform pem > "${USERNAME}Cert.pem"
# Generate p12 bundle
openssl pkcs12 -in "${USERNAME}Cert.pem" -inkey "${USERNAME}Key.pem" -certfile caCert.pem -export -out "${USERNAME}.p12" -password "pass:${PASSWORD}"

Затем откройте портал Azure, найдите свой "Виртуальный сетевой шлюз" и на его странице конфигурации "точка-сайт" в разделе " Корневые сертификаты " вставьте кодированный в base64 CA, напечатанный выше.

Настроить клиент

Нажмите кнопку " Скачать VPN-клиент" на странице конфигурации "точка-сайт" шлюза, затем разархивируйте VpnServerRoot.cer CA из загруженного ZIP-архива:

sudo unzip -j downloaded.zip Generic/VpnServerRoot.cer -d /etc/ipsec.d/cacerts

Вы можете проверить это с помощью команды ниже:

openssl x509 -inform der -in /etc/ipsec.d/cacerts/VpnServerRoot.cer -text -noout

Затем распакуйте DNS сервер DNS:

$ unzip -p downloaded.zip Generic/VpnSettings.xml | grep VpnServer
  <VpnServer>azuregateway-00112233-4455-6677-8899-aabbccddeeff-aabbccddeeff.cloudapp.net</VpnServer>

Используйте значение VpnServer для right значение и для rightid значение с префиксом % в ipsec.conf ниже.

Затем скопируйте пользовательский пакет p12 в соответствующий каталог:

sudo cp client.p12 /etc/ipsec.d/private/

Используйте следующее /etc/ipsec.conf конфигурация:

config setup

conn azure
  keyexchange=ikev2
  type=tunnel
  leftfirewall=yes
  left=%any
  leftauth=eap-tls
  leftid=%client # use the DNS alternative name prefixed with the %
  right=azuregateway-00112233-4455-6677-8899-aabbccddeeff-aabbccddeeff.cloudapp.net # Azure VPN gateway address
  rightid=%azuregateway-00112233-4455-6677-8899-aabbccddeeff-aabbccddeeff.cloudapp.net # Azure VPN gateway address, prefixed with %
  rightsubnet=0.0.0.0/0
  leftsourceip=%config
  auto=add

а также /etc/ipsec.secrets содержание:

: P12 client.p12 'password' # key filename inside /etc/ipsec.d/private directory

Затем перезапустите ipsec, чтобы перечитать конфигурацию и запустить туннель:

sudo ipsec restart
sudo ipsec up azure

Выпуск MTU/MSS

VPN-клиент IPsec может испытывать проблемы с подключением из-за высоких значений MTU/MSS и фрагментации IKE. Чтобы решить эту проблему, вы должны явно установить значение 1350 для MTU/MSS или kernel-netlink strongSwan-х charon конфигурация (эта конфигурация работает только в версии strongSwan >= 5.2.1). Установить mtu а также mss значения внутри /etc/strongswan.d/charon/kernel-netlink.conf конфигурационный файл:

mss = 1350
mtu = 1350

и перезапустите туннель:

sudo ipsec restart
sudo ipsec up azure

Общий доступ к соединению не работает при подключении к Azure VPN (я пробовал Windows 10 и Win2008R2 до сих пор).

Мы не можем использовать Azure P2S VPN таким образом.

ICS направляет пакеты TCP/IP из небольшой локальной сети в Интернет. ICS сопоставляет отдельные IP-адреса локальных компьютеров с неиспользуемыми номерами портов в стеке TCP/IP. Из-за природы NAT, IP-адреса на локальном компьютере не видны в Интернете. Все пакеты, покидающие или входящие в ЛВС, отправляются с или на IP-адрес внешнего адаптера на хост-компьютере ICS.

Azure P2S VPN, используется для создания безопасного подключения к виртуальной сети Azure с отдельного клиентского компьютера. После подключения Azure VPN хост-компьютер ICS получит IP-адреса адресов в пуле адресов VPN-клиентов "точка-сайт", которые вы указали в своей конфигурации. Результаты должны быть примерно такими:

 PPP adapter VNet1:
     Connection-specific DNS Suffix .:
     Description.....................: VNet1
     Physical Address................:
     DHCP Enabled....................: No
     Autoconfiguration Enabled.......: Yes
     IPv4 Address....................: 172.16.201.3(Preferred)
     Subnet Mask.....................: 255.255.255.255
     Default Gateway.................:
     NetBIOS over Tcpip..............: Enabled

Хост-компьютер ICS Связь с Azure осуществляется через IP-адрес пула адресов клиентов VPN, но хост-компьютер ICS не может использовать этот IP-адрес для общего доступа к сети, поэтому мы не можем использовать Azure P2S VPN таким образом.

Если вы хотите, чтобы все компьютеры подключались к Azure, мы можем подключить их с помощью P2S VPN, создать на них VPN-подключения.

Я также не могу найти программное обеспечение VPN для Linux, которое поддерживает необходимые протоколы.

На данный момент поддержка Azure P2S VPN ограничена только операционной системой Windows.

Если вы хотите подключиться к виртуальной сети Azure через Linux, мы можем использовать некоторое программное обеспечение на основе Linux, см. Здесь блог о том, как подключить виртуальную сеть Azure через Linux.

Да, OpenVPN сделал свое дело. Поскольку внешние пакеты не могут проходить через сеть Azure, я не смог использовать OpenVPN в качестве шлюза на стороне Azure в традиционном смысле. Я установил клиент OpenVPN на каждой виртуальной машине и использовал функцию "клиент-клиент" в OpenVPN, чтобы они все могли видеть друг друга. Хотя он не оптимален, он работает для нашей тестовой сети, пока мы ожидаем соединения IPsec ExpressRoute с Azure. Самое приятное, что для этого требуется только порт 443 через TCP, который без проблем проходит через все.

Другие вопросы по тегам