charon-systemd
The charon-systemd daemon implements the IKE daemon very similar to
charon but is specifically designed for use with
systemd. It uses the systemd libraries for a native integration and comes
with a simple systemd service file. The daemon is directly managed by
systemd and configured by the swanctl
configuration backend.
Build Options
To build the daemon, add
--enable-systemd --enable-swanctl
to the ./configure options. In order to disable
the legacy ipsec backend, additionally add
--disable-charon --disable-stroke
to build a lightweight and clean IKE daemon using modern tools.
The systemd unit file directory is detected automatically using pkg-config
but may be set manually using the --with-systemdsystemunitdir=
./configure option.
Behavior
charon-systemd gets installed as native systemd daemon and the service
unit is named strongswan. The service unit has to be enabled once once with
the command
sudo systemctl enable strongswan
The daemon can then be manually started with
sudo systemctl start strongswan
and stopped at any time with
sudo systemctl stop strongswan
Usually after a reboot systemd automatically starts the strongswan
service and uses swanctl to load the IPsec
configuration including connections, pools and credentials. If you are not sure
whether the charon-systemd daemon is running you can check with
systemctl status strongswan
strongswan.service - strongSwan IPsec IKEv1/IKEv2 daemon using swanctl
Loaded: loaded (/lib/systemd/system/strongswan.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-01-26 16:53:41 CET; 5 days ago
Process: 1354 ExecStartPost=/usr/sbin/swanctl --load-all --noprompt (code=exited, status=0/SUCCESS)
Main PID: 1308 (charon-systemd)
Status: "charon-systemd running, strongSwan 6.0dr13, Linux 5.13.0-27-generic, x86_64"
Tasks: 17 (limit: 18891)
Memory: 113.1M
CGroup: /system.slice/strongswan.service
└─1308 /usr/sbin/charon-systemd
Configuration
Many of the charon-specific configuration options
in strongswan.conf also apply to
charon-systemd. Actually, options set in the charon section are
automatically inherited by charon-systemd.
The following options are specific to charon-systemd:
| Key | Default | Description |
|---|---|---|
journal |
Section to configure native systemd journal logger, very similar to the syslog logger as described in Logging |
Logging
By default, the charon-systemd backend logs to the systemd journal,
which can be viewed using journalctl. Log levels can be configured very
similar to the charon
logger configuration but using a journal section:
charon-systemd {
journal {
default = 1
ike = 2
knl = 3
# ...
}
}
Of course, one may define traditional syslog and filelog loggers in the
charon-systemd section of strongswan.conf. Refer to the
logger configuration for details. To disable the
journal logger and make it silent, set
default = -1
The journal-based logger provides some additional metadata in custom
journal fields:
| Field | Description |
|---|---|
LEVEL |
Numerical strongSwan log level |
GROUP |
Logging subsystem string |
THREAD |
Numerical thread identifier issuing the journal entry |
IKE_SA_UNIQUE_ID |
IKE_SA unique identifier, if available |
IKE_SA_NAME |
Name of the IKE_SA configuration, if available |
The MESSAGE field contains the log message, MESSAGE_ID uses a unique
identifier specific to each log message type. The log levels are also mapped to
values stored in the PRIORITY field (0 to LOG_NOTICE, 1 to
LOG_INFO, everything above to LOG_DEBUG, see syslog(3)).