Необходимость в таком обновлении возникла в следующей ситуации: я установил openvpn-сервер на Linux, и к нему подключались удаленные клиенты.
Сервер Openvpn сам динамически выдает адреса клиентам и хотелось бы, чтобы он создавал записи DNS с сертификатом общего имени на DNS-сервере, который интегрирован в Active Directory. Здесь можно пойти простым путем и в свойстве зоны «Динамическое обновление» установить опцию «Небезопасно и безопасно», но тогда любой, кто имеет доступ к DNS-серверу, сможет менять записи зоны — не комильфо.
Если вы установите «Только безопасный», то DNS-сервер обязательно потребует аутентификацию по протоколу GSS-TSIG. Далее мы поговорим о том, как все это настроить.
Для начала создаём доменного пользователя с минимальными правами, например ddns, и даем ему сложный пароль и опцию «Пароль не имеет срока действия».
Этот пользователь должен иметь достаточные права для изменения записей зоны DNS. В свойствах DNS-зоны необходимо выбрать опцию «Только безопасные обновления».
Установка клиента Kerberos:
Давайте отредактируем /etc/krb5.conf:sudo apt-get install krb5-user
[libdefaults]
default_realm = DOMAIN.LOCAL
[realms]
DOMAIN.LOCAL = {
kdc = 192.168.2.200
kdc = 192.168.2.202
default_domain = domain.local
admin_server = 192.168.2.200
}
[domain_realm]
.
domain.local = DOMAIN.LOCAL
domain.local = DOMAIN.LOCAL
Хотя клиент будет работать даже в такой конфигурации:
[libdefaults]
default_realm = DOMAIN.LOCAL
Важным моментом для Kerberos является синхронизация часов сервера и клиента.
Можно установить службу ntpd — она будет поддерживать правильное время: sudo apt-get install ntp
С помощью ktutil создадим файл keytab, в котором будут храниться данные для аутентификации пользователя ddns: sudo ktutil
ktutil: addent -password -p [email protected] -k 1 -e rc4-hmac
ktutil: write_kt krb5.keytab
ktutil: quit
Теперь вы можете проверить, все ли было сделано правильно: kinit -k -t krb5.keytab ddns
Никакого вывода быть не должно.
Вы можете просмотреть полученные билеты: klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: [email protected]
Valid starting Expires Service principal
29.04.2014 14:50:39 30.04.2014 00:50:39 krbtgt/[email protected]
renew until 30.04.2014 14:50:39
Если keytab размещен по умолчанию (etc/krb5.keytab), то команду можно сократить: kinit -k ddns
Теперь осталось настроить openvpn. Для этого в файле конфигурации сервера openvpn должна быть опция: learn-address /etc/openvpn/learn-address.sh
Сам скрипт Learn-address.sh: #!/bin/bash
dnsserver=192.168.2.200
fwdzone=domain.local
revzone=7.168.192.in-addr.arpa
ttl=300
op=$1
addr=$2
revaddr=`echo $addr | sed -re 's:([0-9]+)\.
([0-9]+)\.
([0-9]+)\.
([0-9]+):\4.\3.\2.\1.in-addr.arpa:'`
cn=$3
fqdn=$cn.$fwdzone
dir=/etc/openvpn/dns
addfile=$dir/add_$addr
delfile=$dir/del_$addr
keytab_file=/etc/openvpn/krb5.keytab
user=ddns
addRecord() {
kinit -k -t $keytab_file $user
cat > $addfile << EOF
gsstsig
server $dnsserver
zone $fwdzone
update delete $fqdn a
update add $fqdn $ttl a $addr
send
zone $revzone
update delete $revaddr ptr
update add $revaddr $ttl ptr $fqdn
send
EOF
cat > $delfile << EOF
gsstsig
server $dnsserver
zone $fwdzone
update delete $fqdn a
send
zone $revzone
update delete $revaddr ptr
send
EOF
nsupdate -v $addfile
rm -f $addfile
}
delRecord() {
kinit -k -t $keytab_file $user
nsupdate -v $delfile
rm -f $delfile
}
case $op in
add|update)
addRecord
;;
delete)
delRecord
;;
*)
echo "Unable to handle operation $op. Exiting" exit 1
esac
Подводя итог: Ключевым моментом является возможность gsstsig в файле, который передается утилите нсупдате .
В этом случае билет необходимо получить от контроллера домена с помощью кинит <user> .
Теги: #Системное администрирование #openvpn #настройка Linux #dns #kerberos #active каталог #Active Directory #dynamic dns #gss-tsig #nsupdate #gsstsig #Динамическое обновление #Только безопасные #Только безопасные обновления
-
Паршивая Овца Музыкальной Индустрии
19 Oct, 24