<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[fscene8]]></title><description><![CDATA[Affection For Tech]]></description><link>https://fscene8.me/</link><image><url>https://fscene8.me/favicon.png</url><title>fscene8</title><link>https://fscene8.me/</link></image><generator>Ghost 5.29</generator><lastBuildDate>Sat, 18 Jul 2026 22:29:37 GMT</lastBuildDate><atom:link href="https://fscene8.me/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Create ZFS in Proxmox]]></title><description><![CDATA[<p>ZFS is in Proxmox GUI is meh. You can&apos;t add more content other than Disk Images and Containers? What about my ISO? This guide will show how to add all content via everyone&apos;s best friend, the Terminal.</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/10/image_2022-10-20_223832648.png" width="445" height="212" loading="lazy" alt></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/10/image_2022-10-20_223939340.png" width="770" height="429" loading="lazy" alt srcset="https://fscene8.me/content/images/size/w600/2022/10/image_2022-10-20_223939340.png 600w, https://fscene8.me/content/images/2022/10/image_2022-10-20_223939340.png 770w" sizes="(min-width: 720px) 720px"></div></div></div></figure><h3 id="prerequisites">Prerequisites</h3><ol><li>At least 2 or more disk</li><li>Wipe the</li></ol>]]></description><link>https://fscene8.me/create-zfs-in-proxmox/</link><guid isPermaLink="false">6351597025f3b40157218663</guid><category><![CDATA[proxmox]]></category><category><![CDATA[Linux]]></category><dc:creator><![CDATA[aki]]></dc:creator><pubDate>Thu, 20 Oct 2022 15:28:14 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1591913139332-f8172ef511da?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDh8fGhhcmQlMjBkaXNrfGVufDB8fHx8MTY2NjI3OTYxNA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1591913139332-f8172ef511da?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDh8fGhhcmQlMjBkaXNrfGVufDB8fHx8MTY2NjI3OTYxNA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="Create ZFS in Proxmox"><p>ZFS is in Proxmox GUI is meh. You can&apos;t add more content other than Disk Images and Containers? What about my ISO? This guide will show how to add all content via everyone&apos;s best friend, the Terminal.</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/10/image_2022-10-20_223832648.png" width="445" height="212" loading="lazy" alt="Create ZFS in Proxmox"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/10/image_2022-10-20_223939340.png" width="770" height="429" loading="lazy" alt="Create ZFS in Proxmox" srcset="https://fscene8.me/content/images/size/w600/2022/10/image_2022-10-20_223939340.png 600w, https://fscene8.me/content/images/2022/10/image_2022-10-20_223939340.png 770w" sizes="(min-width: 720px) 720px"></div></div></div></figure><h3 id="prerequisites">Prerequisites</h3><ol><li>At least 2 or more disk</li><li>Wipe the disk (Either in fdisk or Proxmox)</li></ol><h2 id="wiping-the-disk">Wiping the disk</h2><h3 id="via-proxmox-gui">via Proxmox GUI</h3><p>Go to the Proxmox webpage and wipe the disk. The option is under your node -&gt; Disks. I will be setting up Mirror raid level for &quot;/dev/sdc&quot; and &quot;/dev/sdd&quot;.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/10/image-6.png" class="kg-image" alt="Create ZFS in Proxmox" loading="lazy" width="939" height="309" srcset="https://fscene8.me/content/images/size/w600/2022/10/image-6.png 600w, https://fscene8.me/content/images/2022/10/image-6.png 939w" sizes="(min-width: 720px) 720px"></figure><h3 id="via-dd">via dd</h3><p>If the command line is your way, you can run the command below. Make sure to replace the device id with yours.</p><pre><code># dd if=/dev/zero of=/dev/sdc bs=512 count=1</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/10/image-11.png" class="kg-image" alt="Create ZFS in Proxmox" loading="lazy" width="754" height="277" srcset="https://fscene8.me/content/images/size/w600/2022/10/image-11.png 600w, https://fscene8.me/content/images/2022/10/image-11.png 754w" sizes="(min-width: 720px) 720px"><figcaption>sdc sdd is now ready</figcaption></figure><h3 id="create-zpool">Create ZPOOL</h3><p>&quot;zpool create&quot; command will create a new ZFS pool to create more ZFS dataset.</p><pre><code>example: zpool create tank raidz sda sdb sdc sdd sde sdf

