ГОСТ IKEv2 с PSK: пошаговая настройка двух узлов¶
PSK подходит для первого соединения и закрытых тестовых стендов. Для организационного использования обычно удобнее индивидуальные X.509-сертификаты, их сроки действия, CRL и централизованное управление. Ниже только системный RPM; предварительно выполните установку, сеть, firewall, службу.
1. Создать общий случайный PSK на узле А¶
umask 077
openssl rand -hex 32 > /root/niceos-ike-psk.hex
chmod 600 /root/niceos-ike-psk.hex
wc -c /root/niceos-ike-psk.hex # 65 байт, включая перевод строки
Не копируйте секрет в терминальную историю/чат. Передайте файл на узел Б по защищённому SSH-каналу с проверенным ключом хоста:
На узле Б: chmod 600 /root/niceos-ike-psk.hex. При другой системе доставки используйте корпоративный секрет-хранилище.
2. Создать зеркальный профиль на каждом узле¶
Следующий блок выполняется на каждой VM отдельно. Он не опирается на hostname -s — в некоторых системах оно возвращает localhost.
bash <<'SH'
set -euo pipefail
umask 077
IP=$(ip -4 -o addr show dev eth0 | awk 'NR==1{split($4,a,"/");print a[1]}')
case "$IP" in
192.168.10.15) PEER=192.168.10.26; ME=left; HIM=right; LTS=10.200.1.1; RTS=10.200.2.1 ;;
192.168.10.26) PEER=192.168.10.15; ME=right; HIM=left; LTS=10.200.2.1; RTS=10.200.1.1 ;;
*) echo 'STOP: неизвестный IP узла'; exit 1 ;;
esac
FILE=/etc/swanctl/conf.d/niceos-gost-psk.conf
test ! -e "$FILE" || { echo "STOP: $FILE уже существует"; exit 1; }
test -f /root/niceos-ike-psk.hex
PSK=$(tr -d '\n\r' </root/niceos-ike-psk.hex)
[[ "$PSK" =~ ^[0-9a-fA-F]{64}$ ]] || { echo 'STOP: PSK некорректен'; exit 1; }
cat > "$FILE" <<EOF
connections {
gost {
version = 2
local_addrs = $IP
remote_addrs = $PEER
proposals = kuznyechikmgmktree-prfstreebog512-gost512
encap = yes
mobike = no
fragmentation = yes
reauth_time = 0
rekey_time = 1h
dpd_delay = 30s
local { auth = psk; id = @niceos-$ME }
remote { auth = psk; id = @niceos-$HIM }
children {
gost {
local_ts = $LTS/32
remote_ts = $RTS/32
esp_proposals = kuznyechikmgmktree-gost512
start_action = none
close_action = none
dpd_action = clear
rekey_time = 30m
life_time = 40m
}
}
}
}
secrets {
ike-gost {
id-1 = @niceos-left
id-2 = @niceos-right
secret = 0x$PSK
}
}
EOF
chmod 600 "$FILE"
echo 'PASS: профиль создан; содержимое с PSK не выводить'
SH
Убедитесь, что исходный /etc/swanctl/swanctl.conf содержит include conf.d/*.conf. Не держите одновременно ещё один профиль gost с тем же именем.
3. Загрузить и запустить¶
На обеих VM:
На узле А:
После появления ipsec0 настройте маршруты по инструкции, затем проверьте:
На узле Б:
Не используйте ping -I, не проверив его поддержку: утилита ping в испытанном образе не принимает этот ключ. Исходный IP для защищённой сети выбирает маршрут с src.
4. Завершение и PSK → X.509¶
Для миграции подготовьте X.509 на обоих узлах, затем удалите только PSK-файл из conf.d, переместите его в закрытую резервную директорию, выполните swanctl --load-conns и swanctl --load-creds --clear. До удаления ключей проверьте восстановление X.509. Детали в миграции.