<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Adepitan Adetunji</title>
    <description>The latest articles on DEV Community by Adepitan Adetunji (@masterpitan).</description>
    <link>https://dev.to/masterpitan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3458415%2Fb66f7f46-94b4-4278-880a-1ec8e9fba102.png</url>
      <title>DEV Community: Adepitan Adetunji</title>
      <link>https://dev.to/masterpitan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/masterpitan"/>
    <language>en</language>
    <item>
      <title>Building a Production-Ready VPC Implementation on Linux. HNG Internship Task 4: Complete VPC Control System with Networking</title>
      <dc:creator>Adepitan Adetunji</dc:creator>
      <pubDate>Wed, 12 Nov 2025 20:11:55 +0000</pubDate>
      <link>https://dev.to/masterpitan/building-a-production-ready-vpc-implementation-on-linux-hng-internship-task-4-complete-vpc-control-3h9j</link>
      <guid>https://dev.to/masterpitan/building-a-production-ready-vpc-implementation-on-linux-hng-internship-task-4-complete-vpc-control-3h9j</guid>
      <description>&lt;p&gt;Project Overview&lt;/p&gt;

&lt;p&gt;This project implements a complete Virtual Private Cloud (VPC) management system using Linux networking primitives. Built as part of the HNG Internship program, it demonstrates advanced networking concepts including network namespaces, bridges, NAT, routing, and security policies.&lt;/p&gt;

&lt;p&gt;Features Implemented&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;VPC Management: Create and manage multiple isolated VPCs with custom CIDR ranges&lt;/li&gt;
&lt;li&gt;Subnet Types: Public subnets with NAT gateway and private subnets with no internet access&lt;/li&gt;
&lt;li&gt;VPC Isolation: Complete network isolation between VPCs by default&lt;/li&gt;
&lt;li&gt;VPC Peering: Controlled communication between VPCs with proper routing&lt;/li&gt;
&lt;li&gt;Security Policies: JSON-based security group rules using iptables&lt;/li&gt;
&lt;li&gt;Application Deployment: Deploy and test applications within subnets&lt;/li&gt;
&lt;li&gt;Comprehensive Logging: All operations logged with timestamps and details&lt;/li&gt;
&lt;li&gt;Cleanup Automation: Complete resource cleanup and management&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Architecture&lt;br&gt;
┌─────────────────────────────────────────────────────────────┐&lt;br&gt;
│                     Host System                             │&lt;br&gt;
│  ┌─────────────────┐              ┌─────────────────┐      │&lt;br&gt;
│  │     VPC1        │   Peering    │     VPC2        │      │&lt;br&gt;
│  │ ┌─────────────┐ │ ◄──────────► │ ┌─────────────┐ │      │&lt;br&gt;
│  │ │br-vpc1      │ │              │ │br-vpc2      │ │      │&lt;br&gt;
│  │ │(10.0.0.0/16)│ │              │ │(172.16.0.0/ │ │      │&lt;br&gt;
│  │ └─────────────┘ │              │ │16)          │ │      │&lt;br&gt;
│  │       │         │              │ └─────────────┘ │      │&lt;br&gt;
│  │   ┌───▼───┐ ┌───▼───┐          │       │         │      │&lt;br&gt;
│  │   │Public │ │Private│          │   ┌───▼───┐     │      │&lt;br&gt;
│  │   │Subnet │ │Subnet │          │   │Public │     │      │&lt;br&gt;
│  │   │(NS)   │ │(NS)   │          │   │Subnet │     │      │&lt;br&gt;
│  │   └───────┘ └───────┘          │   │(NS)   │     │      │&lt;br&gt;
│  └─────────────────┐               │   └───────┘     │      │&lt;br&gt;
│                    │               └─────────────────┐      │&lt;br&gt;
│              ┌─────▼─────┐                          │      │&lt;br&gt;
│              │    NAT    │                          │      │&lt;br&gt;
│              │(iptables) │                          │      │&lt;br&gt;
│              └─────┬─────┘                          │      │&lt;br&gt;
│                    │                                 │      │&lt;br&gt;
│              ┌─────▼─────┐                          │      │&lt;br&gt;
│              │ Internet  │                          │      │&lt;br&gt;
│              └───────────┘                          │      │&lt;br&gt;
└─────────────────────────────────────────────────────────────┘&lt;/p&gt;

&lt;p&gt;Project Structure&lt;br&gt;
hng-task4/&lt;br&gt;
├── vpcctl.py              # Main VPC control tool&lt;br&gt;
├── demo-complete.sh       # Complete demonstration script&lt;br&gt;
├── cleanup.sh            # Resource cleanup script&lt;br&gt;
├── example-security-policy.json  # Security policy template&lt;br&gt;
├── logs/                 # Operation logs directory&lt;br&gt;
│   ├── vpc-operations.log&lt;br&gt;
│   └── demo-run-YYYYMMDD-HHMMSS.log&lt;br&gt;
└── README.md            # Project README&lt;/p&gt;

