<?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[AWS VPC Peering: Connecting Two VPCs]]></title><description><![CDATA[AWS VPC Peering: Connecting Two VPCs]]></description><link>https://aws-vpc-peering-by-niharbhuvad.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Wed, 24 Jun 2026 10:49:28 GMT</lastBuildDate><atom:link href="https://aws-vpc-peering-by-niharbhuvad.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[AWS VPC Peering: Connecting two VPCs]]></title><description><![CDATA[Introduction
In this project, I implemented AWS VPC Peering to enable private communication between two VPCs without using the public internet.
This setup is commonly used when:

Separating test and production environments

Connecting microservices a...]]></description><link>https://aws-vpc-peering-by-niharbhuvad.hashnode.dev/aws-vpc-peering-connecting-two-vpcs</link><guid isPermaLink="true">https://aws-vpc-peering-by-niharbhuvad.hashnode.dev/aws-vpc-peering-connecting-two-vpcs</guid><category><![CDATA[Devops]]></category><category><![CDATA[Cloud Computing]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[vpc]]></category><category><![CDATA[vpc peering]]></category><dc:creator><![CDATA[Nihar Bhuvad]]></dc:creator><pubDate>Sun, 01 Feb 2026 13:29:55 GMT</pubDate><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>In this project, I implemented <strong>AWS VPC Peering</strong> to enable <strong>private communication between two VPCs</strong> without using the public internet.</p>
<p>This setup is commonly used when:</p>
<ul>
<li><p>Separating <strong>test and production environments</strong></p>
</li>
<li><p>Connecting <strong>microservices across VPCs</strong></p>
</li>
<li><p>Maintaining <strong>network isolation with controlled access</strong></p>
</li>
</ul>
<p>The goal of this project was to:</p>
<ul>
<li><p>Create two VPCs</p>
</li>
<li><p>Launch EC2 instances in each VPC</p>
</li>
<li><p>Configure VPC peering</p>
</li>
<li><p>Enable secure connectivity between instances using <strong>private IPs</strong></p>
</li>
</ul>
<h2 id="heading-architecture-overview">Architecture Overview</h2>
<h3 id="heading-environment-setup">Environment Setup</h3>
<ul>
<li><p><strong>Region:</strong> Same AWS region</p>
</li>
<li><p><strong>VPC 1 (Test VPC):</strong> <code>10.0.0.0/16</code></p>
</li>
<li><p><strong>VPC 2 (Prod VPC):</strong> <code>192.168.0.0/16</code></p>
</li>
<li><p><strong>Instances:</strong> One EC2 instance in each VPC</p>
</li>
<li><p><strong>Connectivity:</strong> VPC Peering</p>
</li>
</ul>
<p>📌 Initially, the instances <strong>cannot communicate</strong>, even if security groups allow it — VPC peering is required.</p>
<h2 id="heading-step-1-create-test-vpc">Step 1: Create Test VPC</h2>
<ul>
<li><p>Go to <strong>VPC Dashboard → Create VPC</strong></p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769947313041/b6611373-fc13-400e-9c97-1b36ae8298ab.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Provide:</p>
<ul>
<li><p>Name: <code>test-vpc</code></p>
</li>
<li><p>IPv4 CIDR: <code>10.0.0.0/16</code></p>
</li>
<li><p>Tenancy: Default</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769947361559/b4c895e8-a20c-4289-9fb4-97b400b7035b.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
<li><p>Click <strong>Create VPC</strong></p>
</li>
</ul>
<h2 id="heading-step-2-create-subnet-for-test-vpc">Step 2 : Create Subnet for test VPC</h2>
<ol>
<li><p>Go to <strong>Subnets → Create subnet</strong></p>
</li>
<li><p>Select <code>test-vpc</code></p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769947623652/8fe6994c-ce9c-4e98-bf3f-bd9a548ad99a.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Choose first Availability Zone</p>
</li>
<li><p>CIDR block: <code>10.0.0.0/24</code></p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769947665210/cf935bfd-cae4-4775-a0c2-24d5999a6d3d.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Create subnet</p>
</li>
</ol>
<p>This subnet will host the EC2 instance.</p>
<h2 id="heading-step-3-create-internet-gateway-amp-route-table-test-vpc">Step 3: Create Internet Gateway &amp; Route Table (Test VPC)</h2>
<h3 id="heading-internet-gateway">Internet Gateway</h3>
<ol>
<li><p>Create Internet Gateway</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769947898001/6aa1181f-b98b-4045-a611-9b810946147c.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Attach it to <code>test-vpc</code></p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769947922787/88f8cb60-fb5f-4af5-bab6-c8b1566d8b14.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<h3 id="heading-route-table">Route Table</h3>
<ol>
<li><p>Create Route Table.</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769948070835/710c0be7-1e14-4783-9bc2-6fb264739c30.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Associate it with the subnet.</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769948165940/615c920b-e86c-4cd8-998f-4710f7185576.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Add route:</p>
</li>
<li><pre><code class="lang-makefile"> Destination: 0.0.0.0/0
 Target: Internet Gateway
