creating automated wireguard mesh
This commit is contained in:
parent
ae3999d4f7
commit
a9441e1ad5
1
surreal/README.md
Normal file
1
surreal/README.md
Normal file
@ -0,0 +1 @@
|
||||
# WIP
|
22
surreal/create_vms.sh
Executable file
22
surreal/create_vms.sh
Executable file
@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
script_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||
cd $script_dir
|
||||
set -e
|
||||
export FORMAT=YAML
|
||||
mkdir -p tmp/vms
|
||||
|
||||
for vm_config in vm_configs/*; do
|
||||
vm_name=$(echo $vm_config | cut -d '/' -f2 | cut -d '.' -f1)
|
||||
detee-cli vm deploy --from-yaml $vm_config > tmp/vms/${vm_name}_install.yaml &&
|
||||
echo "The VM $vm_name got created." &
|
||||
done
|
||||
|
||||
wait
|
||||
|
||||
for vm_config in $(grep -r uuid: tmp/vms/ | awk '{ print $2}'); do
|
||||
vm_id=$(echo $vm_config | cut -d '/' -f2 | cut -d '.' -f1)
|
||||
detee-cli vm inspect $vm_id > tmp/vms/${vm_id}_inspect.yaml
|
||||
vm_name=$(grep 'hostname: ' tmp/vms/${vm_id}_inspect.yaml |
|
||||
awk '{ print $2 }')
|
||||
mv tmp/vms/${vm_id}_inspect.yaml tmp/vms/${vm_name}_inspect.yaml
|
||||
done
|
80
surreal/deploy.sh
Executable file
80
surreal/deploy.sh
Executable file
@ -0,0 +1,80 @@
|
||||
#!/bin/bash
|
||||
script_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||
cd $script_dir
|
||||
set -e
|
||||
export FORMAT=YAML
|
||||
mkdir -p tmp/wg
|
||||
mkdir -p tmp/logs
|
||||
|
||||
vms=()
|
||||
|
||||
# define VM object
|
||||
vm_count=0
|
||||
new_vm() {
|
||||
(( vm_count++ )) || true
|
||||
local vm_name="$1"
|
||||
local vm_id="vm$vm_count"
|
||||
|
||||
local vm_install_data="tmp/vms/${vm_name}_install.yaml"
|
||||
local vm_inspect_data="tmp/vms/${vm_name}_inspect.yaml"
|
||||
|
||||
vm_node_ip=$(grep 'ip: ' $vm_install_data | awk '{ print $2 }')
|
||||
vm_port=$(grep 'port: ' $vm_install_data | cut -d "'" -f2)
|
||||
wg_privkey=$(wg genkey)
|
||||
wg_pubkey=$(echo $wg_privkey | wg pubkey)
|
||||
|
||||
declare -gA "$vm_id"
|
||||
eval "$vm_id[id]=$vm_count"
|
||||
eval "$vm_id[name]=$vm_name"
|
||||
eval "$vm_id[port]=$vm_port"
|
||||
eval "$vm_id[node_ip]=$vm_node_ip"
|
||||
eval "$vm_id[private_ip]=10.254.254.$vm_count"
|
||||
eval "$vm_id[wg_priv]=$wg_privkey"
|
||||
eval "$vm_id[wg_pub]=$wg_pubkey"
|
||||
|
||||
vms+=("$vm_id")
|
||||
}
|
||||
|
||||
# loops over all VMs
|
||||
for vm_install_file in tmp/vms/*_install.yaml; do
|
||||
vm_name=$(echo $vm_install_file | cut -d '/' -f3 | cut -d '_' -f1)
|
||||
new_vm $vm_name
|
||||
done
|
||||
|
||||
# loops over all VMs in array
|
||||
for main_vm_loop in "${vms[@]}"; do
|
||||
declare -n main_vm_ref="$main_vm_loop"
|
||||
wg_file="tmp/wg/${main_vm_ref[name]}.ini"
|
||||
{
|
||||
echo "[Interface]"
|
||||
echo "Address = "${main_vm_ref[private_ip]}" "
|
||||
echo "PrivateKey = "${main_vm_ref[wg_priv]}" "
|
||||
echo "ListenPort = 1337"
|
||||
} > ${wg_file}
|
||||
|
||||
for inner_vm_loop in "${vms[@]}"; do
|
||||
declare -n inner_vm_ref="$inner_vm_loop"
|
||||
[[ "${inner_vm_ref[id]}" == "${main_vm_ref[id]}" ]] && continue
|
||||
{
|
||||
echo
|
||||
echo "[Peer]"
|
||||
echo "PublicKey = ${inner_vm_ref[wg_pub]}"
|
||||
echo "Endpoint = ${inner_vm_ref[node_ip]}:${inner_vm_ref[port]}"
|
||||
echo "AllowedIPs = ${inner_vm_ref[private_ip]}"
|
||||
echo "PersistentKeepalive = 25"
|
||||
} >> ${wg_file}
|
||||
done
|
||||
echo WireGuard config written to ${wg_file}
|
||||
|
||||
ssh="ssh -p ${main_vm_ref[port]} root@${main_vm_ref[node_ip]}"
|
||||
$ssh pacman -Syu --noconfirm > tmp/logs/${main_vm_ref[name]}.log 2>&1
|
||||
$ssh pacman -S wireguard-tools --needed --noconfirm >> tmp/logs/${main_vm_ref[name]}.log 2>&1
|
||||
echo Packages installed for ${main_vm_ref[name]}
|
||||
|
||||
# TODO: make this reboot persistant
|
||||
$ssh sysctl -w net.ipv4.conf.all.forwarding=1 > /dev/null
|
||||
cat ${wg_file} | $ssh tee /etc/wireguard/brain.conf > /dev/null
|
||||
$ssh wg-quick down brain >> tmp/logs/${main_vm_ref[name]}.log 2>&1 || true
|
||||
$ssh wg-quick up brain >> tmp/logs/${main_vm_ref[name]}.log 2>&1 || true
|
||||
echo WireGuard started on ${main_vm_ref[name]}
|
||||
done
|
10
surreal/vm_configs/brain-1.yaml
Normal file
10
surreal/vm_configs/brain-1.yaml
Normal file
@ -0,0 +1,10 @@
|
||||
hostname: brain-1
|
||||
hours: 700
|
||||
price: 20000
|
||||
location:
|
||||
country: "FR"
|
||||
ipv4: !PublishPorts [ 1337 ]
|
||||
public_ipv6: false
|
||||
vcpus: 4
|
||||
memory_mb: 8000
|
||||
disk_size_gb: 60
|
10
surreal/vm_configs/brain-2.yaml
Normal file
10
surreal/vm_configs/brain-2.yaml
Normal file
@ -0,0 +1,10 @@
|
||||
hostname: brain-2
|
||||
hours: 700
|
||||
price: 20000
|
||||
location:
|
||||
country: "GB"
|
||||
ipv4: !PublishPorts [ 1337 ]
|
||||
public_ipv6: false
|
||||
vcpus: 4
|
||||
memory_mb: 8000
|
||||
disk_size_gb: 60
|
10
surreal/vm_configs/brain-3.yaml
Normal file
10
surreal/vm_configs/brain-3.yaml
Normal file
@ -0,0 +1,10 @@
|
||||
hostname: brain-3
|
||||
hours: 700
|
||||
price: 20000
|
||||
location:
|
||||
country: "US"
|
||||
ipv4: !PublishPorts [ 1337 ]
|
||||
public_ipv6: false
|
||||
vcpus: 4
|
||||
memory_mb: 8000
|
||||
disk_size_gb: 60
|
10
surreal/vm_configs/brain-bastion.yaml
Normal file
10
surreal/vm_configs/brain-bastion.yaml
Normal file
@ -0,0 +1,10 @@
|
||||
hostname: brain-bastion
|
||||
hours: 700
|
||||
price: 20000
|
||||
location:
|
||||
country: "FR"
|
||||
ipv4: !PublishPorts [ 1337 ]
|
||||
public_ipv6: false
|
||||
vcpus: 4
|
||||
memory_mb: 8000
|
||||
disk_size_gb: 60
|
10
surreal/vm_configs/brain-mon.yaml
Normal file
10
surreal/vm_configs/brain-mon.yaml
Normal file
@ -0,0 +1,10 @@
|
||||
hostname: brain-mon
|
||||
hours: 700
|
||||
price: 20000
|
||||
location:
|
||||
country: "US"
|
||||
ipv4: !PublishPorts [ 1337 ]
|
||||
public_ipv6: false
|
||||
vcpus: 4
|
||||
memory_mb: 8000
|
||||
disk_size_gb: 60
|
Loading…
Reference in New Issue
Block a user