Pick a color scheme
ad placeholder image ad placeholder image

Dual-Stack Networking: Running IPv4 and IPv6 Together

Dual-stack networking is the most common approach for transitioning from IPv4 to IPv6, allowing networks to run both protocols simultaneously. Understanding dual-stack implementation is essential for modern network design and IPv6 deployment. This comprehensive guide explains everything you need to know about dual-stack networking.

What is Dual-Stack?

Dual-stack is a network configuration where devices and infrastructure support both IPv4 and IPv6 simultaneously as defined in RFC 4213. This allows seamless communication using either protocol, enabling gradual IPv6 adoption while maintaining IPv4 compatibility.

Basic Concept

Single-stack (IPv4 only):

Device has: IPv4 address only
Can communicate: IPv4 only
Internet access: IPv4 only

Single-stack (IPv6 only):

Device has: IPv6 address only
Can communicate: IPv6 only
Internet access: IPv6 only (with translation for IPv4)

Dual-stack:

Device has: Both IPv4 and IPv6 addresses
Can communicate: IPv4 and IPv6
Internet access: Both protocols
Prefers: IPv6 when available

How It Works

Network layer:

┌─────────────────────────────┐
│     Application Layer       │
├─────────────────────────────┤
│    Transport Layer (TCP/UDP)│
├──────────────┬──────────────┤
│  IPv4 Stack  │  IPv6 Stack  │ ← Dual-stack
├──────────────┴──────────────┤
│      Data Link Layer        │
└─────────────────────────────┘

Address assignment:

Interface eth0:
  IPv4: 192.168.1.100/24
  IPv6: 2001:db8::1/64
  IPv6 link-local: fe80::a00:27ff:fe4e:66a1/64

Benefits of Dual-Stack

Seamless Transition

No service disruption: - IPv4 continues working - IPv6 added gradually - Users unaffected - Smooth migration path

Backward compatibility: - Legacy devices work - Old applications function - No forced upgrades - Flexible timeline

Maximum Compatibility

Reach all users:

IPv4-only users: ✓ (via IPv4)
IPv6-only users: ✓ (via IPv6)
Dual-stack users: ✓ (via both)

Support all services: - Legacy IPv4 services - Modern IPv6 services - Hybrid environments - Future-proof

Optimal Performance

Protocol selection:

Destination has IPv6: Use IPv6
Destination IPv4 only: Use IPv4
Both available: Prefer IPv6
Automatic selection

Happy Eyeballs (RFC 8305):

Try IPv6 first
If slow/fails: Try IPv4
Use fastest connection
Better user experience

Dual-Stack Configuration

Network Infrastructure

Router configuration:

Cisco IOS:

interface GigabitEthernet0/0
 ip address 192.168.1.1 255.255.255.0
 ipv6 address 2001:db8:1::1/64
 ipv6 enable
 no shutdown

Linux router:

# /etc/network/interfaces
auto eth0
iface eth0 inet static
    address 192.168.1.1
    netmask 255.255.255.0

iface eth0 inet6 static
    address 2001:db8:1::1
    netmask 64

Enable IPv6 forwarding:

# Linux
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

# Permanent
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
sysctl -p

Client Configuration

Windows (automatic):

IPv4: DHCP or static
IPv6: SLAAC (automatic) or DHCPv6

Check configuration:
ipconfig /all

IPv4 Address: 192.168.1.100
IPv6 Address: 2001:db8:1::a00:27ff:fe4e:66a1

Linux (automatic):

# /etc/network/interfaces
auto eth0
iface eth0 inet dhcp
iface eth0 inet6 auto

# Check
ip addr show eth0

macOS (automatic):

IPv4: DHCP (default)
IPv6: SLAAC (automatic)

Check: System Preferences → Network
Or: ifconfig en0

Manual configuration:

Windows:

Network Adapter Properties:
IPv4: 192.168.1.100, mask 255.255.255.0, gateway 192.168.1.1
IPv6: 2001:db8:1::100/64, gateway 2001:db8:1::1

Linux:

# /etc/network/interfaces
auto eth0
iface eth0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1

iface eth0 inet6 static
    address 2001:db8:1::100
    netmask 64
    gateway 2001:db8:1::1

DNS Configuration

Dual-stack DNS:

DNS server has both:
A record (IPv4): example.com → 192.0.2.1
AAAA record (IPv6): example.com → 2001:db8::1