command i run:
# zpool create local-zfs mirror sdc sdd</code></pre><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/10/image-12.png" class="kg-image" alt="Create ZFS in Proxmox" loading="lazy" width="812" height="306" srcset="https://fscene8.me/content/images/size/w600/2022/10/image-12.png 600w, https://fscene8.me/content/images/2022/10/image-12.png 812w" sizes="(min-width: 720px) 720px"></figure><h2 id="mountpoint">Mountpoint</h2><p>By default, after you create your zpool, it will be mounted in the &quot;/&quot; directory.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/10/image-14.png" class="kg-image" alt="Create ZFS in Proxmox" loading="lazy" width="454" height="105"></figure><h2 id="mounting-to-proxmox">Mounting to Proxmox</h2><p>Go to the Proxmox web UI and add a new Directory.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/10/image-15.png" class="kg-image" alt="Create ZFS in Proxmox" loading="lazy" width="1024" height="425" srcset="https://fscene8.me/content/images/size/w600/2022/10/image-15.png 600w, https://fscene8.me/content/images/size/w1000/2022/10/image-15.png 1000w, https://fscene8.me/content/images/2022/10/image-15.png 1024w" sizes="(min-width: 720px) 720px"></figure><p>Now I test the new Directory by uploading a new ISO.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/10/image-16.png" class="kg-image" alt="Create ZFS in Proxmox" loading="lazy" width="1317" height="453" srcset="https://fscene8.me/content/images/size/w600/2022/10/image-16.png 600w, https://fscene8.me/content/images/size/w1000/2022/10/image-16.png 1000w, https://fscene8.me/content/images/2022/10/image-16.png 1317w" sizes="(min-width: 720px) 720px"></figure><h2 id="checking-zfs-health-status">Checking ZFS Health Status</h2><p>Proxmox UI will automatically detects the ZFS and insert it in the ZFS page.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/10/image-17.png" class="kg-image" alt="Create ZFS in Proxmox" loading="lazy" width="717" height="444" srcset="https://fscene8.me/content/images/size/w600/2022/10/image-17.png 600w, https://fscene8.me/content/images/2022/10/image-17.png 717w"></figure>]]></content:encoded></item><item><title><![CDATA[Install Pimox, Type-1 Hypervisor, on Raspberry Pi 4 (ARM64)]]></title><description><![CDATA[<p>Pimox is a port of Proxmox Virtual Environment, an open-source software server for virtualization management, to the Raspberry Pi allowing you to build a Proxmox cluster of Raspberry Pi&apos;s or even a hybrid cluster of Pis and x86/x86_64 hardware.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/pimox/pimox7"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - pimox/pimox7: Proxmox V7 for</div></div></a></figure>]]></description><link>https://fscene8.me/install-pimox-rpi4/</link><guid isPermaLink="false">622db5cb4e39ed00e8450058</guid><category><![CDATA[Linux]]></category><category><![CDATA[Raspberry Pi]]></category><category><![CDATA[proxmox]]></category><dc:creator><![CDATA[aki]]></dc:creator><pubDate>Sun, 13 Mar 2022 11:02:48 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1604005366359-2f8f2a044336?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDEyfHxyYXNwYmVycnklMjBwaXxlbnwwfHx8fDE2NDcxNjkxMjE&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1604005366359-2f8f2a044336?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDEyfHxyYXNwYmVycnklMjBwaXxlbnwwfHx8fDE2NDcxNjkxMjE&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Install Pimox, Type-1 Hypervisor, on Raspberry Pi 4 (ARM64)"><p>Pimox is a port of Proxmox Virtual Environment, an open-source software server for virtualization management, to the Raspberry Pi allowing you to build a Proxmox cluster of Raspberry Pi&apos;s or even a hybrid cluster of Pis and x86/x86_64 hardware.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/pimox/pimox7"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - pimox/pimox7: Proxmox V7 for Raspberry Pi</div><div class="kg-bookmark-description">Proxmox V7 for Raspberry Pi. Contribute to pimox/pimox7 development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Install Pimox, Type-1 Hypervisor, on Raspberry Pi 4 (ARM64)"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">pimox</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/fe0a46cd85f1bd1ae264a99d53fa6fd485282b8033425abc340c13a2c9ad937e/pimox/pimox7" alt="Install Pimox, Type-1 Hypervisor, on Raspberry Pi 4 (ARM64)"></div></a></figure><p>In this guide:</p><ol><li>Flashing Raspberry Pi OS 64bit </li><li>Configure Pi </li><li>Setting Up Pimox</li><li>Running a LXC/LXD Container from Pimox</li></ol><p>What you need:</p><ol><li>Raspberry Pi 4</li><li>Raspberry Pi OS 64bit </li><li>Ethernet (RJ45) Cable</li><li>Static IP for Raspberry Pi</li><li>Monitor and Keyboard (Initial Setup to enable SSH)</li></ol><h2 id="flashing-raspberry-pi-os-64bit">Flashing Raspberry Pi OS 64bit </h2><p>You can download the image from the <a href="https://downloads.raspberrypi.org/raspios_arm64/">Raspberry Pi download page</a> and flash it to your SD card. Alternatively, you can use the <a href="https://www.raspberrypi.com/software/">Raspberry Pi Imager</a> and flash the 64-bit Lite version.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/03/image_2022-03-13_172809.png" width="682" height="452" loading="lazy" alt="Install Pimox, Type-1 Hypervisor, on Raspberry Pi 4 (ARM64)" srcset="https://fscene8.me/content/images/size/w600/2022/03/image_2022-03-13_172809.png 600w, https://fscene8.me/content/images/2022/03/image_2022-03-13_172809.png 682w"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/03/image_2022-03-13_172818.png" width="682" height="452" loading="lazy" alt="Install Pimox, Type-1 Hypervisor, on Raspberry Pi 4 (ARM64)" srcset="https://fscene8.me/content/images/size/w600/2022/03/image_2022-03-13_172818.png 600w, https://fscene8.me/content/images/2022/03/image_2022-03-13_172818.png 682w"></div></div></div><figcaption>Select &quot;Raspberry Pi OS (others)&quot; and select &quot;Raspberry Pi OS Lite (64-bit)&quot;</figcaption></figure><h2 id="configure-pi">Configure Pi </h2><p>For first run, you need to attach a physical monitor and keyboard to configure your Pi. To make your Raspberry Pi running headless, you need to enable SSH during set up.</p><p>The default login for pi is shown below:</p><pre><code>username: pi
password: raspberry</code></pre><p>After you login, type <code>sudo raspi-config</code> to start the configuration tool and change your Pi password. To enable SSH, go to <code>3 Interface Options</code> and <code>2 SSH</code> from the menu.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/03/image_2022-03-13_174806.png" width="1082" height="570" loading="lazy" alt="Install Pimox, Type-1 Hypervisor, on Raspberry Pi 4 (ARM64)" srcset="https://fscene8.me/content/images/size/w600/2022/03/image_2022-03-13_174806.png 600w, https://fscene8.me/content/images/size/w1000/2022/03/image_2022-03-13_174806.png 1000w, https://fscene8.me/content/images/2022/03/image_2022-03-13_174806.png 1082w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/03/image_2022-03-13_174829.png" width="1084" height="573" loading="lazy" alt="Install Pimox, Type-1 Hypervisor, on Raspberry Pi 4 (ARM64)" srcset="https://fscene8.me/content/images/size/w600/2022/03/image_2022-03-13_174829.png 600w, https://fscene8.me/content/images/size/w1000/2022/03/image_2022-03-13_174829.png 1000w, https://fscene8.me/content/images/2022/03/image_2022-03-13_174829.png 1084w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>To enable SSH</figcaption></figure><h2 id="setting-up-pimox">Setting Up Pimox</h2><p>From this point, you can either run them physically or remotely via SSH. For my own convenient, I will be running over SSH.</p><h3 id="installing-pimox">Installing Pimox</h3><p>You can use the command below to run the interactive installer for Pimox.</p><figure class="kg-card kg-code-card"><pre><code>sudo su</code></pre><figcaption>Run as root</figcaption></figure><figure class="kg-card kg-code-card"><pre><code>apt update &amp;&amp; apt upgrade -y</code></pre><figcaption>Update your system</figcaption></figure><figure class="kg-card kg-code-card"><pre><code>curl https://raw.githubusercontent.com/pimox/pimox7/master/RPiOS64-IA-Install.sh &gt; RPiOS64-IA-Install.sh</code></pre><figcaption>Download the install script</figcaption></figure><figure class="kg-card kg-code-card"><pre><code>chmod +x RPiOS64-IA-Install.sh</code></pre><figcaption>Make the script executable</figcaption></figure><figure class="kg-card kg-code-card"><pre><code>./RPiOS64-IA-Install.sh</code></pre><figcaption>Execute the script</figcaption></figure><p>Follow the prompt. Once the installation started, it will take around 10-20 mins. Time to grab a coffee!</p><h3 id="access-pimox-web-interface">Access Pimox Web Interface</h3><p>The default URL is <code>https://[pimox ip]:8006</code>. Enter <code>root</code> as your username and the root password to login.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/03/image-6.png" class="kg-image" alt="Install Pimox, Type-1 Hypervisor, on Raspberry Pi 4 (ARM64)" loading="lazy" width="1144" height="645" srcset="https://fscene8.me/content/images/size/w600/2022/03/image-6.png 600w, https://fscene8.me/content/images/size/w1000/2022/03/image-6.png 1000w, https://fscene8.me/content/images/2022/03/image-6.png 1144w" sizes="(min-width: 720px) 720px"><figcaption>Pimox Web Interface</figcaption></figure><p>The web interface is similar to the Proxmox VE. You will need to upload your <code>.iso</code> to the storage to install your VM. As of 13 march 2022, only aarch64/arm64 is confirmed to be working for VM and LXC/LXD containers.</p><h2 id="running-a-container-from-pimox">Running a Container from Pimox</h2><p>For LXC/LXD &#xA0;container, you need to upload your own container to the Pimox or use the &quot;<em>download from URL</em>&quot; feature in Pimox. Currently, the download template will download x86_64 containers and x86_64 will not work in Pimox.</p><h3 id="manually-upload-a-container-image">Manually Upload a Container Image</h3><p>You can access the list of LXD container images at <a href="https://us.lxd.images.canonical.com/images/">https://us.lxd.images.canonical.com/images/</a>or <a href="https://jenkins.linuxcontainers.org/view/Images/">https://jenkins.linuxcontainers.org/view/Images/</a>.</p><p>I will download Ubuntu 20.04 LTS arm64 lxd image from <a href="https://us.lxd.images.canonical.com/images/ubuntu/focal/arm64/cloud/">https://us.lxd.images.canonical.com/images/ubuntu/focal/arm64/cloud/</a>. The image file to download is named <code>root.tar.xz</code>. Once you download to your PC, rename the file to a better name, such as <code>ubuntu-20.04.tar.xz</code>.</p><p>Once you rename the file, click the &quot;<em>Upload</em>&quot; button and select the file.</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/03/image_2022-03-13_184806.png" width="1142" height="438" loading="lazy" alt="Install Pimox, Type-1 Hypervisor, on Raspberry Pi 4 (ARM64)" srcset="https://fscene8.me/content/images/size/w600/2022/03/image_2022-03-13_184806.png 600w, https://fscene8.me/content/images/size/w1000/2022/03/image_2022-03-13_184806.png 1000w, https://fscene8.me/content/images/2022/03/image_2022-03-13_184806.png 1142w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/03/image_2022-03-13_184838.png" width="1142" height="439" loading="lazy" alt="Install Pimox, Type-1 Hypervisor, on Raspberry Pi 4 (ARM64)" srcset="https://fscene8.me/content/images/size/w600/2022/03/image_2022-03-13_184838.png 600w, https://fscene8.me/content/images/size/w1000/2022/03/image_2022-03-13_184838.png 1000w, https://fscene8.me/content/images/2022/03/image_2022-03-13_184838.png 1142w" sizes="(min-width: 720px) 720px"></div></div></div></figure><p>Alternatively, you can use the &quot;<em>download from URL</em>&quot; feature. However, you are unable to change the file name unless you go to the terminal and change the file as root in the <code>/var/lib/vz/template/cache</code> folder.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/03/image_2022-03-13_185405.png" width="1144" height="440" loading="lazy" alt="Install Pimox, Type-1 Hypervisor, on Raspberry Pi 4 (ARM64)" srcset="https://fscene8.me/content/images/size/w600/2022/03/image_2022-03-13_185405.png 600w, https://fscene8.me/content/images/size/w1000/2022/03/image_2022-03-13_185405.png 1000w, https://fscene8.me/content/images/2022/03/image_2022-03-13_185405.png 1144w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/03/image_2022-03-13_185004.png" width="1140" height="436" loading="lazy" alt="Install Pimox, Type-1 Hypervisor, on Raspberry Pi 4 (ARM64)" srcset="https://fscene8.me/content/images/size/w600/2022/03/image_2022-03-13_185004.png 600w, https://fscene8.me/content/images/size/w1000/2022/03/image_2022-03-13_185004.png 1000w, https://fscene8.me/content/images/2022/03/image_2022-03-13_185004.png 1140w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>There is no rename button to change the name of <code>root.tar.xz</code></figcaption></figure><h3 id="setting-up-the-container">Setting up the container</h3><p>Setup the container by clicking the &quot;<em>Create CT</em>&quot; blue button at the top right of the page. Run the Create Tool as you normally would in any Promox VE. It will take around 40sec to 2mins to create a container, after all, this is a Raspberry Pi.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/03/image-13.png" class="kg-image" alt="Install Pimox, Type-1 Hypervisor, on Raspberry Pi 4 (ARM64)" loading="lazy" width="721" height="509" srcset="https://fscene8.me/content/images/size/w600/2022/03/image-13.png 600w, https://fscene8.me/content/images/2022/03/image-13.png 721w" sizes="(min-width: 720px) 720px"><figcaption>IP address is <code>192.168.1.8/24</code></figcaption></figure><h3 id="start-the-container">Start the container</h3><p>Start the container and go to the console tab. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/03/image-14.png" class="kg-image" alt="Install Pimox, Type-1 Hypervisor, on Raspberry Pi 4 (ARM64)" loading="lazy" width="1145" height="648" srcset="https://fscene8.me/content/images/size/w600/2022/03/image-14.png 600w, https://fscene8.me/content/images/size/w1000/2022/03/image-14.png 1000w, https://fscene8.me/content/images/2022/03/image-14.png 1145w" sizes="(min-width: 720px) 720px"><figcaption>IP address is <code>192.168.1.8/24</code></figcaption></figure><p>For Virtual Machine, you need to upload the arm64 image ISO and create the VM. </p>]]></content:encoded></item><item><title><![CDATA[Create A Domain Controller with Windows Server 2019 VM In A Homelab Network]]></title><description><![CDATA[<p>In this post:</p><ul><li>Introduction</li><li>Setting Up The Lab Network</li><li>Creating a Domain Controller</li><li>Configuring the DNS Server</li><li>Configuring the DHCP Server</li></ul><h2 id="introduction">Introduction</h2><p>I have installed a Windows Server 2019 in a VM in the previous post. Currently, the VM is the only machine that is alive in the new network.</p>]]></description><link>https://fscene8.me/create-a-domain-controller/</link><guid isPermaLink="false">61f57c3dafd73300feb037f5</guid><category><![CDATA[Windows]]></category><category><![CDATA[Guides]]></category><category><![CDATA[pfSense]]></category><category><![CDATA[server]]></category><category><![CDATA[windows server]]></category><category><![CDATA[proxmox]]></category><category><![CDATA[Active Directory]]></category><category><![CDATA[DNS]]></category><category><![CDATA[DHCP]]></category><category><![CDATA[AD DS]]></category><category><![CDATA[collections]]></category><dc:creator><![CDATA[aki]]></dc:creator><pubDate>Sun, 30 Jan 2022 17:42:03 GMT</pubDate><media:content url="https://fscene8.me/content/images/2022/01/image_2022-01-31_003838.png" medium="image"/><content:encoded><![CDATA[<img src="https://fscene8.me/content/images/2022/01/image_2022-01-31_003838.png" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network"><p>In this post:</p><ul><li>Introduction</li><li>Setting Up The Lab Network</li><li>Creating a Domain Controller</li><li>Configuring the DNS Server</li><li>Configuring the DHCP Server</li></ul><h2 id="introduction">Introduction</h2><p>I have installed a Windows Server 2019 in a VM in the previous post. Currently, the VM is the only machine that is alive in the new network. That&apos;s very lonely. </p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://fscene8.me/windows-server-2019-vm-in-proxmox/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Create A Windows Server 2019 VM In Proxmox + New Virtual Network</div><div class="kg-bookmark-description">This post will guide you on creating an isolated separate network in Proxmox and installing Windows Server 2019 VM attached to a new virtual network. Create a new networkCreate a new network in Proxmox by going to the Node -&amp;gt; Network -&amp;gt; Create Linux Bridge. I am still</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://fscene8.me/favicon.ico" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network"><span class="kg-bookmark-author">fscene8</span><span class="kg-bookmark-publisher">aki</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_021000.png" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network"></div></a></figure><p>By the end of this post, the VM will become a Domain Controller for the lab network. It will also be running DNS and DHCP servers for the network. It will be accompanied by a virtual router and a Windows 10 VM to test to make sure the DC, DNS and DHCP are working.</p><p>In order to create a <em>Domain </em>in the lab network, at least one <em>Domain Controller </em>must exist. A <em>Domain Controller </em>requires at least one <em>Active Directory Domain Service </em>running in the network. And the <em>Active Directory Domain Service</em> requires <em>DNS </em>and <em>DHCP </em>Service in the network. They can be at the same server or separate servers.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/ts.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy" width="2000" height="1208" srcset="https://fscene8.me/content/images/size/w600/2022/01/ts.png 600w, https://fscene8.me/content/images/size/w1000/2022/01/ts.png 1000w, https://fscene8.me/content/images/size/w1600/2022/01/ts.png 1600w, https://fscene8.me/content/images/2022/01/ts.png 2194w" sizes="(min-width: 720px) 720px"><figcaption>A mini overview of what I am trying to achieve at my home lab</figcaption></figure><p>I isolated the lab network from my home network to prevent countless headaches, frustration, and disruptions to my main home network. The lab network will use the DNS server and DHCP server in the Windows Server 2019. &#xA0;</p><p>To connect between those two networks in life, a router is needed. That is because a router is used to bridge and connect two separate networks.</p><p>I used a Linux VM that is running pfSense, an open-source router solution. This allows me to connect to my lab network from the outside network, only if the pfSense router firewall rules allow it.</p><p>This allows the possibility to expose a service from my lab network to my home network or public with port forwarding at the pfSense router and configuring a reverse proxy at Ngnix Proxy Manager on my home network.</p><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">&#x1F622;</div><div class="kg-callout-text">I do not have any cisco equipment nor the money to purchase them. I have to virtualise that hardware with an open-source solution.</div></div><p>You can skip the next section if you do not need the lab network to communicate externally. Your lab network will only be the Domain Controller and the windows client. The next step is to make the lab network to be able to connect to the outside network with port forwarding and firewall rules if they are set. </p><hr><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-dark" style data-kg-background-image><h2 class="kg-header-card-header">Setting Up The Lab Network</h2><h3 class="kg-header-card-subheader">Isolating the lab network from the home network</h3></div><p>I installed pfSense Community Edition as the router and set up 2 network interfaces in Proxmox, one for WAN and one for LAN. Both of them are configured to run a separate network. The .iso can be downloaded from <a href="https://www.pfsense.org/download/">here</a>. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-55.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy" width="521" height="255"><figcaption>2 Network Interfaces</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-56.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>pfSense configured for WAN and LAN</figcaption></figure><p>Finally, I turned off the DHCP at the pfSense to make way for the Windows Server DHCP. </p><p>For VMware ESXi or Workstation, you need to turn off DHCP at the Virtual Network Editor and pfSense router. For the pfSense hardware, you need to have both interfaces, Host-Only and Bridging or NAT, attached.</p><h2 id="firewall-rules-for-pfsense">Firewall Rules for pfSense</h2><p>I created a firewall rule to enable devices from the WAN network to access the router only. This enables me to access the router&apos;s web portal from my home network and any ports that the router port forwarded.</p><p>I checked from my home network to confirm that I am able to ping to the interface exposed to the WAN. But not the LAN. This is the correct setting.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_200509.png" width="779" height="456" loading="lazy" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-30_200509.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-30_200509.png 779w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_200529.png" width="533" height="494" loading="lazy" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network"></div></div></div><figcaption>Firewall rule (left), ping result (right)</figcaption></figure><hr><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-dark" style data-kg-background-image><h2 class="kg-header-card-header">Creating a Domain Controller</h2><h3 class="kg-header-card-subheader">Configuring VM Network and Active Directory Domain Service (ADDS)</h3></div><p>In Proxmox, I have configured the Windows Server 2019 VM network interface to use the same network as the pfSense router. A fresh windows server installation comes with no settings or services configured by default. </p><p>The first thing to do after a fresh Windows Server 2019 installation is to set a <em>static</em> IP address and change the <em>hostname</em>. Once I have set them, I reboot the server.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-58.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy" width="403" height="462"><figcaption>Change to Static IP address</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-60.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Change the hostname from the System Properties</figcaption></figure><p>Once the server rebooted, I check that the server is able to ping to the pfSense router and nothing from the WAN network. Connecting to my home devices (WAN Network) is not allowed because of the pfSense router port forwarding and firewall rules.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-70.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Unable to ping to the outside network due to router configuration</figcaption></figure><h2 id="configuring-windows-server-2019">Configuring Windows Server 2019 </h2><p>The lab network is now ready. Let&apos;s continue with the domain controller setup. Open up the <em>Server Manager </em>to continue setting up the Windows Server 2019<em>.</em></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-61.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Click on the &quot;<em>Add roles and features</em>&quot;</figcaption></figure><h3 id="installation-type">Installation Type</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-62.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy" width="785" height="558" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-62.png 600w, https://fscene8.me/content/images/2022/01/image-62.png 785w" sizes="(min-width: 720px) 720px"><figcaption>Select the &quot;<em>Role-based or feature-based installation</em>&quot; and click the <em>Next</em> button</figcaption></figure><h3 id="server-selection">Server Selection</h3><p>Make sure the server name and IP address are correct.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-63.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Select the server and click <em>Next</em></figcaption></figure><h3 id="adding-the-server-roles">Adding the Server Roles</h3><p>On the <em>Server Roles</em> page, select the roles, add any prerequisite features and <em>included management tools </em>that come with it. </p><p>Roles to be checked:</p><ul><li>Active Directory Domain Services</li><li>DHCP Server</li><li>DNS Server</li></ul><p>Once all 3 selected, click the <em>Next</em> button.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-64.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy" width="781" height="557" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-64.png 600w, https://fscene8.me/content/images/2022/01/image-64.png 781w" sizes="(min-width: 720px) 720px"><figcaption>Select the 3 roles and click <em>Next</em></figcaption></figure><h3 id="features">Features</h3><p>The features were added automatically based on the roles selected on the previous page. Skip this page and click the <em>Next </em>button.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-65.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy" width="779" height="555" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-65.png 600w, https://fscene8.me/content/images/2022/01/image-65.png 779w" sizes="(min-width: 720px) 720px"><figcaption>Skip this page and click <em>Next</em></figcaption></figure><h3 id="ad-ds-dhcp-server-and-dns-server">AD DS, DHCP Server and DNS Server</h3><p>The next 3 pages are to educate us on those services. Skip those pages by clicking the <em>Next </em>button.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-67.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Skip this page and click <em>Next</em></figcaption></figure><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_203933.png" width="782" height="559" loading="lazy" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-30_203933.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-30_203933.png 782w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_203939.png" width="781" height="556" loading="lazy" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-30_203939.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-30_203939.png 781w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_204011.png" width="783" height="556" loading="lazy" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-30_204011.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-30_204011.png 783w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>Skip these pages and click <em>Next</em></figcaption></figure><h3 id="confirmation">Confirmation</h3><p>At the confirmation page, check the &quot;<em>Restart the destination server automatically if required</em>&quot; selection and click the &quot;<em>Install</em>&quot; button.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-69.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Select <em>Yes</em> and click <em>Next</em></figcaption></figure><h3 id="result">Result</h3><p>Once it is successfully installed, click on the &quot;<em>Promote this server to a domain controller</em>&quot;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-72.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy" width="786" height="560" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-72.png 600w, https://fscene8.me/content/images/2022/01/image-72.png 786w" sizes="(min-width: 720px) 720px"><figcaption>Click on the <em>Promote this server to a domain controller</em></figcaption></figure><h3 id="promoting-server-to-a-domain-controller">Promoting server to a domain controller</h3><p>After selecting the &quot;<em>Promote this server to a domain controller</em>&quot;, select the &quot;<em>Add a new forest</em>&quot; and enter the Root domain name. For my lab, I type in <code>lab.local</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-73.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy" width="755" height="558" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-73.png 600w, https://fscene8.me/content/images/2022/01/image-73.png 755w" sizes="(min-width: 720px) 720px"><figcaption>Click <em>Add a new forest</em> and enter the <em>Root domain name</em></figcaption></figure><p>As this is the only active directory server in the lab network, leave these setting values as default.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-74.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>The DSRM password can be different from the Admin password</figcaption></figure><p>The domain name <code>lab.local</code> will only exist internally in the lab network. There is no need to enable DNS delegation.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-75.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy" width="751" height="557" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-75.png 600w, https://fscene8.me/content/images/2022/01/image-75.png 751w" sizes="(min-width: 720px) 720px"><figcaption>Skip this page and click <em>Next</em></figcaption></figure><h3 id="additional-options-and-paths">Additional Options and Paths</h3><p>Accept the default values and click the &quot;Next&quot; button.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_205920.png" width="758" height="555" loading="lazy" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-30_205920.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-30_205920.png 758w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_210010.png" width="756" height="559" loading="lazy" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-30_210010.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-30_210010.png 756w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>Accept the default values and click <em>Next</em></figcaption></figure><h3 id="prerequisites-check">Prerequisites Check</h3><p>The first warning is telling us that the Server will not be able to communicate with Windows NT 4.0. And the second warning tells us that it can not find the parent zone for <code>lab.local</code>.</p><p>These warnings are totally ok to ignore because this server going to be the only domain controller and the <code>lab.local</code> will only exist internally in the lab network.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-76.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Ignore them and click &quot;<em>Install</em>&quot;</figcaption></figure><p>The server will restart automatically after the &quot;<em>Install</em>&quot; button is clicked.</p><p>Once the server reboots, notice the <code>LAB</code> domain at the front of the username. Log in to the account. This means that we are logging in with a domain user account.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-77.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Logging in as <code>DOMAIN\USERNAME</code></figcaption></figure><p>Double-check and confirm the domain by running the <code>set</code> command in the <code>CMD</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-78.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption><code>USERDOMAIN=LAB</code></figcaption></figure><hr><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-dark" style data-kg-background-image><h2 class="kg-header-card-header">Configuring the DNS Server</h2><h3 class="kg-header-card-subheader">Setting Up Reverse Lookup Zone and DNS Forwarders</h3></div><h2 id="setting-up-reverse-lookup-zone">Setting up Reverse Lookup Zone</h2><p>The first thing I like to do is to insert a new reverse lookup entry for the server at the DNS. As of now, only the forward lookup is being entered by default. </p><p>Forward Lookup Zone will resolve domain name (<code>serverdc1.lab.local</code> to IP address <code>10.18.157.5</code>), while Reverse Lookup Zone is the other way around.</p><h3 id="checking-the-forward-lookup-zone">Checking the Forward Lookup Zone</h3><p>Search <em>DNS Manager</em> from the <em>Start</em> Menu and open it. Check the <em>lab.local</em> zone inside the <em>Forward Lookup Zone. </em>I confirmed the record by running <code>nslookup domainname</code> in the <code>CMD</code>.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_212416.png" width="751" height="524" loading="lazy" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-30_212416.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-30_212416.png 751w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_212516.png" width="434" height="392" loading="lazy" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network"></div></div></div><figcaption>Unable to reverse lookup because there is no record!</figcaption></figure><h3 id="adding-a-new-reverse-lookup-entry">Adding a new Reverse Lookup Entry</h3><p>A new zone has to be created first to create a new entry. Add a new zone by selecting <em>Action</em> -&gt; <em> New Zone</em>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-81.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Click <em>New Zone</em></figcaption></figure><h3 id="zone-type">Zone Type</h3><p>Select <em>Primary Zone </em>and check the &quot;<em>Store the zone in Active Directory</em>&quot;. Click<em> </em>&quot;<em>Next</em>&quot;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-82.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Select <em>Primary Zone</em> and click <em>Next</em></figcaption></figure><h3 id="active-directory-zone-replication-scope">Active Directory Zone Replication Scope</h3><p>For the replication scope, select the second option &quot;<em>To all DNS servers running on domain controllers in this domain: lab.local</em>&quot;. </p><p>If I were to set up a second DC for the <code>lab.local</code> domain, the DNS record will be replicated at the second DC but not to the subdomains. Click<em> </em>&quot;<em>Next</em>&quot;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-83.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Select 2nd option and click <em>Next</em></figcaption></figure><h3 id="reverse-lookup-zone-name">Reverse Lookup Zone Name</h3><p>Select &quot;<em>IPv4 Reverse Lookup Zone&quot;</em> and click<em> </em>&quot;<em>Next</em>&quot;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-84.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Select first option and click <em>Next</em></figcaption></figure><p> Enter the IP Network Address that you are using and click<em> </em>&quot;<em>Next</em>&quot;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-85.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy" width="498" height="391"><figcaption>Key in the IP Network Address and click <em>Next</em></figcaption></figure><h3 id="dynamic-update">Dynamic Update</h3><p>Select the first option. Click<em> </em>&quot;<em>Next</em>&quot; and &quot;<em>Finish</em>&quot;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-86.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Select the first option and click <em>Next</em></figcaption></figure><h3 id="create-a-new-ptr-record-for-reverse-lookup-dns">Create a new PTR record for Reverse Lookup DNS</h3><p>The reason I like to have both forward and reverse lookup zone for the DC server is that some applications or services, that I going to install later on, might need these records.</p><p>Right-click the new zone and select &quot;<em>New Pointer (PTR)</em>&quot;.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-87.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Create new PTR</figcaption></figure><p>Insert the <em>Host IP address</em> and the<em> Host name </em>and click &quot;<em>Ok</em>&quot;. Do a <code>nslookup 10.18.157.5</code> in a <code>CMD</code>. This will resolves the same as <code>nslookup serverdc1.lab.local</code>.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_214908.png" width="398" height="455" loading="lazy" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_214926.png" width="429" height="340" loading="lazy" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network"></div></div></div><figcaption>Reverse Lookup successful</figcaption></figure><hr><h2 id="dns-forwarders">DNS Forwarders</h2><p>Right now, the DNS is unable to resolve any records that are not in the DNS Forwarded Lookup Zone. If you don&apos;t want the devices to resolves any external records, you can skip this step and proceed to configure the DHCP server.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-92.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Unable to resolve <code>google.com</code></figcaption></figure><p>By having a DNS Forwarder, it will forward any request that it is unable to resolve to the pfSense router. The pfSense router will then forward it to the pi.hole DNS server at WAN network. </p><p>To set DNS forwarders, right-click the <em>SERVERDC1 </em>and click on <em>Properties.</em></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-91.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Select DNS server properties</figcaption></figure><p>Go to the 2nd tab labelled <em>Forwarders</em>. Click on the &quot;<em>Edit</em>&quot; button and enter the IP Address of the forwarder. You can do a simple DNS test at the &quot;<em>Monitoring</em>&quot; tab.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_220148.png" width="396" height="467" loading="lazy" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_220105.png" width="524" height="438" loading="lazy" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_222304.png" width="395" height="473" loading="lazy" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_220248.png" width="363" height="334" loading="lazy" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network"></div></div></div><figcaption>Successfully resolve <code>google.com</code></figcaption></figure><hr><div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-dark" style data-kg-background-image><h2 class="kg-header-card-header">Configuring the DHCP Server</h2><h3 class="kg-header-card-subheader">Adding a New Scope and enabling DHCP Relay</h3></div><p>I will add the DHCP scope first before enabling the DHCP on the server.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/DHCP.drawio.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy" width="982" height="942" srcset="https://fscene8.me/content/images/size/w600/2022/01/DHCP.drawio.png 600w, https://fscene8.me/content/images/2022/01/DHCP.drawio.png 982w" sizes="(min-width: 720px) 720px"><figcaption>DHCP overview</figcaption></figure><h2 id="adding-a-new-scope">Adding a New Scope</h2><p>Search for <em>DHCP</em> in the <em>Start</em> Menu and open it. Right-clock the <em>IPv4</em> and select <em>New Scope.</em></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-93.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Select <em>New Scope</em></figcaption></figure><h3 id="scope-name">Scope Name</h3><p>Insert the scope name and description to identify the DHCP scope.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-94.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Key in the values and click <em>Next</em></figcaption></figure><h3 id="ip-address-range">IP Address Range</h3><p>Insert the start IP address, end IP address and the subnet mask values.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_225653.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Enter the values and click <em>Next</em></figcaption></figure><h3 id="add-exclusion-and-delay">Add Exclusion and Delay</h3><p>I want to reserve the first 10 IP addresses for my upcoming servers and services. This is where you should set yours too.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-97.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>To exclude IP address range</figcaption></figure><h3 id="lease-duration">Lease Duration</h3><p>The lease duration is the amount of time before they check with the DHCP server if they can continue using the same IP address. If the clients did not made any request when the lease expires, the DHCP server will release that IP to other clients.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-98.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>DHCP lease duration</figcaption></figure><h3 id="configure-dhcp-options">Configure DHCP Options</h3><p>DHCP options are settings that the DHCP server gives out to the client devices. Click &quot;<em>Next</em>&quot; to configure the DHCP default gateway and DNS IP address.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-99.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Select the first option and click <em>Next</em></figcaption></figure><h3 id="router-default-gateway">Router (Default Gateway)</h3><p>I set my pfSense IP address as the default gateway IP address. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-100.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Enter the default gateway and click <em>Next</em></figcaption></figure><h3 id="domain-name-and-dns-server">Domain Name and DNS Server</h3><p>For this page, it will auto set for me. Unless you want to use another DNS server or set up a subdomain of an active directory of an FQDN, you should not change any values here</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-101.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Accept the default values and click <em>Next</em></figcaption></figure><h3 id="wins-server">WINS Server</h3><p>WINS is not being used that much these days. WINS is the predecessor to DNS and this is for legacy support. It was used to resolve NetBIOS computer names to IP addresses. Leave this blank.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-102.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Skip this page and click <em>Next</em></figcaption></figure><h3 id="activate-scope">Activate Scope</h3><p>Activate the scope now.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-103.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Select <em>Yes</em> and click <em>Next</em></figcaption></figure><h2 id="enable-the-dhcp-server">Enable the DHCP Server</h2><p>Go to <em>Server Manager </em>and click on the notification flag to open the notification. Click on the &quot;<em>Complete DHCP configuration</em>&quot; to enable the DHCP server.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-106.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Click the <em>Complete DHCP configuration</em></figcaption></figure><p>Click &quot;<em>Next</em>&quot; and click &quot;<em>Commit</em>&quot; on this screen.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-107.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>Accept default value and click <em>Next</em></figcaption></figure><h2 id="activate-dhcp-relay-on-pfsense-router">Activate DHCP relay on pfSense Router</h2><p>You may skip this step if you do not wish to enable the DHCP relay at your router. </p><p>I will enable the DHCP Relay for my LAN interface at the router. The DHCP relay will send the DHCP packets from the lab network to my DHCP server. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-104.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy" width="1167" height="542" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-104.png 600w, https://fscene8.me/content/images/size/w1000/2022/01/image-104.png 1000w, https://fscene8.me/content/images/2022/01/image-104.png 1167w" sizes="(min-width: 720px) 720px"><figcaption>Enable DHCP relay at the router</figcaption></figure><h2 id="check-if-the-dhcp-is-working">Check if the DHCP is working</h2><p>I have a VM running Windows 10 on the lab network. By running <code>ipconfig /all</code> on that machine, I can confirm my DHCP server is running.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-109.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy"><figcaption>The DHCP server is working and the DHCP Server IP address is correct</figcaption></figure><p>From the server, we can check the connected client by going into the DHCP Manager.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-110.png" class="kg-image" alt="Create A Domain Controller with Windows Server 2019 VM In A Homelab Network" loading="lazy" width="793" height="366" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-110.png 600w, https://fscene8.me/content/images/2022/01/image-110.png 793w" sizes="(min-width: 720px) 720px"><figcaption>View connected client from DHCP Manager Window</figcaption></figure><hr><p>Success! I have created an isolated Virtual Network, with pfSense router, Windows Server 2019. The Windows Server is now a Domain Controller with DNS and DHCP server up and running. </p><p>This guide can also work with VMware Workstation or other virtualization software. You will only need to prepare and configure the virtual network first, depending on your design. </p><p>For my next post, I might be creating a new user account, computer account and organization unit. Who knows....</p>]]></content:encoded></item><item><title><![CDATA[Create A Windows Server 2019 VM In Proxmox + New Virtual Network]]></title><description><![CDATA[<p>This post will guide you on creating an isolated separate network in Proxmox and installing Windows Server 2019 VM attached to a new virtual network.</p><h2 id="create-a-new-network">Create a new network</h2><p>Create a new network in Proxmox by going to the Node -&gt; Network -&gt; Create Linux Bridge. </p><p>For VMware</p>]]></description><link>https://fscene8.me/windows-server-2019-vm-in-proxmox/</link><guid isPermaLink="false">61f57043afd73300feb03758</guid><category><![CDATA[Windows]]></category><category><![CDATA[Guides]]></category><category><![CDATA[proxmox]]></category><category><![CDATA[server]]></category><category><![CDATA[windows server]]></category><category><![CDATA[collections]]></category><dc:creator><![CDATA[aki]]></dc:creator><pubDate>Sat, 29 Jan 2022 18:19:17 GMT</pubDate><media:content url="https://fscene8.me/content/images/2022/01/image_2022-01-30_021000.png" medium="image"/><content:encoded><![CDATA[<img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_021000.png" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network"><p>This post will guide you on creating an isolated separate network in Proxmox and installing Windows Server 2019 VM attached to a new virtual network.</p><h2 id="create-a-new-network">Create a new network</h2><p>Create a new network in Proxmox by going to the Node -&gt; Network -&gt; Create Linux Bridge. </p><p>For VMware ESXi or Workstation, the settings should be &quot;Host-Only&quot;. However, this post is about Proxmox.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-31_072924.png" class="kg-image" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" loading="lazy" width="603" height="529" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-31_072924.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-31_072924.png 603w"><figcaption>VMware Workstation - Virtual Network Editor</figcaption></figure><p>I am still learning on VLAN with virtualization but I can&apos;t seem to make it work yet. All I know is that I need a virtual Layer 3 switch but I&apos;m not a networking guy and this <a href="https://developers.redhat.com/blog/2018/10/22/introduction-to-linux-interfaces-for-virtual-networking">article</a> is kinda hard to understand.</p><p>However, a Linux bridge is a layer 2 virtual device that on its own cannot receive or transmit anything unless I bind one or more real devices to it. So I treat it as a virtual L2 switch with an RJ45 cable and everything became easy to understand.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_011510.png" width="558" height="381" loading="lazy" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_011539.png" width="609" height="287" loading="lazy" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-30_011539.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-30_011539.png 609w"></div></div></div><figcaption>Click on the Apply Configuration to save changes</figcaption></figure><h2 id="installing-windows-server-2019-vm">Installing Windows Server 2019 VM</h2><h3 id="vm-settings">VM Settings</h3><p>These are the setting I used for the Windows Server 2019 VM.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th style="text-align:left">Tab</th>
<th style="text-align:left">Variable</th>
<th style="text-align:left">Value</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">General</td>
<td style="text-align:left">Name</td>
<td style="text-align:left">win2k19svr</td>
</tr>
<tr>
<td style="text-align:left">OS</td>
<td style="text-align:left">Type</td>
<td style="text-align:left">Microsoft Windows</td>
</tr>
<tr>
<td style="text-align:left">OS</td>
<td style="text-align:left">Version</td>
<td style="text-align:left">10/2016/2019</td>
</tr>
<tr>
<td style="text-align:left">System</td>
<td style="text-align:left">SCSI Controller</td>
<td style="text-align:left">VirtIO SCSI</td>
</tr>
<tr>
<td style="text-align:left">System</td>
<td style="text-align:left">Qemu Agent</td>
<td style="text-align:left">Checked</td>
</tr>
<tr>
<td style="text-align:left">Disk</td>
<td style="text-align:left">Bus/Device</td>
<td style="text-align:left">SCSI</td>
</tr>
<tr>
<td style="text-align:left">DIsk</td>
<td style="text-align:left">Disk Size (GB)</td>
<td style="text-align:left">64</td>
</tr>
<tr>
<td style="text-align:left">CPU</td>
<td style="text-align:left">Socket</td>
<td style="text-align:left">1</td>
</tr>
<tr>
<td style="text-align:left">CPU</td>
<td style="text-align:left">Cores</td>
<td style="text-align:left">3</td>
</tr>
<tr>
<td style="text-align:left">Memory</td>
<td style="text-align:left">RAM (MB)</td>
<td style="text-align:left">2048</td>
</tr>
<tr>
<td style="text-align:left">Network</td>
<td style="text-align:left">Bridge</td>
<td style="text-align:left">vmbr1 (new bridge*)</td>
</tr>
<tr>
<td style="text-align:left">Network</td>
<td style="text-align:left">Model</td>
<td style="text-align:left">VirtIO (paravirtualized)</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_011948.png" width="730" height="521" loading="lazy" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-30_011948.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-30_011948.png 730w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_012023.png" width="733" height="521" loading="lazy" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-30_012023.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-30_012023.png 733w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_012046.png" width="729" height="517" loading="lazy" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-30_012046.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-30_012046.png 729w" sizes="(min-width: 720px) 720px"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_012555.png" width="724" height="515" loading="lazy" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-30_012555.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-30_012555.png 724w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_012128.png" width="732" height="516" loading="lazy" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-30_012128.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-30_012128.png 732w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_012155.png" width="722" height="523" loading="lazy" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-30_012155.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-30_012155.png 722w" sizes="(min-width: 720px) 720px"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_012246.png" width="724" height="514" loading="lazy" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-30_012246.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-30_012246.png 724w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-30_012311.png" width="722" height="513" loading="lazy" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-30_012311.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-30_012311.png 722w" sizes="(min-width: 720px) 720px"></div></div></div></figure><p>You will need to provide the drivers during installation. Go to the <a href="https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md">VirtIO Github page</a> to download the iso driver for windows and attach another CD-Drive with the iso.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/01/image-44.png" class="kg-image" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" loading="lazy" width="406" height="258"></figure><p>Boot up the VM. Select option 2 &quot;<em>Custom: Install Windows Only (advanced)</em>&quot; on this screen.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/01/image-46.png" class="kg-image" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" loading="lazy" width="638" height="478" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-46.png 600w, https://fscene8.me/content/images/2022/01/image-46.png 638w"></figure><h3 id="missing-storage-drivers">Missing storage drivers</h3><p>Windows will not be able to detect your Virtual Disk. Select the &quot;<em>Load driver</em>&quot; option to install the driver.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/01/image-47.png" class="kg-image" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" loading="lazy" width="635" height="478" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-47.png 600w, https://fscene8.me/content/images/2022/01/image-47.png 635w"></figure><p>Choose the correct version. Look at the path directory with <strong>2k19</strong>.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/01/image-48.png" class="kg-image" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" loading="lazy" width="635" height="479" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-48.png 600w, https://fscene8.me/content/images/2022/01/image-48.png 635w"></figure><p>Once the driver finishes installing, it will bring you back to the drive selection page. Select <em>Drive 0</em> and click <em>Next</em>.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/01/image-49.png" class="kg-image" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" loading="lazy" width="639" height="482" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-49.png 600w, https://fscene8.me/content/images/2022/01/image-49.png 639w"></figure><p>The Windows Setup will continue installing the Windows Server 2019. </p><h3 id="ctrl-alt-delete">CTRL + ALT + DELETE</h3><p>To send Ctrl + Alt + Delete, you need to use the noVNC side panel at the left.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/01/image-50.png" class="kg-image" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" loading="lazy" width="1023" height="765" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-50.png 600w, https://fscene8.me/content/images/size/w1000/2022/01/image-50.png 1000w, https://fscene8.me/content/images/2022/01/image-50.png 1023w" sizes="(min-width: 720px) 720px"></figure><h3 id="installing-virtio-network-serial-and-ballooning-drivers">Installing VirtIO network, serial and ballooning drivers</h3><p>Navigate to the Device Manager and install the missing drivers.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/01/image-51.png" class="kg-image" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" loading="lazy" width="781" height="572" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-51.png 600w, https://fscene8.me/content/images/2022/01/image-51.png 781w" sizes="(min-width: 720px) 720px"></figure><p>For the 3 missing drivers, browse <code>D:\</code> and windows will install those drivers.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/01/image-52.png" class="kg-image" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network" loading="lazy" width="781" height="576" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-52.png 600w, https://fscene8.me/content/images/2022/01/image-52.png 781w" sizes="(min-width: 720px) 720px"></figure><p>The VM will restart itself once you finish installing all 3 drivers. You may now remove the 2 ISO from the CD drives.</p><p>Now you can start tinkering with the VM. Do your backup/restore point so you won&apos;t have to go through the installation again. </p><p>You can check out my next post on promoting this server to a domain controller.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://fscene8.me/create-a-domain-controller/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Create A Domain Controller with Windows Server 2019 VM In A Homelab VLAN</div><div class="kg-bookmark-description">In this post: IntroductionSetting Up The Lab NetworkCreating a Domain ControllerConfiguring the DNS ServerConfiguring the DHCP ServerIntroductionI have installed a Windows Server 2019 in a VM in the previous post. Currently, the VM is the only machine that is alive in the new VLAN. That&#x2019;s very lonel&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://fscene8.me/favicon.ico" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network"><span class="kg-bookmark-author">fscene8</span><span class="kg-bookmark-publisher">aki</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-31_003838.png" alt="Create A Windows Server 2019 VM In Proxmox + New Virtual Network"></div></a></figure><p>Have fun!</p>]]></content:encoded></item><item><title><![CDATA[GoAccess, A Real-Time Dashboard for Nginx Proxy Manager]]></title><description><![CDATA[GoAccess provides a real-time data dashboard for the Nginx Proxy Manager. This post will guide you on how-to install GoAccess.]]></description><link>https://fscene8.me/real-time-dashboard-for-nginx-proxy-manager/</link><guid isPermaLink="false">61f13020269e8700be3c3544</guid><category><![CDATA[Linux]]></category><category><![CDATA[web hosting]]></category><category><![CDATA[Guides]]></category><category><![CDATA[collections]]></category><category><![CDATA[GoAccess]]></category><category><![CDATA[ngnix]]></category><category><![CDATA[reverse proxy]]></category><dc:creator><![CDATA[aki]]></dc:creator><pubDate>Wed, 26 Jan 2022 12:57:20 GMT</pubDate><media:content url="https://fscene8.me/content/images/2022/01/image_2022-01-26_194022.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-36.png" class="kg-image" alt="GoAccess, A Real-Time Dashboard for Nginx Proxy Manager" loading="lazy" width="2000" height="784" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-36.png 600w, https://fscene8.me/content/images/size/w1000/2022/01/image-36.png 1000w, https://fscene8.me/content/images/size/w1600/2022/01/image-36.png 1600w, https://fscene8.me/content/images/size/w2400/2022/01/image-36.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>GoAccess supports themes</figcaption></figure><img src="https://fscene8.me/content/images/2022/01/image_2022-01-26_194022.png" alt="GoAccess, A Real-Time Dashboard for Nginx Proxy Manager"><p>The Nginx Proxy Manager generate logs of every connection made. With this data, <a href="https://github.com/GregYankovoy" rel="author">GregYankovoy</a> created a docker image that provides a real-time data dashboard. It can be run easily alongside the Nginx Proxy Manager.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/GregYankovoy/docker-goaccess"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - GregYankovoy/docker-goaccess: goaccess reverse proxied through nginx for ease of use</div><div class="kg-bookmark-description">goaccess reverse proxied through nginx for ease of use - GitHub - GregYankovoy/docker-goaccess: goaccess reverse proxied through nginx for ease of use</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="GoAccess, A Real-Time Dashboard for Nginx Proxy Manager"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">GregYankovoy</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/b59c82af834a0899a7f634ae2d8783c0fd0de78cd51ae3687cddd1aa8362e1de/GregYankovoy/docker-goaccess" alt="GoAccess, A Real-Time Dashboard for Nginx Proxy Manager"></div></a></figure><p>If you have not set up Nginx Proxy Manager, check out my guide at the link below.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://fscene8.me/nginx-proxy-manager/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Nginx Proxy Manager, A Reverse Proxy Management System</div><div class="kg-bookmark-description">Guide on setting up Nginx Proxy Manager</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://fscene8.me/favicon.ico" alt="GoAccess, A Real-Time Dashboard for Nginx Proxy Manager"><span class="kg-bookmark-author">fscene8</span><span class="kg-bookmark-publisher">aki</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://images.unsplash.com/photo-1573164713712-03790a178651?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDE4fHx3ZWIlMjBzZXJ2ZXJ8ZW58MHx8fHwxNjQzMTk4ODY5&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="GoAccess, A Real-Time Dashboard for Nginx Proxy Manager"></div></a></figure><h3 id="how-to-install-goaccess">How to install GoAccess?</h3><p>Run the command below at your Nginx Proxy Manager server terminal.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">docker run --name goaccess -p 7889:7889 -v ~/nginx-proxy-manager/data/logs:/opt/log -v ~/goaccess:/config -d gregyankovoy/goaccess</code></pre><figcaption>This is download and runs the docker image</figcaption></figure><p>What does each of these means?</p><ul><li><code>docker run --name goaccess</code> to run a docker container and set the name as <code>goaccess</code></li><li><code>-p 7889:7889</code> is to host the docker image at the 7889 port</li><li><code>-v ~/nginx-proxy-manager/data/logs:/opt/log</code>, to bind the Nginx logs to the docker container log at <code>/opt/log</code></li><li><code>-v ~/goaccess:/config</code>, to bind the image config directory to the <code>goaccess</code> directory at your home directory</li><li><code>-d gregyankovoy/goaccess</code>, to run the container in the background and print container ID</li></ul><p>You can check if the docker container is running by running <code>docker ps</code> command.</p><h3 id="add-the-log-file-to-goaccess">Add the log file to GoAccess</h3><p>Now, the config file will be created at <code>~/goaccess/config/</code>. Let&apos;s configure the config file.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">mv goaccess.conf goaccess.conf.backup</code></pre><figcaption>Backup the original file</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-bash">nano goaccess.conf</code></pre><figcaption>Create a new <code>goaccess.conf</code> file</figcaption></figure><p>For Nginx Proxy Manager, add the following lines to the <code>goaccess.conf</code> file. </p><figure class="kg-card kg-code-card"><pre><code>time-format %H:%M:%S
date-format %d/%b/%Y
log_format [%d:%t %^] - %s %^ - %m %^ %v &quot;%U&quot; [Client %h] [Length %b] [Gzip %^] [Sent-to %^] &quot;%u&quot; &quot;%R&quot;
real-time-html true
log-file /opt/log/proxy-host-1_access.log
log-file /opt/log/proxy-host-2_access.log
log-file /opt/log/proxy-host-3_access.log</code></pre><figcaption>You can edit the log file line depending on the number of hosts you have</figcaption></figure><p>Save the file and restart your <code>goaccess</code> docker image.</p><pre><code class="language-bash">docker restart goaccess</code></pre><p>Navigate to your GoAccess page. Replace <code>127.0.0.1</code> with your IP address.</p><pre><code class="language-bash">http://127.0.0.1:7889</code></pre>]]></content:encoded></item><item><title><![CDATA[Nginx Proxy Manager, A Reverse Proxy Management System]]></title><description><![CDATA[Guide on setting up Nginx Proxy Manager]]></description><link>https://fscene8.me/nginx-proxy-manager/</link><guid isPermaLink="false">61eeead2269e8700be3c32ea</guid><category><![CDATA[Linux]]></category><category><![CDATA[Nginx]]></category><category><![CDATA[reverse proxy]]></category><category><![CDATA[web hosting]]></category><category><![CDATA[Guides]]></category><category><![CDATA[collections]]></category><dc:creator><![CDATA[aki]]></dc:creator><pubDate>Tue, 25 Jan 2022 12:43:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1573164713712-03790a178651?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDE4fHx3ZWIlMjBzZXJ2ZXJ8ZW58MHx8fHwxNjQzMTk4ODY5&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1573164713712-03790a178651?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDE4fHx3ZWIlMjBzZXJ2ZXJ8ZW58MHx8fHwxNjQzMTk4ODY5&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Nginx Proxy Manager, A Reverse Proxy Management System"><p>In this post,</p><ul><li>What is a reverse proxy and why use it?</li><li>What is Nginx Proxy Manager?</li><li>Installing the Nginx Proxy Manager</li><li>How to set up a reverse proxy?</li></ul><h2 id="what-is-a-reverse-proxy-and-why-use-it">What is a reverse proxy and why use it?</h2><p>The purpose of a Reverse Proxy Server is to redirect web traffic to the requested server hosting behind it. This allows multiple web applications to be hosted and exposed to the public by using just one public IP address and one port, mainly <code>443</code>. </p><p>However, this can only be done with a Domain Name. It must be configured in the Nginx Virtual Host configuration file with the server IP address and port. The client will never know the real IP address and port number of the server.</p><p>Lastly, the SSL/TLS certificate can be easily managed and renewed at a reverse proxy for all the hosted domain names. The SSL can be configured to be terminated at the reverse proxy and forward the unencrypted data to the server. This allows better performance for the backend servers where decryption is not needed on their end.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/apache-reverse-proxy-diagram.png" class="kg-image" alt="Nginx Proxy Manager, A Reverse Proxy Management System" loading="lazy"><figcaption>Source: <a href="https://www.simplified.guide/_media/apache/configure-reverse-proxy/apache-reverse-proxy-diagram.png">Simplified Guide</a> | Proxy Server acts as the middle man for both connections</figcaption></figure><p>For local web applications that require a port number to access the web portal, Nginx Proxy Manager also allows you to connect to the local web application without the port number. </p><p>This can be done by setting a local DNS entry <code>myapp.home</code> at the DNS server to point to the reverse proxy IP address. The reverse proxy server will forward that traffic to the myApp server at <code>192.168.1.100:8006</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-25.png" class="kg-image" alt="Nginx Proxy Manager, A Reverse Proxy Management System" loading="lazy" width="1707" height="914" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-25.png 600w, https://fscene8.me/content/images/size/w1000/2022/01/image-25.png 1000w, https://fscene8.me/content/images/size/w1600/2022/01/image-25.png 1600w, https://fscene8.me/content/images/2022/01/image-25.png 1707w" sizes="(min-width: 720px) 720px"><figcaption>Quick illustration on how a reverse proxy can be used locally</figcaption></figure><figure class="kg-card kg-code-card"><pre><code>server {        
    listen 80;
    server_name myapp.home;
    ...
    ...
    location / {            
        proxy_pass http://192.168.1.100:8006;
    }
}</code></pre><figcaption>A snippet of the Nginx proxy configuration</figcaption></figure><h2 id="what-is-nginx-proxy-manager">What is Nginx Proxy Manager?</h2><p>It is a web-based GUI tool that is based on Nginx, a web server, to host the Web UI and perform as a reverse proxy server. It comes with a clean and nice UI that is easy to navigate around.</p><p>It comes as a pre-built docker image that enables you to easily forward to your websites running at home or otherwise, including SSL management, without having to know too much about Nginx or Letsencrypt.</p><p>This helps you to spend lesser time configuring the reverse proxy configuration file and shift your focus more on the web application that you want to deploy.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-26.png" class="kg-image" alt="Nginx Proxy Manager, A Reverse Proxy Management System" loading="lazy" width="1207" height="378" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-26.png 600w, https://fscene8.me/content/images/size/w1000/2022/01/image-26.png 1000w, https://fscene8.me/content/images/2022/01/image-26.png 1207w" sizes="(min-width: 1200px) 1200px"><figcaption>Access Control List (ACL) is a feature that restricts access to that domain based on IP network address and/or authentication (username/password).</figcaption></figure><h2 id="installing-the-nginx-proxy-manager">Installing the Nginx Proxy Manager</h2><h3 id="install-docker">Install Docker</h3><p>The quickest way to install is to use a docker image. Install <code>docker</code> and <code>docker-compose</code> first.</p><pre><code class="language-bash">apt install docker docker-compose</code></pre><h3 id="install-nginx-proxy-manager">Install Nginx Proxy Manager</h3><p>Make a new directory for the docker container at your home directory and enter the directory.</p><pre><code class="language-bash">mkdir ~/nginx-proxy-manager</code></pre><pre><code class="language-bash">cd ~/nginx-proxy-manager</code></pre><p>Create a new <code>docker-compose.yml</code> file.</p><pre><code class="language-bash">nano docker-compose.yml</code></pre><p>Add the following lines into the <code>docker-compose.yml</code> file.</p><pre><code class="language-bash">version: &apos;3&apos;
services:
  app:
    image: &apos;jc21/nginx-proxy-manager:latest&apos;
    restart: unless-stopped
    ports:
      - &apos;80:80&apos;
      - &apos;81:81&apos;
      - &apos;443:443&apos;
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt</code></pre><p>Run the docker image.</p><pre><code class="language-bash">docker-compose up -d
</code></pre><p>Once the download is completed and the image is running, log in to the webpage at <code>http://127.0.0.1:81</code>. If you are logging in for another computer, replace <code>127.0.0.1</code> with the IP address of the Nginx Proxy Manager server.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">Emailadd: admin@example.com
Password: changeme
</code></pre><figcaption>Default log in</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-29.png" class="kg-image" alt="Nginx Proxy Manager, A Reverse Proxy Management System" loading="lazy" width="1126" height="724" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-29.png 600w, https://fscene8.me/content/images/size/w1000/2022/01/image-29.png 1000w, https://fscene8.me/content/images/2022/01/image-29.png 1126w"><figcaption>Log in with the default email and password</figcaption></figure><p>Change your account details once you successfully log in. Make sure to change your password to a secure password.</p><h2 id="how-to-set-up-a-reverse-proxy">How to set up a reverse proxy?</h2><p>In the example below, I have set up a webserver on <code>192.168.1.192</code> at port <code>80</code> and called it <code>myapp</code>.</p><p>Navigate to the proxy host page, add a new proxy host with the server IP and port number of that web application.</p><p>I will set a domain <code>myapp.home</code>, with the IP address and the port number of the <code>myapp</code><em> </em>is hosted. For the Access List, the client IP must belong to <code>Home Network</code> to gain access to it. </p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-31.png" class="kg-image" alt="Nginx Proxy Manager, A Reverse Proxy Management System" loading="lazy"><figcaption>192.168.1.192:80 is hosting myapp</figcaption></figure><h3 id="setting-up-local-dns-a-name-record-for-myapphome">Setting up local DNS A name record for <code>myapp.home</code></h3><p>My local Pi.Hole DNS server will be pointing <code>myapp.home</code> to this Nginx Proxy Manager IP address. In addition, I also have a Plex Media Server, that is pointing to the same Proxy IP, where the client will never know what is the real IP address of both places.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-26_185322.png" width="994" height="223" loading="lazy" alt="Nginx Proxy Manager, A Reverse Proxy Management System" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-26_185322.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-26_185322.png 994w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-26_185420.png" width="540" height="296" loading="lazy" alt="Nginx Proxy Manager, A Reverse Proxy Management System"></div></div></div><figcaption><code>myapp.home</code> is now pointing to the Nginx Reverse Proxy IP address. Of course, myapp is not hosted at <code>192.168.1.199</code> but it is at <code>192.168.1.192</code>.</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-35.png" class="kg-image" alt="Nginx Proxy Manager, A Reverse Proxy Management System" loading="lazy" width="1080" height="297" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-35.png 600w, https://fscene8.me/content/images/size/w1000/2022/01/image-35.png 1000w, https://fscene8.me/content/images/2022/01/image-35.png 1080w"><figcaption>The reverse proxy is working</figcaption></figure><h3 id="hosting-web-application-to-the-public">Hosting web application to the public</h3><p>You need a domain name<em> </em>for this.</p><p>For this example, I will be using <code>demo.fscene8.xyz</code>. At my DNS provider, I have set the DNS record to point to my Nginx Proxy Manager Public IP address. I will also grab an SSL cert and change from plain HTTP to HTTPS.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-40.png" class="kg-image" alt="Nginx Proxy Manager, A Reverse Proxy Management System" loading="lazy" width="531" height="581"><figcaption>Changing the domain name</figcaption></figure><h3 id="lets-encrypt">Let&apos;s Encrypt</h3><p>Change to the SSL tab, select <em>Request a new SSL certificate </em>and turn on <em>Force SSL</em>. Enter your email address and agree to the Terms of Service. Click Save.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-38.png" class="kg-image" alt="Nginx Proxy Manager, A Reverse Proxy Management System" loading="lazy"><figcaption>SSL tab UI</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-26_195857.png" class="kg-image" alt="Nginx Proxy Manager, A Reverse Proxy Management System" loading="lazy"><figcaption><code>demo.fscene8.xyz</code> proxy host summary&#xA0;</figcaption></figure><p>I have just created an SSL cert for <code>demo.fscene8.xyz</code> and encrypts the traffics between the client and the proxy server. The SSL termination will be done at my proxy server and forwards the unencrypted traffic back to <code>192.168.1.192:80</code>.</p><h3 id="lets-check-out-the-new-site">Let&apos;s check out the new site</h3><p>Navigate to the site and check the cert.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://fscene8.me/content/images/2022/01/image-42.png" class="kg-image" alt="Nginx Proxy Manager, A Reverse Proxy Management System" loading="lazy" width="1081" height="781" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-42.png 600w, https://fscene8.me/content/images/size/w1000/2022/01/image-42.png 1000w, https://fscene8.me/content/images/2022/01/image-42.png 1081w"></figure>]]></content:encoded></item><item><title><![CDATA[Install Nextcloud 23 with Collabora and HPB on Debian 11 natively]]></title><description><![CDATA[<p>This post will guide you on how to install Nextcloud with Collabora and the High-Performance backend for pushing Nextcloud notifications on Debian 11 server natively. No Docker, AppImages or Snap!</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_035341.png" width="955" height="801" loading="lazy" alt srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-23_035341.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-23_035341.png 955w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_034817.png" width="955" height="801" loading="lazy" alt srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-23_034817.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-23_034817.png 955w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_034932.png" width="955" height="801" loading="lazy" alt srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-23_034932.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-23_034932.png 955w" sizes="(min-width: 720px) 720px"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_035140.png" width="955" height="801" loading="lazy" alt srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-23_035140.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-23_035140.png 955w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_035214.png" width="955" height="801" loading="lazy" alt srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-23_035214.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-23_035214.png 955w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_035305.png" width="955" height="801" loading="lazy" alt srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-23_035305.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-23_035305.png 955w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>Dashboard, Cloud Storage, Photos/Videos, Calendar, Instant Messaging, Deck</figcaption></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://fscene8.me/a-free-alternative-to-google-docs-and-ms-office-365/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">A Free Alternative to Cloud Storage Solution, Nextcloud</div><div class="kg-bookmark-description">Cloud storage is</div></div></a></figure>]]></description><link>https://fscene8.me/nextcloud-collabora-hpd-installation-guide/</link><guid isPermaLink="false">61eb23321d944900d5a1a331</guid><category><![CDATA[Linux]]></category><category><![CDATA[collections]]></category><category><![CDATA[Nextcloud]]></category><category><![CDATA[Debian]]></category><dc:creator><![CDATA[aki]]></dc:creator><pubDate>Sat, 22 Jan 2022 20:21:38 GMT</pubDate><media:content url="https://fscene8.me/content/images/2022/01/image_2022-01-23_040620.png" medium="image"/><content:encoded><![CDATA[<img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_040620.png" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively"><p>This post will guide you on how to install Nextcloud with Collabora and the High-Performance backend for pushing Nextcloud notifications on Debian 11 server natively. No Docker, AppImages or Snap!</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_035341.png" width="955" height="801" loading="lazy" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-23_035341.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-23_035341.png 955w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_034817.png" width="955" height="801" loading="lazy" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-23_034817.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-23_034817.png 955w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_034932.png" width="955" height="801" loading="lazy" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-23_034932.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-23_034932.png 955w" sizes="(min-width: 720px) 720px"></div></div><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_035140.png" width="955" height="801" loading="lazy" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-23_035140.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-23_035140.png 955w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_035214.png" width="955" height="801" loading="lazy" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-23_035214.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-23_035214.png 955w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_035305.png" width="955" height="801" loading="lazy" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-23_035305.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-23_035305.png 955w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>Dashboard, Cloud Storage, Photos/Videos, Calendar, Instant Messaging, Deck</figcaption></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://fscene8.me/a-free-alternative-to-google-docs-and-ms-office-365/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">A Free Alternative to Cloud Storage Solution, Nextcloud</div><div class="kg-bookmark-description">Cloud storage is becoming increasingly popular. They offer an easy way to share documents and photos with other people, which is very similar to services like Dropbox, or OneDrive. Let&#x2019;s take a more detailed look at the free software. What is Nextcloud?It is open-source cloud storage. It allows</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://fscene8.me/favicon.ico" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively"><span class="kg-bookmark-author">fscene8</span><span class="kg-bookmark-publisher">aki</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://images.unsplash.com/photo-1506365558634-e0c754979231?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGdvb2dsZSUyMGRyaXZlfGVufDB8fHx8MTY0Mjg4MTg1NQ&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively"></div></a></figure><p>In this post:</p><ul><li>Prerequisites</li><li>Part 1: Installing Nextcloud 23</li><li>Part 2: Installing Collabora Online Office Suite</li><li>Part 3: Installing High-Performance Backend</li></ul><hr><h2 id="prerequisites">Prerequisites</h2><p>You will need a running Debian 11 installed. You may install it locally or get one from any hosting providers, such as <a href="https://www.digitalocean.com/">DigitalOcean </a>and <a href="https://www.linode.com/">Linode</a>.</p><p>You will also need a domain name for your Nextcloud server. It can be the current domain name you own now as we will be using subdomains in this guide.</p><p>Please set two new A record DNS for Nextcloud and Collabora each now. We will let the DNS update while we set up our server.</p><p>I will be using <code>fscene8.xyz</code> as my domain name and DigitalOcean as my hosting provider.</p><ul><li>Nextcloud server -&gt; <code>nextcloud.fscene8.xyz</code></li><li>Collabora server -&gt; <code>collabora-office.fscene8.xyz</code></li></ul><p>All the commands are being executed as the <em>root</em> account. Log in as <em>root </em>either from the start or <code>su</code>. You can also type <code>sudo</code> at the start of each command as a normal user.</p><h2 id="part-1-installing-nextcloud-23">Part 1: Installing Nextcloud 23</h2><h3 id="part-11-set-a-hostname">Part 1.1: Set a hostname</h3><p>Please set a hostname for your Debian server, if necessary.</p><pre><code class="language-bash">hostnamectl set-hostname nextcloud</code></pre><p>Make sure to add a new entry in your <code>/etc/hosts</code>.</p><pre><code class="language-bash">127.0.0.1	nextcloud</code></pre><p>To see the changes take effect, relog to your server.</p><h3 id="part-12-update-your-system">Part 1.2: Update your system</h3><p>Make sure that your server is up-to-date.</p><pre><code>apt update &amp;&amp; apt upgrade -y</code></pre><h3 id="part-13-installing-prerequisite-packages-for-nextcloud">Part 1.3: Installing prerequisite packages for Nextcloud</h3><p>The prerequisite packages for Nexcloud basic installation are:</p><ul><li>Apache Web Server</li><li>PHP </li><li>MariaDB Database</li><li>Redis Caching Memory Server</li><li>SSL certbot</li></ul><p>Install all of them.</p><pre><code class="language-bash">apt install apache2 mariadb-server php-common libapache2-mod-php php-gd php-mysql php-curl php-mbstring php-intl php-gmp php-bcmath imagemagick php-imagick ffmpeg php-xml php-zip php-bz2 php-redis redis-server python3-certbot-apache
</code></pre><h3 id="part-13-configure-the-redis-memory-caching-server">Part 1.3: Configure the Redis memory caching server:</h3><p>Configure the Redis Memory caching server.</p><pre><code class="language-bash">nano /etc/redis/redis.conf</code></pre><blockquote>For nano, use <code>ctrl + w</code> to search for text.</blockquote><p>By default, Redis uses the networking port. Since we are only dealing with localhost and not going out, we going to use unixsocket for Redis. This is a more secure way for this guide setup. Once configured, any program can go through Redis without going thru the networking at all.</p><ul><li>Uncomment the line <code>unixsocket /var/run/redis/redis-server.sock</code>.<br>This file will be used for its socket.</li><li>Uncomment the line below <code>unixsocketperm 700</code>.</li><li>Change the line from <code>unixsocketperm 700</code> to <code>unixsocketperm 770</code>.<br>Only the Redis Group Users can access the file.</li><li>Search for <code>port 6379</code>.</li><li>Change the line from <code>port 6379</code> to <code>port 0</code>.<br>The line is located at the bottom of the file.<br>This will disable the TCP port since we are using unixsocket. </li><li>Save the file with <code>ctrl+x</code> and then press <code>y</code>.</li></ul><h3 id="part-14-add-apache-user-to-redis-group">Part 1.4: Add Apache user to Redis group</h3><pre><code class="language-bash">usermod -aG redis www-data</code></pre><h3 id="part-15-setup-apache-virtual-host-file">Part 1.5: Setup Apache virtual host file</h3><p>Create a new Apache virtual host configuration file <code>nextcloud.conf</code> with <code>nano</code>.</p><pre><code class="language-bash">nano /etc/apache2/sites-available/nextcloud.conf</code></pre><p>Add the following line below and set the<code>ServerName</code> to your <em>domain name. </em>Make sure &#xA0;<code>DocumentRoot</code> is pointing to <code>/var/www/nextcloud</code>. </p><pre><code>&lt;VirtualHost *:80&gt;
        ServerName nextcloud.fscene8.xyz        
        DocumentRoot /var/www/nextcloud

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
&lt;/VirtualHost&gt;</code></pre><p>Save the config file and enable the <code>nextcloud</code> virtual site.</p><pre><code class="language-bash">a2ensite nextcloud</code></pre><p>Before reloading the Apache, enable the <em>rewrite </em>and <em>headers </em>apache modules. The <em>rewrite</em> is needed for the URL scheme for Nextcloud and <em>headers</em> is needed for the HTTPS and SSL. We will configure both of them later.</p><pre><code class="language-bash">a2enmod rewrite headers</code></pre><p>Restart both Redis and Apache.</p><pre><code>systemctl restart redis apache2</code></pre><h3 id="part-16-setting-up-nextcloud-directory">Part 1.6: Setting up Nextcloud directory</h3><p>Go to the <a href="https://nextcloud.com/install/#instructions-server">Nextcloud download page</a> and click on the &quot;<em>Details and download option&quot;.</em> Right-click and copy the link for the <code>.tar.bz2</code> file. <br>Paste the link after the <code>wget</code>command.</p><pre><code class="language-bash">wget https://download.nextcloud.com/server/releases/nextcloud-23.0.0.tar.bz2</code></pre><p>Extracts the file into the <code>/var/www/</code> directory.</p><pre><code class="language-bash">tar -xvf ./nextcloud-23.0.0.tar.bz2 -C /var/www/</code></pre><p>Change the ownership of extracted folder directory to Apache.</p><pre><code class="language-bash">chown -R www-data: /var/www/nextcloud</code></pre><p>Create a new directory for your Nextcloud user data. This is where the files for the cloud will be stored. It can be your external or network-attached storage device.</p><pre><code class="language-bash">mkdir /nextcloud-data</code></pre><p>Change the owner of the <code>/nextcloud-data</code>.</p><pre><code class="language-bash">chown www-data: /nextcloud-data</code></pre><p>You can remove now the downloaded <code>.tar.bz2</code>. (<em>Optional</em>)</p><pre><code class="language-bash">rm nextcloud-23.0.0.tar.bz2</code></pre><h3 id="part-16a-for-external-or-network-attached-storage-devices">Part 1.6a: For external or network-attached storage devices</h3><p>Mount your storage with permission <code>0770</code> for the file and directory.</p><pre><code class="language-bash">//ipaddress/share /nextcloud-data cifs gid=33,uid=33,credentials=/root/.nextcloudshare,iocharset=utf8,comment=systemd.automount,file_mode=0770,dir_mode=0770      0       1</code></pre><p>For LXC unprivileged containers, you need to mount from the Proxmox web UI. The LXC needs to be a privileged container to mount devices directly. If you are still unable to mount your NAS, discard LXC and install a VM.</p><p>Now, you can visit your cloud domain and the Nextcloud page will be loaded if the DNS is updated. We have not yet configured SSL/TLS and MariaDB. This page will not work till the remaining two are installed.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-12.png" class="kg-image" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" loading="lazy"><figcaption>Notice the &quot;Not secure&quot; at the left of the URL bar? This site is running on plain HTTP! Oh no!</figcaption></figure><h3 id="part-17-enable-https-for-nextcloud">Part 1.7: Enable HTTPS for Nextcloud</h3><p>We going to use certbot to help us get your SSL/TLS cert. Enter the details required by the certbot. Choose the redirect option.</p><pre><code class="language-bash">certbot --apache</code></pre><p>Choose the <code>2: Redirect</code> on this screen.</p><pre><code class="language-bash">Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you&apos;re confident your site works on HTTPS. You can undo this
change by editing your web server&apos;s configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press &apos;c&apos; to cancel): 2</code></pre><p>Visit your Nextcloud webpage and it will redirect you to the HTTPS version. You can check the cert and its expiry date.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-13.png" class="kg-image" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" loading="lazy"><figcaption>This site is now secure</figcaption></figure><h3 id="part-18-installing-the-database">Part 1.8: Installing the database</h3><p>We will need to create a new database and user for Nextcloud. If you have not run <code>mysql_secure_installation</code> before, you need to set up a password for the <em>MariaDB </em>root user. Please read carefully at each prompt.</p><pre><code class="language-bash">mysql_secure_installation</code></pre><figure class="kg-card kg-code-card"><pre><code class="language-bash">In order to log into MariaDB to secure it, we&apos;ll need the current
password for the root user.  If you&apos;ve just installed MariaDB, and
you haven&apos;t set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):</code></pre><figcaption>For first time setup, leave blank and press <code>ENTER</code> at this screen</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-bash">Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] Y</code></pre><figcaption>Type <code>Y</code> and press <code>ENTER</code> to setup MariaDB root user password</figcaption></figure><p>For the rest of the installation, accept the default answer provided.</p><h3 id="part-19-creating-a-database-and-user-for-nextcloud">Part 1.9: Creating a database and user for Nextcloud</h3><p>Enter the database.</p><pre><code class="language-bash">mariadb</code></pre><p>Create a new database.</p><pre><code class="language-SQL">CREATE DATABASE nextcloud;</code></pre><p>Create a new user for Nextcloud. Replace the <code>P@ssw0rd</code> with a super-secure password.</p><pre><code class="language-SQL">CREATE USER &apos;nextcloud&apos;@&apos;localhost&apos; IDENTIFIED BY &apos;P@ssw0rd&apos;;</code></pre><p>Grant the user all privileges for the Nextcloud database.</p><pre><code class="language-SQL">GRANT ALL PRIVILEGES ON nextcloud . * TO &apos;nextcloud&apos;@&apos;localhost&apos;;</code></pre><p>Exit the MariaDB console.</p><pre><code>quit</code></pre><h3 id="part-110-nextcloud-gui-wizard">Part 1.10: Nextcloud GUI Wizard</h3><p>Visit your webpage and fill in the details. Make sure to <strong>uncheck </strong>the &quot;<em>Install recommended apps</em>&quot; checkbox. This will interfere with the installation of Collabora.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_141519.png" width="303" height="593" loading="lazy" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_141447.png" width="284" height="609" loading="lazy" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively"></div></div></div><figcaption>Uncheck the &quot;Install recommended apps&quot;&#xA0;</figcaption></figure><p>You will be logged in to the Nextcloud dashboard. </p><h3 id="part-111-set-recommended-php-and-apache-settings-for-nextcloud">Part 1.11: Set recommended PHP and Apache settings for Nextcloud</h3><p>Since you installed Nextcloud manually, it is currently using the default PHP option.</p><p>When you visit the Settings -&gt; Overview page, you will be greeted with multiple warnings. We are going to fix this now.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/01/image-23.png" class="kg-image" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" loading="lazy"></figure><p>Open the PHP configuration file.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">nano /etc/php/7.4/apache2/php.ini</code></pre><figcaption>You may need to change the version number if your PHP version is newer than 7.4</figcaption></figure><ul><li>Search for <code>memory_limit = 128M</code> and change the value from <code>128M</code> to <code>512M</code>.</li><li>Search for <code>output_buffering = 4096</code> and change the value from <code>4096</code> to <code>Off</code>. &apos;Off&apos; with the capital letter &apos;O&apos;.</li><li>Save the file.</li></ul><p>Open the Nextcloud Apache configuration file.</p><pre><code class="language-bash">nano /etc/apache2/sites-enabled/nextcloud-le-ssl.conf</code></pre><p>Add the following line below inside the <code>&lt;VirtualHost *:443&gt;</code> tag. As long it is inside the tag, it is fine. </p><p>The line below will set all headers that are being sent out with HTTPS, including the outgoing HTTP. For the next 180 days, the client web browser will not make any attempt to make an unencrypted connection to your server.</p><pre><code>&lt;IfModule mod_headers.c&gt;
	Header always set Strict-Transport-Security &quot;max-age=15552000; includeSubDomains&quot;
