<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lucas Placentino</title>
    <description>The latest articles on DEV Community by Lucas Placentino (@lucasplacentino).</description>
    <link>https://dev.to/lucasplacentino</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F837183%2F681d7146-2512-4f76-b7c3-1a96c48a1eda.gif</url>
      <title>DEV Community: Lucas Placentino</title>
      <link>https://dev.to/lucasplacentino</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lucasplacentino"/>
    <language>en</language>
    <item>
      <title>Set up a Wire-Hole server on a free-tier Oracle Cloud instance</title>
      <dc:creator>Lucas Placentino</dc:creator>
      <pubDate>Wed, 26 Jul 2023 21:05:03 +0000</pubDate>
      <link>https://dev.to/lucasplacentino/set-up-a-wire-hole-server-on-a-free-tier-oracle-cloud-instance-b69</link>
      <guid>https://dev.to/lucasplacentino/set-up-a-wire-hole-server-on-a-free-tier-oracle-cloud-instance-b69</guid>
      <description>&lt;h3&gt;
  
  
  How to create a Wireguard VPN + PiHole ad-blocking DNS instance on a forever-free Oracle Cloud VM
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Want to get a forever free VPN (at a single location) including an ad-blocking DNS server? In this tutorial, we will get advantage of Oracle Cloud’s forever-free tier to get a VM instance at your choice of a datacenter location.&lt;/strong&gt;  &lt;/p&gt;

&lt;h2&gt;
  
  
  1. Get your VM instance
&lt;/h2&gt;

&lt;p&gt;Oracle’s Cloud Infrastructure (OCI) allows you to get access to multiple Virtual Machine (VM) instances for free, for a lifetime (as opposed to AWS or GCP only offering a single year for free), this also includes &lt;strong&gt;IPv4&lt;/strong&gt; addresses for each instance.  &lt;/p&gt;

&lt;p&gt;To get your free tier OCI account, go to:&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.oracle.com/cloud/free/" rel="noopener noreferrer"&gt;https://www.oracle.com/cloud/free/&lt;/a&gt;&lt;br&gt;&lt;br&gt;
You will also have access to some paid features for 30 days, but &lt;strong&gt;don’t worry&lt;/strong&gt;, your free-tier VM will remain &lt;strong&gt;forever-free&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;You have to choose which &lt;strong&gt;datacenter location&lt;/strong&gt; you want your account to reside at, where your free instances will be running. In this tutorial, I will be using Oracle’s Amsterdam datacenter (&lt;em&gt;eu-amsterdam-1&lt;/em&gt;).  &lt;/p&gt;

&lt;p&gt;In the OCI menu, head to &lt;strong&gt;Compute &amp;gt; Instances&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Click on &lt;strong&gt;Create Instance&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Name your instance, for example: &lt;code&gt;wirehole-server&lt;/code&gt;.  &lt;/p&gt;

&lt;p&gt;Under &lt;strong&gt;Image and Shape&lt;/strong&gt;, click &lt;strong&gt;Edit&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Under &lt;strong&gt;Shape&lt;/strong&gt;, click &lt;strong&gt;Change Shape&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;Two architectures are available :  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;x86&lt;/strong&gt;: the AMD &lt;em&gt;VM.Standard.E2.1.Micro&lt;/em&gt; shape&lt;br&gt;
&lt;strong&gt;2 instances&lt;/strong&gt; with each 1/4 vCPU and 1GB RAM.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ARM&lt;/strong&gt;: the ARM Ampere &lt;em&gt;VM.Standard.A1.Flex&lt;/em&gt; shape&lt;br&gt;
&lt;strong&gt;flexible&lt;/strong&gt;: multiple instances or 1 bigger instance, so 4 vCPUs and 24GB RAM to share or in a single instance.  &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can choose any one of the two you prefer. Just be aware that they might require different versions of some software you might install later while experimenting on your own.&lt;br&gt;
I personally used a single, big ARM Ampere VM (with the full 4 vCPUs and 24GB of RAM on it), because I also use this instance for other purposes while running Wire-Hole.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Select&lt;/strong&gt; your chosen shape configuration.  &lt;/p&gt;

