IPSEC-PLUTO(8)
π IPSEC-PLUTO π
okay bestie, listen, the manual name is IPSEC-PLUTO(8) and yeah we're using ipsec-pluto and pluto interchangeably the whole time, keep up π
β¨ NAME β¨
ipsec-pluto, pluto β the Internet Key Exchange daemon, aka the moment your VPN actually starts working π¦
πΈ SYNOPSIS πΈ
ipsec pluto [--help] [--version]
[--nofork] [--rundir path] [--efence-protect]
[--stderrlog] [--logfile filename] [--log-no-time]
[--log-no-append] [--log-no-ip] [--log-no-audit]
[--config filename] [--secretsfile secrets-file]
[--ipsecdir dirname] [--nssdir dirname] [--coredir dirname]
[--vendorid VID] [--uniqueids]
[--virtual-private network_list] [--keep-alive delay_sec]
[--force-busy] [--crl-strict] [--crlcheckinterval]
[--listen ipaddr] [--nhelpers number] [--seedbits numbits]
[--statsbin filename] [--secctx-attr-type number]
[--use-xfrm] [--use-bsdkame]
π DESCRIPTION π
pluto is Libreswan's Internet Key Exchange (IKE) daemon. that's the whole vibe bestie, that's her job π
so here's the tea: you do not normally run pluto directly. nope. instead the daemon gets controlled by the host's init(8) system β think systemd(8) or rc(8) β or by the ipsec command (peep ipsec(8)). she has people for that. main character energy honestly π
want the general lore on Libreswan? that's libreswan(7).
want to know how to actually configure Libreswan and the pluto daemon? that's ipsec.conf(5), go read it, it's giving reference material π
π Help Options
--helpβ showspluto's usage message. the "what do i even do here" button β¨--versionβ shows Libreswan's version details. flex the digits π
π Starting pluto
when she boots up, pluto tries to create a lockfile named /run/pluto/pluto.pid. if that lockfile cannot be created, pluto exits β and honestly that's a feature, it stops multiple plutos from fighting over the same turf. no drama allowed π
ββοΈ
β οΈ any "leftover" lockfile has to be manually removed before pluto will run again. she does not clean up after herself on that one, you have to do it. π
after that, pluto writes its PID into the file so scripts can find it. then pluto forks and the parent exits β which is the classic, conventional, textbook "daemon fork" moment. iconic behaviour only π§
these options change how pluto starts up:
--noforkβ disables the "daemon fork". also, once the lock file and control socket are created, it prints the linePluto initializedto standard out. she announces herself π--rundir pathβ changes the run directory from the default/run/pluto. this directory is where the goods live:path/pluto.ctlβ the socket through whichwhackcommunicates withpluto(the group chat π±)path/pluto.pidβ the lockfile that prevents multipleplutoinstances (the "only one of us talks" rule β)
--efence-protectβ enables efence protection π‘οΈ
π Logging
okay so all logging, diagnostics included, gets sent to syslog(3) with facility=authpriv, and syslog decides where those messages end up. not pluto's call. the following options change that whole arrangement:
--stderrlogβ directs logging to standard error instead of a log file. when you specify this, it overrides anylogfile=setting from the configuration file, regardless of argument order. no cap, order does not save you here. often combined with--noforkwhen debuggingplutoπ--logfile filenameβ directs logging tofilenameinstead ofsyslog(3). whenfilenameis empty (--logfile=), anylogfile=setting from the configuration file gets cleared, which makesplutofall back to--stderrlogorsyslog(3). seeipsec.conf(5)andlogfile=filenameπ--log-no-timeβ no timestamp prefix when logging to a file. seeipsec.conf(5)andlogtime=noβ°--log-no-appendβ does not append to the end of an existing log file. seeipsec.conf(5)andlogappend=noπ--log-no-ipβ leaves IP addresses out when logging. seeipsec.conf(5)andlogip=noπ--log-no-auditβ does not generate audit logs (on systems that support Linux Auditing). seeipsec.conf(5)andaudit-log=noπ§Ύ
π Configuration Files
these options override pluto's default configuration parameters, periodt:
--config filenameβ specify anipsec.conf(5)file containing additional configuration parameters. the "config" section offilenamewill be loaded. normallyplutois started usingipsec start, and that passes the parameter--config /etc/ipsec.confso the default configuration gets read π«Ά--secretsfile secrets-fileβ specify the file for authentication secrets. π€« this name is subject to "globbing" as insh(1), so every file with a matching name gets processed. quoting is generally needed to stop the shell from doing the globbing yourself, bestie. default is/etc/ipsec.secrets. seeipsec.secrets(5).--ipsecdir dirnameβ the directory containing additional configuration files. default is/etc/ipsec.d. ποΈ--nssdir dirnameβ the directory containing the NSS trust store. default is/var/lib/ipsec/nss. π--coredir dirnameβ the directory to write a core file shouldplutoabort. default is/run/pluto. π₯
π Other Options
these options tweak pluto's behaviour:
--vendorid VIDβ (the page doesn't spill any details on this one, so we're not gonna invent them π)--uniqueidsβ require all connections to have a unique identifier. if this option has been selected, whenever a new ISAKMP SA is established, any connection with the same Peer ID but a different Peer IP address is unoriented (causing all its SAs to be deleted). this helps clean up dangling SAs when a connection is lost and then regained at another IP address. messy breakups, cleaned up π--virtual-private network_listβPlutosupports RFC 3947 NAT-Traversal. the allowed range behind the NAT routers is submitted using the--virtual-privateoption. seeipsec.conf(5)for the syntax π--keep-alive delay_secβ the--keep-alivesets the delay (in seconds) of these keep-alive packets. the newer NAT-T standards support port floating, and Libreswan enables this per default. π--force-busyβ if this option has been selected,plutowill be forced to be "busy". in this state, which happens when there is a Denial of Service attack, will forceplutoto use cookies before accepting new incoming IKE packets. cookies are send and required inikev1Aggressive Mode and inikev2. this option is mostly used for testing purposes, but can be selected by paranoid administrators as well. πͺ--crl-strictβ reject authentication using X.509 until a valid certificate revocation list has been loaded. no list, no entry π«--crlcheckintervalβ (no description on the page, so we're leaving it exactly as-is π«₯)--listen ipaddrβ (same deal, no description given, not making one up π«₯)--nhelpers numberβ specify the number of threads to use when offloading cryptographic operations.Plutocan also use helper children to off-load cryptographic operations. this behavior can be fine tuned using the--nhelpers.Plutowill start (n-1) of them, where n is the number of CPU's you have (including hypherthreaded CPU's). a value of0forcesplutoto do all operations in the main process. a value of-1tellsplutoto perform the above calculation. any other value forces the number to that amount. β¨ seeipsec.conf(5)andnhelpers=number.--seedbits numbitsβ specify the number of seed bits to read from the RNG before starting.Plutouses the NSS crypto library as its random source. some government Three Letter Agency requires thatplutoreads 440 bits from/dev/randomand feed this into the NSS RNG before drawing random from the NSS library, despite the NSS library itself already seeding its internal state. since this process can blockplutofor an extended time, the default is to not perform this redundant seeding. the--seedbitsoption can be used to specify the number of bits that will be pulled from/dev/randomand seeded into the NSS RNG. π² seeipsec.conf(5)andseedbits=number.
π this option should not be used by most people. fr fr, step away from the flag.
--statsbin filenameβ (no description on the page, keeping it real and empty π«₯)--secctx-attr-type numberβ (no description on the page either π«₯)
Libreswan supports different IPstacks on different operating systems. since most IPstacks have died the list is very short:
--use-xfrmβ linux only π§--use-bsdkameβ BSD only π
π Debugging
very occasionally it is necessary to enable debugging early in pluto's startup process. the follow options enable this:
--debug help(whack only) β list the debugging classes recognised byplutoπ--debug noneβ disable logging for all debugging classes π--debug class,--no-debug class,--debug no-classβ enable (disable) logging of the specified debugging class π§
for more details, see plutodebug= in ipsec.conf(5).
π£ SIGNALS π£
pluto responds to SIGHUP by issuing a suggestion that ipsec listen might have been intended. she's just guessing what you meant, gently π
pluto exits when it receives SIGTERM. bye bestie π
πͺ EXIT STATUS πͺ
pluto normally forks a daemon process, so the exit status is a very preliminary result. like, don't read too much into it π«
0β means that all is OK so far. β1β means that something was wrong. β10β means that the lock file already exists. π
ποΈ FILES ποΈ
/run/pluto/pluto.pid /run/pluto/pluto.ctl /etc/ipsec.secrets
/etc/ipsec.conf
π± ENVIRONMENT π±
pluto does not use any environment variables. not one. she's self-contained, we love that for her π
π SEE ALSO π
the rest of the Libreswan distribution, in particular libreswan(7).
π HISTORY π
this code is released under the GPL terms. see the accompanying files CHANGES COPYING and CREDITS.* for more details. π
detailed history (including FreeS/WAN and Openswan) can be found in the docs/ directory. ποΈ
π BUGS π
please see https://github.com/libreswan/libreswan/issues for a list of currently known bugs and missing features. go be nosy, they documented it π
π AUTHOR π
Andrew Cagney, Anish Singh Rawat, Antony Antony, Daniel Kahn Gillmor, D. Hugh Redelmeier, Harald Jenny, Jose Quaresma, Matt Rogers, Max-Julian Pogner, Michael Richardson, Paul Wouters, Pietro Monteiro, Simon Deziel, Tuomo Soini, Vinayak Sandur, Vukasin Karadzic π
that's the whole page bestie!! this was brought to you by Libreswan 5.4.1, dated 10/23/2026, and IPSEC-PLUTO(8) β stay encrypted, stay iconic πβ¨π¦
π¦ where this page comes from
- fedora 43: libreswan 5.4.1-1.fc43 Β· GPL-2.0-or-later AND MPL-2.0
- fedora 44: libreswan 5.4.1-1.fc44 Β· GPL-2.0-or-later AND MPL-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms