comparison files/fwireguard.in @ 458:09c782570d89

Add a rc.d script "fwireguard" to help with automatic setup of Wireguard interfaces
author Franz Glasner <fzglas.hg@dom66.de>
date Tue, 11 Jun 2024 03:15:54 +0200
parents
children 345f1270e41e
comparison
equal deleted inserted replaced
457:dee8e2611f71 458:09c782570d89
1 #!/bin/sh
2
3 # PROVIDE: fwireguard
4 # REQUIRE: NETWORKING
5 # KEYWORD: shutdown
6
7 # @(#)%%SIMPLEVERSIONTAG%%
8
9 #
10 # fwireguard_enable (bool): Set to "YES" to enable wireguard (default: "NO")
11 # fwireguard_wait (str): wait (sleep) this time before calling post-start
12 # when configuring an interface (default: 2s)
13 #
14
15 . /etc/rc.subr
16
17 name=fwireguard
18 desc="Wireguard startup helper"
19 rcvar=fwireguard_enable
20 extra_commands="reload status"
21
22 start_cmd="${name}_start"
23 stop_cmd="${name}_stop"
24 reload_cmd="${name}_reload"
25 status_cmd="${name}_status"
26
27
28 load_rc_config $name
29
30
31 : ${fwireguard_enable:="NO"}
32 : ${fwireguard_wait="2s"}
33
34
35 fwireguard_start()
36 {
37 local _d _f _if
38 _d="%%PREFIX%%/etc/fwireguard"
39 if [ ! -d "${_d}" ]; then mkdir "${_d}"; fi
40 for _if in `/sbin/ifconfig -g wg`; do
41
42 _f="${_d}/${_if}.key"
43 if [ ! -f "${_f}" ]; then
44 echo "Generating secret key for ${_if} in ${_f}"
45 (umask 0077; /usr/bin/wg genkey > "${_f}")
46 fi
47
48 _f="${_d}/${_if}.pub"
49 if [ ! -f "${_f}" ]; then
50 echo "Generating public key for ${_if} in ${_f}"
51 /usr/bin/wg pubkey < ${_d}/${_if}.key > "${_f}"
52 fi
53
54 _f="${_d}/${_if}.conf"
55 if [ ! -f "${_f}" ]; then
56 echo "Generating minimal config for ${_if} in ${_f}"
57 umask 0077
58 echo "[Interface]" > "${_f}"
59 /usr/bin/printf 'PrivateKey\t\t= ' >> "${_f}"
60 /bin/cat "${_d}/${_if}.key" >> "${_f}"
61 echo -e "#ListenPort\t\t= 51820" >> "${_f}"
62 echo -e "#FwMark\t\t\t= 0x12345678\n" >> "${_f}"
63 echo "#[Peer]" >> "${_f}"
64 echo -e "#PublicKey\t\t= BlAbLABlA/EtCeTcEtc=" >> "${_f}"
65 echo -e "#AllowedIPs\t\t= 10.X.X.1/32, 10.X.X.2/32" >> "${_f}"
66 echo -e "#PresharedKey\t\t= BlAbLABlA/EtCeTcEtc=" >> "${_f}"
67 echo -e "#Endpoint\t\t= [2001:db8::1]:51820" >> "${_f}"
68 echo -e "#PersistentKeepalive\t= 30" >> "${_f}"
69 fi
70
71 /sbin/ifconfig "${_if}" destroy
72 /sbin/ifconfig "${_if}" create # will take ifconfig_wgX="inet values" from /etc/rc.conf
73 /usr/bin/wg setconf "${_if}" "${_f}"
74 if [ -x "${_d}/${_if}.post-start" ]; then
75 if [ -n "${fwireguard_wait}" ]; then
76 /bin/sleep "${fwireguard_wait}"
77 fi
78 "${_d}/${_if}.post-start"
79 fi
80 # /usr/bin/wg syncconf ${_if} ${_f}
81 done
82 }
83
84
85 fwireguard_stop()
86 {
87 local _d _if
88 _d="%%PREFIX%%/etc/fwireguard"
89 for _if in `/sbin/ifconfig -g wg`; do
90 if [ -x "${_d}/${_if}.pre-stop" ]; then
91 "${_d}/${_if}.pre-stop"
92 fi
93 /sbin/ifconfig "${_if}" down
94 done
95 }
96
97
98 fwireguard_reload()
99 {
100 fwireguard_start
101 }
102
103
104 fwireguard_status()
105 {
106 local _if
107 for _if in `/sbin/ifconfig -g wg`; do
108 /usr/bin/wg show "${_if}"
109 done
110 }
111
112
113 run_rc_command "$1"