From 70691678b979750a8076354b1bf2c93d84dd2e65 Mon Sep 17 00:00:00 2001 From: Luis Ressel Date: Thu, 14 Mar 2019 00:36:22 +0100 Subject: 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 --- src/tools/man/wg-quick.8 | 15 ++++++++++++++- src/tools/wg-quick/darwin.bash | 10 +++++++++- src/tools/wg-quick/freebsd.bash | 10 +++++++++- src/tools/wg-quick/linux.bash | 10 +++++++++- src/tools/wg-quick/openbsd.bash | 10 +++++++++- 5 files changed, 50 insertions(+), 5 deletions(-) diff --git a/src/tools/man/wg-quick.8 b/src/tools/man/wg-quick.8 index 00d7dba..6250adc 100644 --- a/src/tools/man/wg-quick.8 +++ b/src/tools/man/wg-quick.8 @@ -11,6 +11,8 @@ wg-quick - set up a WireGuard interface simply .I down | .I save +| +.I strip ] [ .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 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 -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 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'. +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 .BR wg (8), .BR ip (8), diff --git a/src/tools/wg-quick/darwin.bash b/src/tools/wg-quick/darwin.bash index bf07fdb..aa3edeb 100755 --- a/src/tools/wg-quick/darwin.bash +++ b/src/tools/wg-quick/darwin.bash @@ -385,7 +385,7 @@ execute_hooks() { cmd_usage() { 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 followed by \`.conf'. Otherwise, INTERFACE is an interface name, with @@ -452,6 +452,10 @@ cmd_save() { save_config } +cmd_strip() { + echo "$WG_CONFIG" +} + # ~~ function override insertion point ~~ if [[ $# -eq 1 && ( $1 == --help || $1 == -h || $1 == help ) ]]; then @@ -468,6 +472,10 @@ elif [[ $# -eq 2 && $1 == save ]]; then auto_su parse_options "$2" cmd_save +elif [[ $# -eq 2 && $1 == strip ]]; then + auto_su + parse_options "$2" + cmd_strip else cmd_usage exit 1 diff --git a/src/tools/wg-quick/freebsd.bash b/src/tools/wg-quick/freebsd.bash index c3fa47a..9d3a402 100755 --- a/src/tools/wg-quick/freebsd.bash +++ b/src/tools/wg-quick/freebsd.bash @@ -368,7 +368,7 @@ execute_hooks() { cmd_usage() { 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 followed by \`.conf'. Otherwise, INTERFACE is an interface name, with @@ -431,6 +431,10 @@ cmd_save() { save_config } +cmd_strip() { + echo "$WG_CONFIG" +} + # ~~ function override insertion point ~~ make_temp @@ -450,6 +454,10 @@ elif [[ $# -eq 2 && $1 == save ]]; then auto_su parse_options "$2" cmd_save +elif [[ $# -eq 2 && $1 == strip ]]; then + auto_su + parse_options "$2" + cmd_strip else cmd_usage exit 1 diff --git a/src/tools/wg-quick/linux.bash b/src/tools/wg-quick/linux.bash index 84643c4..5eaa504 100755 --- a/src/tools/wg-quick/linux.bash +++ b/src/tools/wg-quick/linux.bash @@ -247,7 +247,7 @@ execute_hooks() { cmd_usage() { 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 followed by \`.conf'. Otherwise, INTERFACE is an interface name, with @@ -305,6 +305,10 @@ cmd_save() { save_config } +cmd_strip() { + echo "$WG_CONFIG" +} + # ~~ function override insertion point ~~ if [[ $# -eq 1 && ( $1 == --help || $1 == -h || $1 == help ) ]]; then @@ -321,6 +325,10 @@ elif [[ $# -eq 2 && $1 == save ]]; then auto_su parse_options "$2" cmd_save +elif [[ $# -eq 2 && $1 == strip ]]; then + auto_su + parse_options "$2" + cmd_strip else cmd_usage exit 1 diff --git a/src/tools/wg-quick/openbsd.bash b/src/tools/wg-quick/openbsd.bash index 9996162..b234609 100755 --- a/src/tools/wg-quick/openbsd.bash +++ b/src/tools/wg-quick/openbsd.bash @@ -361,7 +361,7 @@ execute_hooks() { cmd_usage() { 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 followed by \`.conf'. Otherwise, INTERFACE is an interface name, with @@ -426,6 +426,10 @@ cmd_save() { save_config } +cmd_strip() { + echo "$WG_CONFIG" +} + # ~~ function override insertion point ~~ if [[ $# -eq 1 && ( $1 == --help || $1 == -h || $1 == help ) ]]; then @@ -442,6 +446,10 @@ elif [[ $# -eq 2 && $1 == save ]]; then auto_su parse_options "$2" cmd_save +elif [[ $# -eq 2 && $1 == strip ]]; then + auto_su + parse_options "$2" + cmd_strip else cmd_usage exit 1 -- cgit v1.2.3-59-g8ed1b