{"id":130,"date":"2023-02-13T17:35:34","date_gmt":"2023-02-13T17:35:34","guid":{"rendered":"https:\/\/jasonisenhart.com\/?p=130"},"modified":"2023-02-13T17:35:34","modified_gmt":"2023-02-13T17:35:34","slug":"adguard-install-with-adguard-sync-ubuntu-20-04","status":"publish","type":"post","link":"https:\/\/jasonisenhart.com\/index.php\/2023\/02\/13\/adguard-install-with-adguard-sync-ubuntu-20-04\/","title":{"rendered":"AdGuard Install with AdGuard-Sync (Ubuntu 20.04)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Below is a step-by-step guide on installing AdGuard on Ubuntu with LetsEncrypt HTTPS encryption. We will also implement AdGuard-Sync to enable the syncing of two different AdGuard servers so that only one has to be updated. Portainer will be installed for the monitoring and management of AdGuard-Sync so we can see if we have any issues.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Install AdGuard<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -sSL https:\/\/raw.githubusercontent.com\/AdguardTeam\/AdGuardHome\/master\/scripts\/install.sh | sh<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Create New Resolve Configuration to Use AdGuard<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mkdir \/etc\/systemd\/resolved.conf.d\nsudo nano \/etc\/systemd\/resolved.conf.d\/adguardhome.conf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Edit adguardhome.conf to only have the below line.<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Resolve]\r\nDNS=127.0.0.1\r\nDNSStubListener=no\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Move resolve.conf and restart systemd<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mv \/etc\/resolv.conf \/etc\/resolv.conf.backup\r\nsudo ln -s \/run\/systemd\/resolve\/resolv.conf \/etc\/resolv.conf\r\nsudo systemctl reload-or-restart systemd-resolved\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Now AdGuard is working and ready to use except we want to add a few more tools. If your going to use AdGuard-Sync go ahead and repeat the above steps to create a second server that will become our secondary DNS.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Let&#8217;s Install Docker<\/strong> <em>(Only on Primary DNS)<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Install Prerequisites<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> sudo apt-get update\r\n sudo apt-get install \\\r\n    ca-certificates \\\r\n    curl \\\r\n    gnupg \\\r\n    lsb-release\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Install Docker&#8217;s GPG Key<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/usr\/share\/keyrings\/docker-archive-keyring.gpg\t<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Selection of Docker&#8217;s Stable Repository<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> echo \\\r\n  \"deb &#91;arch=$(dpkg --print-architecture) signed-by=\/usr\/share\/keyrings\/docker-archive-keyring.gpg] https:\/\/download.docker.com\/linux\/ubuntu \\\r\n  $(lsb_release -cs) stable\" | sudo tee \/etc\/apt\/sources.list.d\/docker.list > \/dev\/null<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Install Docker Engine<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt-get update\r\nsudo apt-get install docker-ce docker-ce-cli containerd.io\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Install Certbot (Repeat on both DNS Servers)<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install certbot<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Certify with LetsEncrypt<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo certbot certonly --agree-tos --manual --preferred-challenges=dns -d domain.yourdomain.com\r\nsudo certbot certonly --agree-tos --manual --preferred-challenges=dns -d domain2.yourdomain.com<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Install Docker Compose on Primary DNS<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo curl -L \"https:\/\/github.com\/docker\/compose\/releases\/download\/1.29.2\/docker-compose-$(uname -s)-$(uname -m)\" -o \/usr\/local\/bin\/docker-compose\r\nsudo chmod +x \/usr\/local\/bin\/docker-compose\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Run Compose for Portainer on Primary DNS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Create Portainer Data Volume on Primary DNS<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo docker volume create portainer_data<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Run Portainer on Primary DNS<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo docker run -d -p 8000:8000 -p 9443:9443 --name portainer \\\r\n--restart=always \\\r\n-v \/var\/run\/docker.sock:\/var\/run\/docker.sock \\\r\n-v portainer_data:\/data \\\r\ncr.portainer.io\/portainer\/portainer-ce:2.9.3\r<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Create Docker-Compose for AdGuard-Sync on Primary DNS<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\r\nversion: \"2.1\"\r\nservices:\r\n  adguardhome-sync:\r\n    image: quay.io\/bakito\/adguardhome-sync\r\n    container_name: adguardhome-sync\r\n    command: run\r\n    environment:\r\n      - ORIGIN_URL=http:\/\/IP.Of.Server:80\r\n      - ORIGIN_USERNAME=AdGuard-Username\r\n      - ORIGIN_PASSWORD=AdGuard-Password\r\n      - REPLICA_URL=http:\/\/IP.Of.Server:80\r\n      - REPLICA_USERNAME=AdGuard-Username\r\n      - REPLICA_PASSWORD=AdGuard-Password\r\n      - CRON=*\/1 * * * * # run every 1 minutes\r\n      - RUNONSTART=true\r\n      - FEATURES_GENERALSETTINGS=true\r\n      - FEATURES_QUERYLOGCONFIG=true\r\n      - FEATURES_STATSCONFIG=true\r\n      - FEATURES_CLIENTSETTINGS=true\r\n      - FEATURES_SERVICES=true\r\n      - FEATURES_FILTERS=true\r\n      - FEATURES_DNS_SERVERCONFIG=true\r\n      - FEATURES_DNS_ACCESSLISTS=true\r\n      - FEATURES_DNS_REWRITES=true\r\n    ports:\r\n      - 8080:8080\r\n    restart: unless-stopped\r\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Enable Compose for AdGuard-Sync<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker-compose up -d<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verify logs in portainer to make sure adguard-sync is properly configured and working.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Below is a step-by-step guide on installing AdGuard on Ubuntu with LetsEncrypt HTTPS encryption. We will also implement AdGuard-Sync to enable the\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[10,12,11],"class_list":["post-130","post","type-post","status-publish","format-standard","hentry","category-it-how-to","tag-adguard","tag-adguard-portainer","tag-adguard-sync"],"_links":{"self":[{"href":"https:\/\/jasonisenhart.com\/index.php\/wp-json\/wp\/v2\/posts\/130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jasonisenhart.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jasonisenhart.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jasonisenhart.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jasonisenhart.com\/index.php\/wp-json\/wp\/v2\/comments?post=130"}],"version-history":[{"count":2,"href":"https:\/\/jasonisenhart.com\/index.php\/wp-json\/wp\/v2\/posts\/130\/revisions"}],"predecessor-version":[{"id":132,"href":"https:\/\/jasonisenhart.com\/index.php\/wp-json\/wp\/v2\/posts\/130\/revisions\/132"}],"wp:attachment":[{"href":"https:\/\/jasonisenhart.com\/index.php\/wp-json\/wp\/v2\/media?parent=130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jasonisenhart.com\/index.php\/wp-json\/wp\/v2\/categories?post=130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jasonisenhart.com\/index.php\/wp-json\/wp\/v2\/tags?post=130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}