&lt;/IfModule&gt;
&lt;Directory /var/www/nextcloud/&gt;
	AllowOverride All
&lt;/Directory&gt;</code></pre><p>Restarts the Apache webserver.</p><pre><code class="language-bash">systemctl restart apache2</code></pre><p>Reload your Nextcloud settings page. We should have fixed a number of issues.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/01/image-15.png" class="kg-image" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" loading="lazy"></figure><h3 id="part-112-set-recommended-nextcloud-settings">Part 1.12: Set recommended Nextcloud settings </h3><p>Now, we are left with a warning from our Nextcloud configuration. There are only two configurations missing, memory cache and phone region.</p><p>Open up the Nextcloud configuration file.</p><pre><code class="language-bash">nano /var/www/nextcloud/config/config.php
</code></pre><p>Add these lines after <code>&apos;installed&apos; =&gt; true,</code> and before the closing bracket <code>);</code>.</p><pre><code class="language-bash">  &apos;htaccess.RewriteBase&apos; =&gt; &apos;/&apos;,
  &apos;default_phone_region&apos; =&gt; &apos;SG&apos;,
  &apos;memcache.local&apos; =&gt; &apos;\OC\Memcache\Redis&apos;,
  &apos;memcache.distributed&apos; =&gt; &apos;\OC\Memcache\Redis&apos;,
  &apos;redis&apos; =&gt; [
  &apos;host&apos; =&gt; &apos;/var/run/redis/redis-server.sock&apos;,
  &apos;port&apos; =&gt; 0,
],</code></pre><p>Save the config file and run the Nextcloud <code>occ</code> command, shown below, as the webserver for these changes to take effect. You will get a reply, <code>.htaccess has been updated</code>.</p><pre><code class="language-bash">sudo -u www-data php /var/www/nextcloud/occ maintenance:update:htaccess</code></pre><p>Reload your Nextcloud settings page and you will see a green tick.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/01/image-17.png" class="kg-image" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" loading="lazy"></figure><p>Now, your basic Nextcloud is up and running.</p><hr><h2 id="part-2-installing-collabora-online-office-suite">Part 2: Installing Collabora Online Office Suite</h2><p>The Collabora Online Office Suite requires another domain name. You can use the subdomain for this. I will be using <code>collabora-office.fscene8.xyz</code> as my domain.</p><h3 id="part-21-installing-collabora-server">Part 2.1: Installing Collabora Server</h3><p>We will install the prerequisite packages for Collabora and then, import the Collabora package signing keys.</p><pre><code class="language-bash">apt install gnupg 
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0C54D189F4BA284D
echo &apos;deb https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-debian11 ./&apos; &gt;&gt; /etc/apt/sources.list 
apt update 
apt install coolwsd code-brand hunspell</code></pre><p>Create a new Apache configuration file for Collabora. Open the <code>collabora.conf</code>. This will be an empty file.</p><pre><code class="language-bash">nano /etc/apache2/sites-available/collabora.conf</code></pre><p>Create a virtual host with the <code>ServerName</code> set to the Collabora domain name. This will be set as a reverse proxy soon. For now, we need to have a virtual site to be up to get the SSL cert.</p><pre><code class="language-bash">&lt;VirtualHost *:80&gt;
        ServerName collabora-office.fscene8.xyz

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
&lt;/VirtualHost&gt;</code></pre><p>Enable the site and reload Apache.</p><pre><code class="language-bash">a2ensite collabora
systemctl reload apache2</code></pre><p>Next, we are going to set up SSL for the Collabora virtual host. Accept the default answers provided. But choose the option to expand the certification. </p><pre><code class="language-bash">certbot --apache</code></pre><p>Enable the modules needed for reverse proxy. </p><pre><code class="language-bash">a2enmod proxy proxy_wstunnel proxy_http</code></pre><p>Before reloading the Apache service, we are going to set the configuration for the reverse proxy in the Collabora 443 Apache configuration file.</p><pre><code class="language-bash">nano /etc/apache2/sites-enabled/collabora-le-ssl.conf</code></pre><p>Add these settings inside the virtual host 443 tag.</p><pre><code class="language-bash">        # Collabora config:
        Options -Indexes

        # Encoded slashes need to be allowed
        AllowEncodedSlashes NoDecode

        # Container uses a unique non-signed certificate
        SSLProxyEngine On
        SSLProxyVerify None
        SSLProxyCheckPeerCN Off
        SSLProxyCheckPeerName Off

        # keep the host
        ProxyPreserveHost On

        # static html, js, images, etc. served from coolwsd
        # (broswer is the client part of Collabora Online)
        ProxyPass /browser http://127.0.0.1:9980/browser retry=0
        ProxyPassReverse /browser http://127.0.0.1:9980/browser

        # WOPI discovery URL
        ProxyPass /hosting/discovery http://127.0.0.1:9980/hosting/discovery retry=0
        ProxyPassReverse /hosting/discovery http://127.0.0.1:9980/hosting/discovery

        # Capabilities
        ProxyPass /hosting/capabilities http://127.0.0.1:9980/hosting/capabilities retry=0
        ProxyPassReverse /hosting/capabilities http://127.0.0.1:9980/hosting/capabilities

        # Main websocket
        ProxyPassMatch &quot;/cool/(.*)/ws$&quot; ws://127.0.0.1:9980/cool/$1/ws nocanon

        # Admin Console websocket
        ProxyPass /cool/adminws ws://127.0.0.1:9980/cool/adminws

        # Download as, Fullscreen presentation and Image upload operations
        ProxyPass /cool http://127.0.0.1:9980/cool
        ProxyPassReverse /cool http://127.0.0.1:9980/cool</code></pre><p>Save the file and restart the Apache.</p><pre><code class="language-bash">systemctl restart apache2</code></pre><h3 id="part-22-changing-the-collabora-office-configuration">Part 2.2: Changing the Collabora Office configuration</h3><p>Open the configuration file.</p><pre><code class="language-bash">nano /etc/coolwsd/coolwsd.xml</code></pre><ul><li>Search for <code>allowed_languages</code> and set the tag value to <code>en_GB</code> for English, as Singapore uses British English. You might need to scroll all the way to your right to find the value at that line.</li><li>Search for the <code>SSL Settings</code>. There will be multiple results. You will need to look for the <code>SSL setings</code> with 2 comments inside it.<br>For the inner tag that contains <code>&lt;enable type=&quot;bool&quot;</code> and set the value to <code>false</code>.<br>for the inner tag that contains <code>&lt;termination desc</code> and set the value to <code>true</code></li></ul><pre><code class="language-bash">    &lt;ssl desc=&quot;SSL settings&quot;&gt;
        &lt;!-- switches from https:// + wss:// to http:// + ws:// --&gt;
        &lt;enable type=&quot;bool&quot; desc=&quot;Controls whether SSL encryption between coolwsd and the network is enabled (do not disable for production deployment). If default is false, must first be compiled with SSL support to enable.&quot; default=&quot;true&quot;&gt;false&lt;/enable&gt;        
        &lt;!-- SSL off-load can be done in a proxy, if so disable SSL, and enable termination below in production --&gt;
        &lt;termination desc=&quot;Connection via proxy where coolwsd acts as working via https, but actually uses http.&quot; type=&quot;bool&quot; default=&quot;true&quot;&gt;true&lt;/termination&gt;
