Как подключить 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, который без проблем проходит через все.