One big problem I see from your "ip addr" post is that you only have a link local IP address on your WAN interface (as you have noted).
Here is what I see on my WNR1000v2:
BusyBox v1.4.2 (2012-04-17 12:26:16 EDT) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
KAMIKAZE (7.09) -----------------------------------
* 10 oz Vodka Shake well with ice and strain
* 10 oz Triple sec mixture into 10 shot glasses.
* 10 oz lime juice Salute!
---------------------------------------------------
root@WNR1000v2:/# ip addr
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
3: br0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
link/ether a0:21:b7:9c:06:02 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.1/24 brd 192.168.10.255 scope global br0
inet6 2601:5:c80:4a:a221:b7ff:fe9c:602/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::a221:b7ff:fe9c:602/64 scope link
valid_lft forever preferred_lft forever
4: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether a0:21:b7:9c:06:03 brd ff:ff:ff:ff:ff:ff
inet 67.177.173.18/22 brd 255.255.255.255 scope global eth0
inet6 2001:558:6016:19:3d2f:1c35:f21d:4e28/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::a221:b7ff:fe9c:603/64 scope link
valid_lft forever preferred_lft forever
5: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether a0:21:b7:9c:06:02 brd ff:ff:ff:ff:ff:ff
6: wifi0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether a0:21:b7:9c:06:02 brd ff:ff:ff:ff:ff:ff
inet6 fe80::a221:b7ff:fe9c:602/64 scope link
valid_lft forever preferred_lft forever
7: ath0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether a0:21:b7:9c:06:02 brd ff:ff:ff:ff:ff:ff
inet6 fe80::a221:b7ff:fe9c:602/64 scope link
valid_lft forever preferred_lft forever
Notice the "2001:558" prefix IPv6 address on the WAN (eth0 for me) interface?
When you tested a standalone PC connected directly to your cable modem, are you sure that you were not seeing a 6to4 tunnel IPv6 connection instead of a native dual stack connection? A 6to4 tunnel would start with a "2002" prefix.
The OpenWRT version that Comcast/Netgear uses on my WNR1000v2 is different than what you are using, so I don't have the same config files (and it appears that Comcast/Netgear is hiding some things even though I have a "root" login). However, here are the .conf files and the dhcp6c-script file that I can see from my telnet interface to that router just in case that information might help you:
root@WNR1000v2:/# cat /var/dhcp6c.conf
interface eth0 {
send ia-na 1;
send ia-pd 11;
request domain-name;
request domain-name-servers;
request ntp-servers;
request sip-server-domain-name;
request sip-server-address;
script "/etc/net6conf/dhcp6c-script";
};
id-assoc na 1 {
};
id-assoc pd 11 {
};
root@WNR1000v2:/# cat /var/radvd.conf
interface br0 {
AdvSendAdvert on;
AdvCurHopLimit 64;
MinRtrAdvInterval 198;
MaxRtrAdvInterval 600;
AdvDefaultLifetime 1800;
AdvReachableTime 0;
AdvRetransTimer 0;
AdvDefaultPreference low;
AdvHomeAgentFlag off;
AdvOtherConfigFlag on;
AdvManagedFlag off;
prefix 2601:5:c80:4a::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvValidLifetime 345370;
AdvPreferredLifetime 345370;
};
RDNSS fe80::a221:b7ff:fe9c:602 {
AdvRDNSSPreference 8;
AdvRDNSSLifetime 1200;
};
};
root@WNR1000v2:/# cat /var/dhcp6s.conf
option domain-name-servers 2001:558:feed::1;
option domain-name-servers 2001:558:feed::2;
option domain-name-servers 2001:558:feed::1 2001:558:feed::2 ;
interface br0 {
allow rapid-commit;
address-pool pool_netgear 345370 345370;
};
pool pool_netgear {
range 2601:5:c80:4a::2 to 2601:5:c80:4a::40;
};
root@WNR1000v2:/# cat /etc/net6conf/dhcp6c-script
#!/bin/sh
. /etc/net6conf/6data.conf
#Fix Bug 23366[IPv6-Auto Config] DUT should disable prefix option in Router Advertisement
#message when the prefix valid lifetime is expired.
prefix_timeout() {
# Remove the LAN side IPv6 address, which has been expired
# timeout_prefix would be like: 5600 2800 2000:458:ff01:3800:: 56
prefix_addr=`echo $timeout_prefix |cut -f3 -d' ' |sed s/:://`
lan6_ip=`ifconfig $bridge |grep "inet6 addr: $prefix" |grep -v "Link" |awk '{print $3}'`
echo "Try to delete $lan6_ip from $bridge" > /dev/console
[ "x$lan6_ip" != "x" ] && $IP -6 addr del $lan6_ip dev $bridge
#when prefix is timeout, remove old prefix info files
rm /tmp/dhcp6c_script_envs
rm $DHCP6C_PD
rm $DHCP6S_PD
#reload the LAN side IPv6 related services:
#rewrite config file: radvd_write_config, dhcp6s_write_config.
echo "reload 6service" > /dev/console
/etc/net6conf/6service reload
}
#To do prefix timeout envents.
if [ "x$REASON" = "xprefix_timeout" ] ;then
lan_prefix_info=`cat $DHCP6S_PD`
#value $timeout_prefix is got from wide-dhcpv6
[ "$timeout_prefix" != "$lan_prefix_info" ] && exit
prefix_timeout
exit
fi
#fix the bug 27061[ST/Netgear-67-71--IPv6 DHCP] There is IPv6 address On LAN port in GUI When DUT send a Decline messag.
if [ "x$REASON" = "xdecline" ] ;then
lan6_ip=`ifconfig $bridge |grep "inet6 addr" |grep -v "Link" |awk '{print $3}'`
echo "Try to delete $lan6_ip from $bridge" > /dev/console
[ "x$lan6_ip" != "x" ] && $IP -6 addr del $lan6_ip dev $bridge
#when duplicate address detected, remove old prefix info files
rm /tmp/dhcp6c_script_envs
rm $DHCP6S_PD
#After DUT sending decline packet, stop the DHCPv6 server and autoconfigure address service(radvd)
killall dhcp6s
killall radvd
exit
fi
del_dns6() {
sed '/.:./d' /tmp/resolv.conf > /tmp/resolv.conf$$
mv /tmp/resolv.conf$$ /tmp/resolv.conf
echo -n "" > $IPV6_DNS
}
#the function about deleting rhe repeating dns info.
write_ra_dns(){
for xr in `awk '{print $2}' $1 `
do
flagadd="1"
for xw in `awk '{print $2}' $2 `
do
if [ "1$xr" == "1$xw" ] ; then
flagadd="0"
continue
fi
done
if [ "$flagadd" == "1" ] ; then
echo "nameserver $xr " >> $2;
fi
done
}
#write ra_dns to resolv.conf
write_ra_tmp_dns(){
sed '/.:./d' /tmp/resolv.conf > /tmp/resolv.conf$$
mv /tmp/resolv.conf$$ /tmp/resolv.conf
echo -n "" > $RA_DNS_FILE
for loop in $new_ra_dns_servers
do
echo "nameserver $loop" >> $RA_DNS_FILE
done
write_ra_dns $IPV6_DNS /tmp/resolv.conf
write_ra_dns $RA_DNS_FILE /tmp/resolv.conf
}
#when received ra packet with RDNSS option
local conn_type=`$CONFIG get ipv6_type`
if [ "x$REASON" = "xra_dns" -a "x$conn_type" = "xautoConfig" ] ; then
echo "write ra_dns..." > /dev/console
write_ra_tmp_dns
fi
lease_changed()
{
local envs_p_file="/tmp/dhcp6c_script_envs"
[ -f "$envs_p_file" ] && . $envs_p_file
[ -z "$new_domain_name" ] && new_domain_name="$new_domain_name_p"
[ -z "$new_sip_name" ] && new_sip_name="$new_sip_name_p"
[ -z "$new_domain_name_servers" ] && new_domain_name_servers="$new_domain_name_servers_p"
[ -z "$new_ntp_servers" ] && new_ntp_servers="$new_ntp_servers_p"
[ -z "$new_sip_servers" ] && new_sip_servers="$new_sip_servers_p"
cat > $envs_p_file << EOF
new_domain_name_p="$new_domain_name"
new_sip_name_p="$new_sip_name"
new_domain_name_servers_p="$new_domain_name_servers"
new_ntp_servers_p="$new_ntp_servers"
new_sip_servers_p="$new_sip_servers"
EOF
[ "$new_domain_name" != "$new_domain_name_p" ] && return 0
[ "$new_sip_name" != "$new_sip_name_p" ] && return 0
[ "$new_domain_name_servers" != "$new_domain_name_servers_p" ] && return 0
[ "$new_ntp_servers" != "$new_ntp_servers_p" ] && return 0
[ "$new_sip_servers" != "$new_sip_servers_p" ] && return 0
if [ "x$REASON" = "xNBI" ] ;then
[ -f "$DHCP6C_PD" ] && . $DHCP6C_PD
[ -z "$new_prefix" ] && new_prefix="$prefix_p"
cat > $DHCP6C_PD << EOF
prefix_p="$new_prefix"
EOF
[ "$new_prefix" != "$prefix_p" ] && return 0
fi
return 1
}
# if dhcp6c lease is not changed, don't need to do anything.
lease_changed || exit 0
#if the prefix changed, we delete all the ip of the bridge
if [ "$new_prefix" != "$prefix_p" ];then
pre_ip=`ifconfig $bridge |grep "inet6 addr" |grep -v "Link" |awk '{print $3}'`
for loop in $pre_ip
do
$IP -6 addr del $loop dev $bridge
done
fi
echo "dhcp6c lease changed !" > /dev/console
# wirte the dhcp6s_pd and dhcp6s_dsn file
if [ "x$new_prefix" != "x" ]; then
echo $new_prefix > $DHCP6S_PD
echo "DHCP" > /tmp/ipv6_auto_output
fi
# for avoid adding more line
echo " " > $DHCP6S_DSN
for loop in $new_domain_name
do
echo "option domain-name \"$loop\";" >> $DHCP6S_DSN
done
for loop in $new_sip_name
do
echo "option sip-server-domain-name \"$loop\";" >> $DHCP6S_DSN
done
# According to NTGR Router Spec:
# The domain-name-servers should be DUT's IPv6 LAN interface's link local address.
# The link local address could be added in net6conf/6service script, so comment below code.
# if [ "x$new_domain_name_servers" != "x" ]; then
# echo "option domain-name-servers $new_domain_name_servers;" >> $DHCP6S_DSN
# fi
# Comcast requires us to fill domain-name-servers with Comcast provisioning Server.
if [ "x$new_domain_name_servers" != "x" ]; then
echo "option domain-name-servers $new_domain_name_servers;" >> $DHCP6S_DSN
fi
del_dns6
for loop in $new_domain_name_servers
do
echo "nameserver $loop" >> $IPV6_DNS
done
if [ "x$conn_type" = "xautoConfig" ] ; then
write_ra_dns $RA_DNS_FILE /tmp/resolv.conf
fi
write_ra_dns $IPV6_DNS /tmp/resolv.conf
if [ "x$new_ntp_servers" != "x" ]; then
echo "option ntp-servers $new_ntp_servers;" >> $DHCP6S_DSN
fi
if [ "x$new_sip_servers" != "x" ]; then
echo "option sip-server-address $new_sip_servers;" >> $DHCP6S_DSN
fi
if [ -s $DHCP6S_PD ] && [ -s $DHCP6S_CONF ]; then
if ! grep "address-pool " >&- 2>&- $DHCP6S_CONF; then
echo "Got the prefix, reload the config file" > /dev/console
echo "The prefix for LAN is $new_prefix" > /dev/console
srv_reload="1"
fi
fi
if ps | grep dhcp6s | grep -v grep >&- 2>&- ; then
echo "dhcpv6 server is running, reload dhcp6s config file !"
/etc/net6conf/6service reload
fi
--
We can never have enough of nature.
We need to witness our own limits transgressed, and some life pasturing freely where we never wander.