Re: [PATCH] Adding support for reloading configuration via systemd

2020-07-24 Thread Garrit Franke
Am Fr., 24. Juli 2020 um 11:25 Uhr schrieb Garrit Franke
:
>
> On Fri, Jul 24, 2020 at 11:14:52AM +0200, Jason A. Donenfeld wrote:
> > On Fri, Jul 24, 2020 at 10:30 AM Tomcsanyi, Domonkos  
> > wrote:
> > >
> > > Signed-off-by: Domonkos P. Tomcsanyi 
> > > ---
> > > src/systemd/wg-quick@.service | 1 +
> > > 1 file changed, 1 insertion(+)
> > >
> > > diff --git a/src/systemd/wg-quick@.service b/src/systemd/wg-quick@.service
> > > index a9cbb58..8eb040b 100644
> > > --- a/src/systemd/wg-quick@.service
> > > +++ b/src/systemd/wg-quick@.service
> > > @@ -15,6 +15,7 @@ Type=oneshot
> > > RemainAfterExit=yes
> > > ExecStart=/usr/bin/wg-quick up %i
> > > ExecStop=/usr/bin/wg-quick down %i
> > > +ExecReload=/bin/bash -c '/usr/bin/wg syncconf %i <(/usr/bin/wg-quick 
> > > strip
> > > %i)'
> > > Environment=WG_ENDPOINT_RESOLUTION_RETRIES=infinity
> > >
> > > [Install]
> > > --
> > > 2.17.1
> > >
> > > Not the cleanest solution, but I think it might help a lot of people, so 
> > > I'm
> > > submitting it.
> >
> > This actually doesn't seem too bad to me. Are there cleaner solutions
> > that I'm not thinking of that I should consider before applying this
> > patch?
>
> I think it doesn't get cleaner than this one-liner.
> Some time back I submitted a patch that added a restart command to wg-tools.
> We settled on the conclusion that a systemd approach would be much cleaner.

Sorry, just a little follow up:
https://lists.zx2c4.com/pipermail/wireguard/2020-June/005549.html


Re: [PATCH] Adding support for reloading configuration via systemd

2020-07-24 Thread Garrit Franke
On Fri, Jul 24, 2020 at 11:14:52AM +0200, Jason A. Donenfeld wrote:
> On Fri, Jul 24, 2020 at 10:30 AM Tomcsanyi, Domonkos  
> wrote:
> >
> > Signed-off-by: Domonkos P. Tomcsanyi 
> > ---
> > src/systemd/wg-quick@.service | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/src/systemd/wg-quick@.service b/src/systemd/wg-quick@.service
> > index a9cbb58..8eb040b 100644
> > --- a/src/systemd/wg-quick@.service
> > +++ b/src/systemd/wg-quick@.service
> > @@ -15,6 +15,7 @@ Type=oneshot
> > RemainAfterExit=yes
> > ExecStart=/usr/bin/wg-quick up %i
> > ExecStop=/usr/bin/wg-quick down %i
> > +ExecReload=/bin/bash -c '/usr/bin/wg syncconf %i <(/usr/bin/wg-quick strip
> > %i)'
> > Environment=WG_ENDPOINT_RESOLUTION_RETRIES=infinity
> >
> > [Install]
> > --
> > 2.17.1
> >
> > Not the cleanest solution, but I think it might help a lot of people, so I'm
> > submitting it.
> 
> This actually doesn't seem too bad to me. Are there cleaner solutions
> that I'm not thinking of that I should consider before applying this
> patch?

I think it doesn't get cleaner than this one-liner. 
Some time back I submitted a patch that added a restart command to wg-tools. 
We settled on the conclusion that a systemd approach would be much cleaner.



Re: [PATCH] wg-quick: add restart command