</code></pre><p>This will disable the SSL between the Collabora to the Apache webserver. This is safe as the data is contained in the localhost. However, any outgoing traffic will be terminated with SSL.</p><p>Save the file and restart Collabora.</p><pre><code class="language-bash">systemctl restart coolwsd</code></pre><p>Insert the Nextcloud domain name in <code>/etc/hosts</code> file. This is required for Collabora to resolve.</p><pre><code class="language-bash">nano /etc/hosts</code></pre><pre><code class="language-bash">127.0.0.1 nextcloud.fscene8.xyz</code></pre><h3 id="part-23-install-collabora-online-nextcloud-app">Part 2.3: Install Collabora Online Nextcloud App </h3><p>Install Collabora Online App from the Nextcloud App page.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-18.png" class="kg-image" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" loading="lazy"><figcaption>Make sure to choose Collabora Online. Not the other variants.</figcaption></figure><p>Go to your Nextcloud Settings webpage and go to the <em>Office </em>section. Select the radio button &quot;<em>Use your own server</em>&quot;. Set the URL of your Collabora server.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/01/image-20.png" class="kg-image" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" loading="lazy"></figure><p>Now, let&apos;s open a document file from Nextcloud. It will open with Collabora Online.</p><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_025416-2.png" width="955" height="801" loading="lazy" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-23_025416-2.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-23_025416-2.png 955w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_025431.png" width="955" height="801" loading="lazy" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-23_025431.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-23_025431.png 955w" sizes="(min-width: 720px) 720px"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_025449.png" width="955" height="801" loading="lazy" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" srcset="https://fscene8.me/content/images/size/w600/2022/01/image_2022-01-23_025449.png 600w, https://fscene8.me/content/images/2022/01/image_2022-01-23_025449.png 955w" sizes="(min-width: 720px) 720px"></div></div></div><figcaption>An alternative to Google Docs!</figcaption></figure><hr><h2 id="part-3-installing-high-performance-backend">Part 3: Installing High-Performance Backend</h2><h3 id="what-is-hpb">What is HPB?</h3><p>High-Performance Backend is a notification tool to make your server run efficiently. </p><p>Without it, the client will use any open PHP page to retrieve notifications every 30 seconds. This is a <strong>pull </strong>process. </p><p>If the client opens 10 tabs, that is 10 times 30 seconds of retrieval. If there are 100 users open 1 tab, your server will be serving these requests regardless of whether there&apos;s any new notification for them. This really adds ups the resource usage.</p><p>With HPB, this process becomes a <strong>push </strong>process. The client will wait and the server will push notifications to them when they are ready. This process uses lesser resources.</p><h3 id="part-31-install-the-client-push-app-from-the-nextcloud-app-page">Part 3.1: Install the Client Push App from the Nextcloud App Page</h3><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/01/image-22.png" class="kg-image" alt="Install Nextcloud 23 with Collabora and HPB on Debian 11 natively" loading="lazy"></figure><p>Part 3.2: Setup Push Notification in Nextcloud Server</p><p>Run the <code>notify_push:setup</code> as webserver</p><pre><code class="language-bash">sudo -u www-data php /var/www/nextcloud/occ notify_push:setup
</code></pre><p>Open up another terminal or SSH session. The setup script will instruct us on how to set up the service. </p><p>Create a new file, <code>/etc/systemd/system/notify_push.service</code> and insert the following line. Make sure that the URL is your Nextcloud URL.</p><pre><code class="language-bash">nano /etc/systemd/system/notify_push.service</code></pre><pre><code class="language-bash">[Unit]
Description = Push daemon for Nextcloud clients

