Статья описывает два способа создания безопасных сетевых подключений между Ubuntu 16 и Windows Server 2012: посредством IPSec и с использованием IPSec/L2TP
Предполагается, что хосту с Windows Server 2012 присвоено имя windows.domain.local и IP-адрес 1.1.1.1, а хосту с Ubuntu 16 - имя ubuntu.domain.local и IP-адрес 2.2.2.2
IPSec
- на windows.domain.local в свойствах брандмауэра ("Брандмауэр Windows в режиме повышенной безопасности - Свойства - Параметры IPSec - Настроить") указываем следующие параметры IPSec
- обмен ключами: целостность - SHA-384, шифрование - AES-CBC 256, алгоритм обмена ключами - Elliptic Curve Diffie-Hellman P-384
- защита данных: протокол - ESP, алгоритм шифрования - AES-GCM-256, алгоритм проверки целостности - AES-GMAC-256
- "Обязательное шифрование для всех правил безопасности подключений, использующих эти параметры"
- создаем правило безопасности подключения со следующими параметрами
- конечная точка 1 - 1.1.1.1
- конечная точка 2 - 2.2.2.2
- тип протокола - любой
- режим проверки подлинности - требовать входящие и исходящие
- проверка подлинности - общий ключ "shared_key"
- на ubuntu.domain.local устанавливаем пакет strongSwan
- apt-get install strongswan
- заменяем содержимое файла /etc/ipsec.conf следующим
-
conn ubuntu-windows left=2.2.2.2 right=1.1.1.1 keyexchange=ikev1 type=transport authby=psk ike=aes256-sha384-ecp384! esp=aes256gcm128-aes256gmac! auto=route
- заменяем содержимое файла /etc/ipsec.secrets следующим
-
2.2.2.2 1.1.1.1 : PSK "shared_key"
- обновляем конфигурацию IPSec
- ipsec reload
- пробуем "попинговать" windows.domain.local с ubuntu.domain.local и наоборот
- Замечание: на хостах, конечно же, должны быть разрешены входящие ICMP эхо-запросы
- проверяем, что безопасные соединения установлены, для чего
- на windows.domain.local в настройках брандмауэра (Брандмауэр Windows в режиме повышенной безопасности - Наблюдение - Сопоставления безопасности) проверяем наличие сопоставлений безопасности для IP-адресов 1.1.1.1 и 2.2.2.2 и для основного, и для быстрого режимов
- на ubuntu.domain.local выполняем команду ipsec status
IPSec/L2TP
- на windows.domain.local создаем локального пользователя l2tp_user с паролем some_password
- устанавливаем роль "Удаленный доступ" со службами роли "DirectAccess и VPN (RAS)" и "Маршрутизация"
- в консоли "Маршрутизация и удаленный доступ" выполняем необходимые для работы L2TP-сервера настройки, а именно
- включаем L2TP-порты
- настраиваем NAT
- указываем диапазон назначаемых клиентам IP-адресов
- включаем проверку подлинности с использованием MS-CHAPv2
- указываем в качестве общего ключа для L2TP-подключений значение "shared_key"
- на ubuntu.domain.local устанавливаем пакет strongSwan
- apt-get install strongswan
- заменяем содержимое файла /etc/ipsec.conf следующим
-
conn ubuntu-windows-ipsec left=2.2.2.2 right=1.1.1.1 leftprotoport=17/1701 rightprotoport=17/1701 keyexchange=ikev1 type=transport authby=psk ike=aes256-sha1-ecp384! esp=aes256-sha1! auto=route
- Замечание: по умолчанию в Windows Server 2012 используются именно такие параметры для IKE и ESP
- заменяем содержимое файла /etc/ipsec.secrets следующим
-
2.2.2.2 1.1.1.1 : PSK "shared_key"
- обновляем конфигурацию IPSec
- ipsec reload
- устанавливаем пакет xl2tpd
- apt-get install xl2tpd
- заменяем содержимое файла /etc/xl2tpd/xl2tpd.conf следующим
-
[lac ubuntu-windows-l2tp] lns = 1.1.1.1 pppoptfile = /etc/ppp/options autodial = yes
- заменяем содержимое файла /etc/ppp/options следующим
-
noauth user l2tp_user
- заменяем содержимое файла /etc/ppp/chap-secrets следующим
-
l2tp_user * some_password
- перезапускаем службу xl2tpd
- service xl2tpd restart
- проверяем, что в списке интерфейсов появился PPP-интерфейс, а в таблице маршрутизации - маршрут до хоста на другом конце PPP-соединения, и пробуем "попинговать", используя IP-адреса соответствующих PPP-интерфейсов, windows.domain.local с ubuntu.domain.local и наоборот
- проверяем, что безопасные соединения установлены, для чего
- на windows.domain.local в настройках брандмауэра (Брандмауэр Windows в режиме повышенной безопасности - Наблюдение - Сопоставления безопасности) проверяем наличие сопоставлений безопасности для IP-адресов 1.1.1.1 и 2.2.2.2 и для основного, и для быстрого режимов
- на ubuntu.domain.local выполняем команду ipsec status
- для взаимодействия с доступными через windows.domain.local подсетями
- создаем файлы /etc/ppp/ip-up.d/custom_routes и /etc/ppp/ip-down.d/custom_routes
- добавляем в файл /etc/ppp/ip-up.d/custom_routes
-
route add -net 10.100.200.0 netmask 255.255.255.0 dev $1
- добавляем в файл /etc/ppp/ip-down.d/custom_routes
-
route del -net 10.100.200.0 netmask 255.255.255.0
- Замечание: через переменную $1 в скрипт передается имя PPP-интерфейса
- при необходимости использования windows.domain.local в качестве шлюза по умолчанию
- добавляем в файл /etc/ppp/options
-
defaultroute replacedefaultroute
- добавляем в файл /etc/ppp/ip-up.d/custom_routes
-
route add -host 1.1.1.1 gw 3.3.3.3
- добавляем в файл /etc/ppp/ip-down.d/custom_routes
-
route del -host 1.1.1.1
- Замечание 1: указанные изменения в файлах custom_routes необходимы потому, что после замены шлюза L2TP-трафик к windows.domain.local будет направляться через туннель, а не на "старый" шлюз по умолчанию, в результате чего L2TP- и, как следствие, PPP-соединения будут разрываться
- Замечание 2: 3.3.3.3 - адрес "старого" шлюза по умолчанию