&lt;p&gt;Next, under &lt;strong&gt;Image&lt;/strong&gt;, select &lt;strong&gt;Change Image&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Under &lt;strong&gt;Image source&lt;/strong&gt; select &lt;strong&gt;Platform images&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Select &lt;code&gt;Canonical Ubuntu 22.04&lt;/code&gt; (or another OS of your choice, though they are not guaranteed to work with this tutorial).  &lt;/p&gt;

&lt;p&gt;Then, scroll down do &lt;strong&gt;Add SSH keys&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Select &lt;strong&gt;Generate a key pair for me&lt;/strong&gt;. &lt;em&gt;(Or put your own public key if you already have an ssh key pair generated from your computer.)&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Save the private key&lt;/strong&gt; (the &lt;em&gt;.key&lt;/em&gt; file) on your computer, you &lt;strong&gt;WILL NEED&lt;/strong&gt; it later and this is the &lt;strong&gt;ONLY&lt;/strong&gt; time you will be able to download it, so keep it safe and absolutely &lt;strong&gt;do not share it&lt;/strong&gt;. You can also download the public key, but we won’t need it here.  &lt;/p&gt;

&lt;p&gt;Then click on &lt;strong&gt;Create&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
You will have to wait a couple of minutes to have your VM instance up and running. Once the yellow square turns green, it means everything is running.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Done!&lt;/strong&gt; Your VM instance is created and running.  &lt;/p&gt;
&lt;h2&gt;
  
  
  2. Opening up ports
&lt;/h2&gt;

&lt;p&gt;In order to get access to the Wireguard server that will be running on your VM, you need to &lt;strong&gt;open up its port(s)&lt;/strong&gt; in your OCI network.  &lt;/p&gt;

&lt;p&gt;In your &lt;strong&gt;instance page&lt;/strong&gt;, head to &lt;strong&gt;Attached VNIC&lt;/strong&gt; or &lt;strong&gt;Primary VNIC &amp;gt; Subnet &amp;gt; Default Security List&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Click &lt;strong&gt;Add Ingress Rules&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Then put:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Source CIDR&lt;/strong&gt;: &lt;code&gt;0.0.0.0/0&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;IP Protocol&lt;/strong&gt;: &lt;code&gt;UDP&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Destination Port Range&lt;/strong&gt;: &lt;code&gt;51820&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;: &lt;em&gt;WireGuard Port (or whatever you prefer)&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;All done!&lt;/strong&gt; Your instance’s ports that are needed are open.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Setting up the Wire-Hole docker container
&lt;/h2&gt;

&lt;p&gt;In order to set Wire-Hole up in your VM, we need to access its Linux console. To do that, we will use SSH to connect to it.  &lt;/p&gt;

&lt;p&gt;SSHing with your computer is as simple as just going to your Terminal (MacOS, Linux) or PowerShell (Windows) and put:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-i&lt;/span&gt; path/to/private/key ubuntu@IPADDRESS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where &lt;code&gt;path/to/private/key&lt;/code&gt; is where you saved the &lt;strong&gt;SSH private key&lt;/strong&gt; on your computer, and &lt;code&gt;IPADDRESS&lt;/code&gt; is the &lt;strong&gt;Public IP address of your instance&lt;/strong&gt; (you can find it at the instance’s information, under Instance access, looking like &lt;em&gt;150.432.34.346&lt;/em&gt;).&lt;br&gt;&lt;br&gt;
Here, &lt;code&gt;ubuntu&lt;/code&gt; is the user.  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When connecting to it for the first time, your computer will ask to trust the fingerprint of the ssh server, write yes to not get this message again on future ssh sessions.  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You are now remotely connected to your instance’s terminal!  &lt;/p&gt;

&lt;p&gt;We will be using &lt;strong&gt;docker-compose&lt;/strong&gt; to set up the Wire-Hole docker container.&lt;br&gt;&lt;br&gt;
Create a directory to put our docker-compose file and head into it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;wirehole-docker &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;wirehole-docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a file named docker-compose.yml :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To edit the file, you can use any in-terminal editor like vim or nano.&lt;br&gt;&lt;br&gt;
Let’s use &lt;em&gt;nano&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What you need to put into this YML file depends on what architecture you chose for your instance (which shape you selected: ARM Ampere or AMD x86).  &lt;/p&gt;