[Service]
Environment=PORT=7867
Environment=NEXTCLOUD_URL=https://nextcloud.fscene8.xyz
ExecStart=/var/www/nextcloud/apps/notify_push/bin/x86_64/notify_push /var/www/nextcloud/config/config.php
User=www-data

[Install]
WantedBy = multi-user.target</code></pre><p>Enable the service.</p><pre><code class="language-bash">systemctl enable --now notify_push</code></pre><p>Change back to the previous terminal and press <code>ENTER</code> for the next instruction. <br>We need to add the proxies settings to our Nextcloud Apache configuration file. Change to the other terminal to set up the proxy.</p><pre><code class="language-bash">nano /etc/apache2/sites-available/nextcloud-le-ssl.conf </code></pre><figure class="kg-card kg-code-card"><pre><code class="language-bash">ProxyPass /push/ws ws://127.0.0.1:7867/ws
ProxyPass /push/ http://127.0.0.1:7867/
ProxyPassReverse /push/ http://127.0.0.1:7867/</code></pre><figcaption>Insert the 3 lines anywhere inside the VirtualHost 443 tag</figcaption></figure><p>Restart the Apache webserver.</p><pre><code class="language-bash">sudo systemctl restart apache2</code></pre><p>Change back to the previous terminal and press <code>ENTER</code>. It will check and see if the configuration is set up correctly.</p><hr><p>We have reached the end of the guide. I hope I am able to help you with your Nextcloud setup.</p><h3 id="why-not-use-docker-for-this">Why not use Docker for this?</h3><p>The native Linux packages use less space and resources on your server. It supports lower processing power and at the same time, supports more users. </p><p>Docker will use more resources as it has to run in a container environment. I faced a few Docker commands that are so hard to work with.</p><p>In my opinion, most Linux native packages are easier to be configured as I can refer to their documentation and everything is exactly where it is. For Docker packages, their configuration is confusing and harder. Files are not present at the location you expect. Sure, <code>find / -iname &quot;*texttosearch*&quot;</code> does help but why live the hard way. </p><p>In the end, I scarp Docker and went natively. I am not a fan of Docker.</p>]]></content:encoded></item><item><title><![CDATA[Nextcloud, A Free Alternative to Google Drive]]></title><description><![CDATA[<p>Cloud storage is becoming increasingly popular. They offer an easy way to share documents and photos with other people, which is very similar to services like Dropbox, or OneDrive. Let&#x2019;s take a more detailed look at the free software.</p><h2 id="what-is-nextcloud">What is Nextcloud?</h2><p>It is open-source cloud storage. It</p>]]></description><link>https://fscene8.me/a-free-alternative-to-google-docs-and-ms-office-365/</link><guid isPermaLink="false">61ece5a138966e028b1d6739</guid><category><![CDATA[Linux]]></category><category><![CDATA[collections]]></category><category><![CDATA[Nextcloud]]></category><dc:creator><![CDATA[aki]]></dc:creator><pubDate>Sat, 22 Jan 2022 15:00:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1506365558634-e0c754979231?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGdvb2dsZSUyMGRyaXZlfGVufDB8fHx8MTY0Mjg4MTg1NQ&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1506365558634-e0c754979231?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGdvb2dsZSUyMGRyaXZlfGVufDB8fHx8MTY0Mjg4MTg1NQ&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Nextcloud, A Free Alternative to Google Drive"><p>Cloud storage is becoming increasingly popular. They offer an easy way to share documents and photos with other people, which is very similar to services like Dropbox, or OneDrive. Let&#x2019;s take a more detailed look at the free software.</p><h2 id="what-is-nextcloud">What is Nextcloud?</h2><p>It is open-source cloud storage. It allows you to sync your files, calendars and contacts between multiple devices and share your files with the public. </p><p>It also provides you with organizing and collaboration tools. The instant messaging app allows for groups and supports video calls.</p><p>What&apos;s more, you have complete control over your data and the add-ons tools you need through the App page. You can enable the social app and have a social feed like FaceBook.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>App Type</th>
<th>NextCloud</th>
<th>Google</th>
<th>Microsoft</th>
</tr>
</thead>
<tbody>
<tr>
<td>Storage</td>
<td>Files</td>
<td>Drives</td>
<td>oneDrive</td>
</tr>
<tr>
<td>Photo Viewer</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>Video Playback</td>
<td>Yes, download stream from the browser</td>
<td>No, download only</td>
<td>No, download only</td>
</tr>
<tr>
<td>Music Playback</td>
<td>Yes, download or stream from the browser</td>
<td>No, download only</td>
<td>No, download only</td>
</tr>
<tr>
<td>Socializing with IM, Video calls</td>
<td>Talk</td>
<td>HangOuts</td>
<td>Teams</td>
</tr>
<tr>
<td>Office Suite</td>
<td>Yes, with Collabora</td>
<td>Limited</td>
<td>Limited</td>
</tr>
<tr>
<td>Limitation</td>
<td>Server hardware</td>
<td>Storage options and the number of collaboration allowed is locked behind a paywall</td>
<td>Storage options and the number of collaboration allowed is locked behind a paywall</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h2 id="what-is-collabora">What is Collabora?</h2><p>It is a LibreOffice-based online office suite with collaborative editing, which supports all major document, spreadsheet and presentation file formats and works in all modern browsers. If you pair it with Nextcloud, you can have an online office suite right in your browser, just like Google Docs.</p><h2 id="how-to-get-it">How to get it?</h2><p>You can get yourself a Nextcloud server for free at home or from one of the hosting providers such as <a href="https://www.digitalocean.com/">DigitalOcean </a>and <a href="https://www.linode.com/">Linode</a>.</p><p>There are multiple ways of installing Nextcloud. You can try getting one and run it from a Linux VM. </p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://fscene8.me/nextcloud-collabora-hpd-installation-guide/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Installing Nextcloud 23 with Collabora and HPB on Debian 11 natively</div><div class="kg-bookmark-description">This post will guide you on how to install Nextcloud with Collabora and the High-Performance backend for pushing Nextcloud notifications on Debian 11 server natively. No Docker, AppImages or Snap! Dashboard, Cloud Storage, Photos/Videos, Calendar, Instant Messaging, DeckPrerequisitesYou will need a&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://fscene8.me/favicon.ico" alt="Nextcloud, A Free Alternative to Google Drive"><span class="kg-bookmark-author">fscene8</span><span class="kg-bookmark-publisher">aki</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-23_040620.png" alt="Nextcloud, A Free Alternative to Google Drive"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[Extracts All Attachments from MS Outlook with HTA/VBScript (No Installation)]]></title><description><![CDATA[<p>Have you ever worked at a company where they have a lockdown policy, where you can&apos;t install software to automate things for you? And you have to do the same things over and over again manually?</p><p>Imagine this. </p><ul><li>Your company client sends you an email with excel and</li></ul>]]></description><link>https://fscene8.me/extract-images-or-attachments-from-outlook-without-installing-application/</link><guid isPermaLink="false">61eb23791d944900d5a1a335</guid><category><![CDATA[Programming]]></category><category><![CDATA[Automate]]></category><category><![CDATA[vbscript]]></category><category><![CDATA[collections]]></category><dc:creator><![CDATA[aki]]></dc:creator><pubDate>Sat, 22 Jan 2022 12:27:15 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1597484662317-9bd7bdda2a45?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDN8fHBhcGVyY2xpcHxlbnwwfHx8fDE2NDI4NTMxNjI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1597484662317-9bd7bdda2a45?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDN8fHBhcGVyY2xpcHxlbnwwfHx8fDE2NDI4NTMxNjI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Extracts All Attachments from MS Outlook with HTA/VBScript (No Installation)"><p>Have you ever worked at a company where they have a lockdown policy, where you can&apos;t install software to automate things for you? And you have to do the same things over and over again manually?</p><p>Imagine this. </p><ul><li>Your company client sends you an email with excel and other garbage attachments. </li><li>You need to download only the excel file and rename them based on the format specified by your company </li><li>Upload it to the company SharePoint</li><li>Your job, do this minimum of <strong>1000 </strong>emails attachment daily</li></ul><p>The company decided to hire you for this because of the company&apos;s policy of not allowing 3rd party software installation.</p><h3 id="the-hta">The HTA</h3><p>I will be using HTA/VBScript to automate this task. I have yet come across a single company that deny/block this yet. <code>mshta.exe</code> is still being used by other applications too. </p><p>The HTA will download all the email attachments from a folder, along with the subfolders. </p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/aaa.png" class="kg-image" alt="Extracts All Attachments from MS Outlook with HTA/VBScript (No Installation)" loading="lazy" width="672" height="318" srcset="https://fscene8.me/content/images/size/w600/2022/01/aaa.png 600w, https://fscene8.me/content/images/2022/01/aaa.png 672w"><figcaption>With the output directory set to the company SharePoint, this tool has automated your job daily requirements. And you are getting paid for the rest of the day!</figcaption></figure><p>You can download the HTA from the repo page at my GitHub profile. However, this tool will download everything that has attachments. </p><p>To configure the file type and file name, you need to edit HTA file at <a href="https://github.com/fscene8/HTA-Extract_Outlook_Email_Attachments/blob/master/ExtractEmailAttachment.hta#L165">line 165</a>. </p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/fscene8/HTA-Extract_Outlook_Email_Attachments"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - fscene8/HTA-Extract_Outlook_Email_Attachments: Extract Outlook Email Attachment</div><div class="kg-bookmark-description">Extract Outlook Email Attachment. Contribute to fscene8/HTA-Extract_Outlook_Email_Attachments development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Extracts All Attachments from MS Outlook with HTA/VBScript (No Installation)"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">fscene8</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/be2e829a82a8ef1f56b36b32d28187e6ffd452b0e27ad1a6e9477453fb491e20/fscene8/HTA-Extract_Outlook_Email_Attachments" alt="Extracts All Attachments from MS Outlook with HTA/VBScript (No Installation)"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[Preparing for ICT162 Python Exam - Auto Generate Class Template]]></title><description><![CDATA[<p>In the previous semester, I was preparing for my semester exam for one of my Python programming modules, ICT162 Object-Oriented Programming. The duration of the exam was<strong> 3 hours</strong>.</p><p>However, it is an open book exam and I have to write Python codes and finish on time. In an open</p>]]></description><link>https://fscene8.me/python-auto-create-class-template/</link><guid isPermaLink="false">61eb241f1d944900d5a1a339</guid><category><![CDATA[Programming]]></category><category><![CDATA[collections]]></category><category><![CDATA[Python]]></category><dc:creator><![CDATA[aki]]></dc:creator><pubDate>Fri, 21 Jan 2022 11:36:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1515879218367-8466d910aaa4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fHB5dGhvbiUyMGNvZGVzfGVufDB8fHx8MTY0Mjg1MDIyOQ&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1515879218367-8466d910aaa4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fHB5dGhvbiUyMGNvZGVzfGVufDB8fHx8MTY0Mjg1MDIyOQ&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Preparing for ICT162 Python Exam - Auto Generate Class Template"><p>In the previous semester, I was preparing for my semester exam for one of my Python programming modules, ICT162 Object-Oriented Programming. The duration of the exam was<strong> 3 hours</strong>.</p><p>However, it is an open book exam and I have to write Python codes and finish on time. In an open book exam, we are allowed to refer to our seminar notes and Python codes. Our screen will be monitored and recorded throughout the exam. In my understanding, as long it is not a socialising application, such as Telegram or Discord, we are fine.</p><h2 id="revision">Revision</h2><p>I attempted the past year paper and solving those questions will take time. It took me 4-5 hours to complete a paper. As with any programming, if you rush it, you will encounter bugs and logical errors. Furthermore, the class diagram, functional and non-functional requirements were not explained clearly. My English stopped at N&apos;level.</p><p>The more I practised on the past year paper, I begin to see a pattern where I wasted my time a lot. It was the writing of classes. The writing of <code>def</code> declaration. One class can have a few methods to declare, and there were more than 10 classes to create during the exam.</p><blockquote>The writing of classes is the most time-consuming part of the exam. There&apos;s no time to correct them if something goes wrong.</blockquote><p>As it was an open book exam, I figured out ways to make myself code faster. Any tools to complete it. The restriction for the exam is that the code must not include libraries except the ones mentioned by the question. Usually, those are built-in libraries such as, <code>math</code> and <code>datetime</code>. </p><p>So guess, there&apos;s no importing of <a href="https://docs.python.org/3/library/dataclasses.html"><code>dataclasses</code></a>. It will result in zero marks. Every get/set method is being written manually. Time-consuming!</p><h2 id="writing-the-auto-class-template-generator">Writing the auto-class template generator</h2><p>After careful consideration, I decided to automate the creation of the class template. This application will generate an empty class template based on the class diagram it reads.</p><p>The features are:</p><ol><li>Generate a class template.</li><li>Identify <code><a href="https://docs.python.org/3/library/abc.html">@abstractmethod</a></code>, <code><a href="https://python-reference.readthedocs.io/en/latest/docs/functions/classmethod.html">@classmethod</a></code> and <code><a href="https://www.freecodecamp.org/news/python-property-decorator/">@property</a></code> decorators.</li><li>Identify the instance variable and methods.</li><li>Identify the class variable and methods.</li><li>Identify the return value and type of each method.</li><li>Generates set and get methods based on the class diagram.</li><li>Include Python typehints.</li><li>Respects the <a href="https://pep8.org/">PEP 8 style</a>.</li></ol><p>Phew! That&apos;s kinda a lot to do for 3 hours exam, excluding programming the actual logic. I manage to get the tool running. I did not have the time to finish writing the tool with validation prompts.</p><h2 id="did-my-diy-tool-make-a-difference">Did my DIY tool make a difference?</h2><p>Of course, it did. It took me 5 secs to copy and paste the generated output. It is faster compared to writing the wrong class template for 5 to 20 minutes while looking for errors.</p><p>I can focus more on writing the logic than making the class template. For example, the class diagram requires us to write the two classes and logic. The tool will generate the template based on the diagram.</p><!--kg-card-begin: markdown--><p><img src="https://fscene8.me/content/images/2022/01/image_2022-01-22_184355.png" alt="Preparing for ICT162 Python Exam - Auto Generate Class Template" loading="lazy"></p>
<!--kg-card-end: markdown--><figure class="kg-card kg-gallery-card kg-width-wide kg-card-hascaption"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-22_184418.png" width="389" height="656" loading="lazy" alt="Preparing for ICT162 Python Exam - Auto Generate Class Template"></div><div class="kg-gallery-image"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-22_184525.png" width="389" height="656" loading="lazy" alt="Preparing for ICT162 Python Exam - Auto Generate Class Template"></div></div></div><figcaption>Generates a Class Template based on the module requirement</figcaption></figure><h2 id="wheres-the-code">Where&apos;s the code?</h2><p>I have uploaded the code to my Github Gist page. I uploaded two, one without typehints and one with.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://gist.github.com/akuafif/5a64faa745b6f804df0dd74c900642c0"><div class="kg-bookmark-content"><div class="kg-bookmark-title">ICT162 Class Generator. To save time during the TOA exam.</div><div class="kg-bookmark-description">ICT162 Class Generator. To save time during the TOA exam. - ict162_toa_class_generator.py</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://gist.github.com/fluidicon.png" alt="Preparing for ICT162 Python Exam - Auto Generate Class Template"><span class="kg-bookmark-author">Gist</span><span class="kg-bookmark-publisher">262588213843476</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://github.githubassets.com/images/modules/gists/gist-og-image.png" alt="Preparing for ICT162 Python Exam - Auto Generate Class Template"></div></a></figure><figure class="kg-card kg-bookmark-card kg-card-hascaption"><a class="kg-bookmark-container" href="https://gist.github.com/akuafif/ad33decf0ce97f995eb07f7a14d98fe0"><div class="kg-bookmark-content"><div class="kg-bookmark-title">ICT162 Class Generator with typehints. To save time during the TOA exam.</div><div class="kg-bookmark-description">ICT162 Class Generator with typehints. To save time during the TOA exam. - ict162_toa_class_generator_PEP8typehints.py</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://gist.github.com/fluidicon.png" alt="Preparing for ICT162 Python Exam - Auto Generate Class Template"><span class="kg-bookmark-author">Gist</span><span class="kg-bookmark-publisher">262588213843476</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://github.githubassets.com/images/modules/gists/gist-og-image.png" alt="Preparing for ICT162 Python Exam - Auto Generate Class Template"></div></a><figcaption>WIth TypeHints</figcaption></figure><h2 id="result">Result</h2><p>I am able to answer all the questions and I got A+, 5.0 GPA for the paper. </p><ul><li>Always prepare and study for your exam</li><li>Practice past year paper and see which part you are wasting your time. </li><li>Improvise it. </li><li>Create notes or tools to assist with your weakness</li></ul><p>Study smart!</p>]]></content:encoded></item><item><title><![CDATA[Setup OpenVPN Server in a VM to Access Your Home Network]]></title><description><![CDATA[<p>OpenVPN allows you to connect to your home network remotely.</p><p>In this guide:</p><ul><li>Setting up VM</li><li>Installing OpenVPN</li><li>Adding and revoking clients</li><li>Troubleshoot</li></ul><h2 id="setting-up-vm">Setting up VM</h2><p>In this guide, I will be using a Virtual Machine with Debian Linux minimal installation. To install the minimal installation, download the ISO image</p>]]></description><link>https://fscene8.me/openvpn-from-a-vm/</link><guid isPermaLink="false">61eacd1e5825b400d1bbf498</guid><category><![CDATA[Linux]]></category><category><![CDATA[openvpn]]></category><category><![CDATA[collections]]></category><category><![CDATA[Guides]]></category><dc:creator><![CDATA[aki]]></dc:creator><pubDate>Wed, 19 Jan 2022 17:42:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1560257354-b6d45f4badf0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDh8fHZwbnxlbnwwfHx8fDE2NDI3ODY4NzY&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1560257354-b6d45f4badf0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDh8fHZwbnxlbnwwfHx8fDE2NDI3ODY4NzY&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Setup OpenVPN Server in a VM to Access Your Home Network"><p>OpenVPN allows you to connect to your home network remotely.</p><p>In this guide:</p><ul><li>Setting up VM</li><li>Installing OpenVPN</li><li>Adding and revoking clients</li><li>Troubleshoot</li></ul><h2 id="setting-up-vm">Setting up VM</h2><p>In this guide, I will be using a Virtual Machine with Debian Linux minimal installation. To install the minimal installation, download the ISO image from the <a href="https://www.debian.org/download">official Debian website</a>. </p><p>Here is my Virtual Machine specification. You can either go for a higher or lower specification. </p><ol><li>CPU - 1 core</li><li>RAM - 512 MB</li><li>Storage - 2 GB</li><li>Network Interface -&gt; Set to bridging and set the IP address to static. <br>You will need to port forward the UDP VPN port at your home router.</li><li>USB - 2.0 Compatibility</li><li>Sound card - Removed</li><li>Printer - Removed</li><li>Display - Basic, no 3D acceleration</li></ol><p>If you prefer to install the GUI, please select your preferred desktop environment on this screen shown below. I strongly discourage installing it as you can free up more resources in your hypervisor and allocate them to other services.</p><!--kg-card-begin: markdown--><p><img src="https://fscene8.me/content/images/2022/01/image-1-1.png" alt="Setup OpenVPN Server in a VM to Access Your Home Network" loading="lazy"></p>
<!--kg-card-end: markdown--><p>Continue installing the VM before proceeding to the next step.</p><h2 id="installing-openvpn">Installing OpenVPN</h2><p>We will be using the installation script by a Github user, angristan.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/Angristan/OpenVPN-install"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - angristan/openvpn-install: Set up your own OpenVPN server on Debian, Ubuntu, Fedora, CentOS or Arch Linux.</div><div class="kg-bookmark-description">Set up your own OpenVPN server on Debian, Ubuntu, Fedora, CentOS or Arch Linux. - GitHub - angristan/openvpn-install: Set up your own OpenVPN server on Debian, Ubuntu, Fedora, CentOS or Arch Linux.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt="Setup OpenVPN Server in a VM to Access Your Home Network"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">angristan</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/58600047874172588ba3e68037fc85c0e36236f58e79937330c681fda773c426/angristan/openvpn-install" alt="Setup OpenVPN Server in a VM to Access Your Home Network"></div></a></figure><h3 id="step-1-login-into-the-vm">Step 1: Login into the VM</h3><p>By default, the Debian minimal installation does not allow ssh as <em>root</em>. You may skip this step if you want to continue logged in as <em>root</em>.</p><p>From your hypervisor UI, you have to console into the Debian VM and log in as <em>root</em>. </p><p>Check that the command <code>sudo</code> is installed by executing the command <code>sudo</code>. Install <code>sudo</code> if <code>command not found</code>.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">sudo: command not found</code></pre><figcaption><code>sudo</code> is not installed</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-bash">apt install sudo</code></pre><figcaption>Install <code>sudo</code> if command not found</figcaption></figure><p>If no normal user account was created during the installation, please refer to this guide below on how to create a user account with <code>sudo</code> access.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://fscene8.me/create-a-user-account-with-sudo/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Create a Sudo User in Ubuntu/Debian</div><div class="kg-bookmark-description">What Is sudo?sudo is a command enables the user to run commands with the security privileges of another user, by default the root user. When you create a new Linux instance from a hosting provider, most of the time, they will create only one account which is the root</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://fscene8.me/favicon.ico" alt="Setup OpenVPN Server in a VM to Access Your Home Network"><span class="kg-bookmark-author">fscene8</span><span class="kg-bookmark-publisher">aki</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://images.unsplash.com/photo-1551415923-a2297c7fda79?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHBlbmd1aW58ZW58MHx8fHwxNjQyNzQ4Mjc1&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Setup OpenVPN Server in a VM to Access Your Home Network"></div></a></figure><p>For more info about the risk of using a <em>root </em>account, you can read more using the link below.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://fscene8.me/why-you-should-not-login-as-root-in-linux/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Why You Should Not Log In As Root In Linux?</div><div class="kg-bookmark-description">What Is A Root Account? From a Windows user perspective, it is the same as the Administrator account. Microsoft tried to improve its security by introducing UAC, even if you are logged in as an Administrator. Windows 11 UAC DialogIn Linux, there is no UAC inbuilt. Hence, you should never</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://fscene8.me/favicon.ico" alt="Setup OpenVPN Server in a VM to Access Your Home Network"><span class="kg-bookmark-author">fscene8</span><span class="kg-bookmark-publisher">aki</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://images.unsplash.com/photo-1629654297299-c8506221ca97?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fHN1ZG98ZW58MHx8fHwxNjQyNzQwOTE3&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Setup OpenVPN Server in a VM to Access Your Home Network"></div></a></figure><h3 id="step-2-installing-openvpn-server">Step 2: Installing OpenVPN Server</h3><p>Once you successfully login as a normal user with <code>sudo</code> access, update the VM.</p><pre><code class="language-bash">sudo apt update &amp;&amp; sudo apt upgrade -y</code></pre><p>Install Curl.</p><pre><code class="language-bash">sudo apt install curl</code></pre><p>Download the script and make it executable.</p><pre><code class="language-bash">curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh</code></pre><p>Then run it with <code>sudo</code>.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">sudo ./openvpn-install.sh</code></pre><figcaption>You need to run the script as root and have the TUN module enabled.</figcaption></figure><p>The script will prompt you for the setting required. If you are unsure, you can use the default value it provides and press <code>ENTER</code>.</p><p>If you are hosting a local DNS server such as pi.hole, select option <strong>13</strong> and provide the IP address of the DNS server on this screen.</p><pre><code class="language-bash">What DNS resolvers do you want to use with the VPN?
   1) Current system resolvers (from /etc/resolv.conf)
   2) Self-hosted DNS Resolver (Unbound)
   3) Cloudflare (Anycast: worldwide)
   4) Quad9 (Anycast: worldwide)
   5) Quad9 uncensored (Anycast: worldwide)
   6) FDN (France)
   7) DNS.WATCH (Germany)
   8) OpenDNS (Anycast: worldwide)
   9) Google (Anycast: worldwide)
   10) Yandex Basic (Russia)
   11) AdGuard DNS (Anycast: worldwide)
   12) NextDNS (Anycast: worldwide)
   13) Custom
