| IPSEC-WHACK(8) | Executable programs | IPSEC-WHACK(8) |
.SH "NAME" ipsec-whack - ipsec whack : IPsec IKE keying daemon
low-level control interface
.SH "SYNOPSIS"
.HP 288u
ipsec whack
[--help]
[--version]
.HP 288u
ipsec whack
--name connection-name
[
| [--ipv4]
| [--ipv6]
]
[
| [--tunnelipv4]
| [--tunnelipv6]
]
[--id identity]
[--host ip-address]
[--cert friendly_name]
[--ckaid CKAID]
[--ca distinguished name]
[--groups access control groups]
[--sendcert | yes | forced | always | ifasked | no | never]
[--sendca | none | issuer | all]
[--certtype number]
[--send-supported-auth-methods | yes | no]
[--ikeport portnumber]
[--nexthop ip-address]
[
| [--client subnet]
| [--subnet subnet]
]
[--clientprotoport protocol/port]
[--fragmentation | yes | no | force]
[--narrowing | yes | no]
[--sourceip ip-address]
[--interface-ip ip-address/mask]
[--xauthserver]
[--xauthclient]
[--modecfgserver]
[--modecfgclient]
[--modecfgdns ip-address, ip-address, ...]
[--modecfgdomains DNS-domain, DNS-domain, ...]
[--modecfgbanner login-banner]
[--dnskeyondemand]
[--updown updown]
--to
[--id identity]
[--host ip-address]
[--cert friendly_name]
[--ckaid CKAID]
[--ca distinguished name]
[--groups access control groups]
[--sendcert | yes | always | ifasked | no | never]
[--certtype number]
[--ikeport port-number]
[--nexthop ip-address]
[--subnet subnet]
[--client subnet]
[--clientprotoport protocol/port]
[--sourceip ip-address]
[--interface-ip ip-address/mask]
[--xauthserver]
[--xauthclient]
[--modecfgserver]
[--modecfgclient]
[--modecfgdns ip-address, ip-address, ...]
[--modecfgdomains DNS-domain, DNS-domain, ...]
[--dnskeyondemand]
[--updown updown]
[--tunnel]
[--psk]
[--rsasig]
[--encapsulation | [yes] | [no] | [auto]]
[--encrypt]
[--authenticate]
[--compress]
[--pfs]
[--ikelifetime seconds]
[--ipseclifetime seconds]
[--rekeymargin seconds]
[--rekeyfuzz percentage]
[--ike ike-proposal]
[--esp esp-proposal]
[--ah ah-proposal]
[--dontrekey]
[--aggrmode]
[--modecfgpull]
[--metric metric]
[--nflog-group nflognum]
[--conn-mark mark/mask]
[
| [--dpddelay seconds]
| [--dpdtimeout seconds]
]
[--no-keep-alive]
[| [--initiateontraffic] | [--pass] | [--drop] | [--reject]]
[| [--failnone] | [--failpass] | [--faildrop] | [--failreject]]
[--rundir path]
[--ctlsocket path/file]
[--label string]
.HP 288u
ipsec whack
--keyid id
[--addkey]
[--pubkeyrsa key]
[--rundir path]
[--ctlsocket path/file]
[--label string]
.HP 288u
ipsec whack
| --listen
| --unlisten
[--rundir path]
[--ctlsocket path/file]
[--label string]
.HP 288u
ipsec whack
| --ddos-auto
| --ddos-busy
| --ddos-unlimited
[--rundir path]
[--ctlsocket path/file]
.HP 288u
ipsec whack
| --route
| --unroute
--name connection-name
[--rundir path]
[--ctlsocket path/file]
.HP 288u
ipsec whack
--initiate
--name connection
[--remote-host ip-address]
[--xauthuser user]
[--xauthpass pass]
[--bg[={yes,no}] | [--asynchronous[={yes,no}]]
.HP 288u
ipsec whack
--down
--name connection
[--bg[={yes,no}] | [--asynchronous[={yes,no}]]
.HP 288u
ipsec whack
{
| --rekey-ike
| --rekey-child
| --delete-ike
| --delete-child
| --down-ike
| --down-child
}
--name connection
[--bg[={yes,no}] | [--asynchronous[={yes,no}]]
.HP 288u
ipsec whack
--global-redirect yes|no|auto
.HP 288u
ipsec whack
--global-redirect-to ip-address(es)
.HP 288u
ipsec whack
[--name connection-name]
--redirect-to ip-address(es)
.HP 288u
ipsec whack
[
| [--tunnelipv4]
| [--tunnelipv6]
]
--oppohere ip-address
--oppothere ip-address
--opposport port
--oppodport port
--oppoproto protocol
.HP 288u
ipsec whack
--crash
[ipaddress]
.HP 288u
ipsec whack
--name connection-name
--delete
[--label string]
.HP 288u
ipsec whack
--deletestate state-number
[--rundir path]
[--ctlsocket path/file]
[--label string]
.HP 288u
ipsec whack
--deleteuser
--name username
[--rundir path]
[--ctlsocket path/file]
[--label string]
.HP 288u
ipsec whack
[--name connection-name]
| {--debug | help | none | base | cpu-usage | class} | {--no-debug class} | {--impair | help | none | behaviour} | {--no-impair behaviour}
.HP 288u
ipsec whack
[--utc]
[--listall]
[--listpubkeys]
[--listcerts]
[--listcacerts]
[--listcrls]
.HP 288u
ipsec whack
[--utc]
[--rereadsecrets]
[--fetchcrls]
[--rereadall]
.HP 288u
ipsec whack
--ddns
.HP 288u
ipsec whack
--listevents
.HP 288u
ipsec whack
--purgeocsp
.HP 288u
ipsec whack
--status
--addresspoolstatus
--briefstatus
--connectionstatus
--fipsstatus
--processstatus
--shuntstatus
--trafficstatus
[--rundir path]
[--ctlsocket path/file]
[--label string]
.HP 288u
ipsec whack
--globalstatus
--clearstats
[--rundir path]
[--ctlsocket path/file]
[--label string]
.HP 288u
ipsec whack
[--ike-socket-bufsize bufsize]
[--ike-socket-errqueue-toggle]
[--rundir path]
[--ctlsocket path/file]
[--label string]
.HP 288u
ipsec whack
--shutdown
[--rundir path]
[--ctlsocket path/file]
[--label string]
[--leave-state]
.SH "DESCRIPTION"
.SS "GENERAL"
.PP ipsec whack is an auxiliary program to allow requests to be made
to a running pluto. whack uses a UNIX domain socket to speak
to pluto (by default, /run/pluto/pluto.ctl).
.PP whack has an intricate argument syntax. This syntax allows many
different functions to be specified. The help form shows the usage or
version information. The connection form gives pluto a description of
a potential connection. The public key form informs pluto of the RSA
public key for a potential peer. The delete form deletes a connection
description and all SAs corresponding to it. The listen form tells
pluto to start or stop listening on the public interfaces for IKE
requests from peers. The route form tells pluto to set up routing for
a connection; the unroute form undoes this. The initiate form tells
pluto to negotiate an SA corresponding to a connection. The terminate
form tells pluto to remove all SAs corresponding to a connection,
including those being negotiated. The status form displays the
pluto's internal state. The debug form tells pluto to change
the selection of debugging output "on the fly". The shutdown form
tells pluto to shut down, deleting all SAs.
.PP The crash option asks pluto to consider a particularly target IP to have
crashed, and to attempt to restart all connections with that IP address as a
gateway. In general, you should use Dead Peer Detection to detect this kind
of situation automatically, but this is not always possible.
.PP Most options are specific to one of the forms, and will be described with
that form. There are three options that apply to all forms.
.PP --ctlsocket /run/pluto/pluto.ctl
file is used as the UNIX domain socket for talking to pluto.
Use either this option or --rundir, but not both.
.RE
.PP --rundir path
path where the UNIX domain socket for talking to the pluto, the
pluto.pid file and the pluto.ctl files are found. Use either
this option or --ctlsocket, but not both.
.RE
.PP --label string
Adds the string to all error messages generated by whack.
.RE
.PP The help form of whack is self-explanatory.
.PP --help
Display the usage message.
.RE
.PP --version
Display the version of whack.
.RE
.SS "CONTROLLING PLUTO"
.PP The shutdown form is the proper way to shut down pluto. It will
tear down the SAs on this machine that pluto has negotiated. If the
--leave-state option is given, it does not delete any connections,
and leaves the kernel state in the kernel. Note that the init system used
might clean up the kernel state regardless.
.PP --shutdown
To be documented.
.RE
.PP The listen form tells pluto to start listening for IKE requests on
its public interfaces. To avoid race conditions, it is normal to load the
appropriate connections into pluto before allowing it to listen. If
pluto isn't listening, it is pointless to initiate negotiations, so
it will refuse requests to do so. Whenever the listen form is used,
pluto looks for public interfaces and will notice when new ones have
been added and when old ones have been removed. This is also the trigger for
pluto to read the ipsec.secrets file. So listen may useful
more than once.
.PP --listen
Start listening for IKE traffic on public interfaces.
.RE
.PP --unlisten
Stop listening for IKE traffic on public interfaces.
.RE
.PP The --ddos-auto, --ddos-busy and --ddos-unlimited options tells
pluto to update the DDoS protection state. Normally, these measures
are automatically activated or deactivated based on the number of states
inside pluto. The busy and unlimited option tells pluto to activate or
deactivate the DDoS protection mode manually. One of these DDoS protection
methods is to activate IKEv2 DCOOKIEs to defend against spoofed IKE
packets.
.PP --ddos-busy
Place pluto into busy mode and activate anti-DDoS measures.
.RE
.PP --ddos-unlimited
Pull pluto out of busy mode and deactivate anti-DDoS measures.
.RE
.PP --ddos-auto
Activate the built-in detection mechanism for the anti-DDoS measures.
.RE
.PP pluto supports various X.509 Certificate related options.
.PP --utc
Display all times in UTC.
.RE
.PP --listall
Lists all of the X.509 information known to pluto.
.RE
.PP --listpubkeys
List all the public keys that have been successfully loaded.
.RE
.PP --listcerts
List all the X.509 certificates that are currently loaded.
.RE
.PP --checkpubkeys
List all the loaded X.509 certificates that are about to expire or have
expired.
.RE
.PP --listcacerts
List all the Certificate Authority X.509 certificates that are currently
loaded.
.RE
.PP --listcrls
List all the loaded Certificate Revocation Lists (CRLs).
.RE
.PP The corresponding options --rereadsecrets, --rereadall, and
--rereadcrls options reread this information from their respective
sources, and purge all the online obtained information. The option
--listevents lists all pending events, and the --ddns triggers
the Dynamic DNS update event that is normally scheduled to run once every
minute.
.PP --ikelifetime seconds
How long pluto will propose that an ISAKMP SA be allowed to live. The
default is 28800 (eight hours) and the maximum is 86400 (1 day). This option
will not affect what is accepted. pluto will reject proposals that
exceed the maximum.
.RE
.PP --ipseclifetime seconds
How long pluto will propose that an IPsec SA be allowed to live. The
default is 28800 (eight hours) and the maximum is 86400 (one day). This
option will not affect what is accepted. pluto will reject proposals
that exceed the maximum.
.RE
.PP --rekeymargin seconds
How long before an SA's expiration should pluto try to negotiate a
replacement SA. This will only happen if pluto was the initiator. The
default is 540 (nine minutes).
.RE
.PP --rekeyfuzz percentage
Maximum size of random component to add to rekeymargin, expressed as a
percentage of rekeymargin. pluto will select a delay uniformly
distributed within this range. By default, the percentage will be 100. If
greater determinism is desired, specify 0. It may be appropriate for the
percentage to be much larger than 100.
.RE
.PP --dontrekey
A misnomer. Only rekey a connection if we were the Initiator and there was
recent traffic on the existing connection. This applies to Phase 1 and Phase
2. This is currently the only automatic way for a connection to terminate.
It may be useful with Road Warrior or Opportunistic connections. Since SA
lifetime negotiation is take-it-or-leave it, a Responder normally uses the
shorter of the negotiated or the configured lifetime. This only works
because if the lifetime is shorter than negotiated, the Responder will rekey
in time so that everything works. This interacts badly with
--dontrekey. In this case, the Responder will end up rekeying to
rectify a shortfall in an IPsec SA lifetime; for an ISAKMP SA, the Responder
will accept the negotiated lifetime.
.RE
.PP --deletestate state-number
The deletestate form deletes the state object with the specified serial
number. This is useful for selectively deleting instances of
connections.
.RE
.PP The route form of the whack command tells pluto to set up
routing for a connection. Although like a traditional route, it uses an
ipsec device as a virtual interface. Once routing is set up, no packets will
be sent "in the clear" to the peer's client specified in the
connection. A TRAP shunt eroute will be installed; if outbound traffic is
caught, Pluto will initiate the connection. An explicit whack route
is not always needed: if it hasn't been done when an IPsec SA is being
installed, one will be automatically attempted.
.PP --route
--name connection-name
When a routing is attempted for a connection, there must not already be a
routing for a different connection with the same subnet but different
interface or destination, or if there is, it must not be being used by an
IPsec SA. Otherwise the attempt will fail.
.RE
.PP --unroute
--name connection-name
The unroute form of the whack command tells pluto to undo a
routing. pluto will refuse if an IPsec SA is using the connection. If
another connection is sharing the same routing, it will be left in place.
Without a routing, packets will be sent without encryption or
authentication.
.RE
.PP The initiate form tells pluto to initiate a negotiation with
another pluto (or other IKE daemon) according to the named
connection. Initiation requires a route that --route would provide;
if none is in place at the time an IPsec SA is being installed, pluto
attempts to set one up.
.PP --initiate
--name connection-name
--asynchronous
The initiate form of the whack command will relay back from
pluto status information via the UNIX domain socket (unless
--asynchronous is specified). Currently whack simply copies this to
stderr. When the request is finished (eg. the SAs are established or
pluto gives up), pluto closes the channel, causing
whack to terminate.
.RE
.PP The opportunistic initiate form is mainly used for debugging.
.PP --tunnelipv4
--tunnelipv6
--oppohere ip-address
--oppothere ip-address
--opposport port
--oppodport port
--oppoproto protocol
This will cause pluto to attempt to opportunistically initiate a
connection from here to the there, even if a previous attempt had been made.
The whack log will show the progress of this attempt.
.RE
.PP Rekeying a connection
.PP --rekey-ike --name connection
--asynchronous
--rekey-child --name connection
--asynchronous
Initiate a rekey of the connection's established IKE or Child SA.
.RE
.PP --delete-ike --name connection
--asynchronous
--delete-child --name connection
--asynchronous
--down-ike --name connection --asynchronous
--down-child --name connection
--asynchronous
Initiate a delete of the connection's established IKE or Child SA. For
--down-ike and --down-child first clear connection's UP
policy.
.RE
.RE .sp
.RE
.PP Ending a connection
.PP --delete --name connection
Delete the specified connection. Any negotiating or established SAs
are terminated. Any routing is removed.
.RE
.PP --down --name connection --asynchronous
Delete any Child SAs associated with the connection, and remove UP from the
connection's policy (so the connection is no longer required to stay up). If
the connection has an IKE SA that is not not shared with other connections
then that is also is deleted.
Since the connection is still in place --down does not prevent new negotiations. For instance, the peer may initiate, or a routed (on-demand) connection will initiate when there is traffic. --unroute will also prevent traffic initiating the connection, and --delete will prevent all negotiation.
.RE
.PP --crash ip-address
If the remote peer has crashed, and therefore did not notify us, we keep
sending encrypted traffic, and rejecting all plaintext (non-IKE) traffic
from that remote peer. The --crash brings our end down as well for
all the known connections to the specified ip-address.
.RE
.PP ip-address
If the remote peer has crashed, and therefore did not notify us, we keep
sending encrypted traffic, and rejecting all plaintext (non-IKE) traffic
from that remote peer. The --crash brings our end down as well for
all the known connections to the specified ip-address.
.RE
.PP Redirecting clients can be done using IKEv2 redirect mechanism.
.PP --global-redirect yes|no|auto
The --global-redirect option controls whether pluto will instruct
remote peers to redirect IKE/Child SA's during IKE_SA_INIT. Valid options
are no, yes and auto, where auto means remote peers
will be redirected if DDoS mode is active.
.RE
.PP --global-redirect-to ip-address(es)
The destination, or a list of destinations, where the peers will be
redirected.
.RE
.PP --name connection_name
--redirect-to ip-address(es)
The destination, or a list of destinations, where the peers will be
redirected. Specifying the connection name is optional. If not specified the
mechanism will redirect all currently active peers. If specified, only the
peers from connection connection_name will be redirected.
.RE
.PP The public key for informs pluto of the RSA public key for a
potential peer. Private keys must be kept secret, so they are kept in
ipsec.secrets(5).
.PP --keyid id
Specifies the identity of the peer for which a public key should be used. Its
form is identical to the identity in the connection. If no public key is
specified, pluto attempts to find KEY records from DNS for the id (if
a FQDN) or through reverse lookup (if an IP address). Note that there
several interesting ways in which this is not secure.
.RE
.PP --addkey
Specifies that the new key is added to the collection; otherwise the new key
replaces any old ones.
.RE
.PP --pubkeyrsa key
Specifies the value of the RSA public key. It is a sequence of bytes as
described in RFC 2537 "RSA/MD5 KEYs and SIGs in the Domain Name System
(DNS)". It is base-64 encoded with the prefix 0s prepended.
.RE
.PP The status form will display information about the internal state of
pluto: information about each potential connection, about each state
object, and about each shunt that pluto is managing without an
associated connection.
.PP Statistics can be seen using ipsec whack --globalstats and reset
using ipsec whack --clearstats. This can be used with the munin
software to monitor VPN services.
.PP --status
To be documented.
.RE
.PP The trafficstatus form will display the xauth username, add_time and the
total in and out bytes of the IPsec SA's.
.PP --trafficstatus
To be documented
.RE
.SS "LOADING CONNECTIONS"
.PP The connection form describes a potential connection to pluto.
pluto needs to know what connections can and should be negotiated.
When pluto is the initiator, it needs to know what to propose. When
pluto is the responder, it needs to know enough to decide whether is
is willing to set up the proposed connection.
.if n .sp
Tip
.PP It is also possible to add connections from the command line using addconn. The syntax is identical to ipsec.conf(5) with all options supported (since Libreswan version 5.3)
.sp .5v
.PP The description of a potential connection can specify a large number of
details. Each connection has a unique name. This name will appear in a
updown shell command, so it should not contain punctuation that would make
the command ill-formed.
.PP --name connection-name
Sets the name of the connection.
.RE
.PP The topology of a connection is symmetric, so to save space here is half
a picture:
.PP
client_subnet<-->host:ikeport<-->nexthop<---
.PP A similar trick is used in the flags. The same flag names are used for
both ends. Those before the --to flag describe the left side and
those afterwards describe the right side. When pluto attempts to use
the connection, it decides whether it is the left side or the right side of
the connection, based on the IP numbers of its interfaces.
.PP --id id
The identity of the end. Currently, this can be an IP address (specified as
dotted quad or as a Fully Qualified Domain Name, which will be resolved
immediately) or as a Fully Qualified Domain Name itself (prefixed by
"@" to signify that it should not be resolved), or as user@FQDN,
or an X.509 DN. pluto only authenticates the identity, and does not
use it for addressing, so, for example, an IP address need not be the one to
which packets are to be sent. If the option is absent, the identity defaults
to the IP address specified by --host.
.RE
.PP --host ip-address
--host %any
--host %opportunistic
The IP address of the end (generally the public interface). If pluto
is to act as a responder for IKE negotiations initiated from unknown IP
addresses (the "Road Warrior" case), the IP address should be
specified as %any (currently, the obsolete notation 0.0.0.0 is also
accepted for this). If pluto is to opportunistically initiate the
connection, use %opportunistic
.RE
.PP --cert friendly_name
The friendly_name (or nickname) of the X.509 certificate that was used when
imported the certificate into the NSS database. See ipsec.conf(5) on
how to extract this from the PKCS#12 file.
.RE
.PP --ckaid CKAID
The CKAID of the X.509 certificate or host key.
For X.509 certificates, the CKAID is either the certificate's SubjectKeyIdentifier or the public key's SHA1 fingerprint (when the SubjectKeyIdentifier isn't specified). For host keys the CKAID is the SHA1 fingerprint of the public key.
.RE
.PP --ca distinguished name
The X.509 Certificate Authority's Distinguished Name (DN) used as trust
anchor for this connection. This is the CA certificate that signed the host
certificate, as well as the certificate of the incoming client.
.RE
.PP --groups access control groups
The access control groups used.
.RE
.PP --sendcert yes|forced|always|ifasked|no|never
Whether or not to send our X.509 certificate credentials. This could
potentially give an attacker too much information about which identities are
allowed to connect to this host. The default is to use ifasked when
we are a Responder, and to use yes (which is the same as
forced and always if we are an Initiator. The values no
and never are equivalent. NOTE: "forced" does not seem to
be actually implemented - do not use it.
.RE
.PP --sendca none|issuer|all
How much of our available X.509 trust chain to send with the end certificate, excluding any root CAs. Specifying issuer sends just the issuing intermediate CA, while all will send the entire chain of intermediate CAs.none will not send any CA certs. The default is none which maintains the current libreswan behavior.
.RE
.PP --certtype number
The X.509 certificate type number.
.RE
.PP --send-supported-auth-methods
Whether to send the SUPPORTED_AUTH_METHODS notification to the remote peer. When enabled, the locally supported authentication methods are announced in IKE_SA_INIT response and IKE_AUTH request, allowing the peer to pick a compatible method before sending its AUTH payload. The default is no.
.RE
.PP --ikeport port-number
The UDP port that IKE listens to on that host. The default is 500.
(pluto on this machine uses the port specified by its own command
line argument, so this only affects where pluto sends messages.)
.RE
.PP --nexthop ip-address
Where to route packets for the peer's client (presumably for the peer too,
but it will not be used for this). When pluto installs an IPsec SA,
it issues a route command. It uses the nexthop as the gateway. The default
is the peer's IP address (this can be explicitly written as %direct;
the obsolete notation 0.0.0.0 is accepted). This option is necessary if
pluto's host's interface used for sending packets to the peer is
neither point-to-point nor directly connected to the peer.
.RE
.PP --subnet subnet
--client subnet
The subnet for which the IPsec traffic will be destined. If not specified,
the host will be the client. The subnet can be specified using the general
form address/mask. The most convenient form of the mask
is a decimal integer, specifying the number of leading one bits in the mask.
So, for example, 10.0.0.0/8 would specify the class A network "Net
10".
.RE
.PP --clientprotoport protocol/port
Specify the Port Selectors (filters) to be used on this connection. The
general form is protocol/port. This is most commonly used to
limit the connection to L2TP traffic only by specifying a value of
17/1701 for UDP (protocol 17) and port 1701. The notation
17/%any can be used to allow all UDP traffic and is needed for L2TP
connections with Windows XP machines before Service Pack 2.
.RE
.PP --narrowing yes|no|auto
IKEv2 (RFC5996) Section 2.9 Traffic Selector narrowing options. See
narrowing in ipsec.conf(5).
.RE
.PP --sourceip ip-address
The IP address for this host to use when transmitting a packet to the remote
IPsec gateway itself. This option is used to make the gateway itself use its
internal IP, which is part of the --client subnet.
Otherwise it will use its nearest IP address, which is its public IP
address, which is not part of the subnet-subnet IPsec tunnel, and would
therefore not get encrypted.
.RE
.PP --xauthserver
This end is an xauthserver. It will lookup the xauth user name and password
and verify this before allowing the connection to get established.
.RE
.PP --xauthclient
This end is an xauthclient. To bring this connection up with the
--initiate also requires the client to specify --xauthuser
username and --xauthpass password
.RE
.PP --xauthuser
The username for the xauth authentication.This option is normally passed
along by ipsec-up(8) when an xauth connection is started using
ipsec up connection.
.RE
.PP --xauthpass
The password for the xauth authentication. This option is normally passed
along by ipsec-up(8) when an xauth connection is started using
ipsec up connection.
.RE
.PP --modecfgserver
This end is an Mode Config server.
.RE
.PP --modecfgclient
This end is an Mode Config client.
.RE
.PP --modecfgdns
A comma separated list of DNS server IP's to pass along to connecting
clients.
.RE
.PP --modecfgdomains
A comma separated list of internal DNS domains to pass along to connecting
clients.
.RE
.PP --dnskeyondemand
Specifies that when an RSA public key is needed to authenticate this host,
and it isn't already known, fetch it from DNS.
.RE
.PP --updown updown
Specifies an external shell command to be run whenever pluto brings up
or down a connection. The script is used to build a shell command, so it may
contain positional parameters, but ought not to have punctuation that would
cause the resulting command to be ill-formed. The default is ipsec
_updown. Pluto passes a dozen environment variables to the script about
the connection involved.
.RE
.PP --to
Separates the specification of the left and right ends of the connection.
Pluto tries to decide whether it is left or right based on the
information provided on both sides of this option.
.RE
.PP The potential connection description also specifies characteristics of
rekeying and security.
.PP --psk
Propose and allow preshared secret authentication for IKE peers. This
authentication requires that each side use the same secret. May be combined
with --rsasig; at least one must be specified.
.RE
.PP --rsasig
Propose and allow RSA signatures for authentication of IKE peers. This
authentication requires that each side have have a private key of its own
and know the public key of its peer. May be combined with --psk; at
least one must be specified.
.RE
.PP --encrypt
All proposed or accepted IPsec SAs will include non-null ESP. The actual
choices of transforms are wired into pluto.
.RE
.PP --authenticate
All proposed IPsec SAs will include AH. All accepted IPsec SAs will include
AH or ESP with authentication. The actual choices of transforms are wired
into pluto. Note that this has nothing to do with IKE
authentication.
.RE
.PP --compress
All proposed IPsec SAs will include IPCOMP (compression).
.RE
.PP --tunnel
The IPsec SA should use tunneling. Implicit if the SA is for clients. Must
only be used with --authenticate or --encrypt.
.RE
.PP --ipv4
The host addresses will be interpreted as IPv4 addresses. This is the
default. Note that for a connection, all host addresses must be of the same
Address Family (IPv4 and IPv6 use different Address Families).
.RE
.PP --ipv6
The host addresses (including nexthop) will be interpreted as IPv6 addresses.
Note that for a connection, all host addresses must be of the same Address
Family (IPv4 and IPv6 use different Address Families).
.RE
.PP --tunnelipv4
The client addresses will be interpreted as IPv4 addresses. The default is to
match what the host will be. This does not imply --tunnel so the flag
can be safely used when no tunnel is actually specified. Note that for a
connection, all tunnel addresses must be of the same Address Family.
.RE
.PP --tunnelipv6
The client addresses will be interpreted as IPv6 addresses. The default is to
match what the host will be. This does not imply --tunnel so the flag
can be safely used when no tunnel is actually specified. Note that for a
connection, all tunnel addresses must be of the same Address Family.
.RE
.PP --pfs
There should be Perfect Forward Secrecy - new keying material will be
generated for each IPsec SA when running Quick Mode in IKEv1 or Create Child
in IKEv2. Without this option, the SAKMP SA keying material is used instead.
pluto will propose the same group that was used with the original IKE
SA.
.RE
.PP --ike ike-proposals
--esp esp-proposals
--ah ah-proposals
The algorithms to propose and accept when negitiating either an IKE (ISAKMP)
SA or Child (IPsec) SA. See ipsec.conf(5) for a detailed description
of the proposal format.
.RE
.PP --aggrmode
This tunnel is using aggressive mode ISAKMP negotiation. The default is main
mode. Aggressive mode is less secure than main mode as it reveals your
identity to an eavesdropper, but is needed to support road warriors using
PSK keys or to interoperate with other buggy implementations insisting on
using aggressive mode.
.RE
.PP --modecfgpull
Pull the Mode Config network information from the peer.
.RE
.PP --dpddelay seconds
Set the delay (in seconds) between Dead Peer Detection (RFC 3706) keepalives
(R_U_THERE, R_U_THERE_ACK) that are sent for this connection (default 30
seconds).
.RE
.PP --timeout seconds
Set the length of time (in seconds) we will idle without hearing either an
R_U_THERE poll from our peer, or an R_U_THERE_ACK reply. After this period
has elapsed with no response and no traffic, we will declare the peer dead,
and remove the SA (default 120 seconds).
.RE
.PP --encapsulation yes|no|auto
In some cases, for example when ESP packets are filtered or when a broken
IPsec peer does not properly recognise NAT, it can be useful to force
RFC-3948 encapsulation using this option. It causes pluto lie and tell the
remote peer that RFC-3948 encapsulation (ESP in UDP port 4500 packets) is
required.
.RE
.PP If none of the --encrypt, --authenticate,
--compress, or --pfs flags is given, the initiating the
connection will only build an ISAKMP SA. For such a connection, client
subnets have no meaning and must not be specified.
.PP Apart from initiating directly using the --initiate option, a
tunnel can be loaded with a different policy.
.PP --initiateontraffic
Only initiate the connection when we have traffic to send over the
connection.
.RE
.PP --pass
Allow unencrypted traffic to flow until the tunnel is initiated.
.RE
.PP --drop
Drop unencrypted traffic silently.
.RE
.PP --reject
Drop unencrypted traffic silently, but send an ICMP message notifying the
other end.
.RE
.PP These options need to be documented:
.PP --failnone
To be documented.
.RE
.PP --failpass
To be documented.
.RE
.PP --faildrop
To be documented.
.RE
.PP --failreject
To be documented.
.RE
.SS "Examples"
.PP It would be normal to start pluto in one of the system
initialization scripts. It needs to be run by the superuser. Generally, no
arguments are needed. To run in manually, the superuser can simply type
.PP ipsec pluto
.PP The command will immediately return, but a pluto process will be
left running, waiting for requests from whack or a peer.
.PP Using whack, several potential connections would be described:
.PP ipsec whack --name silly --host127.0.0.1 --to --host 127.0.0.2
--ikelifetime 900 --ipseclifetime 800
.PP Since this silly connection description specifies neither encryption,
authentication, nor tunneling, it could only be used to establish an ISAKMP
SA.
.PP ipsec whack --name conn_name --host 10.0.0.1 --client 10.0.1.0/24 --to
--host 10.0.0.2 --client 10.0.2.0/24 --encrypt
.PP This is something that must be done on both sides. If the other side is
pluto, the same whack command could be used on it (the command
syntax is designed to not distinguish which end is ours).
.PP Now that the connections are specified, pluto is ready to handle
requests and replies via the public interfaces. We must tell it to discover
those interfaces and start accepting messages from peers:
.PP ipsec whack --listen
.PP If we don't immediately wish to bring up a secure connection between the
two clients, we might wish to prevent insecure traffic. The routing form
asks pluto to cause the packets sent from our client to the peer's
client to be routed through the ipsec0 device; if there is no SA, they will
be discarded:
.PP ipsec whack --route conn_name
.PP Finally, we are ready to get pluto to initiate negotiation for an
IPsec SA (and implicitly, an ISAKMP SA):
.PP ipsec whack --initiate --name conn_name
.PP A small log of interesting events will appear on standard output (other
logging is sent to syslog).
.PP whack can also be used to terminate pluto cleanly, tearing
down all SAs that it has negotiated.
.PP ipsec whack --shutdown
.PP Notification of any IPSEC SA deletion, but not ISAKMP SA deletion is sent
to the peer. Unfortunately, such Notification is not reliable. Furthermore,
pluto itself ignores Notifications.
.SS "XAUTH"
.PP If pluto needs additional authentication, such as defined by the
XAUTH specifications, then it may ask whack to prompt the operator
for username or passwords. Typically, these will be entered interactively. A
GUI that wraps around whack may look for the 041 (username) or 040
(password) prompts, and display them to the user.
.PP For testing purposes, the options --xauthuser user
--xauthpass pass may be be given prior to the
--initiate to provide responses to the username and password
prompts.
.SS "Rekeying"
.PP When an SA that was initiated by pluto has only a bit of lifetime
left, pluto will initiate the creation of a new SA. This applies to
ISAKMP and IPsec SAs. The rekeying will be initiated when the SA's remaining
lifetime is less than the rekeymargin plus a random percentage, between 0
and rekeyfuzz, of the rekeymargin.
.PP Similarly, when an SA that was initiated by the peer has only a bit of
lifetime left, pluto will try to initiate the creation of a
replacement. To give preference to the initiator, this rekeying will only be
initiated when the SA's remaining lifetime is half of rekeymargin. If
rekeying is done by the responder, the roles will be reversed: the responder
for the old SA will be the initiator for the replacement. The former
initiator might also initiate rekeying, so there may be redundant SAs
created. To avoid these complications, make sure that rekeymargin is
generous.
.PP One risk of having the former responder initiate is that perhaps none of
its proposals is acceptable to the former initiator (they have not been used
in a successful negotiation). To reduce the chances of this happening, and
to prevent loss of security, the policy settings are taken from the old SA
(this is the case even if the former initiator is initiating). These may be
stricter than those of the connection.
.PP pluto will not rekey an SA if that SA is not the most recent of
its type (IPsec or ISAKMP) for its potential connection. This avoids
creating redundant SAs.
.PP The random component in the rekeying time (rekeyfuzz) is intended to make
certain pathological patterns of rekeying unstable. If both sides decide to
rekey at the same time, twice as many SAs as necessary are created. This
could become a stable pattern without the randomness.
.PP Another more important case occurs when a security gateway has SAs with
many other security gateways. Each of these connections might need to be
rekeyed at the same time. This would cause a high peek requirement for
resources (network bandwidth, CPU time, entropy for random numbers). The
rekeyfuzz can be used to stagger the rekeying times.
.PP Once a new set of SAs has been negotiated, pluto will never send
traffic on a superseded one. Traffic will be accepted on an old SA until it
expires.
.SS "Selecting a Connection When Responding: Road Warrior
Support"
.PP When pluto receives an initial Main Mode message, it needs to
decide which connection this message is for. It picks based solely on the
source and destination IP addresses of the message. There might be several
connections with suitable IP addresses, in which case one of them is
arbitrarily chosen. (The ISAKMP SA proposal contained in the message could
be taken into account, but it is not.)
.PP The ISAKMP SA is negotiated before the parties pass further identifying
information, so all ISAKMP SA characteristics specified in the connection
description should be the same for every connection with the same two host
IP addresses. At the moment, the only characteristic that might differ is
authentication method.
.PP Up to this point, all configuring has presumed that the IP addresses are
known to all parties ahead of time. This will not work when either end is
mobile (or assigned a dynamic IP address for other reasons). We call this
situation "Road Warrior". It is fairly tricky and has some
important limitations, most of which are features of the IKE protocol.
.PP Only the initiator may be mobile: the initiator may have an IP number
unknown to the responder. When the responder doesn't recognize the IP
address on the first Main Mode packet, it looks for a connection with itself
as one end and %any as the other. If it cannot find one, it refuses
to negotiate. If it does find one, it creates a temporary connection that is
a duplicate except with the %any replaced by the source IP address
from the packet; if there was no identity specified for the peer, the new IP
address will be used.
.PP When pluto is using one of these temporary connections and needs
to find the preshared secret or RSA private key in ipsec.secrets, and
the connection specified no identity for the peer, %any is used as
its identity. After all, the real IP address was apparently unknown to the
configuration, so it is unreasonable to require that it be used in this
table.
.PP Part way into the Phase 1 (Main Mode) negotiation using one of these
temporary connection descriptions, pluto will receive an Identity
Payload. At this point, pluto checks for a more appropriate
connection, one with an identity for the peer that matches the payload and
would use the same keys as so far used for authentication. If it finds one,
it will switch to using this better connection (or a temporary one derived
from this, if it has %any for the peer's IP address). It may even
turn out that no connection matches the newly discovered identity, including
the current connection; if so, pluto terminates negotiation.
.PP Unfortunately, if preshared secret authentication is being used, the
Identity Payload is encrypted using this secret, so the secret must be
selected by the responder without knowing this payload. This limits there to
being at most one preshared secret for all Road Warrior systems connecting
to a host. RSA Signature authentication does not require that the responder
knows how to select the initiator's public key until after the initiator's
Identity Payload is decoded (using the responder's private key, so that must
be preselected).
.PP When pluto is responding to a Quick Mode negotiation via one of
these temporary connection descriptions, it may well find that the subnets
specified by the initiator don't match those in the temporary connection
description. If so, it will look for a connection with matching subnets, its
own host address, a peer address of %any and matching identities. If
it finds one, a new temporary connection is derived from this one and used
for the Quick Mode negotiation of IPsec SAs. If it does not find one,
pluto terminates negotiation.
.PP Be sure to specify an appropriate nexthop for the responder to send a
message to the initiator: pluto has no way of guessing it (if
forwarding isn't required, use an explicit %direct as the nexthop and
the IP address of the initiator will be filled in; the obsolete notation
0.0.0.0 is still accepted).
.PP pluto has no special provision for the initiator side. The current
(possibly dynamic) IP address and nexthop must be used in defining
connections. These must be properly configured each time the initiator's IP
address changes. pluto has no mechanism to do this automatically.
.PP Although we call this Road Warrior Support, it could also be used to
support encrypted connections with anonymous initiators. The responder's
organization could announce the preshared secret that would be used with
unrecognized initiators and let anyone connect. Of course the initiator's
identity would not be authenticated.
.PP If any Road Warrior connections are supported, pluto cannot reject
an exchange initiated by an unknown host until it has determined that the
secret is not shared or the signature is invalid. This must await the third
Main Mode message from the initiator. If no Road Warrior connection is
supported, the first message from an unknown source would be rejected. This
has implications for ease of debugging configurations and for denial of
service attacks.
.PP Although a Road Warrior connection must be initiated by the mobile side,
the other side can and will rekey using the temporary connection it has
created.
.SS "Miscellaneous Options"
.PP --interface interfacename
Specifies that the named real public network interface should be considered. The interface name specified should not be ipsecN. If the option doesn't appear, all interfaces are considered. To specify several interfaces, use the option once for each. One use of this option is to specify which interface should be used when two or more share the same IP address.
.RE
.PP --ikeport port-number
Changes the UDP port that pluto will use (default, specified by IANA: 500).
.RE
.PP --secretsfile file
Specifies the file for authentication secrets (default: /etc/ipsec.secrets). This name is subject to "globbing" as in sh(1), so every file with a matching name is processed. Quoting is generally needed to prevent the shell from doing the globbing.
.RE
.PP --nofork
Disable "daemon fork" (default is to fork). In addition, after the lock file and control socket are created, print the line "Pluto initialized" to standard out.
.RE
.PP --uniqueids
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.
.RE
.PP --force-busy
If this option has been selected, pluto will be forced to be "busy". In this state, which happens when there is a Denial of Service attack, will force pluto to use cookies before accepting new incoming IKE packets. Cookies are send and required in ikev1 Aggressive Mode and in ikev2. This option is mostly used for testing purposes, but can be selected by paranoid administrators as well.
.RE
.PP --stderrlog
Log goes to standard out (default is to use syslogd(8).
.RE
.SS "Debugging"
.PP whack accepts the --debug to control the level of debugging
enabled within pluto:
.PP --debug help (whack only)
List the debugging classes recognised by pluto.
.RE
.PP --debug class
--no-debug class
--debug no-class
Enable (disable) logging of the specified debugging class within pluto.
.RE
.PP For more details, see plutodebug= in ipsec.conf(5).
.SS "Impairing"
.PP pluto and whack accept several optional arguments that
alter (impair) correct behaviour.
.PP These options are solely intended for use by developers when testing
pluto.
.PP --impair help (whack only)
List all the behaviours that can be altered (impaired).
.RE
.PP --impair list (whack only)
List all the behaviours that are currently altered (impaired).
.RE
.PP --impair none
Disable all altered (impaired) behaviours.
.RE
.PP --impair behaviour
--impair behaviour:how
--no-impair behaviour
Alter (impair) pluto inducing the (possibly erroneous) behaviour.
.RE
.SS "Pluto's Behaviour When Things Go Wrong"
.PP When pluto doesn't understand or accept a message, it just ignores
the message. It is not yet capable of communicating the problem to the other
IKE daemon (in the future it might use Notifications to accomplish this in
many cases). It does log a diagnostic.
.PP When pluto gets no response from a message, it resends the same
message (a message will be sent at most three times). This is appropriate:
UDP is unreliable.
.PP When pluto gets a message that it has already seen, there are many cases
when it notices and discards it. This too is appropriate for UDP.
.PP Combine these three rules, and you can explain many apparently mysterious
behaviours. In a pluto log, retrying isn't usually the interesting
event. The critical thing is either earlier (pluto got a message that
it didn't like and so ignored, so it was still awaiting an acceptable
message and got impatient) or on the other system (pluto didn't send
a reply because it wasn't happy with the previous message).
.SS "Notes"
.PP Each IPsec SA is assigned an SPI, a 32-bit number used to refer to the
SA. The IKE protocol lets the destination of the SA choose the SPI. The
range 0 to 0xFF is reserved for IANA. pluto also avoids choosing an
SPI in the range 0x100 to 0xFFF, leaving these SPIs free for manual keying.
Remember that the peer, if not pluto, may well chose SPIs in this
range.
.SS "Policies"
.PP This catalogue of policies may be of use when trying to configure
pluto and another IKE implementation to interoperate.
.PP In Phase 1, only Main Mode is supported. We are not sure that Aggressive
Mode is secure. For one thing, it does not support identity protection. It
may allow more severe Denial Of Service attacks.
.PP No Informational Exchanges are supported. These are optional and since
their delivery is not assured, they must not matter. It is the case that
some IKE implementations won't interoperate without Informational Exchanges,
but we feel they are broken.
.PP No Informational Payloads are supported. These are optional, but useful.
It is of concern that these payloads are not authenticated in Phase 1, nor
in those Phase 2 messages authenticated with HASH(3).
.PP •
Diffie Hellman Group MODP 1536 (5) is supported. Groups MODP768 and MODP 1024 (1 and 2) are not supported because those are too weak.
.RE
.PP •
Host authentication can be done by RSA Signatures or Pre-Shared Secrets.
.RE
.PP •
TODO! This information is outdated. 3DES CBC (Cypher Block Chaining mode) is the only encryption supported, both for ISAKMP SAs and IPSEC SAs.
.RE
.PP •
MD5 and SHA1 hashing are supported for packet authentication in both kinds of SAs.
.RE
.PP •
The ESP, AH, or AH plus ESP are supported. If, and only if, AH and ESP are combined, the ESP need not have its own authentication component. The selection is controlled by the --encrypt and --authenticate flags.
.RE
.PP •
Each of these may be combined with IPCOMP Deflate compression, but only if the potential connection specifies compression.
.RE
.PP •
The IPSEC SAs may be tunnel or transport mode, where appropriate. The --tunnel flag controls this when pluto is initiating.
.RE
.PP •
When responding to an ISAKMP SA proposal, the maximum acceptable lifetime is eight hours. The default is one hour. There is no minimum. The --ikelifetime flag controls this when pluto is initiating.
.RE
.PP •
When responding to an IPSEC SA proposal, the maximum acceptable lifetime is one day. The default is eight hours. There is no minimum. The --ipseclifetime flag controls this when pluto is initiating.
.RE
.PP •
PFS is acceptable, and will be proposed if the --pfs flag was specified. The DH group proposed will be the same as negotiated for Phase 1.
.RE
.SH "EXIT STATUS"
.PP If ipsec whack detects a problem, it will return an exit status of
1. If it received progress messages from pluto, it returns as status
the value of the numeric prefix from the last such message that was not a
message sent to syslog or a comment (but the prefix for success is treated
as 0). Otherwise, the exit status is 0.
.SH "FILES"
.PP /run/pluto/pluto.pid /run/pluto/pluto.ctl /etc/ipsec.secrets
/dev/urandom
.SH "ENVIRONMENT"
.PP pluto does not use any environment variables
.SH "SEE ALSO"
.PP The rest of the Libreswan distribution, in particular
ipsec(8).
.PP ipsec(8) is designed to make using pluto more pleasant. Use
it!
.PP ipsec.secrets(5) describes the format of the secrets file.
.PP For more information on IPsec, the mailing list, and the relevant
documents, see:
.PP https://datatracker.ietf.org/wg/ipsecme/charter/
.PP At the time of writing, the latest IETF IKE RFC is:
.PP RFC 7296 Internet Key Exchange Protocol Version 2 (IKEv2)
.PP The Libreswan web site <https://libreswan.org> and the mailing
lists described there.
.PP The Libreswan wiki <https://libreswan.org/wiki> and the mailing
lists described there.
.PP The Libreswan list of implemented RFCs
<https://libreswan.org/wiki/Implemented_Standards>
.SH "HISTORY"
.PP This code is released under the GPL terms. See the accompanying files
CHANGES COPYING and CREDITS.* for more details.
.PP Detailed history (including FreeS/WAN and Openswan) can be found in the
docs/ directory.
.PP The --pfsgroup was removed in Libreswan version 5.3. Both
--ike and --esp have supported compound proposals since
version 4.0. See ipsec.conf(5).
.SH "BUGS"
.PP Please see <https://github.com/libreswan/libreswan/issues>
for a list of currently known bugs and missing features.
.PP Bugs should be reported to the <swan-dev@lists.libreswan.org>
mailing list.
.SH "AUTHOR"
Andrew Cagney, 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, Vukasin
Karadzic
| 08/30/2026 | Libreswan v5.4-HEAD |