&lt;h3&gt;
  
  
  For ARM Ampere:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3"&lt;/span&gt;
&lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;private_network&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;ipam&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;default&lt;/span&gt;
      &lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;subnet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10.2.0.0/24&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;unbound&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mvance/unbound-rpi:latest"&lt;/span&gt; &lt;span class="c1"&gt;# or use "pedantic/unbound:latest" (which supports arm64)&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unbound&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt; &lt;span class="c1"&gt;# or "always"&lt;/span&gt;
    &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unbound"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./unbound:/opt/unbound/etc/unbound/"&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;private_network&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;ipv4_address&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10.2.0.200&lt;/span&gt;
&lt;span class="na"&gt;wireguard&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;unbound&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;pihole&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;linuxserver/wireguard&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;wireguard&lt;/span&gt;
    &lt;span class="na"&gt;cap_add&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;NET_ADMIN&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SYS_MODULE&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PUID=1000&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PGID=1000&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;TZ=Europe/Amsterdam&lt;/span&gt; &lt;span class="c1"&gt;# change this to your VM Timezone&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SERVERPORT=51820&lt;/span&gt;
      &lt;span class="c1"&gt;#- SERVERURL=ddns.example.com #optional - For use with DDNS (Uncomment to use)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PEERS=10&lt;/span&gt; &lt;span class="c1"&gt;# How many peers to generate for you (clients)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PEERDNS=10.2.0.100&lt;/span&gt; &lt;span class="c1"&gt;# Set it to point to pihole&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;INTERNAL_SUBNET=10.6.0.0&lt;/span&gt;
      &lt;span class="c1"&gt;#- ALLOWEDIPS=10.2.0.0/24 # Split tunnel. Remove/comment if you want full tunnel (or put 0.0.0.0/0)&lt;/span&gt;

    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./wireguard:/config&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/lib/modules:/lib/modules&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;51820:51820/udp"&lt;/span&gt;
    &lt;span class="na"&gt;dns&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;10.2.0.100&lt;/span&gt; &lt;span class="c1"&gt;# Points to pihole&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;10.2.0.200&lt;/span&gt; &lt;span class="c1"&gt;# Points to unbound&lt;/span&gt;
    &lt;span class="na"&gt;sysctls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;net.ipv4.conf.all.src_valid_mark=1&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt; &lt;span class="c1"&gt;# or "always"&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;private_network&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;ipv4_address&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10.2.0.3&lt;/span&gt;
&lt;span class="na"&gt;pihole&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;unbound&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pihole&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pihole/pihole:latest&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt; &lt;span class="c1"&gt;# or "always"&lt;/span&gt;
    &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pihole&lt;/span&gt;
    &lt;span class="na"&gt;dns&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;127.0.0.1&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;10.2.0.200&lt;/span&gt; &lt;span class="c1"&gt;# Points to unbound&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;TZ&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Europe/Amsterdam"&lt;/span&gt; &lt;span class="c1"&gt;# change this to your VM Timezone&lt;/span&gt;
      &lt;span class="na"&gt;WEBPASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;# Blank password - Can be whatever you want.&lt;/span&gt;
      &lt;span class="na"&gt;ServerIP&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10.2.0.100&lt;/span&gt; &lt;span class="c1"&gt;# Internal IP of pihole&lt;/span&gt;
      &lt;span class="na"&gt;DNS1&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10.2.0.200&lt;/span&gt; &lt;span class="c1"&gt;# Unbound IP&lt;/span&gt;
      &lt;span class="na"&gt;DNS2&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10.2.0.200&lt;/span&gt; &lt;span class="c1"&gt;# If we don't specify two, it will auto pick  google.&lt;/span&gt;
    &lt;span class="c1"&gt;# Volumes store your data between container upgrades&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./etc-pihole/:/etc/pihole/"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./etc-dnsmasq.d/:/etc/dnsmasq.d/"&lt;/span&gt;
    &lt;span class="c1"&gt;# Recommended but not required (DHCP needs NET_ADMIN)&lt;/span&gt;
    &lt;span class="c1"&gt;#   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities&lt;/span&gt;
    &lt;span class="na"&gt;cap_add&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;NET_ADMIN&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;private_network&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;ipv4_address&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10.2.0.100&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  For AMD (x86):
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3"&lt;/span&gt;
&lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;private_network&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;ipam&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;default&lt;/span&gt;
      &lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;subnet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10.2.0.0/24&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;unbound&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mvance/unbound:latest"&lt;/span&gt; &lt;span class="c1"&gt;# for x86 arch&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unbound&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt; &lt;span class="c1"&gt;# or "always"&lt;/span&gt;
    &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;unbound"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./unbound:/opt/unbound/etc/unbound/"&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;private_network&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;ipv4_address&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10.2.0.200&lt;/span&gt;