Client queries both
Prefers IPv6 if available
Falls back to IPv4

DNS server configuration:

BIND:

example.com.  IN  A     192.0.2.1
example.com.  IN  AAAA  2001:db8::1

Client DNS settings:

IPv4 DNS: 8.8.8.8, 8.8.4.4
IPv6 DNS: 2001:4860:4860::8888, 2001:4860:4860::8844

Or use same server for both

Protocol Selection

Happy Eyeballs (RFC 8305)

Algorithm:

1. Start IPv6 connection attempt
2. Wait 50-250ms
3. Start IPv4 connection attempt
4. Use whichever connects first
5. Cancel slower connection

Benefits: - Faster connections - Automatic fallback - Better user experience - Transparent operation

Implementation:

Modern browsers: Built-in
Operating systems: Native support
Applications: Library support
Automatic for users

Preference Order

Default behavior:

1. Try IPv6 first (if available)
2. Fall back to IPv4
3. Use fastest/working protocol

Why prefer IPv6: - Better performance (no NAT) - Future-proof - Encourage adoption - End-to-end connectivity

Override preference:

Windows:

# Prefer IPv4
netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 35 4

# Reset to default
netsh interface ipv6 reset

Linux:

# /etc/gai.conf
# Uncomment to prefer IPv4
#precedence ::ffff:0:0/96  100

Routing in Dual-Stack

Separate Routing Tables

IPv4 routing:

Destination     Gateway         Interface
0.0.0.0/0       192.168.1.1     eth0
192.168.1.0/24  0.0.0.0         eth0

IPv6 routing:

Destination     Gateway         Interface
::/0            2001:db8:1::1   eth0
2001:db8:1::/64 ::              eth0
fe80::/10       ::              eth0

View routes:

Windows:

route print
netsh interface ipv6 show route

Linux:

ip route show
ip -6 route show

Default Gateways

Both protocols need gateways:

IPv4 gateway: 192.168.1.1
IPv6 gateway: 2001:db8:1::1
(Can be same physical router)

Router advertisements:

IPv4: DHCP provides gateway
IPv6: Router Advertisement (RA) provides gateway
Both automatic

Firewall Configuration

Dual-Stack Firewall Rules

Need rules for both protocols:

iptables (IPv4):

# Allow established connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Allow HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

ip6tables (IPv6):

# Allow established connections
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow SSH
ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT

# Allow HTTP/HTTPS
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT

# Allow ICMPv6 (important!)
ip6tables -A INPUT -p ipv6-icmp -j ACCEPT

Important: Don't forget ICMPv6 for IPv6!

Application-Level Firewalls

Configure for both:

Allow port 80 on IPv4
Allow port 80 on IPv6
Same rules, both protocols

Example (UFW):

ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
# Automatically applies to both IPv4 and IPv6

Server Configuration

Web Servers

Apache:

# Listen on both IPv4 and IPv6
Listen 80
Listen [::]:80

<VirtualHost *:80 [::]:80>
    ServerName example.com
    DocumentRoot /var/www/html
</VirtualHost>

Nginx:

server {
    listen 80;
    listen [::]:80;

    server_name example.com;
    root /var/www/html;
}

Binding specifics:

0.0.0.0 - All IPv4 addresses
:: - All IPv6 addresses
[::]:80 - IPv6 on port 80

Database Servers

PostgreSQL:

# postgresql.conf
listen_addresses = '*'  # Both IPv4 and IPv6
# Or specific:
listen_addresses = '0.0.0.0,::'

MySQL:

# my.cnf
bind-address = ::
# Binds to both IPv4 and IPv6

MongoDB:

# mongod.conf
net:
  bindIp: 0.0.0.0,::
  ipv6: true

SSH Server

sshd_config:

# Listen on both
ListenAddress 0.0.0.0
ListenAddress ::

# Or let it default (listens on both)
#ListenAddress 0.0.0.0

Connect via SSH:

# IPv4
ssh user@192.0.2.1

# IPv6
ssh user@2001:db8::1
ssh -6 user@example.com

Monitoring and Troubleshooting

Verify Dual-Stack Operation

Check addresses:

Windows:

ipconfig /all
# Should show both IPv4 and IPv6 addresses

Linux:

ip addr show
# Look for both inet and inet6

macOS:

ifconfig
# Check for both inet and inet6

Test Connectivity

IPv4 connectivity:

ping 8.8.8.8
ping google.com

