DD-WRT is a powerful open-source firmware replacement for consumer routers, offering advanced networking features including comprehensive IPv6 support. This guide covers everything from prerequisites and version requirements to detailed configuration steps for native IPv6, DHCPv6-PD, tunnel setups, and firewall security.
DD-WRT IPv6 support depends on your router's flash memory and RAM capacity:
Minimum Requirements:
Recommended Routers:
Critical: Not all DD-WRT builds include IPv6 support.
Required DD-WRT Build Types:
Builds that DO NOT support IPv6:
Version Recommendations:
Checking Your Current Build:
Navigate to: Administration > Commands and run:
uname -a
Or check: Status > Router tab to see your current build number and type.
For Native IPv6:
For Tunnel Setup:
Before any IPv6 configuration, you must enable IPv6 support:
Administration > ManagementThis enables the kernel IPv6 stack and loads necessary modules including:
After enabling IPv6, verify the modules are loaded:
Administration > Commandslsmod | grep ipv6
Expected output should include:
ipv6
To verify IPv6 functionality:
ifconfig | grep inet6
You should see link-local addresses (fe80::) on interfaces.
DD-WRT handles IPv6 through several components:
1. WAN IPv6 Configuration
2. LAN IPv6 Configuration
3. DHCPv6 Client (dhcp6c)
4. Router Advertisement Daemon (radvd)
5. DNSmasq
DD-WRT offers two approaches for IPv6:
GUI-Based Configuration (Recommended for most users)
Setup > IPv6Script-Based Configuration (Advanced users)
Administration > CommandsNative IPv6 is the simplest and recommended method when your ISP provides IPv6 connectivity.
Setup > IPv6Option A: Automatic Configuration (Most Common)
Leave all fields at their defaults:
Option B: Manual Static IPv6 DNS
If you prefer specific DNS servers:
2001:4860:4860::8888 (Google)2001:4860:4860::8844 (Google backup)2606:4700:4700::1111 (Cloudflare)Status > RouterExpected Results:
If no IPv6 address appears:
Setup > IPv6DHCPv6-PD is used when your ISP delegates an IPv6 prefix to your router, allowing you to subnet your network.
What is Prefix Delegation?
Prefix Delegation (PD) allows your ISP to assign a block of IPv6 addresses (usually a /56 or /60 prefix) to your router. Your router then assigns addresses from this block to devices on your LAN.
Common Prefix Sizes:
Setup > IPv6Basic Configuration:
Advanced Configuration (if basic doesn't work):
If your ISP requires specific DHCPv6 options, you may need custom dhcp6c configuration:
interface vlan2 {
send ia-pd 0;
send rapid-commit;
request domain-name-servers;
request domain-name;
};
id-assoc pd 0 {
prefix-interface br0 {
sla-id 0;
sla-len 8;
};
};
Important: Replace vlan2 with your actual WAN interface. Check Status > Router to identify your WAN interface (common: vlan2, eth0, ppp0).
Critical Configuration: When using DHCPv6-PD with DNSmasq for router advertisements, disable radvd to prevent conflicts.
Setup > IPv6Services > Servicesenable-ra
dhcp-range=::1,::ffff:ffff:ffff:ffff,constructor:br0,ra-names,slaac,64,12h
Explanation:
enable-ra - Enables DNSmasq's IPv6 Router Advertisement featuredhcp-range - Defines IPv6 address range for SLAACconstructor:br0 - Automatically detects the prefix on br0 (LAN interface)ra-names - Registers SLAAC addresses in DNSslaac - Uses SLAAC for address assignment64 - /64 prefix length for LAN12h - Lease timeIn the same "Additional DNSmasq Options" field, add:
dhcp-option=option6:dns-server,[2001:4860:4860::8888],[2001:4860:4860::8844]
dhcp-option=option6:domain-search,home.local
Replace home.local with your desired local domain name.
Services > ServicesStatus > RouterIf no prefix is delegated:
Navigate to Administration > Commands and run:
cat /var/log/messages | grep dhcp6c
If prefix is delegated but LAN devices don't get IPv6:
ps | grep dnsmasq
killall -s USR1 dnsmasq && cat /var/log/messages | grep dnsmasq
radvdump
If your ISP doesn't provide native IPv6, you can use a 6in4 tunnel through Hurricane Electric's free tunnel broker service.
What is a 6in4 tunnel?
6in4 (also called 6over4 or protocol 41) encapsulates IPv6 packets inside IPv4 packets, allowing IPv6 connectivity over an IPv4-only network. Hurricane Electric (HE.net) provides free tunnel endpoints worldwide.
Advantages:
Disadvantages:
After tunnel creation, you'll see:
Setup > IPv6Example Configuration:
216.66.80.302001:470:1f0a:2::114802001:470:1f0a:3::/642001:470:1f0a::/48Still in Setup > IPv6
Under "LAN IPv6 Configuration":
Click Apply Settings
Click Save
Administration > Commands#!/bin/sh
cat > /tmp/radvd.conf << EOF
interface br0 {
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
AdvHomeAgentFlag off;
AdvManagedFlag off;
AdvOtherConfigFlag on;
prefix 2001:470:1f0a:3::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
};
RDNSS 2001:470:20::2 {
AdvRDNSSLifetime 300;
};
};
EOF
killall radvd
radvd -C /tmp/radvd.conf -m stderr
Important: Replace 2001:470:1f0a:3::/64 with your actual routed /64 prefix from HE.net.
If your ISP provides dynamic IPv4 addresses, configure automatic updates to Hurricane Electric:
Setup > DDNSExample URL format: https://[username]:[updatekey]@ipv4.tunnelbroker.net/nic/update?hostname=[tunnelid]
Administration > Commandsping6 -c 4 2001:470:20::2
Expected: Successful ping responses from HE.net DNS server
ip -6 route show
Expected: Routes via the tunnel interface
Proper LAN configuration ensures your devices receive IPv6 addresses and can access the IPv6 internet.
Router Advertisements (RAs) are ICMPv6 messages that:
DD-WRT offers two options for sending RAs:
Setup > IPv6This creates a basic radvd.conf automatically.
For fine-grained control, create a custom radvd configuration:
Administration > Commands#!/bin/sh
cat > /tmp/radvd.conf << EOF
interface br0 {
# Send router advertisements
AdvSendAdvert on;
# Advertisement intervals
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
# Flags
AdvManagedFlag off; # M flag: Don't use DHCPv6 for addresses
AdvOtherConfigFlag on; # O flag: Use DHCPv6 for other config
# Prefix configuration
prefix ::/64 {
AdvOnLink on; # Prefix is on-link
AdvAutonomous on; # Use SLAAC
AdvRouterAddr on; # Include router address
AdvValidLifetime 86400; # 24 hours
AdvPreferredLifetime 14400; # 4 hours
};
# DNS servers (RDNSS)
RDNSS 2001:4860:4860::8888 2001:4860:4860::8844 {
AdvRDNSSLifetime 300;
};
# DNS search domain
DNSSL home.local {
AdvDNSSLLifetime 300;
};
};
EOF
killall radvd
radvd -C /tmp/radvd.conf -m stderr
Key Configuration Options Explained:
AdvManagedFlag off - Devices use SLAAC, not DHCPv6 for addressesAdvOtherConfigFlag on - Devices can use DHCPv6 for DNS/other configAdvAutonomous on - Allow devices to self-configure addressesAdvValidLifetime 86400 - How long addresses remain validAdvPreferredLifetime 14400 - How long addresses are preferred (privacy extensions rotate after this)DNSmasq integrates router advertisements with DNS and DHCP services, simplifying configuration.
Navigate to: Setup > IPv6
Disable radvd:
Navigate to: Services > Services
Ensure DNSmasq is enabled
In "Additional DNSmasq Options":
# Enable router advertisements
enable-ra
# SLAAC with DNS names
dhcp-range=::1,::ffff:ffff:ffff:ffff,constructor:br0,ra-names,slaac,64,12h
# IPv6 DNS servers
dhcp-option=option6:dns-server,[2001:4860:4860::8888],[2001:4860:4860::8844]
# DNS search domain
dhcp-option=option6:domain-search,home.local
# RA parameters (optional)
ra-param=br0,high,0,7200
DNSmasq Options Explained:
enable-ra - Turn on router advertisement functionalityconstructor:br0 - Auto-detect IPv6 prefix on br0 interfacera-names - Register SLAAC addresses in DNS (enables local DNS resolution)slaac - Use stateless address autoconfiguration64 - Announce /64 prefix12h - Lease/lifetime 12 hoursra-param=br0,high,0,7200 - Set RA priority to high, min interval 0, max 7200sUse radvd when:
Use DNSmasq when:
Do NOT run both simultaneously - they will conflict and cause IPv6 issues.
From a LAN client (Linux/macOS):
# Install radvdump if not present
# Debian/Ubuntu: apt install radvd
# macOS: Available in some package managers
# Capture router advertisements
radvdump
Or using tcpdump:
sudo tcpdump -i eth0 -vvv icmp6 and 'ip6[40] = 134'
Expected output should show:
Unlike IPv4 where NAT provided implicit security through obscurity, IPv6 devices are globally addressable. Proper firewall configuration is critical.
Important Security Warning:
Most DD-WRT builds DO NOT include ip6tables (IPv6 firewall) by default. This means enabling IPv6 can expose your LAN devices directly to the internet without firewall protection.
Verification:
Check if ip6tables is available:
Administration > Commandswhich ip6tables
If no output or "not found", your build lacks IPv6 firewall support.
When you enable IPv6 without ip6tables:
Critical Recommendation: Only enable IPv6 if:
If your build includes ip6tables, implement basic security:
Administration > Commands#!/bin/sh
# Flush existing rules
ip6tables -F
ip6tables -X
# Default policies - drop everything
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT ACCEPT
# Allow loopback
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A FORWARD -i lo -o lo -j ACCEPT
# Allow established and related connections
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow essential [ICMPv6](icmpv6-usage) messages
# Destination Unreachable
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 1 -j ACCEPT
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 1 -j ACCEPT
# Packet Too Big (critical for PMTU Discovery)
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 2 -j ACCEPT
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 2 -j ACCEPT
# Time Exceeded
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 3 -j ACCEPT
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 3 -j ACCEPT
# Parameter Problem
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 4 -j ACCEPT
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 4 -j ACCEPT
# Echo Request/Reply (ping)
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 128 -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 129 -j ACCEPT
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 128 -j ACCEPT
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 129 -j ACCEPT
# [Neighbor Discovery Protocol (NDP)](neighbor-discovery-protocol-ndp) - link-local only
# Router Solicitation
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 133 -s fe80::/10 -j ACCEPT
# Router Advertisement
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 134 -s fe80::/10 -j ACCEPT
# Neighbor Solicitation
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 135 -s fe80::/10 -j ACCEPT
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 135 -j ACCEPT
# Neighbor Advertisement
ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 136 -s fe80::/10 -j ACCEPT
ip6tables -A FORWARD -p ipv6-icmp --icmpv6-type 136 -j ACCEPT
# Allow LAN to WAN
ip6tables -A FORWARD -i br0 -o vlan2 -j ACCEPT
# Allow DHCPv6 (if using DHCPv6)
# ip6tables -A INPUT -p udp --dport 546 -j ACCEPT
# ip6tables -A OUTPUT -p udp --dport 547 -j ACCEPT
# Log dropped packets (optional - can fill logs quickly)
# ip6tables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "IP6T-INPUT-DROP: "
# ip6tables -A FORWARD -m limit --limit 5/min -j LOG --log-prefix "IP6T-FORWARD-DROP: "
Important: Replace vlan2 with your actual WAN interface (check Status > Router).
If ip6tables is not available and you can't ensure client-level firewalls, consider disabling IPv6 FORWARD:
# Allow router itself to use IPv6, but not forward to LAN
echo 0 > /proc/sys/net/ipv6/conf/all/forwarding
This allows the DD-WRT router to use IPv6, but prevents LAN devices from getting IPv6 connectivity.
Proper DNS configuration ensures devices can resolve both IPv4 and IPv6 addresses.
IPv6 DNS uses AAAA records (quad-A) instead of A records. Devices need:
Services > Services# IPv6 DNS servers provided to clients
dhcp-option=option6:dns-server,[2001:4860:4860::8888],[2001:4860:4860::8844]
# IPv4 DNS servers for IPv4 clients
dhcp-option=6,8.8.8.8,8.8.4.4
Popular Public IPv6 DNS Servers:
Google Public DNS:
2001:4860:4860::8888 (primary)2001:4860:4860::8844 (secondary)Cloudflare:
2606:4700:4700::1111 (primary)2606:4700:4700::1001 (secondary)Quad9:
2620:fe::fe (primary)2620:fe::9 (secondary)OpenDNS:
2620:119:35::35 (primary)2620:119:53::53 (secondary)If using radvd, configure DNS via Router Advertisement:
interface br0 {
AdvSendAdvert on;
prefix ::/64 {
AdvOnLink on;
AdvAutonomous on;
};
# Recursive DNS Server option
RDNSS 2001:4860:4860::8888 2001:4860:4860::8844 {
AdvRDNSSLifetime 300;
};
# DNS Search List option
DNSSL home.local {
AdvDNSSLLifetime 300;
};
};
Note: Some older devices (pre-2012) don't support RDNSS and will require DHCPv6 for DNS.
To automatically use your ISP's IPv6 DNS servers:
Setup > IPv6DD-WRT will forward the DNS servers received from your ISP.
Ensure DNSmasq forwards both IPv4 and IPv6 queries:
Services > ServicesFrom a LAN client:
Linux/macOS:
# Check received DNS servers
nmcli device show eth0 | grep DNS
# Or check resolv.conf
cat /etc/resolv.conf
# Test AAAA record resolution
dig AAAA google.com
nslookup -type=AAAA google.com
# Test IPv6 DNS server connectivity
ping6 2001:4860:4860::8888
Windows:
ipconfig /all
nslookup -type=AAAA google.com
Expected results:
After completing configuration, thoroughly test your IPv6 setup to ensure everything works correctly.
Navigate to: Status > Router
Check "WAN" section:
Check "LAN" section:
Administration > Commands# Ping Google's IPv6 DNS
ping6 -c 4 2001:4860:4860::8888
# Ping IPv6-only test site
ping6 -c 4 ipv6.google.com
# Check IPv6 routing table
ip -6 route show
# Verify IPv6 interfaces
ifconfig | grep -A 5 inet6
Expected results:
On a device connected to your LAN:
Linux:
# Show IPv6 addresses
ip -6 addr show
# Show IPv6 routes
ip -6 route show
# Test connectivity
ping6 -c 4 ipv6.google.com
# Test DNS resolution
dig AAAA google.com
macOS:
# Show IPv6 addresses
ifconfig | grep inet6
# Test connectivity
ping6 -c 4 ipv6.google.com
# Test DNS
nslookup -type=AAAA google.com
Windows:
# Show configuration
ipconfig /all
# Test connectivity
ping -6 ipv6.google.com
# Test DNS
nslookup -type=AAAA google.com
Expected Results:
Visit: https://test-ipv6.run
This comprehensive testing tool runs entirely in your browser and checks:
What to expect:
Other Testing Sites:
Test IPv6-only website:
# ipv6.google.com is IPv6-only
curl -6 http://ipv6.google.com/
ping6 ipv6.google.com
Test dual-stack website:
# google.com has both A and AAAA records
curl -6 http://google.com/
curl -4 http://google.com/
Check your public IPv6 address:
Visit in browser:
Test from specific interface:
# Force IPv6
curl -6 https://icanhazip.com/
# Force IPv4
curl -4 https://icanhazip.com/
Success Indicators:
Failure Indicators:
Compare IPv4 vs IPv6 performance:
Acceptable latency:
Symptoms:
Diagnosis:
# On router
ps | grep radvd
ps | grep dnsmasq
# On client (Linux/macOS)
radvdump
# On router
cat /proc/sys/net/ipv6/conf/all/forwarding
Should return 1. If not:
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
Solutions:
Solution A: radvd not running
Setup > IPv6ps | grep radvd
If still not running, manually start:
killall radvd
radvd -C /tmp/radvd.conf -m stderr
Solution B: Incorrect prefix in radvd
ip -6 addr show br0
cat /tmp/radvd.conf
Solution C: Firewall blocking ICMPv6
# Ensure ICMPv6 is not blocked
ip6tables -L | grep icmpv6
If no rules allow ICMPv6 type 134 (Router Advertisement), add:
ip6tables -I INPUT -p ipv6-icmp --icmpv6-type 134 -j ACCEPT
ip6tables -I FORWARD -p ipv6-icmp --icmpv6-type 134 -j ACCEPT
Solution D: Client not requesting IPv6
Some clients disable IPv6 by default. Check:
Windows:
netsh interface ipv6 show interface
Ensure IPv6 is enabled.
Linux:
cat /proc/sys/net/ipv6/conf/eth0/disable_ipv6
Should return 0. If 1:
sudo sysctl -w net.ipv6.conf.eth0.disable_ipv6=0
Symptoms:
Diagnosis:
ps | grep dhcp6c
cat /var/log/messages | grep dhcp6c
Solutions:
Solution A: Wrong WAN interface in configuration
ip link show | grep -E "vlan|eth|ppp"
Common interfaces: vlan2, eth0, ppp0
killall dhcp6c
# dhcp6c will auto-restart
Solution B: ISP requires specific DUID
Some ISPs require specific DHCP Unique Identifier (DUID) format:
Setup > IPv6interface vlan2 {
send ia-pd 0;
send ia-na 0;
send rapid-commit;
request domain-name-servers;
request domain-name;
};
id-assoc pd 0 {
prefix-interface br0 {
sla-id 0;
sla-len 8;
};
};
id-assoc na 0 {
};
Solution C: Request different prefix length
Try requesting different prefix lengths:
Setup > IPv6Solution D: ISP doesn't support prefix delegation
If your ISP only provides a single /64:
Symptoms:
Diagnosis:
# On router
ping -c 4 [HE.net server IPv4]
If this fails, IPv4 connectivity issue.
# Install hping3 if available
hping3 --ipv4 --icmp --data 100 -c 4 [HE.net server IPv4]
ip link show | grep ip6tnl
ifconfig ip6tnl1
Solutions:
Solution A: ISP blocks protocol 41
Unfortunately, if your ISP blocks protocol 41, 6in4 tunnels won't work. Alternatives:
Solution B: Incorrect tunnel endpoints
Verify endpoints match HE.net tunnel page exactly:
Navigate to: Setup > IPv6
Double-check all addresses
Apply settings
Solution C: MTU issues
6in4 tunnels add overhead. If MTU too high, packets fragment:
Setup > IPv6Solution D: Firewall blocking tunnel
# Allow protocol 41
iptables -I INPUT -p 41 -j ACCEPT
iptables -I OUTPUT -p 41 -j ACCEPT
Solution E: Dynamic IP not updating
If you have dynamic IPv4 and it changed:
Symptoms:
Diagnosis:
cat /proc/sys/net/ipv6/conf/all/forwarding
ip6tables -L FORWARD -v
Solutions:
Solution A: IPv6 forwarding disabled
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
# Make permanent
cat >> /tmp/sysctl.conf << EOF
net.ipv6.conf.all.forwarding=1
EOF
sysctl -p /tmp/sysctl.conf
Solution B: ip6tables blocking forward
# Check FORWARD policy
ip6tables -L FORWARD
# If default policy is DROP, add rules:
ip6tables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -I FORWARD -i br0 -o vlan2 -j ACCEPT
Solution C: No route for LAN prefix
# Check routing
ip -6 route show
# Add route if missing (example)
ip -6 route add 2001:db8:1::/64 dev br0
Symptoms:
This is the worst scenario - IPv6 is configured but not functional, causing delays as applications try IPv6 first.
Diagnosis:
ping6 -c 4 2001:4860:4860::8888
If router succeeds but clients fail: routing/forwarding issue If router also fails: upstream connectivity issue
Solutions:
Solution A: ISP IPv6 not actually working
Solution B: Incorrect routing
# Check default IPv6 route
ip -6 route show default
# Should show route via WAN interface/gateway
# If missing, may need to add manually or fix RA/DHCPv6
Solution C: Firewall blocking all traffic
# Temporarily disable ip6tables to test
ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -F
# Test connectivity
# If it works, firewall rules are the issue
# Reconfigure with proper rules
Solution D: MTU/fragmentation issues
# Test with different MTU
ping6 -s 1200 -M do 2001:4860:4860::8888
# If small packets work but large ones fail, MTU issue
# Set lower MTU on WAN interface:
ifconfig vlan2 mtu 1480
Solution E: Disable IPv6 if unfixable
If you cannot resolve broken IPv6:
Setup > IPv6This prevents the "broken IPv6" scenario where clients waste time trying IPv6 before falling back to IPv4.
Symptoms:
dig AAAA google.com returns no results or times outDiagnosis:
# Test IPv6 DNS resolution
dig @2001:4860:4860::8888 AAAA google.com
# Test reaching IPv6 DNS server
ping6 2001:4860:4860::8888
Solutions:
Solution A: DNS server not IPv6-capable
Services > Servicesdhcp-option=option6:dns-server,[2001:4860:4860::8888]
Solution B: DNSmasq not forwarding AAAA queries
Services > ServicesSolution C: Client using wrong DNS
On client, manually set DNS to:
Symptoms:
Understanding Privacy Extensions:
RFC 4941 privacy extensions generate temporary IPv6 addresses that rotate periodically, preventing tracking. While good for privacy, they can cause issues with access control.
Solutions:
Disable privacy extensions on specific devices:
Linux:
# Temporary
sudo sysctl -w net.ipv6.conf.eth0.use_tempaddr=0
# Permanent
echo "net.ipv6.conf.eth0.use_tempaddr=0" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Windows:
netsh interface ipv6 set privacy state=disabled
macOS:
# Not recommended to disable on macOS - use static addressing instead
Use static IPv6 addresses for servers:
Instead of disabling privacy extensions globally, assign static addresses to devices that need them (servers, printers, etc.).
If you have multiple VLANs and want separate IPv6 subnets for each:
Requirement: /56 or shorter prefix from ISP (allows 256 /64 subnets)
Configuration:
# VLAN 1 (br0) - Main LAN
ip -6 addr add 2001:db8:1234:0::1/64 dev br0
# VLAN 2 (br1) - Guest network
ip -6 addr add 2001:db8:1234:1::1/64 dev br1
# VLAN 3 (br2) - IoT devices
ip -6 addr add 2001:db8:1234:2::1/64 dev br2
Configure separate radvd instances or DNSmasq ranges for each VLAN
Configure ip6tables to control inter-VLAN routing
Unlike IPv4 NAT port forwarding, IPv6 "port forwarding" is actually firewall rule management since devices have global addresses.
Example: Allow SSH to specific device
# Allow SSH to specific IPv6 address
ip6tables -A FORWARD -d 2001:db8:1234:0::100 -p tcp --dport 22 -j ACCEPT
Example: Allow web server
# Allow HTTP and HTTPS to web server
ip6tables -A FORWARD -d 2001:db8:1234:0::200 -p tcp --dport 80 -j ACCEPT
ip6tables -A FORWARD -d 2001:db8:1234:0::200 -p tcp --dport 443 -j ACCEPT
View active IPv6 connections:
# Show IPv6 connection tracking
cat /proc/net/nf_conntrack | grep ipv6
# Or if available
conntrack -L -f ipv6
Monitor IPv6 traffic in real-time:
# Install if available
tcpdump -i br0 -n ip6
Check IPv6 traffic statistics:
# Show IPv6 interface statistics
ip -6 -s link show
1. Adjust MTU for tunnels:
# For 6in4 tunnels, optimal MTU is usually 1472-1480
ifconfig ip6tnl1 mtu 1472
2. Enable TCP window scaling:
# Should be enabled by default, verify:
cat /proc/sys/net/ipv4/tcp_window_scaling
3. Adjust neighbor cache:
# Increase neighbor cache size for busy networks
sysctl -w net.ipv6.neigh.default.gc_thresh1=1024
sysctl -w net.ipv6.neigh.default.gc_thresh2=2048
sysctl -w net.ipv6.neigh.default.gc_thresh3=4096
Enable comprehensive logging:
Administration > Commands#!/bin/sh
# Enable kernel IPv6 debugging (verbose)
echo 7 > /proc/sys/net/ipv6/conf/all/log_martians
# Log dropped IPv6 packets
ip6tables -I INPUT -j LOG --log-prefix "IP6T-INPUT: " --log-level 7
ip6tables -I FORWARD -j LOG --log-prefix "IP6T-FORWARD: " --log-level 7
# Enable DNSmasq logging
killall dnsmasq
dnsmasq --log-queries --log-dhcp
View logs:
# System log
logread | grep -i ipv6
# Or
cat /var/log/messages | grep -i ipv6
# DNSmasq specific
cat /var/log/messages | grep dnsmasq
Enable IPv6 firewall if available
Ensure client-level firewalls
Don't disable ICMPv6 completely
Use secure DNS
Keep firmware updated
Monitor for rogue RAs
Document your configuration
Choose nearby tunnel endpoints
Use native IPv6 when available
Optimize MTU settings
Enable rapid commit
Use DNSmasq instead of separate services
Save all configurations
Test before saving
Use startup scripts for critical configs
Monitor prefix delegation
Implement graceful degradation
Regular testing
Monitor logs periodically
Review firewall rules
Update DNS records
Plan for prefix changes
Isolate the problem layer
Use systematic approach
Check basics first
Use packet captures when stuck
Know when to disable IPv6
After completing your DD-WRT IPv6 setup, comprehensive testing is essential.
Test router connectivity
ping6 2001:4860:4860::8888Test LAN client addressing
Test end-to-end connectivity
ping6 ipv6.google.comTest DNS resolution
dig AAAA google.comComprehensive online test
Performance comparison
Perfect Configuration:
Acceptable Configuration:
Problem Configuration:
Configuring IPv6 on DD-WRT provides your network with future-proof addressing, improved performance, and access to IPv6-only resources. While DD-WRT's IPv6 support is powerful, it requires careful configuration due to limitations in some builds (particularly lack of ip6tables).
Key Takeaways:
Next Steps:
Additional Resources:
With proper configuration and ongoing maintenance, DD-WRT can provide robust IPv6 connectivity for your home or small business network, ensuring you're ready for the modern internet.