wg-quick: add 'strip' subcommand

`wg-quick strip` prints the config file to stdout after stripping it of
all wg-quick-specific options.

This enables tricks such as `wg addconf $DEV <(wg-quick strip $DEV)`.

Signed-off-by: Luis Ressel <aranea@aixah.de>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Luis Ressel 2019-03-14 00:36:22 +01:00 committed by Jason A. Donenfeld
parent 84cf22da0d
commit cdb687cc0b
5 changed files with 50 additions and 5 deletions

View File

@ -11,6 +11,8 @@ wg-quick - set up a WireGuard interface simply
.I down .I down
| |
.I save .I save
|
.I strip
] [ ] [
.I CONFIG_FILE .I CONFIG_FILE
| |
@ -27,7 +29,11 @@ an interface. Running \fIup\fP adds a WireGuard interface, brings up the interfa
supplied IP addresses, sets up mtu and routes, and optionally runs pre/post up scripts. Running \fIdown\fP supplied IP addresses, sets up mtu and routes, and optionally runs pre/post up scripts. Running \fIdown\fP
optionally saves the current configuration, removes the WireGuard interface, and optionally optionally saves the current configuration, removes the WireGuard interface, and optionally
runs pre/post down scripts. Running \fIsave\fP saves the configuration of an existing runs pre/post down scripts. Running \fIsave\fP saves the configuration of an existing
interface without bringing the interface down. interface without bringing the interface down. Use \fIstrip\fP to output a configuration file
with all
.BR wg-quick (8)-specific
options removed, suitable for use with
.BR wg (8).
\fICONFIG_FILE\fP is a configuration file, whose filename is the interface name \fICONFIG_FILE\fP is a configuration file, whose filename is the interface name
followed by `.conf'. Otherwise, \fIINTERFACE\fP is an interface name, with configuration followed by `.conf'. Otherwise, \fIINTERFACE\fP is an interface name, with configuration
@ -243,6 +249,13 @@ For convenience, if only an interface name is supplied, it automatically chooses
This will load the configuration file `/etc/wireguard/wgnet0.conf'. This will load the configuration file `/etc/wireguard/wgnet0.conf'.
The \fIstrip\fP command is useful for reloading configuration files without disrupting active
sessions:
\fB # wg addconf wgnet0 <(wg-quick strip wgnet0)\fP
(Note that the above command will add and update peers but will not remove peers.)
.SH SEE ALSO .SH SEE ALSO
.BR wg (8), .BR wg (8),
.BR ip (8), .BR ip (8),

View File

@ -385,7 +385,7 @@ execute_hooks() {
cmd_usage() { cmd_usage() {
cat >&2 <<-_EOF cat >&2 <<-_EOF
Usage: $PROGRAM [ up | down | save ] [ CONFIG_FILE | INTERFACE ] Usage: $PROGRAM [ up | down | save | strip ] [ CONFIG_FILE | INTERFACE ]
CONFIG_FILE is a configuration file, whose filename is the interface name CONFIG_FILE is a configuration file, whose filename is the interface name
followed by \`.conf'. Otherwise, INTERFACE is an interface name, with followed by \`.conf'. Otherwise, INTERFACE is an interface name, with
@ -452,6 +452,10 @@ cmd_save() {
save_config save_config
} }
cmd_strip() {
echo "$WG_CONFIG"
}
# ~~ function override insertion point ~~ # ~~ function override insertion point ~~
if [[ $# -eq 1 && ( $1 == --help || $1 == -h || $1 == help ) ]]; then if [[ $# -eq 1 && ( $1 == --help || $1 == -h || $1 == help ) ]]; then
@ -468,6 +472,10 @@ elif [[ $# -eq 2 && $1 == save ]]; then
auto_su auto_su
parse_options "$2" parse_options "$2"
cmd_save cmd_save
elif [[ $# -eq 2 && $1 == strip ]]; then
auto_su
parse_options "$2"
cmd_strip
else else
cmd_usage cmd_usage
exit 1 exit 1

View File

@ -368,7 +368,7 @@ execute_hooks() {
cmd_usage() { cmd_usage() {
cat >&2 <<-_EOF cat >&2 <<-_EOF
Usage: $PROGRAM [ up | down | save ] [ CONFIG_FILE | INTERFACE ] Usage: $PROGRAM [ up | down | save | strip ] [ CONFIG_FILE | INTERFACE ]
CONFIG_FILE is a configuration file, whose filename is the interface name CONFIG_FILE is a configuration file, whose filename is the interface name
followed by \`.conf'. Otherwise, INTERFACE is an interface name, with followed by \`.conf'. Otherwise, INTERFACE is an interface name, with
@ -431,6 +431,10 @@ cmd_save() {
save_config save_config
} }
cmd_strip() {
echo "$WG_CONFIG"
}
# ~~ function override insertion point ~~ # ~~ function override insertion point ~~
make_temp make_temp
@ -450,6 +454,10 @@ elif [[ $# -eq 2 && $1 == save ]]; then
auto_su auto_su
parse_options "$2" parse_options "$2"
cmd_save cmd_save
elif [[ $# -eq 2 && $1 == strip ]]; then
auto_su
parse_options "$2"
cmd_strip
else else
cmd_usage cmd_usage
exit 1 exit 1

View File

@ -247,7 +247,7 @@ execute_hooks() {
cmd_usage() { cmd_usage() {
cat >&2 <<-_EOF cat >&2 <<-_EOF
Usage: $PROGRAM [ up | down | save ] [ CONFIG_FILE | INTERFACE ] Usage: $PROGRAM [ up | down | save | strip ] [ CONFIG_FILE | INTERFACE ]
CONFIG_FILE is a configuration file, whose filename is the interface name CONFIG_FILE is a configuration file, whose filename is the interface name
followed by \`.conf'. Otherwise, INTERFACE is an interface name, with followed by \`.conf'. Otherwise, INTERFACE is an interface name, with
@ -305,6 +305,10 @@ cmd_save() {
save_config save_config
} }
cmd_strip() {
echo "$WG_CONFIG"
}
# ~~ function override insertion point ~~ # ~~ function override insertion point ~~
if [[ $# -eq 1 && ( $1 == --help || $1 == -h || $1 == help ) ]]; then if [[ $# -eq 1 && ( $1 == --help || $1 == -h || $1 == help ) ]]; then
@ -321,6 +325,10 @@ elif [[ $# -eq 2 && $1 == save ]]; then
auto_su auto_su
parse_options "$2" parse_options "$2"
cmd_save cmd_save
elif [[ $# -eq 2 && $1 == strip ]]; then
auto_su
parse_options "$2"
cmd_strip
else else
cmd_usage cmd_usage
exit 1 exit 1

View File

@ -361,7 +361,7 @@ execute_hooks() {
cmd_usage() { cmd_usage() {
cat >&2 <<-_EOF cat >&2 <<-_EOF
Usage: $PROGRAM [ up | down | save ] [ CONFIG_FILE | INTERFACE ] Usage: $PROGRAM [ up | down | save | strip ] [ CONFIG_FILE | INTERFACE ]
CONFIG_FILE is a configuration file, whose filename is the interface name CONFIG_FILE is a configuration file, whose filename is the interface name
followed by \`.conf'. Otherwise, INTERFACE is an interface name, with followed by \`.conf'. Otherwise, INTERFACE is an interface name, with
@ -426,6 +426,10 @@ cmd_save() {
save_config save_config
} }
cmd_strip() {
echo "$WG_CONFIG"
}
# ~~ function override insertion point ~~ # ~~ function override insertion point ~~
if [[ $# -eq 1 && ( $1 == --help || $1 == -h || $1 == help ) ]]; then if [[ $# -eq 1 && ( $1 == --help || $1 == -h || $1 == help ) ]]; then
@ -442,6 +446,10 @@ elif [[ $# -eq 2 && $1 == save ]]; then
auto_su auto_su
parse_options "$2" parse_options "$2"
cmd_save cmd_save
elif [[ $# -eq 2 && $1 == strip ]]; then
auto_su
parse_options "$2"
cmd_strip
else else
cmd_usage cmd_usage
exit 1 exit 1