
strongswan v6.1.0
strongSwan - VPN на основе IPsec
Конфигурация strongSwan
Обзор
strongSwan — это VPN-решение с открытым исходным кодом на основе IPsec.
Этот документ — лишь краткое введение в команду swanctl из strongSwan, которая использует современный vici Versatile IKE Configuration Interface. Устаревшая команда ipsec, использующая старый интерфейс конфигурации stroke, описана здесь. Более подробную информацию можно найти в man-руководствах, на нашем новом сайте документации и на старом вики.
Быстрый старт
Сертификаты для пользователей, хостов и шлюзов выпускаются вымышленным
центром сертификации (CA) strongSwan. В наших примерах сертификат CA strongswanCert.pem
должен присутствовать на всех VPN-узлах, чтобы можно было аутентифицировать
пиров. Для вашего конкретного применения VPN вы можете либо использовать сертификаты от
любого стороннего CA, либо самостоятельно сгенерировать необходимые закрытые ключи и сертификаты
с помощью инструмента pki из strongSwan, использование которого будет объяснено в одном из
следующих разделов.
Сценарий «сеть-сеть»
В этом сценарии два шлюза безопасности moon и sun соединяют две подсети moon-net и sun-net друг с другом через VPN-туннель, установленный между двумя шлюзами:
10.1.0.0/16 -- | 192.168.0.1 | === | 192.168.0.2 | -- 10.2.0.0/16
moon-net moon sun sun-net
Конфигурация на шлюзе moon:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem
/etc/swanctl/swanctl.conf:
connections {
net-net {
remote_addrs = 192.168.0.2
local {
auth = pubkey
certs = moonCert.pem
}
remote {
auth = pubkey
id = "C=CH, O=strongSwan, CN=sun.strongswan.org"
}
children {
net-net {
local_ts = 10.1.0.0/16
remote_ts = 10.2.0.0/16
start_action = trap
}
}
}
}
Конфигурация на шлюзе sun:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/sunCert.pem
/etc/swanctl/private/sunKey.pem
/etc/swanctl/swanctl.conf:
connections {
net-net {
remote_addrs = 192.168.0.1
local {
auth = pubkey
certs = sunCert.pem
}
remote {
auth = pubkey
id = "C=CH, O=strongSwan, CN=moon.strongswan.org"
}
children {
net-net {
local_ts = 10.2.0.0/16
remote_ts = 10.1.0.0/16
start_action = trap
}
}
}
}
Используемые в этом сценарии локальная и удалённая идентичности — это subjectDistinguishedNames, содержащиеся в сертификатах конечных объектов. Сертификаты и закрытые ключи загружаются в демон charon с помощью команды
swanctl --load-creds
тогда как
swanctl --load-conns
загружает соединения, определённые в swanctl.conf. При start_action = trap
IPsec-соединение автоматически устанавливается при первом IP-пакете с полезной нагрузкой
в открытом виде, который должен пройти через туннель.
Сценарий «хост-хост»
Это настройка между двумя отдельными хостами, за которыми нет подсети. Хотя для соединений «хост-хост» было бы достаточно транспортного режима IPsec, мы будем использовать режим туннеля IPsec по умолчанию.
| 192.168.0.1 | === | 192.168.0.2 |
moon sun
Конфигурация на хосте moon:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem
/etc/swanctl/swanctl.conf:
connections {
host-host {
remote_addrs = 192.168.0.2
local {
auth=pubkey
certs = moonCert.pem
}
remote {
auth = pubkey
id = "C=CH, O=strongSwan, CN=sun.strongswan.org"
}
children {
net-net {
start_action = trap
}
}
}
}
Конфигурация на хосте sun:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/sunCert.pem
/etc/swanctl/private/sunKey.pem
/etc/swanctl/swanctl.conf:
connections {
host-host {
remote_addrs = 192.168.0.1
local {
auth = pubkey
certs = sunCert.pem
}
remote {
auth = pubkey
id = "C=CH, O=strongSwan, CN=moon.strongswan.org"
}
children {
host-host {
start_action = trap
}
}
}
}
Сценарий Roadwarrior
Это очень распространённый случай, когда шлюз strongSwan обслуживает произвольное число удалённых VPN-клиентов, обычно имеющих динамические IP-адреса.
10.1.0.0/16 -- | 192.168.0.1 | === | x.x.x.x |
moon-net moon carol
Конфигурация на шлюзе moon:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/moonCert.pem
/etc/swanctl/private/moonKey.pem
/etc/swanctl/swanctl.conf:
connections {
rw {
local {
auth = pubkey
certs = moonCert.pem
id = moon.strongswan.org
}
remote {
auth = pubkey
}
children {
net-net {
local_ts = 10.1.0.0/16
}
}
}
}
Конфигурация на удалённом клиенте carol:
/etc/swanctl/x509ca/strongswanCert.pem
/etc/swanctl/x509/carolCert.pem
/etc/swanctl/private/carolKey.pem
/etc/swanctl/swanctl.conf:
connections {
home {
remote_addrs = moon.strongswan.org
local {
auth = pubkey
certs = carolCert.pem
id = [email protected]
}
remote {
auth = pubkey
id = moon.strongswan.org
}
children {
home {
local_ts = 10.1.0.0/16
start_action = start
}
}
}
}
Для remote_addrs было выбрано имя узла moon.strongswan.org, которое будет
разрешено через DNS во время выполнения в соответствующий IP-адрес назначения.
В этом сценарии идентичность удалённого клиента carol — это адрес электронной почты
[email protected], который должен быть включён как subjectAlternativeName в
сертификат удалённого клиента carolCert.pem.
Сценарий Roadwarrior с виртуальным IP-адресом
Клиенты Roadwarrior обычно имеют динамические IP-адреса, назначаемые интернет-провайдером, к которому они в данный момент подключены. Чтобы упростить маршрутизацию от moon-net обратно к клиенту удалённого доступа carol, желательно, чтобы roadwarrior имел внутренний IP-адрес, выбранный из предопределённого пула.
10.1.0.0/16 -- | 192.168.0.1 | === | x.x.x.x | -- 10.3.0.1
moon-net moon carol virtual IP