init
This commit is contained in:
commit
27cab7b65f
29
README.md
Normal file
29
README.md
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# Wireguard config for OpenBSD
|
||||||
|
|
||||||
|
## Server
|
||||||
|
```sh
|
||||||
|
pkg_add wireguard-tools
|
||||||
|
pkg_add qrencode #optional
|
||||||
|
sh wireguard_server.sh
|
||||||
|
```
|
||||||
|
### For each client
|
||||||
|
```sh
|
||||||
|
sh wireguard_client.sh client_name
|
||||||
|
```
|
||||||
|
- config file will be generated at /etc/wireguard/clients/client_name.conf
|
||||||
|
- qr code will be generated
|
||||||
|
|
||||||
|
|
||||||
|
## Client
|
||||||
|
```sh
|
||||||
|
wg-quick up client_name.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
### IOS
|
||||||
|
https://apps.apple.com/us/app/wireguard/id1441195209 (App Store)
|
||||||
|
https://apps.apple.com/us/app/wireguard/id1451685025 (Mac App Store)
|
||||||
|
|
||||||
|
|
||||||
|
### Android
|
||||||
|
https://play.google.com/store/apps/details?id=com.wireguard.android
|
||||||
|
https://f-droid.org/en/packages/com.wireguard.android/
|
59
wireguard_client.sh
Normal file
59
wireguard_client.sh
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ "$(id -u)" -ne 0 ]; then
|
||||||
|
echo "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Usage: $0 <client>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
client=$1
|
||||||
|
server_ip=$(curl ipinfo.io/ip)
|
||||||
|
interface="wg0"
|
||||||
|
config_file="/etc/wireguard/${interface}.conf"
|
||||||
|
clients_dir="/etc/wireguard/clients"
|
||||||
|
server_port=$(grep "ListenPort" ${config_file} | awk '{print $3}')
|
||||||
|
|
||||||
|
last_ip=$(tail -n 1 ${config_file} |\
|
||||||
|
grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}")
|
||||||
|
new_ip=$(echo "$last_ip" | awk -F. '{print $1"."$2"."$3"."$4+1}')
|
||||||
|
client_ip="${new_ip}/32"
|
||||||
|
|
||||||
|
mkdir -p ${clients_dir}
|
||||||
|
cd ${clients_dir} || exit
|
||||||
|
server_public=$(cat "../public.key")
|
||||||
|
umask 077 && wg genkey > "${client}_private.key"
|
||||||
|
wg pubkey < "${client}_private.key" > "${client}_public.key"
|
||||||
|
|
||||||
|
client_private=$(cat "${client}_private.key")
|
||||||
|
client_public=$(cat "${client}_public.key")
|
||||||
|
|
||||||
|
cat > "${client}.conf" << EOF
|
||||||
|
[Interface]
|
||||||
|
PrivateKey = ${client_private}
|
||||||
|
Address=${client_ip}
|
||||||
|
DNS = 9.9.9.9
|
||||||
|
|
||||||
|
# Server
|
||||||
|
[Peer]
|
||||||
|
PublicKey = ${server_public}
|
||||||
|
Endpoint = ${server_ip}:${server_port}
|
||||||
|
AllowedIPs = ::/0, 0.0.0.0/0
|
||||||
|
PersistentKeepalive = 25
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat >> ${config_file} << EOF
|
||||||
|
|
||||||
|
# client [${client}]
|
||||||
|
[Peer]
|
||||||
|
PublicKey = ${client_public}
|
||||||
|
AllowedIPs = ${client_ip}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
qrencode --read-from="${client}.conf" --type=UTF8 --level=M
|
||||||
|
|
||||||
|
sh /etc/netstart ${interface}
|
||||||
|
cat "${clients_dir}/${client}.conf"
|
47
wireguard_server.sh
Normal file
47
wireguard_server.sh
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ "$(id -u)" -ne 0 ]; then
|
||||||
|
echo "This script must be run as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
random_digits=$(LC_ALL=C tr -dc 0-9 </dev/urandom | head -c 4)
|
||||||
|
server_port="5${random_digits}"
|
||||||
|
interface="wg0"
|
||||||
|
config_file="/etc/wireguard/${interface}.conf"
|
||||||
|
|
||||||
|
pkg_add wireguard-tools
|
||||||
|
sysctl net.inet.ip.forwarding=1
|
||||||
|
sysctl net.inet6.ip6.forwarding=1
|
||||||
|
echo "net.inet.ip.forwarding=1" >> /etc/sysctl.conf
|
||||||
|
echo "net.inet6.ip6.forwarding=1" >> /etc/sysctl.conf
|
||||||
|
mkdir -p /etc/wireguard
|
||||||
|
chmod 700 /etc/wireguard
|
||||||
|
cd /etc/wireguard || exit
|
||||||
|
wg genkey > private.key
|
||||||
|
chmod 600 private.key
|
||||||
|
wg pubkey < private.key > public.key
|
||||||
|
server_private=$(cat "private.key")
|
||||||
|
|
||||||
|
cat > ${config_file} << EOF
|
||||||
|
[Interface]
|
||||||
|
PrivateKey = ${server_private}
|
||||||
|
ListenPort = ${server_port}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > /etc/hostname.${interface} << EOF
|
||||||
|
inet 10.0.0.1 255.255.255.0 NONE
|
||||||
|
up
|
||||||
|
|
||||||
|
!/usr/local/bin/wg setconf ${interface} ${config_file}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# pf
|
||||||
|
cat >> /etc/pf.conf << EOF
|
||||||
|
pass in on ${interface}
|
||||||
|
pass in inet proto udp from any to any port ${server_port}
|
||||||
|
pass out on egress inet from (${interface}:network) nat-to (vio0:0)
|
||||||
|
EOF
|
||||||
|
|
||||||
|
sh /etc/netstart ${interface}
|
||||||
|
pfctl -f /etc/pf.conf
|
Loading…
Reference in New Issue
Block a user