DNS [1-12]: 13
Primary DNS: [DNS IP Address]</code></pre><h3 id="step-3-setting-up-your-first-client">Step 3: Setting up your first client</h3><p>Please choose a meaningful client name to identify the device. Each configuration file can <strong><u>only</u> </strong>be used for one device.</p><pre><code class="language-bash">Tell me a name for the client.
The name must consist of alphanumeric character. It may also include an underscore or a dash.
Client name: [client-name]</code></pre><h3 id="step-4-retrieving-the-ovpn-file-from-the-server">Step 4: Retrieving the <code>.ovpn</code> file from the server</h3><p>The default output directory of the <code>.ovpn</code> file is at the user home directory, <code>~/</code> or <code>/home/&lt;user&gt;/</code>.</p><p>You can retrieve the file by using <code>scp</code> command from your windows machine. Open up a terminal at Windows. Replace the <code>username</code> with your username, <code>ipaddress</code> with your OpenVPN server IP and <code>client-name</code> with your client name.</p><figure class="kg-card kg-code-card"><pre><code class="language-PowerShell"># Change the directory for the file to get downloaded
# The command below will set your Download folder as the directory
cd ~/Download

# Download the .ovpn file
# Format: scp [source] [dest]
scp username@ipaddress:~/client-name.ovpn ./
</code></pre><figcaption>Run SCP at PowerShell</figcaption></figure><h3 id="step-5-port-forwarding-openvpn-at-your-router">Step 5: Port forwarding OpenVPN at your router</h3><p>For this step, I am unable to show you how it is done all router models as there are different kinds of routers. However, the steps are the same. You have to find the location of the port forward setting in your router. You can find more information by visiting your router manufacturer website and downloading the user manual.</p><p>What is required?</p><ul><li>Select the OpenVPN external port [default = 1194]</li><li>Select the OpenVPN correct protocol [default = UDP]</li><li>Select the OpenVPN internal IP address [OpenVPN server local IP address]</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-6-1-.png" class="kg-image" alt="Setup OpenVPN Server in a VM to Access Your Home Network" loading="lazy" width="608" height="565" srcset="https://fscene8.me/content/images/size/w600/2022/01/image-6-1-.png 600w, https://fscene8.me/content/images/2022/01/image-6-1-.png 608w"><figcaption>My router</figcaption></figure><h3 id="step-6-setting-up-the-openvpn-client">Step 6: Setting up the OpenVPN client</h3><p>Install the <a href="https://openvpn.net/vpn-client/">OpenVPN client</a> on the client device. You need to import the <code>.ovpn</code> configuration file into the OpenVPN client. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-22_004904.png" class="kg-image" alt="Setup OpenVPN Server in a VM to Access Your Home Network" loading="lazy" width="400" height="685"><figcaption>Importing the file</figcaption></figure><p>Once imported, you can test it by connecting to a public Wi-Fi or a mobile hotspot. Then, connect to your VPN server.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image-7.png" class="kg-image" alt="Setup OpenVPN Server in a VM to Access Your Home Network" loading="lazy" width="400" height="685"><figcaption>Connected&#xA0;</figcaption></figure><h2 id="adding-and-revoking-clients">Adding and revoking clients</h2><p>To add and revoke clients, re-run the script again.</p><pre><code class="language-bash">sudo ./openvpn-install.sh</code></pre><h2 id="troubleshoot">Troubleshoot</h2><p>If you are unable to get your OpenVPN working, please try the following:</p><ul><li>Check the VM interface. This guide is created with bridging network settings. <br>For NAT, there will be another configuration to be done. <br>However, this not recommended due to double NAT, one from your router and one from your virtualization software.</li><li>If you are not using SSH, check if the VM is pingable?</li><li>Check your Port Forward setting. Visit your router manufacturer website and read the user manual of your router model.</li><li>Is your home using a dynamic IP address? Once your public IP address has changed, you will need to reconfigure the <code>.ovpn</code> file again.</li><li>Is your client connected to the internet?</li></ul><p>I hope this guide helps you with your OpenVPN setup. </p>]]></content:encoded></item><item><title><![CDATA[Passwordless SSH Authentication]]></title><description><![CDATA[<p>This guide will show you how to log in to your Linux servers without typing your password from your Windows OS. </p><h3 id="what-is-passwordless-ssh-authentication">What is Passwordless SSH Authentication?</h3><p>Passwordless SSH Authentication is a more secure alternative than typing in your account password. It uses public-key cryptography for authenticating the hosts and users.</p>]]></description><link>https://fscene8.me/passwordless-ssh/</link><guid isPermaLink="false">61ea98135825b400d1bbf298</guid><category><![CDATA[Linux]]></category><category><![CDATA[ssh]]></category><category><![CDATA[collections]]></category><dc:creator><![CDATA[aki]]></dc:creator><pubDate>Wed, 19 Jan 2022 13:10:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1618060932014-4deda4932554?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDZ8fHBhZGxvY2t8ZW58MHx8fHwxNjQyNzcwMzkw&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1618060932014-4deda4932554?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDZ8fHBhZGxvY2t8ZW58MHx8fHwxNjQyNzcwMzkw&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Passwordless SSH Authentication"><p>This guide will show you how to log in to your Linux servers without typing your password from your Windows OS. </p><h3 id="what-is-passwordless-ssh-authentication">What is Passwordless SSH Authentication?</h3><p>Passwordless SSH Authentication is a more secure alternative than typing in your account password. It uses public-key cryptography for authenticating the hosts and users. This serves as proof(s) of identity required in lieu of passwords.</p><p>However, a more secure alternative does not mean unhackable. The public key is another type of credential, just like passwords. They should be removed from your server when they are no longer needed or compromised.</p><h3 id="how-does-passwordless-ssh-authentication-work">How does Passwordless SSH Authentication work?</h3><p>Remember in the Movies, when the lovers separated, they broke a necklace or medallion in half? Only when they got back together, could they put it as one, and true love win the day? Same thing here.</p><p>The client <em>(your computer)</em> generates the SSH key pair, which is a public key and a private key. You only need to do this once. </p><p>The client&apos;s public key is something that the computer always hand out to anyone, even the bad guys. The client&apos;s private key is the only <em>key</em> that will pair with its own public key. This is the proof of identity that the public key belongs to the client.</p><p>To make it simpler, the public key is the padlock and the private key is the key to that padlock.</p><p>The process:</p><ol><li>The client tries to connect to the server by SHH using its <em>Public key</em>.</li><li>The server verifies the client <em>Public </em>key if it matches with any of its <em>Public </em>keys in the <code>authorized_keys</code> file.</li><li>Once the server matches the client&apos;s <em>Public </em>key with the <code>authorized_keys</code> file, the server challenges the client with an encrypted message. If the client can figure it out, they can connect.</li><li>The client decrypts the encrypted message with the <em>private </em>key. </li><li>The client hash out a few parameters and they both get the party started.</li></ol><p>As the commands and responses are encrypted, any Man-In-The-Middle attack will not have the ability to read their traffic, providing better security than Password-based logins. The attacker will need to have both keys.</p><p>To set up passwordless SSH within your environment, it requires you to complete three main steps:</p><ol><li>Generating client&apos;s SSH key pair.</li><li>Check if <code>.ssh</code> folder exists in the home directory of the remote account.</li><li>Upload the public key to the server.</li></ol><h2 id="generating-client-ssh-key-pair">Generating client SSH key pair</h2><p>In Windows OS, open PowerShell and execute the line below:</p><figure class="kg-card kg-code-card"><pre><code class="language-PowerShell">ssh-keygen.exe -b 4096</code></pre><figcaption>4096 is the number of bits, the bigger the better</figcaption></figure><p>It will prompt you for the file in which to save the key. Let&apos;s use the default option, leave blank and <code>ENTER</code> to continue.</p><pre><code class="language-PowerShell">Enter file in which to save the key (C:\Users\user/.ssh/id_rsa):</code></pre><p>You can enter a passphrase to have more security. However, each time you connect, you have to key in your passphrase, making it no longer a Passwordless login. </p><p>Leave blank and press <code>ENTER</code> for an empty passphrase for both prompts.</p><pre><code class="language-PowerShell">Created directory &apos;C:\Users\user/.ssh&apos;.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:</code></pre><p>Take note of the location of both your private and public keys. </p><ul><li>Public key -&gt; id_rsa.pub</li><li>Private key -&gt; id_ras</li></ul><pre><code class="language-PowerShell">Your identification has been saved in C:\Users\user/.ssh/id_rsa.
Your public key has been saved in C:\Users\user/.ssh/id_rsa.pub.</code></pre><h2 id="check-if-ssh-folder-is-missing-in">Check if .ssh folder is missing in ~/</h2><p>The server needs to know who you are. This will be done by uploading the public key that you just generated. But before that, you need to make sure the destination folder (~/.ssh) exist. </p><p>SSH to the server with your login password.</p><pre><code class="language-PowerShell">ssh myusername@192.168.1.223</code></pre><p>Do a <code>ls -al</code> command to check if the <code>.ssh</code> folder is in your home directory.</p><pre><code class="language-bash">myusername@ubuntu-demo:~$ ls -al
total 28
drwxr-x--- 3 myusername myusername 4096 Jan 21 07:23 .
drwxr-xr-x 3 root       root       4096 Jan 21 06:48 ..
-rw------- 1 myusername myusername   88 Jan 21 08:36 .bash_history
-rw-r--r-- 1 myusername myusername  220 Jan 21 06:48 .bash_logout
-rw-r--r-- 1 myusername myusername 3771 Jan 21 06:48 .bashrc
drwx------ 2 myusername myusername 4096 Jan 21 07:22 .cache
-rw-r--r-- 1 myusername myusername  807 Jan 21 06:48 .profile</code></pre><p>If it is not there, run the command below to create and give read permission to everyone who needs it.</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">mkdir ~/.ssh &amp;&amp; chmod 700 ~/.ssh</code></pre><figcaption>~ means your home directory, equivalent to windows $env:USERPROFILE</figcaption></figure><p>Log out from the SSH.</p><h2 id="upload-the-public-key-to-the-server">Upload the Public Key to the server</h2><p>This is the final step. But, how do we upload to the server? By using the <code>scp</code> command. </p><figure class="kg-card kg-code-card"><pre><code class="language-PowerShell">scp $env:USERPROFILE/.ssh/id_rsa.pub myusername@192.168.1.223:~/.ssh/authorized_keys</code></pre><figcaption>SCP (secure copy) is a command-line utility that allows you to securely copy files and directories between two locations using Port 22, the same as SSH.</figcaption></figure><h2 id="test-your-passwordless-ssh-login">Test your Passwordless SSH login</h2><p>Time to ensure that the key is actually working as intended. To test the key, log in to the server again as you would normally. No password is needed.</p><figure class="kg-card kg-code-card"><pre><code class="language-PowerShell">ssh myusername@192.168.1.223</code></pre><figcaption>It will automatically login</figcaption></figure><p>If the login still asks for your password, try changing the permissions to the authorized_keys file to 600 and retry.</p><pre><code>chmod 600 ~/.ssh/authorized_keys</code></pre><h2 id="pros-and-cons-of-using-passwordless-ssh">Pros and Cons of using Passwordless SSH</h2><p>There are always pros and cons when it comes to security. If you want to start using it, please understand the potential risk before they appear.</p><h5 id="pros">Pros:</h5><ul><li>Makes authentication exprience pleasent</li><li>Better security against brute force attacks</li><li>Connects more quickly than typing in your password</li><li>Allows automation scripts and background file transfer securely</li></ul><p><strong>Cons:</strong></p><ul><li>Public keys will pile up if you don&apos;t do any key management at the server</li><li>Man-In-The-Attacks is still a risk if both your public and private keys are stolen or compromised (which is why key management is important)</li></ul><h2 id="conclusions">Conclusions</h2><p>Vulnerabilities are everywhere, and no security is perfect. If these risks are addressed with caution and best practices are followed, you should be fine.</p>]]></content:encoded></item><item><title><![CDATA[Create a Sudo User in Ubuntu/Debian]]></title><description><![CDATA[<h3 id="what-is-sudo">What Is <code>sudo</code>?</h3><p><code>sudo</code> is a command enables the user to run commands with the security privileges of another user, by default the root user. </p><p>When you create a new Linux instance from a hosting provider, most of the time, they will create only one account which is the <em>root</em></p>]]></description><link>https://fscene8.me/create-a-user-account-with-sudo/</link><guid isPermaLink="false">61ea50d55825b400d1bbf161</guid><category><![CDATA[Linux]]></category><category><![CDATA[collections]]></category><category><![CDATA[Guides]]></category><dc:creator><![CDATA[aki]]></dc:creator><pubDate>Wed, 19 Jan 2022 08:27:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1551415923-a2297c7fda79?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHBlbmd1aW58ZW58MHx8fHwxNjQyNzQ4Mjc1&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<h3 id="what-is-sudo">What Is <code>sudo</code>?</h3><img src="https://images.unsplash.com/photo-1551415923-a2297c7fda79?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDJ8fHBlbmd1aW58ZW58MHx8fHwxNjQyNzQ4Mjc1&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Create a Sudo User in Ubuntu/Debian"><p><code>sudo</code> is a command enables the user to run commands with the security privileges of another user, by default the root user. </p><p>When you create a new Linux instance from a hosting provider, most of the time, they will create only one account which is the <em>root</em> user account. The best practice is to create a <em>sudo</em> user account first.</p><p>This guide will show you how to create a new user with <em>sudo</em> access to the system. </p><h3 id="login-as-root-your-linux-system">Login As root Your Linux System</h3><p>If you create a Linux instance from a hosting provider, 0pen up your SSH client and log in as <em>root</em>. Replace the <em>IP address</em> with your IP address. </p><pre><code class="language-PowerShell">ssh root@192.168.1.100</code></pre><h3 id="create-a-new-user">Create A New User</h3><p>Create a new user account with the command <code>adduser</code>. Replace <code>myusername</code> with the user name that you want to create.</p><pre><code class="language-bash">adduser myusername</code></pre><p>Enter a new password for this user. Make sure the password is a strong secure password.</p><pre><code class="language-bash">Adding user `myusername&apos; ...
Adding new group `myusername&apos; (1000) ...
Adding new user `myusername&apos; (1000) with group `myusername&apos; ...
Creating home directory `/home/myusername&apos; ...
Copying files from `/etc/skel&apos; ...
New password:
Retype new password:
passwd: password updated successfully</code></pre><p>After the password setup, you will be prompt to enter the particular details of the new user. You can leave all the information blank and just press <code>ENTER</code> to accept the empty details.</p><pre><code class="language-bash">Changing the user information for myusername
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n]</code></pre><h3 id="giving-the-user-sudo-access">Giving The User <code>sudo</code> Access</h3><p>Only the members of the group <code>sudo</code> are allowed to use the <code>sudo</code> command. To add the user to the sudo group, use the <code>usermod</code> command. Replace <code>myusername</code> with the username you just created.</p><pre><code class="language-bash">usermod -aG sudo myusername</code></pre><h3 id="testing-the-sudo-access">Testing the <code>sudo</code> Access</h3><p>Logout of the root user and login to your Linux system with the newly created user.</p><pre><code class="language-bash"># logout
Connection to 192.168.1.100 closed.</code></pre><p>Now, ssh with the new user.</p><pre><code class="language-PowerShell">ssh myusername@192.168.1.100</code></pre><p>Do a simple check with the <code>whoami</code> command. This command will execute as root.</p><pre><code class="language-bash">sudo whoami
</code></pre><p>The output: </p><pre><code class="language-bash">root</code></pre><h3 id="changing-user-password">Changing User Password</h3><p>To change the current logged in user password, use the command <code>passwd</code>.</p><pre><code class="language-bash">passwd</code></pre><p>To change another user account password, you need to use <code>sudo</code> at the front and include the user name after the command. Replace <code>username</code> with the account user name.</p><pre><code class="language-bash">sudo passwd username</code></pre><h3 id="delete-user-account">Delete User Account</h3><p>To delete a user account, use the command <code>userdel</code>. Replace &#xA0;<code>username</code> with the account name you want to delete.</p><pre><code class="language-bash">userdel username</code></pre><h3 id="conclusion">Conclusion</h3><p>You have learned how to create a new user with <code>sudo</code> access, change a user account password and delete a user account. </p><p>Now, you can start using the new user account with <code>sudo</code> access. Stay tune for the upcoming post on how you can securely lockdown your Linux system.</p>]]></content:encoded></item><item><title><![CDATA[Why You Should Not Log In As Root In Linux?]]></title><description><![CDATA[<h2 id="what-is-a-root-account">What Is A Root Account? </h2><p>From a Windows user perspective, it is the same as the Administrator account. Microsoft tried to improve its security by introducing UAC, even if you are logged in as an Administrator. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/terminal.png" class="kg-image" alt loading="lazy"><figcaption>Windows 11 UAC Dialog</figcaption></figure><p>In Linux, there is no UAC inbuilt. Hence, you should</p>]]></description><link>https://fscene8.me/why-you-should-not-login-as-root-in-linux/</link><guid isPermaLink="false">61ea2f8a5825b400d1bbefcd</guid><category><![CDATA[Linux]]></category><category><![CDATA[collections]]></category><dc:creator><![CDATA[aki]]></dc:creator><pubDate>Tue, 18 Jan 2022 04:53:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1629654297299-c8506221ca97?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fHN1ZG98ZW58MHx8fHwxNjQyNzQwOTE3&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<h2 id="what-is-a-root-account">What Is A Root Account? </h2><img src="https://images.unsplash.com/photo-1629654297299-c8506221ca97?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fHN1ZG98ZW58MHx8fHwxNjQyNzQwOTE3&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="Why You Should Not Log In As Root In Linux?"><p>From a Windows user perspective, it is the same as the Administrator account. Microsoft tried to improve its security by introducing UAC, even if you are logged in as an Administrator. </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/terminal.png" class="kg-image" alt="Why You Should Not Log In As Root In Linux?" loading="lazy"><figcaption>Windows 11 UAC Dialog</figcaption></figure><p>In Linux, there is no UAC inbuilt. Hence, you should never log in as a root user. Even if you know what you are doing, you cannot be too sure that the application you are executing is safe.</p><h3 id="introducing-sudo">Introducing <em>sudo </em></h3><p>The equivalent to Windows UAC for Linux is sudo. It stands for &quot;<em>superuser do</em>&quot;. It will execute commands with the security privileges of another user. </p><pre><code class="language-bash">sudo apt update &amp;&amp; sudo apt upgrade -y</code></pre><h3 id="how-does-this-minimise-damage">How Does This Minimise Damage?</h3><p>Any command or application running on a normal user account will not be able to modify system files without gaining root permissions. They can only write to your /home/&lt;user&gt;/ folder. This will also prevent the user from accidentally modifying a system folder too.</p><p>For example, John received a script that does the following:</p><ul><li>Archives the current working directory</li><li>Uploads the archive to a remote site</li><li>Deletes the archive</li></ul><p>John glanced through the description, and he did not have the time to inspect the code for malicious intent. But, don&apos;t worry, I did that too, once. </p><p>He ran the code at the / root directory, but he was logged in as a root account. The script was executed, and he went to make a coffee. When he came back, all the files in the root directory were gone. </p><p>The Linux is running from the RAM at this point. He thought he was saved with the backup the script made and uploaded, but it failed to connect to the remote drive. Oh no, now he&apos;s gone. </p><p>That will not occur if he ran the script as a normal user. Linux guides are full of instructions, and copy-pasting them blindly without reading them will cause more harm to your system. </p><h3 id="when-should-i-use-sudo">When Should I Use <em>sudo</em>?</h3><p>You should only use <em>sudo </em>when running a command that <strong>modifies </strong>the system file. Most daily Linux applications do not need <em>sudo </em>permission. Most applications will refuse to run as <em>sudo</em>. This practice provides another layer of security if the application opens a malicious file; it cannot modify the system file.</p><p>Even if you know what you are doing, it is still unsafe to run as a root account. You will be bypassing much of the security design that makes Linux secure. </p><blockquote>root == administrator without UAC</blockquote><p>With great power comes great responsibility.</p>]]></content:encoded></item><item><title><![CDATA[How to Stream Without Discord Audio]]></title><description><![CDATA[<p>Some days, we just want to stream our gameplay on YouTube or Twitch. At the same time, you don&apos;t want your viewers to listen to your conversation. The solution is simple and that is to use a virtual audio device.</p><p>I will walk through how to get it</p>]]></description><link>https://fscene8.me/stream-without-discord-audio/</link><guid isPermaLink="false">61e9bd0fdf1fc00561873015</guid><category><![CDATA[Guides]]></category><category><![CDATA[Windows]]></category><category><![CDATA[Gaming]]></category><category><![CDATA[OBS]]></category><category><![CDATA[Streaming]]></category><category><![CDATA[Discord]]></category><category><![CDATA[Audio]]></category><category><![CDATA[collections]]></category><dc:creator><![CDATA[aki]]></dc:creator><pubDate>Sun, 16 Jan 2022 20:31:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1597759493550-6ea6cbcb2cb4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDM4fHxzdHJlYW1pbmd8ZW58MHx8fHwxNjQyNzQxMjQz&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1597759493550-6ea6cbcb2cb4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDM4fHxzdHJlYW1pbmd8ZW58MHx8fHwxNjQyNzQxMjQz&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="How to Stream Without Discord Audio"><p>Some days, we just want to stream our gameplay on YouTube or Twitch. At the same time, you don&apos;t want your viewers to listen to your conversation. The solution is simple and that is to use a virtual audio device.</p><p>I will walk through how to get it set up and how easy it is to enable and disable it. This works with any other chat applications other than discord. Even your music too! </p><p>The illustration below shows how the sound will get separated and arrives at the stream and you.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/1.jpg" class="kg-image" alt="How to Stream Without Discord Audio" loading="lazy" width="540" height="145"><figcaption>What we want to achieve in the end</figcaption></figure><h3 id="download-voicemeeter">Download Voicemeeter</h3><p>Voicemeeter is a virtual playback and recording device. Go to their <a href="https://vb-audio.com/Voicemeeter/index.htm">website </a>and download the EXE file. </p><p>Reboot your PC once the installation is completed. This is required for Windows to enable the drivers needed.</p><h3 id="finding-out-your-physical-device">Finding out your physical device</h3><p>Take note of your <em>real physical default playback device</em>. A playback device is a device that you plug in your speaker/earpiece, to listen to the computer output audio.</p><p>You can run the command in the run dialog (Win+R) to bring up the sound properties.</p><blockquote>control.exe /name Microsoft.Sound <br></blockquote><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-21_043541.png" class="kg-image" alt="How to Stream Without Discord Audio" loading="lazy" width="462" height="579"><figcaption>Take note of the green tick. That is your current physical device.</figcaption></figure><p>In my setup, it&apos;s <strong><em>Speakers (Realtek High Definition Audio)</em></strong>. This is the device that I plug in my speaker/headphone to.</p><h3 id="setting-up-voicemeeteroutput-device">Setting up Voicemeeter - Output Device</h3><p>In the Voicemeeter program, set your output device for it as shown in the picture below. This will set the Voicemeeter to output all the inputted audio to your real physical device. </p><p>Set your <strong><strong>A1</strong></strong> to your REAL Physical Output device, which is <em><strong><strong>MME: Speakers (Realtek High Definition Audio)</strong></strong> </em>for me. In my experience, choose <em><strong><strong>MME</strong></strong> </em>as <em><strong>WDM </strong></em>will cause issues when multiple applications are outputting audio.</p><!--kg-card-begin: markdown--><p><img src="https://fscene8.me/content/images/2022/01/2-2.jpg" alt="How to Stream Without Discord Audio" loading="lazy"></p>
<!--kg-card-end: markdown--><h3 id="setting-up-voicemeeterinput-device">Setting up Voicemeeter - Input Device</h3><p>Set your <strong><strong><em>Voicemeeter Input</em></strong></strong><em> </em>playback device as your default device for playback. Any opened application will now use this device to output its audio by default.</p><figure class="kg-card kg-image-card"><img src="https://fscene8.me/content/images/2022/01/image_2022-01-21_043655.png" class="kg-image" alt="How to Stream Without Discord Audio" loading="lazy" width="461" height="579"></figure><p>Configuring Discord</p><p>In the Discord settings, set your output device to your real physical playback device. For my setup, it is <strong><strong><em>Speakers (Realtek High Definition Audio)</em></strong></strong>.</p><!--kg-card-begin: markdown--><p><img src="https://fscene8.me/content/images/2022/01/image_2022-01-21_043610.png" alt="How to Stream Without Discord Audio" loading="lazy"></p>
<!--kg-card-end: markdown--><h2 id="setting-up-the-streaming-audio"><strong><strong>Setting up </strong>the streaming <strong>audio</strong></strong></h2><p>The may differ from your streaming software. It should be the same for most software. You need to find the audio setting and change it to <strong><strong>Voicemeeter Input</strong></strong>.</p><!--kg-card-begin: markdown--><p><img src="https://fscene8.me/content/images/2022/01/image_2022-01-21_043806.png" alt="How to Stream Without Discord Audio" loading="lazy"></p>
<!--kg-card-end: markdown--><p>Lastly, don&apos;t forget to mute your microphone. Else, your viewers will be listening to you talking to yourself.</p><p>There are more things that Voicemeeter are able to do. It can change the tone and pitch of any audio input, software or microphone. I won&apos;t be covering cause that will take another post to explain Voicemeeter&apos;s capabilities.</p>]]></content:encoded></item></channel></rss>