&lt;p&gt;Core Implementation&lt;br&gt;
VPC Creation with Bridges&lt;br&gt;
Each VPC is implemented as a Linux bridge with proper CIDR management:&lt;/p&gt;

&lt;p&gt;def create_vpc(self, vpc_name, cidr_block):&lt;br&gt;
    """Create a new VPC with specified CIDR"""&lt;br&gt;
    network = ipaddress.IPv4Network(cidr_block, strict=False)&lt;br&gt;
    bridge_name = f"br-{self._short_name(vpc_name, 12)}"&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Create and configure bridge
self.run_cmd(f"ip link add {bridge_name} type bridge")
self.run_cmd(f"ip link set {bridge_name} up")

# Assign gateway IP (first usable IP)
gateway_ip = str(list(network.hosts())[0])
self.run_cmd(f"ip addr add {gateway_ip}/{network.prefixlen} dev {bridge_name}")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Network Namespace Subnets&lt;br&gt;
Subnets are implemented as network namespaces for complete isolation:&lt;/p&gt;

&lt;p&gt;def add_subnet(self, vpc_name, subnet_name, subnet_cidr, subnet_type="private"):&lt;br&gt;
    """Add subnet to existing VPC"""&lt;br&gt;
    # Create namespace for subnet isolation&lt;br&gt;
    ns_name = f"{self._short_name(vpc_name, 6)}-{self._short_name(subnet_name, 6)}"&lt;br&gt;
    veth_host = f"vh-{self._short_name(subnet_name, 10)}"&lt;br&gt;
    veth_ns = f"vn-{self._short_name(subnet_name, 10)}"&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Create veth pair and connect to bridge
self.run_cmd(f"ip netns add {ns_name}")
self.run_cmd(f"ip link add {veth_host} type veth peer name {veth_ns}")
self.run_cmd(f"ip link set {veth_ns} netns {ns_name}")
self.run_cmd(f"ip link set {veth_host} master {config['bridge']}")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;NAT Gateway for Public Subnets&lt;br&gt;
Public subnets get internet access through iptables NAT:&lt;/p&gt;

&lt;p&gt;def setup_nat(self, vpc_name, subnet_cidr):&lt;br&gt;
    """Setup NAT for public subnet internet access"""&lt;br&gt;
    result = self.run_cmd("ip route | grep default | awk '{print $5}' | head -1")&lt;br&gt;
    internet_iface = result.stdout.strip()&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Enable IP forwarding and configure NAT
self.run_cmd("echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward")
self.run_cmd(f"iptables -t nat -A POSTROUTING -s {subnet_cidr} -o {internet_iface} -j MASQUERADE")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;VPC Peering with Proper Isolation&lt;br&gt;
VPC peering creates controlled communication channels:&lt;/p&gt;

&lt;p&gt;def peer_vpcs(self, vpc1_name, vpc2_name):&lt;br&gt;
    """Create peering connection between two VPCs"""&lt;br&gt;
    # Clean up existing peering interfaces&lt;br&gt;
    self.run_cmd(f"ip link delete {peer_veth1}", check=False)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Create new veth pair for peering
self.run_cmd(f"ip link add {peer_veth1} type veth peer name {peer_veth2}")

# Add routes to namespaces (not host) for proper isolation
for subnet_name, subnet_info in vpc1_config["subnets"].items():
    ns_name = subnet_info["namespace"]
    self.run_cmd(f"ip netns exec {ns_name} ip route add {vpc2_config['cidr']} via {vpc1_config['gateway']}")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Usage Examples&lt;br&gt;
Complete VPC Setup&lt;/p&gt;

&lt;h1&gt;
  
  
  Create VPC with subnets
&lt;/h1&gt;

&lt;p&gt;sudo python3 vpcctl.py create-vpc vpc1 10.0.0.0/16&lt;br&gt;
sudo python3 vpcctl.py add-subnet vpc1 public-subnet 10.0.1.0/24 --type public&lt;br&gt;
sudo python3 vpcctl.py add-subnet vpc1 private-subnet 10.0.2.0/24 --type private&lt;/p&gt;

&lt;h1&gt;
  
  
  Deploy applications
&lt;/h1&gt;

&lt;p&gt;sudo python3 vpcctl.py deploy-app vpc1 public-subnet --type python --port 8080&lt;br&gt;
sudo python3 vpcctl.py deploy-app vpc1 private-subnet --type python --port 8081&lt;/p&gt;

&lt;h1&gt;
  
  
  Test connectivity
&lt;/h1&gt;

&lt;p&gt;sudo python3 vpcctl.py test vpc1 public-subnet 8.8.8.8  # Should work&lt;br&gt;
sudo python3 vpcctl.py test vpc1 private-subnet 8.8.8.8  # Should fail&lt;/p&gt;

&lt;p&gt;VPC Peering Demonstration&lt;/p&gt;

&lt;h1&gt;
  
  
  Create second VPC
&lt;/h1&gt;

