aboutsummaryrefslogtreecommitdiff
path: root/wg-connect.1
diff options
context:
space:
mode:
Diffstat (limited to 'wg-connect.1')
-rw-r--r--wg-connect.1164
1 files changed, 164 insertions, 0 deletions
diff --git a/wg-connect.1 b/wg-connect.1
new file mode 100644
index 0000000..dc8b356
--- /dev/null
+++ b/wg-connect.1
@@ -0,0 +1,164 @@
+.TH WG-CONNECT 1 "2026-06-23" "wg-connect 1.1" "User Commands"
+.SH NAME
+wg-connect \- bring a WireGuard tunnel up or down
+.SH SYNOPSIS
+.B wg-connect up
+.I config
+.br
+.B wg-connect down
+.RI [ name ]
+.SH DESCRIPTION
+.B wg-connect
+manages a WireGuard tunnel on systems that lack
+.BR wg-quick (8),
+systemd, or bash - typically BusyBox-based distributions.
+.PP
+The
+.B up
+command parses a WireGuard configuration file, creates the tunnel
+interface, applies keys and peers, assigns the address, installs
+routes, and optionally updates
+.IR /etc/resolv.conf .
+State is saved to
+.I /tmp/wg-connect.<iface>.state
+so that
+.B down
+can cleanly tear everything down.
+.PP
+The
+.B down
+command reverses every action: restores the original DNS configuration,
+removes endpoint-specific routes, deletes the interface, and restores
+the previous default route.
+.SH OPTIONS
+.TP
+.B up
+.I config
+Bring the tunnel up.
+.I config
+is required and is resolved as follows:
+.RS
+.IP \[bu]
+If it contains a
+.BR / ,
+it is used as a file path directly.
+.IP \[bu]
+If it ends in
+.BR .conf ,
+it is tried in the current directory, then in
+.IR /etc/wireguard/ .
+.IP \[bu]
+Otherwise it is treated as a name and looked up as
+.IR /etc/wireguard/ <name> .conf .
+.RE
+.TP
+.B down
+.RI [ name ]
+Tear a tunnel down. If
+.I name
+is given, the state file
+.I /tmp/wg-connect.<name>.state
+is used and the interface
+.I <name>
+is torn down. If omitted, the interface defaults to
+.BR wg0 .
+.RS
+.IP
+If the expected state file is missing but the interface still exists,
+it is cleaned up as a leftover from a failed
+.B up
+attempt.
+.RE
+.SH CONFIGURATION FORMAT
+The configuration file follows standard WireGuard syntax with an
+.B [Interface]
+section and one or more
+.B [Peer]
+sections. The
+.BR wg-quick (8)
+extensions
+.BR Address ,
+.BR DNS ,
+.BR MTU ,
+.BR Table ,
+.BR PreUp ,
+.BR PostUp ,
+.BR PreDown ,
+.BR PostDown ,
+and
+.B SaveConfig
+are tolerated in the file but are handled by
+.B wg-connect
+itself rather than passed to
+.BR "wg setconf" .
+.PP
+.BR Address ,
+.BR DNS ,
+.BR Endpoint ,
+and
+.B AllowedIPs
+are the fields that drive the script's own setup logic. All other
+fields are forwarded to the kernel through
+.BR "wg setconf" .
+.PP
+The interface name is derived from the configuration file's basename
+(minus the
+.I .conf
+extension), matching
+.BR wg-quick (8)
+behaviour.
+.PP
+Multiple
+.B [Peer]
+sections are supported.
+.B AllowedIPs
+values are accumulated across all peers, and an explicit route to each
+.BR Endpoint 's
+IP address is added through the original default gateway before the
+default route is replaced.
+.SH FILES
+.TP
+.I /etc/wireguard/*.conf
+Configuration files, looked up by name.
+.TP
+.I /tmp/wg-connect.<iface>.state
+Runtime state written by
+.B up
+and consumed by
+.BR down .
+.TP
+.I /tmp/resolv.conf.wg.bak
+Backup of
+.I /etc/resolv.conf
+taken before the VPN DNS is installed.
+.TP
+.I /tmp/wg-connect.<pid>.conf
+Temporary filtered configuration passed to
+.BR "wg setconf" .
+.SH EXIT STATUS
+.TP
+0
+Success.
+.TP
+1
+An error occurred (missing arguments, configuration file not found,
+interface already up, state file missing on
+.BR down ,
+or usage error).
+.SH NOTES
+.B wg-connect
+must be run as root. It manipulates network interfaces, the routing
+table, and
+.IR /etc/resolv.conf .
+.PP
+IPv6 addresses in
+.B AllowedIPs
+and
+.B Endpoint
+are silently skipped. BusyBox
+.B ip
+often lacks reliable IPv6 support.
+.SH SEE ALSO
+.BR wg (8),
+.BR wg-quick (8),
+.BR ip (8)