2020-06-18 Thread Garrit Franke
Thanks for your comments!
I really like the systemctl reload approach. My main intention with
this patchset was to add this feature to wg-quicks arsenal because (at
least for me) it's the most obvious approach. I mainly use `wg-quick
down wg0 && wg0 up wg0`, I think you guys see where I'm coming from.

I haven't dealt with systemd units yet, but I can certainly look into
it and submit a corresponding patch soon.

Am Mi., 17. Juni 2020 um 10:32 Uhr schrieb Eric Light :
>
> Oh hey that sounds like a great way to do it.  Seems like it'd be simpler 
> than this patch set as well, which is always good.
>
> E
>
> 
> Q: Why is this email five sentences or less?
> A: http://five.sentenc.es
>
> On Wed, 17 Jun 2020, at 20:19, Jason A. Donenfeld wrote:
> > On Wed, Jun 17, 2020 at 2:17 AM Eric Light  wrote:
> > >
> > > As a purely Debian user, the 'service x restart' pattern is far more 
> > > memorable than the syncconf method.  I know personal preference isn't a 
> > > great reason to add a knob, but Garrit's method is probably going to be 
> > > much more familiar to many users.
> >
> > For users who want service management patterns like that, it'd
> > certainly be possible to map the wg-quick strip stuff to `systemctl
> > reload wg-quick@wg0.service`, for that purpose. Maybe that's something
> > we should consider?
> >


[PATCH 1/6] wg-quick: linux: add restart command

2020-06-17 Thread Garrit Franke
---
 src/wg-quick/linux.bash | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/wg-quick/linux.bash b/src/wg-quick/linux.bash
index e4d4c4f..6f42b7f 100755
--- a/src/wg-quick/linux.bash
+++ b/src/wg-quick/linux.bash
@@ -298,7 +298,7 @@ execute_hooks() {
 
 cmd_usage() {
cat >&2 <<-_EOF
-   Usage: $PROGRAM [ up | down | save | strip ] [ CONFIG_FILE | INTERFACE ]
+   Usage: $PROGRAM [ up | down | restart | 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
@@ -352,6 +352,11 @@ cmd_down() {
execute_hooks "${POST_DOWN[@]}"
 }
 
+cmd_restart() {
+   cmd_down
+   cmd_up
+}
+
 cmd_save() {
[[ " $(wg show interfaces) " == *" $INTERFACE "* ]] || die 
"\`$INTERFACE' is not a WireGuard interface"
save_config
@@ -373,6 +378,10 @@ elif [[ $# -eq 2 && $1 == down ]]; then
auto_su
parse_options "$2"
cmd_down
+elif [[ $# -eq 2 && $1 == restart ]]; then
+   auto_su
+   parse_options "$2"
+   cmd_restart
 elif [[ $# -eq 2 && $1 == save ]]; then
auto_su
parse_options "$2"
-- 
2.24.3 (Apple Git-128)



[PATCH 2/6] wg-quick: add restart man page

2020-06-17 Thread Garrit Franke
---
 src/man/wg-quick.8 | 8 +---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/man/wg-quick.8 b/src/man/wg-quick.8
index c693a89..01b99ff 100644
--- a/src/man/wg-quick.8
+++ b/src/man/wg-quick.8
@@ -10,6 +10,8 @@ wg-quick - set up a WireGuard interface simply
 |
 .I down
 |
+.I restart
+|
 .I save
 |
 .I strip
@@ -24,11 +26,11 @@ wg-quick - set up a WireGuard interface simply
 This is an extremely simple script for easily bringing up a WireGuard 
interface,
 suitable for a few common use cases.
 
-Use \fIup\fP to add and set up an interface, and use \fIdown\fP to tear down 
and remove
-an interface. Running \fIup\fP adds a WireGuard interface, brings up the 
interface with the
+Use \fIup\fP to add and set up an interface, use \fIdown\fP to tear down and 
remove
+an interface, and use \fIrestart\fP to restart an interface. Running \fIup\fP 
adds a WireGuard interface, brings up the interface with the
 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
+runs pre/post down scripts. \fIrestart\fP simply combines the \fIup\fP and 
\fIdown\fP command. Running \fIsave\fP saves the configuration of an existing
 interface without bringing the interface down. Use \fIstrip\fP to output a 
configuration file
 with all
 .BR wg-quick (8)-specific
-- 
2.24.3 (Apple Git-128)



[PATCH 6/6] wg-quick: darwin: add restart command

2020-06-17 Thread Garrit Franke
---
 src/wg-quick/darwin.bash | 14 +-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/wg-quick/darwin.bash b/src/wg-quick/darwin.bash
index cde1b54..1d32fbe 100755
--- a/src/wg-quick/darwin.bash
+++ b/src/wg-quick/darwin.bash
@@ -418,7 +418,7 @@ execute_hooks() {
 
 cmd_usage() {
cat >&2 <<-_EOF
-   Usage: $PROGRAM [ up | down | save | strip ] [ CONFIG_FILE | INTERFACE ]
+   Usage: $PROGRAM [ up | down | restart | 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
@@ -478,6 +478,14 @@ cmd_down() {
execute_hooks "${POST_DOWN[@]}"
 }
 
+cmd_restart() {
+   if ! get_real_interface || [[ " $(wg show interfaces) " != *" 
$REAL_INTERFACE "* ]]; then
+   die "\`$INTERFACE' is not a WireGuard interface"
+   fi
+   cmd_down
+   cmd_up
+}
+
 cmd_save() {
if ! get_real_interface || [[ " $(wg show interfaces) " != *" 
$REAL_INTERFACE "* ]]; then
die "\`$INTERFACE' is not a WireGuard interface"
@@ -502,6 +510,10 @@ elif [[ $# -eq 2 && $1 == down ]]; then
auto_su
parse_options "$2"
cmd_down
+elif [[ $# -eq 2 && $1 == restart ]]; then
+   auto_su
+   parse_options "$2"
+   cmd_restart
 elif [[ $# -eq 2 && $1 == save ]]; then
auto_su
parse_options "$2"
-- 
2.24.3 (Apple Git-128)



[PATCH 4/6] wg-quick: linux: add notice to restart command

2020-06-17 Thread Garrit Franke
---
 src/wg-quick/linux.bash | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/wg-quick/linux.bash b/src/wg-quick/linux.bash
index 6f42b7f..b888d63 100755
--- a/src/wg-quick/linux.bash
+++ b/src/wg-quick/linux.bash
@@ -353,6 +353,7 @@ cmd_down() {
 }
 
 cmd_restart() {
+   [[ " $(wg show interfaces) " == *" $INTERFACE "* ]] || die 
"\`$INTERFACE' is not a WireGuard interface"
cmd_down
cmd_up
 }
-- 
2.24.3 (Apple Git-128)



[PATCH] wg-quick: add restart command

2020-06-17 Thread Garrit Franke
This feature seems quite trivial, so I was wondering if there is any
reason not to have this command implemented.

I didn’t bother implementing it for android, since there is probably next to 
no chance of anyone using it on that platform.

I’d be happy to take your feedback!

Thanks,
Garrit Franke

Garrit Franke (6):
  wg-quick: linux: add restart command
  wg-quick: add restart man page
  wg-quick: freebsd: add restart command
  wg-quick: linux: add notice to restart command
  wg-quick: openbsd: add restart command
  wg-quick: darwin: add restart command

 src/man/wg-quick.8|  8 +---
 src/wg-quick/darwin.bash  | 14 +-
 src/wg-quick/freebsd.bash | 12 +++-
 src/wg-quick/linux.bash   | 12 +++-
 src/wg-quick/openbsd.bash | 14 +-
 5 files changed, 53 insertions(+), 7 deletions(-)

-- 
2.24.3 (Apple Git-128)



[PATCH 3/6] wg-quick: freebsd: add restart command

2020-06-17 Thread Garrit Franke
---
 src/wg-quick/freebsd.bash | 12 +++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/wg-quick/freebsd.bash b/src/wg-quick/freebsd.bash
index e1ee67f..81c341b 100755
--- a/src/wg-quick/freebsd.bash
+++ b/src/wg-quick/freebsd.bash
@@ -387,7 +387,7 @@ execute_hooks() {
 
 cmd_usage() {
cat >&2 <<-_EOF
-   Usage: $PROGRAM [ up | down | save | strip ] [ CONFIG_FILE | INTERFACE ]
+   Usage: $PROGRAM [ up | down | restart | 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
@@ -445,6 +445,12 @@ cmd_down() {
execute_hooks "${POST_DOWN[@]}"
 }
 
+cmd_restart() {
+   [[ " $(wg show interfaces) " == *" $INTERFACE "* ]] || die 
"\`$INTERFACE' is not a WireGuard interface"
+   cmd_down
+   cmd_up
+}
+
 cmd_save() {
[[ " $(wg show interfaces) " == *" $INTERFACE "* ]] || die 
"\`$INTERFACE' is not a WireGuard interface"
save_config
@@ -469,6 +475,10 @@ elif [[ $# -eq 2 && $1 == down ]]; then
auto_su
parse_options "$2"
cmd_down
+elif [[ $# -eq 2 && $1 == restart ]]; then
+   auto_su
+   parse_options "$2"
+   cmd_restart
 elif [[ $# -eq 2 && $1 == save ]]; then
auto_su
parse_options "$2"
-- 
2.24.3 (Apple Git-128)



[PATCH 5/6] wg-quick: openbsd: add restart command

2020-06-17 Thread Garrit Franke
---
 src/wg-quick/openbsd.bash | 14 +-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/wg-quick/openbsd.bash b/src/wg-quick/openbsd.bash
index ffd1834..5ccba03 100755
--- a/src/wg-quick/openbsd.bash
+++ b/src/wg-quick/openbsd.bash
@@ -390,7 +390,7 @@ execute_hooks() {
 
 cmd_usage() {
cat >&2 <<-_EOF
-   Usage: $PROGRAM [ up | down | save | strip ] [ CONFIG_FILE | INTERFACE ]
+   Usage: $PROGRAM [ up | down | restart | 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
@@ -448,6 +448,14 @@ cmd_down() {
execute_hooks "${POST_DOWN[@]}"
 }
 
+cmd_restart() {
+   if ! get_real_interface || [[ " $(wg show interfaces) " != *" 
$REAL_INTERFACE "* ]]; then
+   die "\`$INTERFACE' is not a WireGuard interface"
+   fi
+   cmd_down
+   cmd_up
+}
+
 cmd_save() {
if ! get_real_interface || [[ " $(wg show interfaces) " != *" 
$REAL_INTERFACE "* ]]; then
die "\`$INTERFACE' is not a WireGuard interface"
@@ -471,6 +479,10 @@ elif [[ $# -eq 2 && $1 == down ]]; then
auto_su
parse_options "$2"
cmd_down
+elif [[ $# -eq 2 && $1 == restart ]]; then
+   auto_su
+   parse_options "$2"
+   cmd_restart
 elif [[ $# -eq 2 && $1 == save ]]; then
auto_su
parse_options "$2"
-- 
2.24.3 (Apple Git-128)