&lt;p&gt;sudo python3 vpcctl.py create-vpc vpc2 172.16.0.0/16&lt;br&gt;
sudo python3 vpcctl.py add-subnet vpc2 public-subnet2 172.16.1.0/24 --type public&lt;/p&gt;

&lt;h1&gt;
  
  
  Test isolation (should fail)
&lt;/h1&gt;

&lt;p&gt;sudo python3 vpcctl.py test vpc1 public-subnet 172.16.1.1&lt;/p&gt;

&lt;h1&gt;
  
  
  Create peering
&lt;/h1&gt;

&lt;p&gt;sudo python3 vpcctl.py peer-vpcs vpc1 vpc2&lt;/p&gt;

&lt;h1&gt;
  
  
  Test connectivity after peering (should work)
&lt;/h1&gt;

&lt;p&gt;sudo python3 vpcctl.py test vpc1 public-subnet 172.16.1.1&lt;/p&gt;

&lt;h1&gt;
  
  
  Remove peering
&lt;/h1&gt;

&lt;p&gt;sudo python3 vpcctl.py unpeer-vpcs vpc1 vpc2&lt;/p&gt;

&lt;p&gt;Security Policy Application&lt;/p&gt;

&lt;h1&gt;
  
  
  Apply security rules from JSON file
&lt;/h1&gt;

&lt;p&gt;sudo python3 vpcctl.py apply-policy vpc1 example-security-policy.json&lt;/p&gt;

&lt;p&gt;Automated Testing&lt;br&gt;
Run the complete demonstration:&lt;/p&gt;

&lt;h1&gt;
  
  
  Full automated test suite
&lt;/h1&gt;

&lt;p&gt;sudo bash demo-complete.sh&lt;/p&gt;

&lt;p&gt;This script validates:&lt;/p&gt;

&lt;p&gt;VPC creation and isolation&lt;/p&gt;

&lt;p&gt;Public/private subnet behavior&lt;/p&gt;

&lt;p&gt;NAT gateway functionality&lt;/p&gt;

&lt;p&gt;VPC peering connections&lt;/p&gt;

&lt;p&gt;Security policy enforcement&lt;/p&gt;

&lt;p&gt;Application deployment&lt;/p&gt;

&lt;p&gt;Key Technical Achievements&lt;br&gt;
Proper VPC Isolation: Fixed routing issues to ensure VPCs are truly isolated by default&lt;/p&gt;

&lt;p&gt;Namespace-based Subnets: Each subnet runs in its own network namespace for security&lt;/p&gt;

&lt;p&gt;Dynamic Interface Naming: Handles Linux interface name length limits with hashing&lt;/p&gt;

&lt;p&gt;Comprehensive Error Handling: Robust error handling and cleanup on failures&lt;/p&gt;

&lt;p&gt;Production-Ready Logging: All operations logged with timestamps and details&lt;/p&gt;

&lt;p&gt;Automated Cleanup: Complete resource cleanup to prevent conflicts&lt;/p&gt;

&lt;p&gt;Logging and Monitoring&lt;br&gt;
All operations are logged to /tmp/vpcctl/logs/ with:&lt;/p&gt;

&lt;p&gt;Command execution logs&lt;/p&gt;

&lt;p&gt;Timestamp information&lt;/p&gt;

&lt;p&gt;Error details and troubleshooting info&lt;/p&gt;

&lt;p&gt;Demo run summaries&lt;/p&gt;

&lt;p&gt;Cleanup and Management&lt;/p&gt;

&lt;h1&gt;
  
  
  Clean up all resources
&lt;/h1&gt;

&lt;p&gt;sudo bash cleanup.sh&lt;/p&gt;

&lt;h1&gt;
  
  
  Delete specific VPC
&lt;/h1&gt;

&lt;p&gt;sudo python3 vpcctl.py delete-vpc vpc1&lt;/p&gt;

&lt;h1&gt;
  
  
  List all VPCs
&lt;/h1&gt;

&lt;p&gt;sudo python3 vpcctl.py list&lt;/p&gt;

&lt;p&gt;Copy&lt;br&gt;
bash&lt;br&gt;
Security Policy Example&lt;br&gt;
{&lt;br&gt;
  "subnet": "10.0.1.0/24",&lt;br&gt;
  "ingress": [&lt;br&gt;
    {"port": 80, "protocol": "tcp", "action": "allow"},&lt;br&gt;
    {"port": 443, "protocol": "tcp", "action": "allow"},&lt;br&gt;
    {"port": 22, "protocol": "tcp", "action": "deny"}&lt;br&gt;
  ]&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Conclusion&lt;br&gt;
This VPC implementation demonstrates a deep understanding of Linux networking primitives and provides a solid foundation for understanding how cloud networking works under the hood. The project successfully implements all major VPC features with proper isolation, security, and management capabilities.&lt;/p&gt;

</description>
      <category>networking</category>
      <category>devops</category>
      <category>linux</category>
      <category>cloudcomputing</category>
    </item>
  </channel>
</rss>