IPv6 connectivity:

ping6 2001:4860:4860::8888
ping6 google.com
# Or
ping -6 google.com

Test websites:

http://test-ipv6.com
http://ipv6-test.com
Should show both IPv4 and IPv6 working

DNS Resolution

Check DNS records:

Windows:

nslookup google.com
# Should show both A and AAAA records

Linux:

dig google.com A
dig google.com AAAA

# Or
host google.com

Protocol Usage

Check which protocol is used:

Linux:

# Show active connections
ss -tunap
netstat -tunap

# IPv4 connections
ss -4

# IPv6 connections
ss -6

Windows:

netstat -an
# Look at addresses to determine protocol

Common Issues

Issue 1: IPv6 not working

Check:
1. IPv6 enabled on interface?
2. Router advertising IPv6?
3. Firewall blocking IPv6?
4. ISP providing IPv6?

Issue 2: Slow connections

Possible cause: IPv6 timeout, then IPv4
Solution: Fix IPv6 or disable if not available
Check: Happy Eyeballs working?

Issue 3: Some sites unreachable

Possible cause: IPv6 misconfiguration
Test: Disable IPv6 temporarily
Solution: Fix IPv6 configuration or routing

Best Practices

Deployment

1. Plan carefully

Assess current infrastructure
Identify IPv6-ready equipment
Plan address allocation
Create timeline

2. Deploy incrementally

Start with infrastructure
Add servers
Enable clients
Monitor and adjust

3. Test thoroughly

Lab environment first
Pilot deployment
Monitor performance
Gather feedback

Operations

1. Monitor both protocols

Track IPv4 and IPv6 traffic
Monitor performance
Watch for issues
Analyze trends

2. Maintain parity

Same firewall rules
Same monitoring
Same security
Same performance

3. Document everything

Address allocations
Configuration changes
Troubleshooting steps
Lessons learned

Security

1. Secure both protocols

Firewall rules for both
Monitor both for attacks
Patch both stacks
Test both for vulnerabilities

2. Don't forget IPv6

Easy to overlook
Often less monitored
Can be attack vector
Requires equal attention

3. Use consistent policies

Same security level
Same access controls
Same logging
Same incident response

Transition Strategies

Gradual Migration

Phase 1: Infrastructure

Enable IPv6 on routers
Configure dual-stack
Test connectivity
Verify routing

Phase 2: Servers

Add AAAA records
Configure applications
Test functionality
Monitor performance

Phase 3: Clients

Enable IPv6
Auto-configuration
User testing
Support readiness

Phase 4: Optimization

Monitor IPv6 usage
Optimize performance
Adjust as needed
Plan IPv4 reduction

Metrics to Track

Adoption:

% of traffic over IPv6
% of users with IPv6
% of services on IPv6
Growth over time

Performance:

IPv4 vs IPv6 latency
Connection success rates
Happy Eyeballs effectiveness
User experience metrics

Issues:

IPv6-specific problems
Dual-stack conflicts
Configuration errors
Support tickets

Future Considerations

IPv6-Only Networks

Trend:

Mobile networks going IPv6-only
Using NAT64/DNS64 for IPv4
Simpler infrastructure
Lower costs

Preparation:

Ensure IPv6 works well
Test NAT64 compatibility
Plan transition
Monitor industry trends

IPv4 Sunset

Long-term:

IPv6 becomes primary
IPv4 legacy support
Eventually IPv4 phased out
Dual-stack intermediate step

Conclusion

Dual-stack networking is the most practical approach for IPv6 deployment, allowing organizations to run both IPv4 and IPv6 simultaneously while transitioning to an IPv6-dominant future. This approach provides maximum compatibility, minimal disruption, and a clear migration path.


Related Articles

IPv6 Transition

IPv6 Fundamentals

Network Configuration

Explore More

Key takeaways: - Run IPv4 and IPv6 simultaneously - Devices have both address types - Prefer IPv6, fall back to IPv4 - Happy Eyeballs for optimal performance - Requires configuration for both protocols - Firewall rules needed for both - Monitor and secure both equally - Gradual migration path - Future-proof while maintaining compatibility - Industry standard for IPv6 transition

Whether you're deploying IPv6 in a home network, enterprise, or ISP environment, dual-stack provides the flexibility and compatibility needed for a successful transition to the IPv6-enabled internet of the future.

ad placeholder image ad placeholder image
Three funny piglies - an illustration ippigly.com