Initial commit
This commit is contained in:
29
main.tf
Normal file
29
main.tf
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# Create a new SSH key
|
||||||
|
resource "digitalocean_ssh_key" "default" {
|
||||||
|
name = "Terraform Example"
|
||||||
|
public_key = file("~/.ssh/id_rsa.pub")
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create a new Web Droplet in the nyc2 region
|
||||||
|
resource "digitalocean_droplet" "web" {
|
||||||
|
image = "ubuntu-22-04-x64"
|
||||||
|
name = "wireguard"
|
||||||
|
region = "nyc1"
|
||||||
|
size = "s-2vcpu-4gb"
|
||||||
|
ssh_keys = [digitalocean_ssh_key.default.fingerprint]
|
||||||
|
user_data = file("setup.sh")
|
||||||
|
connection {
|
||||||
|
host = digitalocean_droplet.web.ipv4_address
|
||||||
|
type = "ssh"
|
||||||
|
user = "root"
|
||||||
|
private_key = "${file("~/.ssh/id_rsa.pem")}"
|
||||||
|
}
|
||||||
|
|
||||||
|
provisioner "remote-exec" {
|
||||||
|
inline = [ "cat /root/wireguard-config/client-config.conf" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
output "droplet_output" {
|
||||||
|
value = digitalocean_droplet.web.ipv4_address
|
||||||
|
}
|
61
setup.sh
Normal file
61
setup.sh
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
apt update
|
||||||
|
|
||||||
|
# Install wireguard
|
||||||
|
apt install -y wireguard
|
||||||
|
|
||||||
|
LISTENPORT=51820
|
||||||
|
umask 077
|
||||||
|
# Generate public and private key
|
||||||
|
mkdir /root/wireguard-conf
|
||||||
|
cd /root/wireguard-conf
|
||||||
|
|
||||||
|
wg genkey > privatekey
|
||||||
|
wg pubkey < privatekey > publickey
|
||||||
|
mkdir client
|
||||||
|
|
||||||
|
wg genkey > client/privatekey
|
||||||
|
wg pubkey < client/privatekey > client/publickey
|
||||||
|
|
||||||
|
|
||||||
|
echo "[Interface]
|
||||||
|
Address = 10.66.66.1/24,fd42:42:42::1/64
|
||||||
|
ListenPort = $LISTENPORT
|
||||||
|
PrivateKey = $(cat privatekey)
|
||||||
|
|
||||||
|
### Client mike-home
|
||||||
|
[Peer]
|
||||||
|
PublicKey = $(cat client/publickey)
|
||||||
|
AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
|
||||||
|
" > /etc/wireguard/do.conf
|
||||||
|
|
||||||
|
wg-quick up do
|
||||||
|
|
||||||
|
echo "[Interface]
|
||||||
|
PrivateKey = $(cat client/privatekey)
|
||||||
|
Address = 10.66.66.2/32,fd42:42:42::2/128
|
||||||
|
DNS = 1.1.1.1,1.0.0.1
|
||||||
|
|
||||||
|
[Peer]
|
||||||
|
PublicKey = $(cat publickey)
|
||||||
|
Endpoint = $(curl icanhazip.com):$LISTENPORT
|
||||||
|
AllowedIPs = 0.0.0.0/0,::/0
|
||||||
|
" > client-config.conf
|
||||||
|
|
||||||
|
# Add iptables rules to forward internet traffic through this box
|
||||||
|
# We are assuming our Wireguard interface is called do and our
|
||||||
|
# primary public facing interface is called eth0.
|
||||||
|
iptables -I INPUT -p udp --dport 51820 -j ACCEPT
|
||||||
|
iptables -I FORWARD -i eth0 -o do -j ACCEPT
|
||||||
|
iptables -I FORWARD -i do -j ACCEPT
|
||||||
|
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
||||||
|
ip6tables -I FORWARD -i do -j ACCEPT
|
||||||
|
ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
||||||
|
|
||||||
|
# Enable routing on the server
|
||||||
|
echo "net.ipv4.ip_forward = 1
|
||||||
|
net.ipv6.conf.all.forwarding = 1" >/etc/sysctl.d/wg.conf
|
||||||
|
sysctl --system
|
||||||
|
|
||||||
|
|
||||||
|
cat client-config.conf
|
13
terraform.tf
Normal file
13
terraform.tf
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
digitalocean = {
|
||||||
|
source = "digitalocean/digitalocean"
|
||||||
|
version = "2.41.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
provider "digitalocean" {
|
||||||
|
token = var.do_token
|
||||||
|
}
|
||||||
|
|
4
variables.tf
Normal file
4
variables.tf
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
variable "do_token" {
|
||||||
|
type = string
|
||||||
|
description = "Digital Ocean API token"
|
||||||
|
}
|
Reference in New Issue
Block a user