&lt;span class="na"&gt;wireguard&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;unbound&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;pihole&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;linuxserver/wireguard&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;wireguard&lt;/span&gt;
    &lt;span class="na"&gt;cap_add&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;NET_ADMIN&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SYS_MODULE&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PUID=1000&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PGID=1000&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;TZ=Europe/Amsterdam&lt;/span&gt; &lt;span class="c1"&gt;# change this to your VM Timezone&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SERVERPORT=51820&lt;/span&gt;
      &lt;span class="c1"&gt;#- SERVERURL=ddns.example.com #optional - For use with DDNS (Uncomment to use)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PEERS=10&lt;/span&gt; &lt;span class="c1"&gt;# How many peers to generate for you (clients)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;PEERDNS=10.2.0.100&lt;/span&gt; &lt;span class="c1"&gt;# Set it to point to pihole&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;INTERNAL_SUBNET=10.6.0.0&lt;/span&gt;
      &lt;span class="c1"&gt;#- ALLOWEDIPS=10.2.0.0/24 # Split tunnel. Remove/comment if you want full tunnel (or put 0.0.0.0/0)&lt;/span&gt;

    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./wireguard:/config&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/lib/modules:/lib/modules&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;51820:51820/udp"&lt;/span&gt;
    &lt;span class="na"&gt;dns&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;10.2.0.100&lt;/span&gt; &lt;span class="c1"&gt;# Points to pihole&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;10.2.0.200&lt;/span&gt; &lt;span class="c1"&gt;# Points to unbound&lt;/span&gt;
    &lt;span class="na"&gt;sysctls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;net.ipv4.conf.all.src_valid_mark=1&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt; &lt;span class="c1"&gt;# or "always"&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;private_network&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;ipv4_address&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10.2.0.3&lt;/span&gt;
&lt;span class="na"&gt;pihole&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;unbound&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pihole&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pihole/pihole:latest&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt; &lt;span class="c1"&gt;# or "always"&lt;/span&gt;
    &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pihole&lt;/span&gt;
    &lt;span class="na"&gt;dns&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;127.0.0.1&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;10.2.0.200&lt;/span&gt; &lt;span class="c1"&gt;# Points to unbound&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;TZ&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Europe/Amsterdam"&lt;/span&gt; &lt;span class="c1"&gt;# change this to your VM Timezone&lt;/span&gt;
      &lt;span class="na"&gt;WEBPASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;# Blank password - Can be whatever you want.&lt;/span&gt;
      &lt;span class="na"&gt;ServerIP&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10.2.0.100&lt;/span&gt; &lt;span class="c1"&gt;# Internal IP of pihole&lt;/span&gt;
      &lt;span class="na"&gt;DNS1&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10.2.0.200&lt;/span&gt; &lt;span class="c1"&gt;# Unbound IP&lt;/span&gt;
      &lt;span class="na"&gt;DNS2&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10.2.0.200&lt;/span&gt; &lt;span class="c1"&gt;# If we don't specify two, it will auto pick google.&lt;/span&gt;
    &lt;span class="c1"&gt;# Volumes store your data between container upgrades&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./etc-pihole/:/etc/pihole/"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./etc-dnsmasq.d/:/etc/dnsmasq.d/"&lt;/span&gt;
    &lt;span class="c1"&gt;# Recommended but not required (DHCP needs NET_ADMIN)&lt;/span&gt;
    &lt;span class="c1"&gt;#   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities&lt;/span&gt;
    &lt;span class="na"&gt;cap_add&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;NET_ADMIN&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;private_network&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;ipv4_address&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10.2.0.100&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All you have to do is change &lt;code&gt;TZ=&lt;/code&gt; to your &lt;strong&gt;Time Zone&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
