Моей первой попыткой было попытаться использовать совместное использование подключения к Интернету и выделить машина для внешнего интерфейса Linux (просто пересылка большого количества портов), но совместное использование соединения, похоже, не работает при подключении к лазурной VPN (я пробовал Windows 10 и win2008R2 до сих пор).
Я также не удалось найти какое-либо программное обеспечение VPN для Linux, поддерживающее необходимые протоколы.
Да, OpenVPN помогло. Поскольку иностранные пакеты не могут проходить через сеть Azure, я не смог использовать OpenVPN в качестве шлюза на стороне Azure в традиционном смысле. Я установил клиент OpenVPN на каждую виртуальную машину и использовал функцию клиент-клиент в OpenVPN, чтобы все они могли видеть друг друга. Несмотря на то, что он не оптимален, он работает в нашей тестовой сети, пока мы ожидаем подключения IPsec ExpressRoute к Azure. Самое приятное то, что для этого требуется только порт 443 по TCP, который без проблем проходит через все.
разделение соединений, похоже, не работает при подключении к лазурной VPN. (До сих пор я пробовал windows 10 и win2008R2)
Мы не можем использовать Azure P2S VPN таким образом.
ICS маршрутизирует TCP/IP пакеты из маленькой локальной сети в Интернет. ICS сопоставляет отдельные IP-адреса локальных компьютеров с неиспользуемыми номерами портов в стеке TCP/IP. Из-за характера NAT IP-адреса локального компьютера не видны в Интернете. Все пакеты, выходящие или входящие в локальную сеть, отправляются с или на IP-адрес внешнего адаптера на хост-компьютере ICS.
Azure P2S VPN, используемый для создания защищенного соединения с виртуальной сетью Azure Virtual Network с отдельного клиентского компьютера. После того, как вы подключите Azure VPN, главный компьютер ICS получит IP адрес адресов из пула адресов Point-to-Site VPN Client Address Pool, который вы указали в вашей конфигурации. Результаты должны быть похожими на следующие:
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, пожалуйста, смотрите it.
.можно подключить 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 сломается сильный Лебедь. Этот пакет содержит плагины 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
Сначала вы должны создать свой собственный CA, затем необходимо сгенерировать сертификат пользователя с расширением X509v3 Subject Alternative Name (SAN) ( strongSwan FAQ ), которое должно соответствовать общему имени субъекта сертификата (CN). Т.е. сертификат с субъектом CN = client
должен содержать DNS: client
SAN. Это позволит вам указать идентификатор EAP без префикса CN =
в strongSwan. По умолчанию 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, найдите свой «Virtual Network Gateway» и его Страница конфигурации точка-сеть в разделе Корневые сертификаты вставьте CA в кодировке base64, напечатанный выше.
Найдите кнопку Загрузить VPN-клиент на точке шлюза -to-site конфигурации, затем распакуйте 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 сервера VPN:
$ 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
content:
: P12 client.p12 'password' # key filename inside /etc/ipsec.d/private directory
Затем перезапустите ipsec для повторного чтения конфигурации и запуска туннеля:
sudo ipsec restart
sudo ipsec up azure
IPsec VPN-клиент может испытывать проблемы с подключением из-за высоких значений MTU / MSS и IKE Fragmentation . Чтобы решить эту проблему, вы должны явно установить значение 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