Network Architecture
Network Architecture Overview
A well-designed network architecture is the foundation of secure, scalable, and resilient infrastructure. This guide covers enterprise network design patterns, security considerations, and implementation best practices for modern cloud and hybrid environments.
Core Network Design Principles
1. Defense in Depth
Implement multiple layers of security controls throughout your network:
- Perimeter Security: Firewalls, IDS/IPS, DDoS protection
- Network Segmentation: VLANs, subnets, security groups
- Access Control: NACLs, security groups, microsegmentation
- Encryption: TLS/SSL, IPSec VPNs, encrypted tunnels
- Monitoring: Flow logs, packet capture, anomaly detection
2. Zero Trust Architecture
# Zero Trust Network Principles: 1. Never trust, always verify 2. Assume breach - design for compromise 3. Verify explicitly - authenticate and authorize every transaction 4. Use least privilege access 5. Inspect and log all traffic
3. Scalability and Performance
- Horizontal Scaling: Design for distributed load across multiple paths
- Redundancy: No single points of failure
- Caching: Strategic placement of caching layers
- CDN Integration: Global content distribution
- Traffic Engineering: QoS, traffic shaping, load balancing
Virtual Private Cloud (VPC) Architecture
Multi-Tier VPC Design
# Example: AWS VPC with public/private/database tiers VPC CIDR: 10.0.0.0/16 Public Subnets (Internet-facing): - us-east-1a: 10.0.1.0/24 - us-east-1b: 10.0.2.0/24 - us-east-1c: 10.0.3.0/24 Private Subnets (Application tier): - us-east-1a: 10.0.11.0/24 - us-east-1b: 10.0.12.0/24 - us-east-1c: 10.0.13.0/24 Database Subnets (Data tier): - us-east-1a: 10.0.21.0/24 - us-east-1b: 10.0.22.0/24 - us-east-1c: 10.0.23.0/24 Management Subnets (Bastion/VPN): - us-east-1a: 10.0.31.0/24
Network Access Control Lists (NACLs)
Implement stateless subnet-level security:
# Public Subnet NACL Rule | Type | Protocol | Port Range | Source | Allow/Deny 100 | Inbound | TCP | 80 | 0.0.0.0/0 | ALLOW 110 | Inbound | TCP | 443 | 0.0.0.0/0 | ALLOW 120 | Inbound | TCP | 22 | 10.0.31.0/24| ALLOW 200 | Inbound | TCP | 1024-65535 | 0.0.0.0/0 | ALLOW * | Inbound | ALL | ALL | 0.0.0.0/0 | DENY # Private Subnet NACL Rule | Type | Protocol | Port Range | Source | Allow/Deny 100 | Inbound | TCP | 3000-3100 | 10.0.1.0/23 | ALLOW 110 | Inbound | TCP | 22 | 10.0.31.0/24| ALLOW * | Inbound | ALL | ALL | 0.0.0.0/0 | DENY
Security Groups
Stateful instance-level firewalls with explicit allow rules:
# Web Server Security Group
resource "aws_security_group" "web_sg" {
name_prefix = "web-servers-"
vpc_id = aws_vpc.main.id
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
description = "HTTPS from anywhere"
}
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
security_groups = [aws_security_group.bastion_sg.id]
description = "SSH from bastion only"
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
description = "Allow all outbound"
}
lifecycle {
create_before_destroy = true
}
}
Hybrid Cloud Networking
Site-to-Site VPN Configuration
Connect on-premises networks to cloud VPCs:
# IPSec VPN Configuration Example
Customer Gateway:
- IP Address: 203.0.113.10
- BGP ASN: 65000
- Routing: Dynamic (BGP) or Static
Virtual Private Gateway:
- Amazon Side ASN: 64512
- Attached to VPC: vpc-12345678
VPN Connection:
- Tunnel 1: 169.254.10.0/30 (Inside IP CIDR)
- Tunnel 2: 169.254.11.0/30 (Inside IP CIDR)
- Pre-shared Keys: Generate unique 64-character keys
- DPD Timeout: 30 seconds
- IKE Version: IKEv2
# strongSwan Configuration (Customer Side)
conn AWS-VPC-TUNNEL-1
type=tunnel
auto=start
keyexchange=ikev2
ike=aes256-sha256-modp2048
esp=aes256-sha256
ikelifetime=28800s
lifetime=3600s
dpddelay=30s
dpdtimeout=120s
dpdaction=restart
left=%defaultroute
leftid=203.0.113.10
leftsubnet=192.168.0.0/16
right=52.84.123.45
rightsubnet=10.0.0.0/16
authby=secret
AWS Direct Connect / Azure ExpressRoute
Dedicated network connections for predictable performance:
- Bandwidth Options: 50 Mbps to 100 Gbps
- VLAN Support: 802.1Q VLAN tagging
- BGP Routing: Dynamic route advertisement
- Redundancy: Multiple connections across different locations
- Virtual Interfaces: Multiple VIFs per physical connection
Transit Gateway Architecture
# Hub-and-Spoke Network Topology Transit Gateway (TGW): - Region: us-east-1 - ASN: 64512 - Default Route Table: Enabled - DNS Support: Enabled - Multicast Support: Disabled Attachments: 1. Production VPC (10.1.0.0/16) 2. Development VPC (10.2.0.0/16) 3. Shared Services VPC (10.3.0.0/16) 4. VPN Connection (On-premises) 5. Direct Connect Gateway Route Tables: - Production Routes: 0.0.0.0/0 → NAT Gateway - Dev Routes: 10.0.0.0/8 → Local - On-Prem Routes: 192.168.0.0/16 → VPN
Load Balancing Architecture
Application Load Balancer (Layer 7)
# ALB Configuration with SSL/TLS
resource "aws_lb" "application" {
name = "app-alb"
internal = false
load_balancer_type = "application"
security_groups = [aws_security_group.alb_sg.id]
subnets = aws_subnet.public[*].id
enable_deletion_protection = true
enable_http2 = true
enable_cross_zone_load_balancing = true
access_logs {
bucket = aws_s3_bucket.alb_logs.bucket
prefix = "alb"
enabled = true
}
}
# HTTPS Listener with SSL Policy
resource "aws_lb_listener" "https" {
load_balancer_arn = aws_lb.application.arn
port = "443"
protocol = "HTTPS"
ssl_policy = "ELBSecurityPolicy-TLS-1-2-2017-01"
certificate_arn = aws_acm_certificate.cert.arn
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.app.arn
}
}
# Path-based routing
resource "aws_lb_listener_rule" "api" {
listener_arn = aws_lb_listener.https.arn
priority = 100
action {
type = "forward"
target_group_arn = aws_lb_target_group.api.arn
}
condition {
path_pattern {
values = ["/api/*"]
}
}
}
Network Load Balancer (Layer 4)
For high-performance, low-latency requirements:
- Ultra-low latency: Single-digit millisecond latency
- Static IP addresses: Elastic IPs per AZ
- Preserve source IP: No proxy protocol needed
- Million+ requests/second: Extreme performance
- TLS termination: Optional TLS offload
Global Load Balancing
# Route 53 Geolocation Routing
resource "aws_route53_record" "www" {
zone_id = aws_route53_zone.primary.zone_id
name = "www.example.com"
type = "A"
set_identifier = "US"
geolocation_routing_policy {
continent = "NA"
}
alias {
name = aws_lb.us_east_1.dns_name
zone_id = aws_lb.us_east_1.zone_id
evaluate_target_health = true
}
}
# Health checks
resource "aws_route53_health_check" "primary" {
fqdn = aws_lb.us_east_1.dns_name
port = 443
type = "HTTPS"
resource_path = "/health"
failure_threshold = "3"
request_interval = "30"
}
Network Security Best Practices
WAF Implementation
# AWS WAF Rules
{
"Name": "RateLimitRule",
"Priority": 1,
"Statement": {
"RateBasedStatement": {
"Limit": 2000,
"AggregateKeyType": "IP",
"ScopeDownStatement": {
"ByteMatchStatement": {
"SearchString": "/api/",
"FieldToMatch": {
"UriPath": {}
},
"TextTransformations": [{
"Priority": 0,
"Type": "NONE"
}],
"PositionalConstraint": "STARTS_WITH"
}
}
}
},
"Action": {
"Block": {
"CustomResponse": {
"ResponseCode": 429,
"CustomResponseBodyKey": "rate-limit-exceeded"
}
}
}
}
DDoS Protection
- AWS Shield Standard: Automatic protection against common attacks
- AWS Shield Advanced: Enhanced DDoS protection with 24x7 DRT support
- CloudFlare: Global anycast network with DDoS mitigation
- Rate Limiting: API Gateway throttling, WAF rate rules
- Auto Scaling: Absorb traffic spikes automatically
Network Monitoring and Logging
# VPC Flow Logs Configuration
resource "aws_flow_log" "vpc_flow_log" {
iam_role_arn = aws_iam_role.flow_log.arn
log_destination = aws_cloudwatch_log_group.flow_log.arn
traffic_type = "ALL"
vpc_id = aws_vpc.main.id
tags = {
Name = "vpc-flow-logs"
}
}
# Sample Flow Log Entry
2 123456789010 eni-abc123de 172.31.16.139 172.31.16.21 20641 22 6 20 4249 1418530010 1418530070 ACCEPT OK
# Fields: version account-id interface-id srcaddr dstaddr srcport dstport protocol packets bytes start end action log-status
Content Delivery Network (CDN) Architecture
CloudFront Distribution
# CloudFront with S3 Origin
resource "aws_cloudfront_distribution" "cdn" {
enabled = true
is_ipv6_enabled = true
default_root_object = "index.html"
price_class = "PriceClass_All"
origin {
domain_name = aws_s3_bucket.static_assets.bucket_regional_domain_name
origin_id = "S3-${aws_s3_bucket.static_assets.id}"
s3_origin_config {
origin_access_identity = aws_cloudfront_origin_access_identity.oai.cloudfront_access_identity_path
}
}
origin {
domain_name = aws_lb.application.dns_name
origin_id = "ALB-${aws_lb.application.id}"
custom_origin_config {
http_port = 80
https_port = 443
origin_protocol_policy = "https-only"
origin_ssl_protocols = ["TLSv1.2"]
}
}
default_cache_behavior {
allowed_methods = ["GET", "HEAD", "OPTIONS"]
cached_methods = ["GET", "HEAD"]
target_origin_id = "ALB-${aws_lb.application.id}"
forwarded_values {
query_string = true
cookies {
forward = "none"
}
headers = ["Host", "Accept", "Accept-Language", "CloudFront-Viewer-Country"]
}
viewer_protocol_policy = "redirect-to-https"
min_ttl = 0
default_ttl = 86400
max_ttl = 31536000
compress = true
}
# Static assets behavior
ordered_cache_behavior {
path_pattern = "/static/*"
allowed_methods = ["GET", "HEAD"]
cached_methods = ["GET", "HEAD"]
target_origin_id = "S3-${aws_s3_bucket.static_assets.id}"
forwarded_values {
query_string = false
cookies {
forward = "none"
}
}
viewer_protocol_policy = "redirect-to-https"
min_ttl = 86400
default_ttl = 604800
max_ttl = 31536000
compress = true
}
restrictions {
geo_restriction {
restriction_type = "none"
}
}
viewer_certificate {
acm_certificate_arn = aws_acm_certificate_validation.cert.certificate_arn
ssl_support_method = "sni-only"
}
}
Network Troubleshooting Guide
Common Network Issues
| Issue | Symptoms | Diagnosis | Resolution |
|---|---|---|---|
| Connectivity Failure | Cannot reach instances | Check Security Groups, NACLs, Route Tables | Update rules, verify routes |
| High Latency | Slow response times | Traceroute, MTR, Flow Logs | Optimize routing, use CDN |
| Packet Loss | Intermittent failures | Ping tests, packet capture | Check bandwidth, QoS settings |
| DNS Resolution | Name resolution fails | nslookup, dig commands | Verify DNS settings, TTLs |
Diagnostic Commands
# Network connectivity test
$ nc -zv hostname 443
Connection to hostname 443 port [tcp/https] succeeded!
# DNS troubleshooting
$ dig +trace example.com
# Path MTU discovery
$ ping -M do -s 1472 hostname
# TCP connection analysis
$ ss -tan | grep ESTABLISHED
# Packet capture for deep analysis
$ tcpdump -i eth0 -w capture.pcap port 443
# AWS VPC Reachability Analyzer
$ aws ec2 create-network-insights-path \
--source i-0123456789abcdef0 \
--destination i-0fedcba9876543210 \
--protocol tcp \
--destination-port 443
Network Architecture Best Practices
Design Guidelines
- Plan IP addressing carefully: Use RFC 1918 private ranges, avoid overlaps
- Implement least privilege: Default deny, explicit allow rules
- Use automation: Infrastructure as Code for consistency
- Monitor everything: Logs, metrics, traces, alerts
- Document thoroughly: Network diagrams, runbooks, contact info
- Test disaster recovery: Regular failover drills
- Keep it simple: Avoid unnecessary complexity
Security Checklist
- ☐ Enable VPC Flow Logs for all VPCs
- ☐ Implement Network ACLs for defense in depth
- ☐ Use Security Groups with least privilege
- ☐ Enable GuardDuty for threat detection
- ☐ Implement WAF for web applications
- ☐ Use PrivateLink for service endpoints
- ☐ Enable DDoS protection (Shield)
- ☐ Encrypt data in transit (TLS 1.2+)
- ☐ Regular security assessments
- ☐ Incident response plan in place