<?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"><channel><title><![CDATA[Capstone]]></title><description><![CDATA[Obsidian digital garden]]></description><link>http://github.com/dylang/node-rss</link><image><url>site-lib/media/favicon.png</url><title>Capstone</title><link></link></image><generator>Webpage HTML Export plugin for Obsidian</generator><lastBuildDate>Tue, 19 May 2026 23:18:32 GMT</lastBuildDate><atom:link href="site-lib/rss.xml" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 May 2026 23:18:22 GMT</pubDate><ttl>60</ttl><dc:creator></dc:creator><item><title><![CDATA[Main Page]]></title><description><![CDATA[ <img alt="505" height="560" src="assets/capstone-image-solo-1.png" target="_self" style="width: 520px; max-width: 100%;">
Welcome to the FMJ Systems Capstone Documentation. For my capstone project, I was tasked to create a fictional business and business case for a deployment of IT Infrastructure. I decided to build a Multi-Tenant Private Cloud Reference Implementation under the banner of FMJ Systems, an IT consulting company specializing in private cloud deployments. The idea is to showcase the capabilities of a private cloud to offer implementation services to potential clients and customers. The reference implementation is modeled after a Managed Service Provider offering isolated cloud environments to clients. Each tenant is provisioned with dedicated compute, networking and storage resources. The reference implementation contains a management node for FMJ Systems and a 3-node tenant cluster to provide isolated environments for clients. In a full production deployment, this would include a dedicated storage and backup cluster, redundant networking hardware, and multiple datacenters across the country to provide availability zones across regions and is adaptable to a range of deployment contexts including academic institutions, government agencies, and enterprise environments. FMJ systems believes companies data is the most important thing to them, so it should be on hardware they own and manage. Utilizing the Private Cloud Reference Implementation, FMJ Systems plans on demonstrating how a private cloud could benefit a wide range of different organizations. FMJ Systems offers companies private cloud deployments where FMJ Systems works with the client to scope out their needs and builds an implementation. FMJ Systems would plan the building out and managing of the private cloud infrastructure for the client for a fixed monthly cost, depending on the size of the organization and private cloud requirements. the client is also welcome to manage their infrastructure themselves, post deployment. An overview on how FMJ Systems would be structured as a Managed Service Provider with this reference architecture. Covers the division of responsibilities for FMJ Systems and the tenants, a basic overview of how billing would be structured in a production deployment, as well as what is required for tenants to be onboardedThe architecture and design of the private cloud reference implementation. An overview of the topology, design, scope and adaptability of the architecture to other deployment contexts such as academic institutions or government agencies The networking implementation of the architecture. Overview of the addressing scheme, isolated network design, and a detailed topology of the reference implementationThe implementation of tenant isolation through RBAC, Resource Pools, Networking and Storage configuration, and Access Control List rules to enforce private subnet restrictionsDocumentation for deployed shared services and simulated internet deployment such as: DNS, Reverse Proxy, VPN, Web Servers, and Simulated Internet Certificate AuthorityThis is only a reference implementation, this architecture can be adapted for different use cases to provide benefits to different styles of organizationsThis document covers my reflection on the implementation for this capstone and looks at the limitations and considerations of turning this architecture into a production deploymentThis document covers how to connect to the environment to connect to resources such as what URLs and credentials to use, and the method of administering cloud resources as a clientThis document covers my reflection on implementing this capstone, presenting at the IT expo as well as navigating design and implementation choices.]]></description><link>main-page.html</link><guid isPermaLink="false">Main Page.md</guid><pubDate>Tue, 19 May 2026 23:17:05 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Tenant Isolation and Environment]]></title><description><![CDATA[Tenant isolation in this architecture is achieved through dedicated compute, storage and networking resources. Each tenant is allocated a public subnet that is reachable from the internet as well as a private subnet that is not reachable from the internet and is only accessible from the respective tenants public subnet. Role Based Access Controls have been implemented in Proxmox to restrict tenant access to only their resources in Proxmox.Each tenant is provisioned with a dedicated public and private subnet, backed by a VLAN-tagged SDN zone in Proxmox. The public subnet is reachable from the simulated internet through NAT and port forwarding configured on the router. The private subnet is not directly reachable from the internet, and is restricted by SDN VNet Firewall rules that only permits traffic originating from the management network or the tenant's own public subnet.For full VLAN and addressing detials, see <a data-href="Networking" href="networking.html" class="internal-link" target="_self" rel="noopener nofollow">Networking</a>Each tenant is provided with a dedicated ZFS dataset created on the appropriate cluster node, with a storage quota to prevent any single tenant from consuming disproportionate resources. These datasets are registered in Proxmox as separate storage pools scoped to the tenant's resource pool, meaning a tenant's disk images are physically separated on the underlying storage from other tenants.zfs create LocalZFS/Adatum
zfs set quota=100G LocalZFS/Adatum
To isolate access to resources on the tenant cluster, each tenant has been provisioned with a resource pool that contains their VMs, Containers, and Storage. Permissions have been set for the tenant to use the allocated VMs and CTs. In the Shared Services isolated environment, there is a reverse proxy running Nginx Proxy Manager. there are user accounts set up for each tenant in the reverse proxy with scoped access to only items that are created by the respective tenants. Nginx Proxy Manager does not allow for integration with Active Directory unfortunately so tenants are required to use Nginx Proxy Manager accounts setup under ITAdmin@Tenant.comeach tenant is provided with a web server and VPN located in their public subnet, as well as a Active Directory Domain Controller in the private subnet for AD authentication. In the implementation of this reference architecture, the AD DC is only for authentication with Proxmox, in a production deployment of an architecture like this, existing AD or other identity providers can be used for authentication with Proxmox and a standard DNS server can be deployed in place.]]></description><link>tenant-isolation-and-environment.html</link><guid isPermaLink="false">Tenant Isolation and Environment.md</guid><pubDate>Tue, 19 May 2026 23:15:44 GMT</pubDate></item><item><title><![CDATA[Networking]]></title><description><![CDATA[The networking behind this architecture is designed to provide fully isolated tenant environments with public and private networks as well as dedicated compute and storage resources. The architecture is designed with high availability in mind through the deployment of a cluster for tenant workloads. There are some differences than what would be implemented in a production environment, mainly the implementation of a multiple clusters, one for backup, one for tenant workloads and another for the provider workloads. The reference implementation utilizes inter-VLAN routing to provide isolated networking for each tenant. A Cisco router handles all routing between VLANs through a Router-on-a-stick configuration, with sub interfaces defined for each network segment. A Cisco switch trunks all VLANS to the router as well as the required VLANS to each Proxmox node. Within Proxmox, Software Defined Networking VLAN Zones have been utilized in Proxmox to provide a network a bridge for each tenants public and private network, allowing Virtual Machines and Containers to be attached to required networks easily.Access Control to each tenants respective private network has been implemented through SDN Firewall Rules in Proxmox directly. Since the management network is not added as a SDN Network like tenant networks, ACL Rules to restrict access to the management network have been applied on the router.To see the router and switch configuration for each tenant, please refer to - <a data-href="Router Configuration File" href="configuration-files/router-configuration-file.html" class="internal-link" target="_self" rel="noopener nofollow">Router Configuration File</a> and <a data-href="Switch Configuration File" href="configuration-files/switch-configuration-file.html" class="internal-link" target="_self" rel="noopener nofollow">Switch Configuration File</a>below is the assigned network and VLAN for each tenant / use case<br>Note - for a full look at the addressing scheme for all networks, please refer to - <a data-href="Addressing Scheme" href="addressing-scheme.html" class="internal-link" target="_self" rel="noopener nofollow">Addressing Scheme</a><br><img alt="private cloud.drawio.png" src="assets/private-cloud.drawio.png" target="_self"><br>
For a better look at the topology, please refer to - <a data-href="private cloud.drawio.png" href="assets/private-cloud.drawio.html" class="internal-link" target="_self" rel="noopener nofollow">private cloud.drawio.png</a>This topology diagram provides a comprehensive overview of the network topology, including the core networking equipment, Proxmox cluster nodes, resource pools, replication and HA failover overview<br>Due to the resource limitations for this capstone, I wasn't able to implement some things I was intending to, one of them is a cluster for FMJ Systems and their workloads as well as a backup cluster, I touch on this more in <a data-href="Limitations and Considerations" href="limitations-and-considerations.html" class="internal-link" target="_self" rel="noopener nofollow">Limitations and Considerations</a>In a full production environment, the previously mentioned additions would be made as well as multiple locations to offer availability across regions and a proper web portal for clients to provision resources within agreed limitations in a self-service model. Off site backups could be hosted across multiple regions or encrypted and hosted in a public cloud. ]]></description><link>networking.html</link><guid isPermaLink="false">Networking.md</guid><pubDate>Tue, 19 May 2026 23:15:27 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Limitations and Considerations]]></title><description><![CDATA[The FMJ Systems Reference Implementation was designed and built within the constraints of a capstone project. With limited hardware, unknown internet connectivity for the demonstration, and a compressed timeline, there are some things that are worth considering if this architecture were to be implemented in a production setting. In this document, I talk about some of the things that would be different in a production implementation of this architectureThe first thing to note, and more obvious, is the removal of the simulated internet, and usage of authoritative DNS name provider and certificate authority. The reason I included the simulated internet network in my reference implementations was that I was unsure about what kind of network connectivity I would have for the IT Expo demonstrationThis is probably the biggest consideration out of all. Through the usage of API calls to Proxmox it would be possible to to automate the setup of tenant resources. Template VMs and CTs could be created to use for cloning into new environments. Currently, the tenant onboarding process is a manual process and introducing API Automation, this would make the whole process much more efficient and remove the possibility for human error. With some web development, it would be possible to make a self service portal for tenants to provision resources within limitations. Unfortunately Proxmox does not offer resource allocation limitations on resource pools but with a custom self service portal, that would be an option. In this reference implementation, billing is using a fixed monthly cost. the Proxmox REST API exposes CPU, RAM, and network utilization on a per VM basis. Implementing a way to poll the API for resource usage per VM then aggregating the data by tenant resource pool could be used to track usage for billing purposes.Unfortunately due to the limitations of the hardware that I have, I was not able to implement ideal storage and backup plans. Currently the storage on the cluster consists of each node containing a SSD to run all tenant workloads, which is partitioned using ZFS datasets for each tenant. each cluster node that will be either hosting or standby for a respective tenants resources will have a dataset allocated to it, which is then replicated across the respective nodes to provide high availability. ideally, the cluster would take advantage of CEPH storage clustering, which would allow the cluster to have redundant salable storage across the tenant cluster.Unfortunately, I do not have backups implemented because of a lack of resources. Although, I do have a plan/conceptualization of how I would implement backups for the architecture. This would include introduce a backup and storage cluster dedicated to hosting backups of tenant and provider workloads. The backup plan would include taking a daily backup that is stored on the cluster locally, a weekly backup that is stored on the backup and storage cluster, preserving the last 3 backups, as well as a cross site backup performed bi-weekly. if another site does not exist to backup to, a cloud provider could be utilized to host off-site backups as well as encrypted prior to upload to ensure security and confidentiality. currently the implementation is infrastructure heavy, with each tenant requiring switch VLAN configuration, router subinterface configuration, and Proxmox SDN Configuration. I decided to implement it this way to demonstrate cisco device configuration skills but utilizing Proxmox simple SDN zones instead of VLAN SDN zones (which require VLAN configuration on networking infrastructure) would allow for a much more streamlined configuration for tenant implementation. By utilizing simple SDN zones for tenant networking, it removes the need for router and switch configuration in the tenant onboarding process and could be completed through API Calls.Currently, the architecture can only support a maximum of 255 tenants. The addressing scheme is quite wasteful with ipv4 addresses. a better implementation would be to utilize a router VM like PFsense or something similar or different SDN zones, as mentioned in the previous section, to segregate tenant networks. this would streamline tenant onboarding as a standardized template could be cloned over each time a new tenant is added. With the reference implementation, each tenant is provided with a active directory environment. This integration allows tenants to login to the Proxmox web interface to manage their workloads. RBAC is applied to the tenants imported groups and users to isolate their access to resources. Existing AD infrastructure could be implemented for clients that already have an AD environment or other identity/SSO solutions that are compatible with OpenID Connect (OIDC). In place of a AD DC, a regular DNS server for the tenants internal services could be implemented under the tenants control. the DNS hierarchy in the reference implementation consists of 3 tiers, the simulated internet DNS acting as an authoritative name server, the shared services DNS server acting as a middle layer, and the tenant AD DC handling internal DNS resolution. tenant resources are configured to use their respective AD DC as their DNS server, which will forward unknown requests to the shared services DNS, and forwarded to the simulated internet DNS server.The shared services DNS server is fully managed by FMJ systems and tenants have no administration over the shared services DNS server, its role is to provide logging for FMJ Systems. In the reference implementation, the shared services DNS contains records for public facing tenant resources pointing toward the local address for the proxy manager. This is because I am not able to implement NAT hair pinning due to a lack of NVI Support on cisco IOS-XE, which is required for that functionality, and connections would fail if originating from an internal NAT address, trying to reach the outside NAT address. Bind9 was chosen as the DNS server for both the simulated internet and shared services as it is the industry standard for authoritative DNS and offered the zone management capabilities required for the simulated internet DNS. AdGuard was considered for the shared services role but Bind9 was selected to keep the DNS infrastructure consistent across both servers. PowerDNS was identified as a better fit for the shared services logging role but was discovered too late to implement. in a production deployment, PowerDNS paired with a SIEM or centralized log aggregation platform would replace Bind9 in the shared services tier.]]></description><link>limitations-and-considerations.html</link><guid isPermaLink="false">Limitations and Considerations.md</guid><pubDate>Tue, 19 May 2026 23:14:30 GMT</pubDate></item><item><title><![CDATA[Adaptations of the Architecture]]></title><description><![CDATA[the architecture that I have developed is able to be adapted to multiple different use cases. here are some of the use cases that I have identified through development:A Managed Service Provider (MSP) can leverage this architecture to deliver multi-tenant, isolated environments to clients. each client can be provisioned with a dedicated resource pool consisting of compute, networking, and storage resources, ensuring isolation and multiple levels.Existing identity providers, such as Active Directory or other federated authentication systems, can be integrated to enable centralized identity and access management. This allows clients to maintain control over authentication while the MSP manages the underlying infrastructure.This model enables the MSP to offer Infrastructure-as-a-Service (IaaS)-like capabilities while maintaining strict tenant separation and administrative control.Educational Institutions can adapt this architecture to provide isolated virtual lab environments for students. Tenant resource pools in my reference implementation can be mapped to individual students or groups. Standardized lab environments for can be created and deployed programmatically through the use of API calls, allowing instructors to rapidly deploy standardized environments for coursework. These environments can be reset or redeployed as needed. additionally, with some programming, a student web portal can be setup to let students deploy virtual machines and containers themselves, within predefined resource limitations. this introduces a self-service model while preventing over provisioning of resourcesGovernment Agencies can take advantage of an air-gapped implementation to ensure complete ownership and control over their own data. Tenant resource pools can be mapped to different departments to enforce isolation and administrative boundaries. Dedicated off site backup locations can be created to support disaster recovery. These backups would be stored on encrypted physical media and transferred through controlled processes, ensuring that the air-gapped nature of the environment is preserved. For scenarios where inter-site communication is required, dedicated fiber lines can be installed in between sites to create a private network completely segregated from the internet. With this addition, it would not constitute as a true air gapped solution, but would significantly reduce exposure. Large enterprises or other organizations can take advantage of this architecture to standardize and segment their internal IT infrastructure. Tenant resource pools can be aligned with departments, business units, or application environments such as development, testing and production, enabling strong isolation. By centralizing compute, networking, and storage into a unified platform, IT teams can reduce infrastructure sprawl while maintaining granular control over resource allocation and access. Integration with existing identity providers, such as Active Directory, allows for consistent authentication and role-based access control across the environment.Additionally, this architecture can be extended to support hybrid models, where select workloads interface with external services or cloud platforms, while sensitive systems remain isolated within controlled internal resource pools. Encrypted backups can be stored on cloud providers to strengthen disaster recovery plansIn a production deployment, the process of onboarding tenants would be automated through the Proxmox REST API, allowing FMJ Systems to onboard new clients quickly and consistently without manual configuration steps. the API supports full control over VM and container creation, resource pool management, SDN Zone creation, and permission assignments. Router and switch configuration can be achieved through an SSH based scripting. Tenant networks could also be implemented through Proxmox Software Defined Networking to eliminate the need for SSH based scripting for the router and switch, as tenant networking would all be handled through Proxmox.Billing implemented with a fixed monthly charge is well suited to a reference implementation, but a production implementation would benefit from usage based billing. The Proxmox REST API exposes CPU, RAM, and network utilization on a per VM basis. Implementing a way to poll the API for resource usage per VM then aggregating the data by tenant resource pool could be used to track usage for billing purposes. this would enable FMJ systems to bill customers based on usage rather than a fixed monthly cost, which would be more practical at scale ]]></description><link>adaptations-of-the-architecture.html</link><guid isPermaLink="false">Adaptations of the Architecture.md</guid><pubDate>Tue, 19 May 2026 23:14:00 GMT</pubDate></item><item><title><![CDATA[Tenant Onboarding Process]]></title><description><![CDATA[Although what I have outlined here is a manual process, the usage of API calls to automate the deployment of tenant environments would be ideal in a production environment. this would enable a company to deploy many tenant environments in a short amount of time, without much manual intervention other than typing in the name of the tenant. For tenants to be onboarded, this is the following process:
VLAN and IP must be determined prior to configuring router and switch
Public and Private networks as well as VLANs for each Refer to the addressing scheme to determine what would be appropriate for the new tenant For this document, I will be using Adatum as an example: Public - 10.1.0.0/24 VLAN - 100 Private - 10.1.1.0/24 VLAN - 101 interface GigabitEthernet0/0/0.100
description Tenant-PUBLIC
encapsulation dot1q 100
ip address 10.1.0.1 255.255.255.0
ip nat inside
no shut interface GigabitEthernet0/0/0.101
description Tenant-PRIVATE
encapsulation dot1q 101
ip address 10.1.1.1 255.255.255.0
ip nat inside
no shut
ip dhcp pool ADATUM-PUB
network 10.1.0.0 255.255.255.0
default-router 10.1.0.1
dns-server 10.0.9.10
domain-name Adatum.com
exit ip dhcp pool ADATUM-PRV
network 10.1.1.0 255.255.255.0
default-router 10.1.1.1
dns-server 10.0.9.10
domain-name Adatum.com
exit
vlan 100
name tenant vlan 101
name tenant
interface range GigabitEthernet3/0/25, GigabitEthernet3/0/27, GigabitEthernet3/0/29
switchport trunk allowed vlan add 100,101
exit
zfs create LocalZFS/Tenant
zfs set quota=100G LocalZFS/Tenant
Under Node (pmx01/2/3) &gt; System &gt; Network &gt; vmbr0 &gt; Edit
VLAN must be added to VLAN IDs section on bottom right
<img alt="Pasted image 20260316132115.png" src="assets/pasted-image-20260316132115.png" target="_self">Under Datacenter &gt; SDN &gt; Zones create a VLAN zone for the tenant<br>
<img alt="Pasted image 20260316133133.png" src="assets/pasted-image-20260316133133.png" target="_self">Under Datacenter &gt; SDN &gt; VNets create a VNet for the tenants public and private subnet and add the respective network in the respective VNet.<br>
<img alt="Pasted image 20260316133411.png" src="assets/pasted-image-20260316133411.png" target="_self">Under Datacenter &gt; Permissions &gt; Users create a Admin User for the tenant in the PVE realm. Admin user is created in case there is an issue with their identity provider<br>
<img alt="Pasted image 20260316134655.png" src="assets/pasted-image-20260316134655.png" target="_self">Under Datacenter &gt; Permissions &gt; Groups create a group for the tenant. Add the tenant admin user created previously<br>
<img alt="Pasted image 20260316134737.png" src="assets/pasted-image-20260316134737.png" target="_self">Under Datacenter &gt; Permissions &gt; Pools create a resource pool for the tenant<br>
<img alt="Pasted image 20260316133722.png" src="assets/pasted-image-20260316133722.png" target="_self">Under Datacenter &gt; Permissions create permissions for the tenants resource pool. the permissions that tenants require are:/pool/tenant - PVEVMUser
/sdn/zones/tenant - PVESDNUser
Virtual machines and Containers that are required by the tenant can be created at this point. when the VMs and CTs are being created, the storage must be places in the tenants storage as well as the VM/CT must be placed in the respective tenants resource poolUnder Datacenter &gt; Permissions &gt; Realms add the tenants Active Directory, LDAP, or OpenID Connect Server to authenticate against the tenants identity provider.
Tenant may chose to host Active Directory in their private subnet or utilize pre existing identity infrastructure and have a DNS server in their private subnet insteadon npm.fmjsystems.com a tenant account needs to be made with permissions set so they are only to see items that are created by their account. this is one of the options that can be set when the account is made. Once the base environment for the tenant is created, listings for the created services need to be made for example, the web server and the VPN]]></description><link>tenant-onboarding-process.html</link><guid isPermaLink="false">Tenant Onboarding Process.md</guid><pubDate>Tue, 19 May 2026 23:13:22 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Services and Infrastructure]]></title><description><![CDATA[This page covers the services that are implemented for each tenant as well as the shared services for all tenants to use. Tenants are welcome to provision their own software on the virtual machines and containers that are provided by FMJ Systems. Tenants are provisioned with a web server that they are able to customize to suit their online web presence. The web server that is installed is Nginx and tenants are provisioned with an account on npm.fmjsystems.com to manage requests for their domain. Port 80 and 443 are forwarded from the simulated internet interface on the router to the Nginx Proxy Manager, enabling HTTP and HTTPS access to tenant web servers from the simulated internet network. HTTPS is handled at the reverse proxy level using wildcard certificates issued by the simulated internet Certificate Authority (Certzone).Note — To establish a trusted HTTPS connection, the root CA certificate from the simulated internet CA must be installed in the trusted certificate store of the connecting machine.Tenants are provisioned with a WireGuard VPN that is able to be configured through vpn.tenant.com. The VPN enables tenants to connect to their public subnet and thus allowing them to access resources in their private subnet remotely. The VPN is configurable through a web dashboard at vpn.tenant.com, for example vpn.adatum.com. Tenant credentials for the VPN dashboard follow the same format as other tenant services, with a username of TenantAdmin and password of P@ssw0rd.An Active Directory Environment has been created for each tenant. There is a basic staff setup with multiple departments: HR, IT, IT-Admin, Admin, and Sales. The active directory environments are integrated with Proxmox authentication for tenants to access the admin portal. when the AD environments are linked to Proxmox, only the IT-Admin group and users are added. The shared reverse proxy is Nginx Proxy Manager (NPM), running inside a Docker container hosted in an LXC container on the shared services network. NPM handles all inbound HTTP and HTTPS traffic for tenant and FMJ Systems domains, routing requests to the appropriate backend based on the requested hostname.NPM is reachable at npm.fmjsystems.com. Port 80 and 443 are forwarded from the simulated internet interface on the router to the reverse proxy, enabling HTTPS access to tenant web servers from the simulated internet network.Tenant accounts are provisioned with scoped access, restricting them to only the proxy host entries created under their account. Tenants use these accounts to manage forwarding rules for their hosted web services. Accounts follow the format ITAdmin@Tenant.com.Access to the Proxmox web interface at admin.fmjsystems.com is load balanced across all three nodes in the tenant cluster, providing redundancy in the event that a node becomes unavailable.The shared services DNS server is a BIND9 instance hosted at 10.0.9.10. to manage the DNS server at all, it is reachable through dns.fmjsystems.com. All tenant networks are configured to use this server as their DNS resolver. The shared services DNS sits in the middle of a three-tier DNS hierarchy: 1. Simulated Internet DNS (10.99.99.5) — Authoritative for public tenant domains 2. Shared Services DNS (10.0.9.10) — Recursive resolver, internal records, logging
3. Tenant AD DC — Authoritative for internal.tenant.com FMJ Systems has full administrative control over this DNS server. Tenants do not have access to manage or modify any records on the shared services DNS.The simulated internet is an isolated network (10.99.99.0/24, VLAN 99) that acts as a stand-in for the public internet. Since I was unsure of the network connectivity at the IT Expo, the environment has no real internet connectivity. The simulated internet provides the two things that would normally come from the public internet: authoritative DNS resolution for tenant domains and a trusted Certificate Authority for issuing HTTPS certificates.In a production implementation of this architecture. this would not be included and a authoritative public DNS provider and certificate authority would be used. The simulated internet DNS is a BIND9 instance hosted at 10.99.99.5, managed through Webmin at 10.99.99.5:10000. It acts as the authoritative name server for all public tenant domains, functioning similarly to a public DNS provider like Cloudflare. The following zones are hosted on the simulated internet DNS:
adatum.com
contoso.com
fabrikam.com
fmjsystems.com These zones contain records pointing tenant domains toward the simulated internet default gateway which has port forwarding enabled for the Nginx Proxy Manager reverse proxy, which handles routing to the appropriate backend. This is what allows a machine connected to the simulated internet network to browse to adatum.com and reach Adatum's web server.The simulated internet Certificate Authority is a StepCA instance hosted at 10.99.99.6, operating under the fictional public CA name Certzone. Its hostname is ca.certzone.com. The purpose of this CA is to simulate a public Certificate Authority like Let's Encrypt, enabling realistic HTTPS certificate issuance across all tenant domains without requiring real internet connectivity. StepCA was chosen to be the certificate authority as it is a self hosted certificate authority and serves the purposes of providing web certificates in this reference implementation. In a production environment, an authoritative CA, like Lets Encrypt, would be used.]]></description><link>services-and-infrastructure.html</link><guid isPermaLink="false">Services and Infrastructure.md</guid><pubDate>Tue, 19 May 2026 23:13:10 GMT</pubDate></item><item><title><![CDATA[FMJ Systems and the MSP Model]]></title><description><![CDATA[For this reference architecture, FMJ Systems operates as a Managed Service Provider offering private cloud infrastructure to client organizations. Rather than requiring clients to purchase, host, and maintain their own hardware, FMJ Systems provisions and manages the underlying infrastructure while clients retain control over their own virtual environments.The MSP model creates a clear division of responsibility between FMJ Systems and its tenants:
Physical hardware, hypervisor, and cluster health
Network infrastructure and inter-tenant isolation
VM and storage provisioning for new tenants
Replication, high availability, and backup strategy
Shared services including DNS, reverse proxy, and certificate infrastructure Configuration of their provisioned VMs and containers
Their scoped reverse proxy configuration for hosted web services
Internal identity and access management within their environment
This model allows tenants to consume cloud resources without the overhead of managing the infrastructure layer, while FMJ Systems maintains visibility and control over the platform as a whole.FMJ systems would offer 2 approaches to billing depending on the nature of the client. The first option would be a Tiered Package approach, the second option would be a custom engagement with the client where FMJ Systems and the client work out how much resources would be required and for how much a month. For clients with straightforward or predictable resource requirements, FMJ Systems offers fixed monthly packages. Each tier provides a defined allocation of compute, memory, storage within the clients isolated environment.Tenants are able to spread the resources across as many VMs or containers as they would like. All packages include the base tenant environment:
Public and private subnet
Web server (if required)
VPN
Active Directory Domain Controller If required. LDAP integration with existing infrastructure available
DNS server available as replacement Shared Services Reverse Proxy account created
For clients with more complex or unique requirements, FMJ Systems works directly with the client to scope a custom environment. This involves an initial consultation to determine compute, storage, networking, and service requirements, after which FMJ Systems and the client agree on a monthly rate reflecting the provisioned resourcesCustom engagements are well-suited to customers who requires resources outside of the existing standard packages.Unfortunately, due to Proxmox's lack of resource quota enforcement for CPU and RAM, virtual machines and containers will be provisioned by FMJ Systems. Without this control, a single tenant would be able to over provision virtual machines and containers taking up all shared CPU and RAM resources.Creating a custom provisioning portal for tenants to create VMs and containers would be the best option in this case. Utilizing a database to keep track of per tenant resources and API calls to create VMs and CTs, it would be possible to check if tenants are over provisioning their allocated resources. this is something a production environment would benefit from.Once FMJ Systems and the client have come to an agreement on what is required for the clients environment, the tenant onboarding process can begin. The following is required to setup a tenants environment:
Router and Switch configured to add new public and private subnet Router - Sub interface for public and private subnets
Switch - VLAN created for tenants public and private subnet. VLAN added to to router and cluster ZFS Dataset Created for tenant
Proxmox VLAN SDN Zone Added Public and Private subnet added as VNet to SDN Zone Proxmox Resource Pool Created with VMs, Containers and Storage Added
Tenant identity provider linked with Proxmox realms Proxmox RBAC added for Resource Pool and SDN Network
Required Virtual Machines and Containers Provisioned After all of this has been implemented for the tenant, they are able to login an access their resources for configuring their resources. For a more detailed look at what exactly needs to be done for tenants to be onboarded, please take a look at <a data-href="Tenant Onboarding Process" href="tenant-onboarding-process.html" class="internal-link" target="_self" rel="noopener nofollow">Tenant Onboarding Process</a>In a production deployment, the process of onboarding tenants would be automated through the Proxmox REST API, allowing FMJ Systems to onboard new clients quickly and consistently without manual configuration steps. the API supports full control over VM and container creation, resource pool management, SDN Zone creation, and permission assignments. Router and switch configuration can be achieved through an SSH based scripting. Tenant networks could also be implemented through Proxmox Software Defined Networking to eliminate the need for SSH based scripting for the router and switch, as tenant networking would all be handled through Proxmox.Billing implemented with a fixed monthly charge is well suited to a reference implementation, but a production implementation would benefit from usage based billing. The Proxmox REST API exposes CPU, RAM, and network utilization on a per VM basis. Implementing a way to poll the API for resource usage per VM then aggregating the data by tenant resource pool could be used to track usage for billing purposes. this would enable FMJ systems to bill customers based on usage rather than a fixed monthly cost, which would be more practical at scale For the demonstration of this architecture, I have only implemented the base environment for each tenant with isolated compute, networking and storage on the tenant cluster. This includes a web server and VPN in their public subnet, and an Active Directory environment for Proxmox authentication located in their private subnet. The active directory environment can be swapped out to use the tenants existing identity provider for authentication, and a DNS server can be put in place. These are the names of the 3 tenants I have implemented
Adatum
Contoso
Fabrikam
]]></description><link>fmj-systems-and-the-msp-model.html</link><guid isPermaLink="false">FMJ Systems and the MSP Model.md</guid><pubDate>Tue, 19 May 2026 23:11:14 GMT</pubDate></item><item><title><![CDATA[Reflection]]></title><description><![CDATA[When starting this capstone, I wanted to create something that utilized as much of my 3 year college program as possible. One of the hardest parts was, creating the business case. I wanted to create a multi-tenant private cloud without positioning it as a competitor with AWS, Azure, or other Hyper Scaler platforms. The solution was framing it as a consultancy that offers IT infrastructure and private cloud deployments. The idea being to transition companies from public cloud platforms to an on premises private cloud to offer complete control and ownership of their data and infrastructure. My Capstone was selected to attend the Durham College IT Expo, presented by the Brock Board of Trade. The judges assigned to our section had business backgrounds rather than technical, which made meaningful discussions about my capstone project difficult. The IT Expo provided us with a graded rubric on how the judges would be evaluating our capstone but that was never utilized or provided to the participating groups. Rather than to walk away with just a grade and no substantial feedback at all, I decided to reach out to my capstone professor for technical feedback on my project. The feedback that I received from my professor confirmed that the technical decisions that I made were sound, while giving me a clear picture on how it could have been improved.The areas of improvement that my professor pointed out would have significantly improved the implementation. some of the improvements I did recognize during the design of the project, but due to time constraints, I decided to leave them out of the scope. A proper monitoring layer with logging, SIEM integration, and performance dashboards, deeper disaster recovery planning with defined RPO and RTO objectives, as well as a proper automation layer with infrastructure as code and a self service provisioning portal would move this project MUCH closer to a production ready offering. looking back, I am proud of what I was able to put together for this capstone project. There were some things that I would have liked to include, specifically some form of automation for tenant onboarding, but due to time constraints I was not able to include it in the scope. This project forced me to think about many aspects of the infrastructure such as, tenant isolation, router and switch configuration, Identity management, RBAC, VPNs, Virtualization, etc. Bringing all of these aspects together into a cohesive solution is what I find most interesting, and what I want to build a career around. If you have any questions about the implementation or would like to discuss it further, feel free to reach out.]]></description><link>reflection.html</link><guid isPermaLink="false">Reflection.md</guid><pubDate>Tue, 19 May 2026 23:05:16 GMT</pubDate></item><item><title><![CDATA[Capstone Image SOLO 1]]></title><description><![CDATA[<img src="assets/capstone-image-solo-1.png" target="_self">]]></description><link>assets/capstone-image-solo-1.html</link><guid isPermaLink="false">Assets/Capstone Image SOLO 1.png</guid><pubDate>Sat, 09 May 2026 21:34:09 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Router Configuration File]]></title><description><![CDATA[! --- Initialization ---
en
config t
hostname R1
no ip domain lookup
enable secret ciscoline con 0
password cisco
loginexitline vty 0 15
password cisco
login
exitservice password-encryption! --- MANAGEMENT Access Control List ---
ip access-list extended MANAGEMENT
permit ip 10.0.1.0 0.0.0.255 any
permit ip 10.0.0.0 0.0.0.255 any
permit ip 10.0.9.0 0.0.0.255 any
deny ip any any
exit! --- DHCP Exclusions and Pools---
ip dhcp excluded-address 10.0.0.1 10.0.0.50
ip dhcp excluded-address 10.0.1.1 10.0.1.50
ip dhcp excluded-address 10.0.9.1 10.0.9.50
ip dhcp excluded-address 10.1.0.1 10.1.0.50
ip dhcp excluded-address 10.1.1.1 10.1.1.50
ip dhcp excluded-address 10.2.0.1 10.2.0.50
ip dhcp excluded-address 10.2.1.1 10.2.1.50
ip dhcp excluded-address 10.3.0.1 10.3.0.50
ip dhcp excluded-address 10.3.1.1 10.3.1.50
ip dhcp excluded-address 10.99.99.1 10.99.99.50ip dhcp pool MANAGEMENT
network 10.0.0.0 255.255.255.0
default-router 10.0.0.1
dns-server 10.0.9.10
domain-name internal.FMJSystems.com
exitip dhcp pool SIMINTERNET
network 10.99.99.0 255.255.255.0
default-router 10.99.99.1
dns-server 10.99.99.5
exitip dhcp pool FMJ-PUB
network 10.0.1.0 255.255.255.0
default-router 10.0.1.1
dns-server 10.0.2.5
domain-name FMJSystems.com
exitip dhcp pool FMJ-PRV
network 10.0.2.0 255.255.255.0
default-router 10.0.2.1
dns-server 10.0.2.5
domain-name internal.FMJSystems.com
exitip dhcp pool SHARED-SERVICES
network 10.0.9.0 255.255.255.0
default-router 10.0.9.1
dns-server 10.0.9.10
domain-name internal.FMJSystems.com
exitip dhcp pool ADATUM-PUB
network 10.1.0.0 255.255.255.0
default-router 10.1.0.1
dns-server 10.1.1.5
domain-name Adatum.com
exitip dhcp pool ADATUM-PRV
network 10.1.1.0 255.255.255.0
default-router 10.1.1.1
dns-server 10.1.1.5
domain-name internal.Adatum.com
exitip dhcp pool CONTOSO-PUB
network 10.2.0.0 255.255.255.0
default-router 10.2.0.1
dns-server 10.2.1.5
domain-name Contoso.com
exitip dhcp pool CONTOSO-PRV
network 10.2.1.0 255.255.255.0
default-router 10.2.1.1
dns-server 10.2.1.5
domain-name internal.Contoso.com
exitip dhcp pool FABRIKAM-PUB
network 10.3.0.0 255.255.255.0
default-router 10.3.0.1
dns-server 10.3.1.5
domain-name Fabrikam.com
exitip dhcp pool FABRIKAM-PRV
network 10.3.1.0 255.255.255.0
default-router 10.3.1.1
dns-server 10.3.1.5
domain-name internal.Fabrikam.com
exit! --- Interface and subinterface Configuration---
interface GigabitEthernet0/0/0
no shut
exit interface GigabitEthernet0/0/0.5
description MANAGEMENT
encapsulation dot1q 5
ip address 10.0.0.1 255.255.255.0
ip nat inside
no shutinterface GigabitEthernet0/0/0.10
description FMJ-PUB
encapsulation dot1q 10
ip address 10.0.1.1 255.255.255.0
ip nat inside
no shutinterface GigabitEthernet0/0/0.20
description FMJ-PRV
encapsulation dot1q 20
ip address 10.0.2.1 255.255.255.0
ip nat inside
no shutinterface GigabitEthernet0/0/0.90
description SHARED-SERVICES
encapsulation dot1q 90
ip address 10.0.9.1 255.255.255.0
ip nat inside
no shutinterface GigabitEthernet0/0/0.100
description ADATUM-PUB
encapsulation dot1q 100
ip address 10.1.0.1 255.255.255.0
ip nat inside
no shutinterface GigabitEthernet0/0/0.101
description ADATUM-PRV
encapsulation dot1q 101
ip address 10.1.1.1 255.255.255.0
ip nat inside
no shutinterface GigabitEthernet0/0/0.200
description CONTOSO-PUB
encapsulation dot1q 200
ip address 10.2.0.1 255.255.255.0
ip nat inside
no shutinterface GigabitEthernet0/0/0.201
description CONTOSO-PRV
encapsulation dot1q 201
ip address 10.2.1.1 255.255.255.0
ip nat inside
no shutinterface GigabitEthernet0/0/0.300
description FABRIKAM-PUB
encapsulation dot1q 300
ip address 10.3.0.1 255.255.255.0
ip nat inside
no shutinterface GigabitEthernet0/0/0.301
description FABRIKAM-PRV
encapsulation dot1q 301
ip address 10.3.1.1 255.255.255.0
ip nat inside
no shut
exit ! --- Simulated Internet Subinterface ---
interface GigabitEthernet0/0/0.99
description SIMULATED-INTERNET
encapsulation dot1q 99
ip address 10.99.99.1 255.255.255.0
ip nat outside
no shutinterface GigabitEthernet0/0/0
ip nat inside
exit! --- ACL TO DENY SIMULATED INTERNET FROM REACHING LOCAL ADDRESSESS ---
ip access-list extended SIM-INT-DENY
permit ip 10.99.99.0 0.0.0.255 10.99.99.0 0.255.255.255
deny ip 10.99.99.0 0.0.0.255 10.0.0.0 0.255.255.255
permit ip any any
interface GigabitEthernet0/0/0.99
ip access-group SIM-INT-DENY in
exit! --- NAT Configuration for internet ---
access-list 1 permit 10.0.0.0 0.255.255.255ip nat inside source list 1 interface GigabitEthernet0/0/0.99 overload
ip route 0.0.0.0 0.0.0.0 10.99.99.254
ip name-server 10.0.9.10! --- Port Forwarding for Tenant and FMJ VPN ---
ip nat inside source static udp 10.0.0.10 51819 interface g0/0/0.99 51819
ip nat inside source static udp 10.0.1.2 51820 interface g0/0/0.99 51820
ip nat inside source static udp 10.1.0.2 51821 interface g0/0/0.99 51821
ip nat inside source static udp 10.2.0.2 51822 interface g0/0/0.99 51822
ip nat inside source static udp 10.3.0.2 51823 interface g0/0/0.99 51823! --- STOP HTTP SERVER ---
no ip http server
no ip http secure-server! --- Port Forwarding Nginx Proxy Manager ---
! --- May have to wait for HTTP/S Server to stop
ip nat inside source static tcp 10.0.9.5 80 interface g0/0/0.99 80
ip nat inside source static tcp 10.0.9.5 443 interface g0/0/0.99 443]]></description><link>configuration-files/router-configuration-file.html</link><guid isPermaLink="false">Configuration Files/Router Configuration File.md</guid><pubDate>Thu, 02 Apr 2026 18:53:47 GMT</pubDate></item><item><title><![CDATA[Architecture and Design]]></title><description><![CDATA[The FMJ Systems Private Cloud Reference Implementation is designed to demonstrate the core principles of a multi-tenant private cloud, providing isolated cloud environments to multiple tenants on shared physical infrastructure. The implemented architecture is modeled after a Managed Service Provider. the architecture can be adapted to multiple for more information on how the MSP model works in this context, please refer to <a data-href="FMJ Systems and the MSP Model" href="fmj-systems-and-the-msp-model.html" class="internal-link" target="_self" rel="noopener nofollow">FMJ Systems and the MSP Model</a>The reference implementation consists of FMJ Systems management infrastructure, that is hosted on its own dedicated node, and a tenant cluster that hosts all tenant workloads as well as the shared services isolated environment. the simulated internet isolated environment is also hosted on the tenant cluster, but this would not be included in a production environment at all, the simulated internet environment is only to provide a certificate authority and external DNS since the environment is not connected to the internet. Tenant isolation is enforced at multiple layers such as networking, storage, and access control, ensuring that no tenant can access or interfere with another tenants resources. Each Tenant is provisioned with a dedicated publica and private subnet, isolated ZFS storage datasets, and Proxmox access restricted to only their resources pool The inclusion of shared services serves a DNS server that forwards DNS requests for internal.tenant.com to each tenants AD DC and to sere internal DNS records as well as a reverse proxy for web connections to FMJ Systems and tenants.The reference implementation consists of the following physical hardware:Tenant Environments - Each of the three tenants (Adatum, Contoso, Fabrikam) is provisioned with a dedicated public and private subnet, isolated storage, scoped Proxmox access, and their own web server, Active Directory environment, and WireGuard VPN that is reachable from the simulated internet network.Shared Services - A shared services network hosts infrastructure that all tenants consume, including the Nginx Proxy Manager reverse proxy and the BIND9 recursive DNS resolver. The Nginx Proxy Manager has user accounts for scoped tenant management, the DNS server is fully managed by FMJ Systems.FMJ Systems Infrastructure — The FMJ node hosts anything related to FMJ Systems, including the FMJ Systems web server, Active Directory Environment, VPN and Management VPN. This is logically and physically separated from the tenant cluster.Simulated Internet — An isolated VLAN (10.99.99.0/24) simulates a public internet environment for the purposes of the demo. It hosts an authoritative BIND9 DNS server and a StepCA Certificate Authority operating as a fictional public CA called Certzone, enabling realistic HTTPS certificate issuance and public DNS resolution without requiring actual internet connectivity.<br><img alt="Simplified Topo.drawio.png" src="assets/simplified-topo.drawio.png" target="_self" style="width: 548px; max-width: 100%;">
This simplified topology shows a high level representation of what has been implemented for the reference architecture for the demonstration. It includes the Proxmox cluster, FMJ Systems node, router, switch and demo PC. Tenant workloads are hosted on the Proxmox cluster and any FMJ Systems required infrastructure is hosted on the FMJ Systems node. the demo computer is typically accessing either VLAN 5 (management) or VLAN 99 (Simulated Internet) to demonstrate connectivity to resources depending on network connectivity.<br>
Note - For a more detailed look at the topology, see - <a data-href="Networking" href="networking.html" class="internal-link" target="_self" rel="noopener nofollow">Networking</a><br>
For more information on how tenants are isolated, see - <a data-href="Tenant Isolation and Environment" href="tenant-isolation-and-environment.html" class="internal-link" target="_self" rel="noopener nofollow">Tenant Isolation and Environment</a><br><img alt="Simplified INTENDED Topo.drawio.png" src="assets/simplified-intended-topo.drawio.png" target="_self" style="width: 697px; max-width: 100%;">
In a full production deployment, the architecture would expand to include:
A dedicated storage cluster for tenant and provider data and backups
Offsite backups Redundant networking hardware
Multiple Availability Zones across geographic regions
The reference implementation consolidates all of these roles into available hardware while maintaining the same logical separation that a production deployment would enforce.
While this implementation is modeled after a MSP offering, the architecture is adaptable to other deployment contexts, with targeted modifications: Academic Institutions - Resource pools can be scoped per student or per course. Standardized environments can be made for different courses or labs and deployed to student resource pools Government Agencies - Can benefit from self hosting all services and data to ensure data sovereignty. Audit logging and more strict RBAC policies can be layered on top to provide more security Enterprise IT - Departments can be isolated the same way tenants are and the clusters can scale to support shared IT requirements. Integration into existing identity providers can also be utilized <br>Note - For more information on how the architecture could be adapted to other contexts, see - <a data-href="Adaptations of the Architecture" href="adaptations-of-the-architecture.html" class="internal-link" target="_self" rel="noopener nofollow">Adaptations of the Architecture</a>]]></description><link>architecture-and-design.html</link><guid isPermaLink="false">Architecture and Design.md</guid><pubDate>Wed, 01 Apr 2026 19:43:28 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Simplified INTENDED Topo.drawio]]></title><description><![CDATA[<img src="assets/simplified-intended-topo.drawio.png" target="_self">]]></description><link>assets/simplified-intended-topo.drawio.html</link><guid isPermaLink="false">Assets/Simplified INTENDED Topo.drawio.png</guid><pubDate>Wed, 01 Apr 2026 04:02:05 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Accessing Resources for Demonstration]]></title><description><![CDATA[A simulated internet network and VLAN have been setup 10.99.99.0/24 VLAN 99. The switch is configured with VLAN assignments on the following ports. This enables access to the management VLAN as well as the simulated internet.Ports 37-42 &gt; VLAN 5 - MANAGEMENT
Ports 43-48 &gt; VLAN 99 - SIMULATED INTERNETTo access the resources from the respective networks, the IP and DNS server need to be set accordingly on the ethernet interface of the PC/Laptop. although DHCP has been enabled for the respective networks on the router MANAGEMENT - IP Range 10.0.0.50-254 - DNS: 10.0.9.10 SIMULATED INTERNET - IP Range 10.99.99.50-254 - DNS: 10.99.99.5`with DNS records, a Reverse Proxy and port forwarding in place, from the Simulated Internet it is possible to visit:adatum.com contoso.com fabrikam.com fmjsystems.com
admin.fmjsystems.com
fmjadmin.fmjsystems.com
since port forwarding is enabled for each tenants VPN, from the simulated internet it is possible to connect to each tenants public subnet. This will allow you to reach the AD DC in the private subnet as well as access the VPN web interface for the respective tenant, for example:Connected to Simulated Internet
vpn.adatum.com &gt; UNAUTHORIZED Adatum VPN Connected
vpn.adatum.com From the management network, since there are local DNS records for the URLs pointing toward the local address of the shared services Reverse Proxy, as well as Access Control Rules on the Reverse Proxy, it is possible to visit:adatum.com
vpn.adatum.com contoso.com
vpn.contoso.com fabrikam.com
vpn.fabrikam.com fmjsystems.com
vpn.fmjsystems.com
npm.fmjsystems.com
dns.fmjsystems.com
admin.fmjsystems.com
fmjadmin.fmjsystems.com
Note - To get a proper HTTPS connection from the web servers/reverse proxy, the root CA certificate from the simulated internet CA needs to be installed on the system connecting to the websiteone thing to note is that most passwords in this reference architecture are P@ssw0rd. although it is known to be one of the most secure passwords known to mankind, it is advised to use a unique password for each service. tenants would be responsible for their respective passwords though. The Proxmox web interface for tenants is reachable at admin.fmjsystems.com All passwords to the Proxmox web interface are set to P@ssw0rd. Tenants are provisioned with an Admin account in the PVE realm as well as their active directory, integrated with Proxmox. Tenant admin account credentials in the PVE realms are:
Username - TenantAdmin
Password - P@ssw0rdEx Adatum:
Username - AdatumAdmin
Password - P@ssw0rdEach tenants active directory environment is integrated as a realm in Proxmox. to authenticate with an Active Directory account, select the respective realm and enter your credentials. Each tenant AD Environment is provisioned with essentially the same script. available users to login to the realms are as follows:A.Park
C.Murphy
D.Kim
E.Brown
F.Rahman
J.Davis
M.Tynan-Sabatin
M.Wilson
R.Scott
T.Singh
all passwords for these users are P@ssw0rd and are in all available realms. The same applies for the FMJ systems node at fmjadmin.fmjsystems.com but the tenants do not have accounts nor are their AD environments integrated.to access the management interfaces for each tenant, it is located at vpn.tenant.com and the user name and password are as follows:
vpn.tenant.com
Username - TenantAdmin
Password - P@ssw0rdEx Adatum:
vpn.adatum.com
Username - AdatumAdmin
Password - P@ssw0rdnpm.fmjsystems.com
Username - ITAdmin@Tenant.com
Password - P@ssw0rdEx Adatum:
Username - ITAdmin@Adatum.com
Password - P@ssw0rd]]></description><link>accessing-resources-for-demonstration.html</link><guid isPermaLink="false">Accessing Resources for Demonstration.md</guid><pubDate>Tue, 31 Mar 2026 22:02:20 GMT</pubDate></item><item><title><![CDATA[private cloud.drawio]]></title><description><![CDATA[<img src="assets/private-cloud.drawio.png" target="_self">]]></description><link>assets/private-cloud.drawio.html</link><guid isPermaLink="false">Assets/private cloud.drawio.png</guid><pubDate>Sat, 28 Mar 2026 16:09:54 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Addressing Scheme]]></title><link>addressing-scheme.html</link><guid isPermaLink="false">Addressing Scheme.md</guid><pubDate>Tue, 17 Mar 2026 23:13:47 GMT</pubDate></item><item><title><![CDATA[Pasted image 20260316134737]]></title><description><![CDATA[<img src="assets/pasted-image-20260316134737.png" target="_self">]]></description><link>assets/pasted-image-20260316134737.html</link><guid isPermaLink="false">Assets/Pasted image 20260316134737.png</guid><pubDate>Mon, 16 Mar 2026 17:47:37 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Pasted image 20260316134655]]></title><description><![CDATA[<img src="assets/pasted-image-20260316134655.png" target="_self">]]></description><link>assets/pasted-image-20260316134655.html</link><guid isPermaLink="false">Assets/Pasted image 20260316134655.png</guid><pubDate>Mon, 16 Mar 2026 17:46:55 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Pasted image 20260316133722]]></title><description><![CDATA[<img src="assets/pasted-image-20260316133722.png" target="_self">]]></description><link>assets/pasted-image-20260316133722.html</link><guid isPermaLink="false">Assets/Pasted image 20260316133722.png</guid><pubDate>Mon, 16 Mar 2026 17:37:22 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Pasted image 20260316133411]]></title><description><![CDATA[<img src="assets/pasted-image-20260316133411.png" target="_self">]]></description><link>assets/pasted-image-20260316133411.html</link><guid isPermaLink="false">Assets/Pasted image 20260316133411.png</guid><pubDate>Mon, 16 Mar 2026 17:34:11 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Pasted image 20260316133133]]></title><description><![CDATA[<img src="assets/pasted-image-20260316133133.png" target="_self">]]></description><link>assets/pasted-image-20260316133133.html</link><guid isPermaLink="false">Assets/Pasted image 20260316133133.png</guid><pubDate>Mon, 16 Mar 2026 17:31:33 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Pasted image 20260316132115]]></title><description><![CDATA[<img src="assets/pasted-image-20260316132115.png" target="_self">]]></description><link>assets/pasted-image-20260316132115.html</link><guid isPermaLink="false">Assets/Pasted image 20260316132115.png</guid><pubDate>Mon, 16 Mar 2026 17:21:15 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item><item><title><![CDATA[Switch Configuration File]]></title><description><![CDATA[! --- Initialization ---
en
config t
hostname S1
no ip domain lookup
enable secret ciscoline con 0
password cisco
login
exitline vty 0 15
password cisco
login
exitservice password-encryption! --- VLAN Creation ---
vlan 5
name Managementvlan 10
name FMJSystemsvlan 20
name FMJSystemsPrivvlan 90
name DMZvlan 100
name Adatumvlan 101
name AdatumPrivvlan 200
name Contosovlan 201
name ContosoPrivvlan 300
name Fabrikamvlan 301
name FabrikamPrivvlan 99
name SimulatedInternetvlan 999
name Nativeinterface vlan 5
ip address 10.0.0.2 255.255.255.0
no shut
exitip default-gateway 10.0.0.1! --- Interface Configuration ---
interface GigabitEthernet3/0/1
description TRUNK-TO-ROUTER
switchport mode trunk
switchport trunk allowed vlan 5,10,20,90,100,101,200,201,300,301,99
switchport trunk native vlan 999
no shut
exitinterface GigabitEthernet3/0/13
description TRUNK-TO-FMJ-NODE
switchport mode trunk
switchport trunk allowed vlan 5,10,20,90
switchport trunk native vlan 999
no shut
exitinterface range GigabitEthernet3/0/25, GigabitEthernet3/0/27, GigabitEthernet3/0/29
description TRUNK-TO-TENANT-CLUSTER
switchport mode trunk
switchport trunk allowed vlan 5,90,100,101,200,201,300,301,99
switchport trunk native vlan 999
no shut
exitinterface range GigabitEthernet3/0/37-42
description MANAGEMENT
switchport mode access
switchport access vlan 5
no shut
exitinterface range GigabitEthernet3/0/43-48
description SIMULATED INTERNET
switchport mode access
switchport access vlan 99
no shut
exit]]></description><link>configuration-files/switch-configuration-file.html</link><guid isPermaLink="false">Configuration Files/Switch Configuration File.md</guid><pubDate>Sun, 15 Mar 2026 00:21:10 GMT</pubDate></item><item><title><![CDATA[Simplified Topo.drawio]]></title><description><![CDATA[<img src="assets/simplified-topo.drawio.png" target="_self">]]></description><link>assets/simplified-topo.drawio.html</link><guid isPermaLink="false">Assets/Simplified Topo.drawio.png</guid><pubDate>Sat, 14 Mar 2026 23:46:54 GMT</pubDate><enclosure url="." length="0" type="false"/><content:encoded>&lt;figure&gt;&lt;img src=&quot;.&quot;&gt;&lt;/figure&gt;</content:encoded></item></channel></rss>