воскресенье, 27 сентября 2015 г.

StrongSWAN и авторизация по сертификату

Решил таки добить конфигурацию "лебедя" так, чтобы не требовалось ввода логинов/паролей, что предусмотрено по документации. Сгенерил новый сертификат, установил на свою Windows 8.1. При создании не забыл добавить флаг --flag clientAuth, чтобы винда предлагала данный сертификат для авторизации. Перенастроил конфиг лебедя. Сперва сделал неправильно - указал rightauth=pubkey, в результате чего получил в логе следующее:
charon: 13[IKE] peer requested EAP, config inacceptable
charon: 13[CFG] no alternative config found

Поменял настройку на rightauth=eap-tls, ситуация сильно улучшилась, но как-то совсем неожиданно выскочила ошибка следующего содержания:
charon: 04[TLS] no trusted certificate found for 'CertName' to verify TLS peer

здесь, CertName - это CN из сертификата. Это очень удивило, т.к. сертификат "подписывался" корневым для сервера.
Поиск в гугле привел на эту страницу, где всё объяснено:
The peer must either use the full DN of the certificate or one of the subjectAltNames as identity.
И точно, после указания полного DN из выписанного сертификата как eap_identity - связь установилась!
Позже, выписал еще один сертификат в котором указал subjectAltName как vpnclients и его же вставил в eap_identity - всё сработало.

пятница, 25 сентября 2015 г.

StrongSWAN & DHCP

Несколько лет тому назад установил и настроил StrongSWAN, для попадания в свой маленький дата-центрик. Настроил под Windows 7. Но с Windows 8.1 и с тем же сертификатом пойти на VPN не получилось - восьмерка не предлагает сертификат к авторизации, поскольку в нем действительно нет опции clientAuth. Как оно работало на 7-ке - уже и не упомню, но точно работало.
Решил обновить всё - версию StrongSwan, сертификаты и сам линукс тоже, чтобы освежить в памяти мутные процедуры, связанные с выпиской сертификатов. Обновился до StrongSwan 5.3.3, сгенерил ключи и сертификаты, после некоторых разборок - установил соединение с Windows 8.1. Однако получилось установить соединение только при фиксированном адресе клиента, т.е. винды - если указать в конфигурации "лебедя"
rightsourceip=%dhcp
клиентская винда не получает IP. В логах charon имеем следующее:
...
Sep 25 01:52:11 securegw charon: 14[CFG] sending DHCP DISCOVER to 255.255.255.255
Sep 25 01:52:12 securegw charon: 09[MGR] ignoring request with ID 5, already processing
...
DHCP-сервер в логах ничего не пишет...
Покопался в гугле, нашел вот такую страничку. Проверил tcpdump-ом, действительно, "bad udp cksum". Таргет у iptables не был собран, пришлось дособрать. После добавления приведенного на страничке правила VPN чудесным образом заработал без дополнительных настроек на стороне клиента - всякие там роутинги/маскарадинги не надо конфигурить.
Вестимо, чтобы сия прелесть вообще могла работать, надо собрать strongswan с опциями --enable-dhcp --enable-farp.