You can then save the file. Using &lt;em&gt;nano&lt;/em&gt; (used here), to save the file you have to press &lt;strong&gt;CTRL-X&lt;/strong&gt;, then press &lt;strong&gt;Y&lt;/strong&gt;, then press &lt;strong&gt;ENTER&lt;/strong&gt; to confirm.  &lt;/p&gt;

&lt;p&gt;After this, we need to create the &lt;em&gt;unbound&lt;/em&gt; config file.&lt;br&gt;&lt;br&gt;
Go back to the previous directory (&lt;code&gt;wirehole-docker&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create an unbound directory and head into it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;unbound &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;unbound
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the file and edit it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;unbound.conf &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; nano unbound.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Put this into the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;server:
    cache-max-ttl: 86400
    cache-min-ttl: 60
    directory: "/opt/unbound/etc/unbound"
    edns-buffer-size: 1472
    interface: 0.0.0.0@53
    rrset-roundrobin: yes
    username: "_unbound"
    log-local-actions: no
    log-queries: no
    log-replies: no
    log-servfail: no
    logfile: /dev/null
    verbosity: 0
    aggressive-nsec: yes
    delay-close: 10000
    do-daemonize: no
    do-not-query-localhost: no
    neg-cache-size: 4M
    qname-minimisation: yes
    access-control: 127.0.0.1/32 allow
    access-control: 192.168.0.0/16 allow
    access-control: 172.16.0.0/12 allow
    access-control: 10.0.0.0/8 allow
    auto-trust-anchor-file: "var/root.key"
    chroot: "/opt/unbound/etc/unbound"
    harden-algo-downgrade: yes
    harden-below-nxdomain: yes
    harden-dnssec-stripped: yes
    harden-glue: yes
    harden-large-queries: yes
    harden-referral-path: no
    harden-short-bufsize: yes
    hide-identity: yes
    hide-version: yes
    identity: "DNS"
    private-address: 10.0.0.0/8
    private-address: 172.16.0.0/12
    private-address: 192.168.0.0/16
    private-address: 169.254.0.0/16
    private-address: fd00::/8
    private-address: fe80::/10
    private-address: ::ffff:0:0/96
    tls-cert-bundle: /etc/ssl/certs/ca-certificates.crt
    unwanted-reply-threshold: 10000000
    val-clean-additional: yes
    msg-cache-size: 260991658
    num-queries-per-thread: 4096
    outgoing-range: 8192
    rrset-cache-size: 260991658
    minimal-responses: yes
    prefetch: yes
    prefetch-key: yes
    serve-expired: yes
    so-reuseport: yes
    so-rcvbuf: 1m
    remote-control:
        control-enable: no
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then save it. Using nano: CTRL-X, then Y, then ENTER.&lt;br&gt;&lt;br&gt;
Go back to the parent directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And &lt;strong&gt;voilà&lt;/strong&gt;, that’s configured!&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Running your Wire-Hole
&lt;/h2&gt;

&lt;p&gt;To start the Wire-Hole docker-container, just run:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make sure you are in the wirehole-docker directory.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;All done!&lt;/strong&gt; Your Wire-Hole should be running smoothly.&lt;br&gt;&lt;br&gt;
You will get in the console a &lt;strong&gt;QR code&lt;/strong&gt; that you can use to set up the VPN connection on your phone using the &lt;strong&gt;Wireguard app&lt;/strong&gt; (available on Android and iOS).  &lt;/p&gt;
&lt;h2&gt;
  
  
  5. Setting up your device to connect to your VPN
&lt;/h2&gt;

&lt;p&gt;For a phone, simply scan the &lt;strong&gt;QR code&lt;/strong&gt; you saw with the &lt;strong&gt;Wireguard app&lt;/strong&gt; (&lt;a href="https://apps.apple.com/app/wireguard/id1441195209" rel="noopener noreferrer"&gt;&lt;em&gt;&lt;strong&gt;iOS App Store&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;, &lt;a href="https://play.google.com/store/apps/details?id=com.wireguard.android" rel="noopener noreferrer"&gt;&lt;em&gt;&lt;strong&gt;Android Play Store&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;) to set up the device’s VPN connection.  &lt;/p&gt;
&lt;h2&gt;
  
  
  6. Accessing Pi-Hole’s interface
&lt;/h2&gt;

&lt;p&gt;While connected to the Wireguard VPN, go to &lt;a href="http://10.2.0.100/admin" rel="noopener noreferrer"&gt;&lt;strong&gt;http://10.2.0.100/admin&lt;/strong&gt;&lt;/a&gt; to access Pi-Hole’s web interface. The password should be blank.&lt;br&gt;&lt;br&gt;
You can then &lt;strong&gt;change the password&lt;/strong&gt; to the interface and configure your blocklist.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That’s it! You are using your very own VPN and ad-blocking DNS server. If you appreciated this tutorial, please follow my Dev.to to see other blog posts, and my &lt;a href="https://github.com/LucasPlacentino" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; where I keep pretty much everything I do.&lt;/strong&gt;  &lt;/p&gt;
&lt;h2&gt;
  
  
  [OPTIONAL] Linking a domain to your instance
&lt;/h2&gt;

&lt;p&gt;If you own a domain, you can configure a subdomain to use for your VPN.  &lt;/p&gt;

&lt;p&gt;Add a type “&lt;strong&gt;A&lt;/strong&gt;” entry to your domain’s &lt;strong&gt;DNS management&lt;/strong&gt; pointing to your VM instance’s &lt;strong&gt;IPv4 address&lt;/strong&gt;, with any subdomain you want.&lt;br&gt;
For example:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;A : wireguard(.yourdomain.com) &amp;gt; 153.452.56.143&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can now connect to your VPN via your domain, rather than the public IP address.  &lt;/p&gt;
&lt;h2&gt;
  
  
  [OPTIONAL] Setting up a half-tunnel connection
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;[NOTE]: As of 2023-03-26, this is not working properly, any suggestion for a fix is welcome.&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;Using a &lt;strong&gt;half-tunnel&lt;/strong&gt; connection to your VPN allows you to only pass your DNS request to your server (thus only using Pi-Hole ad-blocking DNS) and still route all other traffic without a VPN, allowing for faster speeds.&lt;br&gt;&lt;br&gt;
You will get all the ad-blocking you were getting with the full tunnel, while retaining your full internet speed.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note: this does not encrypt your traffic and does not change your public IP, so no security advantages from using a VPN.&lt;/strong&gt;  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In your &lt;code&gt;docker-compose.yml&lt;/code&gt;, uncomment:  &lt;/p&gt;


&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;#- ALLOWEDIPS=10.2.0.0/24&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;to  &lt;/p&gt;


&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ALLOWEDIPS=10.2.0.0/24&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;And in your device’s Wireguard VPN configuration, you need to change&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AllowedIPs = 0.0.0.0/0, ::/0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AllowedIPs = 10.2.0.0/24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save it, and there is your half-tunnel set up!  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For more in-depth informations and further configurations, go to &lt;a href="https://github.com/IAmStoxe/wirehole" rel="noopener noreferrer"&gt;https://github.com/IAmStoxe/wirehole&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This tutorial is based on &lt;a href="https://github.com/IAmStoxe/wirehole" rel="noopener noreferrer"&gt;IAmStoxe’s wirehole GitHub Repository&lt;/a&gt;.&lt;br&gt;
I updated it to be compatible with ARM instances, that can be found at &lt;a href="https://github.com/LucasPlacentino/wirehole-arm" rel="noopener noreferrer"&gt;my wirehole-arm GitHub Repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;🚀&lt;/p&gt;

</description>
      <category>wireguard</category>
      <category>pihole</category>
      <category>oraclecloud</category>
      <category>foreverfree</category>
    </item>
  </channel>
</rss>