</code></pre>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769948286334/042d4482-899a-4dac-8530-57b070520749.png" alt class="image--center mx-auto" /></p>
<p> This allows SSH access to the instance.</p>
</li>
</ol>
<h2 id="heading-step-4-launch-ec2-instance-test-vpc">Step 4: Launch EC2 Instance (Test VPC)</h2>
<ul>
<li><p>Launch EC2 instance</p>
</li>
<li><p>Select:</p>
<ul>
<li><p>AMI: Ubuntu</p>
</li>
<li><p>Instance type: t3.micro</p>
</li>
</ul>
</li>
<li><p>Network settings:</p>
<ul>
<li><p>VPC: <code>test-vpc</code></p>
</li>
<li><p>Subnet: test subnet</p>
</li>
<li><p>Auto-assign Public IP: Enabled</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769948737263/41369be7-d3ba-4278-95cf-01e43d75a6c3.png" alt class="image--center mx-auto" /></p>
<p>  Create instance.</p>
</li>
</ul>
</li>
</ul>
<h2 id="heading-step-5-create-production-vpc-same-steps">Step 5: Create Production VPC (Same Steps)</h2>
<p>Repeat <strong>Steps 1–4</strong> for Production VPC with:</p>
<ul>
<li><p><strong>VPC Name:</strong> <code>prod-vpc</code></p>
</li>
<li><p><strong>CIDR:</strong> <code>192.168.0.0/16</code></p>
</li>
<li><p><strong>Subnet CIDR:</strong> <code>192.168.0.0/24</code></p>
</li>
</ul>
<p>Now we have:</p>
<ul>
<li><p>One EC2 in Test VPC</p>
</li>
<li><p>One EC2 in Prod VPC</p>
</li>
</ul>
<h2 id="heading-step-6-verify-connectivity-it-fails">Step 6: Verify Connectivity (It Fails ❌)</h2>
<p>Try pinging:</p>
<pre><code class="lang-bash">ping 192.168.0.124
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769950360142/0584dfa0-b5f3-47da-8632-ada4cca6fcef.png" alt class="image--center mx-auto" /></p>
<p>🚫 Ping fails — expected behavior<br />Reason: <strong>VPCs are isolated by default</strong></p>
<h2 id="heading-step-7-create-vpc-peering-connection">Step 7: Create VPC Peering Connection.</h2>
<ol>
<li><p>Go to <strong>VPC → Peering Connections</strong></p>
</li>
<li><p>Click <strong>Create Peering Connection</strong></p>
</li>
<li><p>Select:</p>
<ul>
<li><p>Requester VPC: <code>test-vpc</code></p>
</li>
<li><p>Accepter VPC: <code>prod-vpc</code></p>
</li>
</ul>
</li>
<li><p>Create peering connection</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769950568368/fb06988c-aec3-44d3-b0a5-492864f04b64.png" alt class="image--center mx-auto" /></p>
</li>
<li><p>Accept the peering request</p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769950643822/9358479f-a4d5-4233-9163-aedd4a7d418b.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<p>📌 Peering is now established, but routing is still missing.</p>
<h2 id="heading-step-8-update-route-tables">Step 8: Update Route Tables</h2>
<h3 id="heading-test-vpc-route-table">Test VPC Route Table</h3>
<p>Add:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769951064603/3f1c72d9-14cf-4873-84be-37d17cb20810.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-prod-vpc-route-table">Prod VPC Route Table</h3>
<p>Add:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769951138537/92ff9bf2-b4a5-4f53-a874-bbf9989d80ef.png" alt class="image--center mx-auto" /></p>
<p>This enables traffic flow between VPCs.</p>
<h2 id="heading-step-9-update-security-groups">Step 9: Update Security Groups</h2>
<h3 id="heading-test-instance-security-group">Test Instance Security Group</h3>
<ul>
<li><p>Inbound Rule:</p>
<ul>
<li><p>Type: All ICMP – IPv4</p>
</li>
<li><p>Source: <code>192.168.0.0/16</code></p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769951618031/e3d1790b-754c-4803-aa22-524314d30aba.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-prod-instance-security-group">Prod Instance Security Group</h3>
<ul>
<li><p>Inbound Rule:</p>
<ul>
<li><p>Type: All ICMP – IPv4</p>
</li>
<li><p>Source: <code>10.0.0.0/16</code></p>
</li>
<li><p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769951539251/f73c6ce6-885b-452f-8cfc-f0621d91f001.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
</li>
</ul>
<p>📌 Security groups must explicitly allow traffic between CIDR ranges.</p>
<h2 id="heading-step-10-test-connectivity">Step 10: Test Connectivity</h2>
<p>From Test Instance:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769951693466/05ac7fb2-db97-46dc-aba8-aa2de22ef2a3.png" alt class="image--center mx-auto" /></p>
<p>From Prod Instance:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769951784711/a8e40150-f0b2-4823-9caa-ce8198624447.png" alt class="image--center mx-auto" /></p>
<p>🎉 Ping works successfully using <strong>private IPs</strong></p>
<h2 id="heading-common-mistakes-amp-troubleshooting">Common Mistakes &amp; Troubleshooting</h2>
<ul>
<li><p>❌ Forgetting to update route tables</p>
</li>
<li><p>❌ Overlapping CIDR blocks</p>
</li>
<li><p>❌ Missing ICMP rules in security groups</p>
</li>
<li><p>❌ Assuming peering alone enables connectivity</p>
</li>
</ul>
<h2 id="heading-what-i-learned-from-this-project">What I Learned from This Project</h2>
<ul>
<li><p>VPCs are <strong>fully isolated by default</strong></p>
</li>
<li><p>VPC Peering requires:</p>
<ul>
<li><p>Peering connection</p>
</li>
<li><p>Route table updates</p>
</li>
<li><p>Security group rules</p>
</li>
</ul>
</li>
<li><p>CIDR planning is critical</p>
</li>
<li><p>AWS networking is <strong>simple but strict</strong></p>
</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>This project helped me understand <strong>AWS networking fundamentals</strong> deeply, especially:</p>
<ul>
<li><p>VPC isolation</p>
</li>
<li><p>Routing logic</p>
</li>
<li><p>Secure inter-VPC communication</p>
</li>
</ul>
]]></content:encoded></item></channel></rss>