IPv6

Cisco has long supported IPv6, but it's unfortunately somewhat of a here and there affair. Tonight's goal involved getting the wireless and IPv6 for clients going on the 877W sitting in our rack; not as straight forward as one might hope. We've had IPv6 (via Hurricane Electric) for a while, but it's been limited to the wired network. IPv6 for otoh.org and gometric.us will come in the next week or two.

All this was made just a little bit more difficult as every time I did anything to the wireless, my Mac stopped talking to it. The Solaris based T61 was fine (re-authenticates even after changes and didn't lose the connection at all), but MacOS just seems to hate it when things change underneath it. In all fairness, it's just as much the fault of the 877W as I had to reboot it to get the two to talk again.

The first thing I bumped into was getting the VLANs and the wireless to play together. If you're trying to do this, you need to link them via a bridge interface. No hard, but not expected (thus a call to Cisco TAC to work out WTF). Particularly not expected as none of the examples I'd come across mentioned it (they all just assigned the VLAN to Dot11Radio0 and off they went).

  • create a bridge
  • create a sub interface on Dot11Radio0
  • assign the bridge to the sub interface
  • assign the bridge to the VLAN
Then you're good to go. Or not. Well, associates fine, but no DHCP.

All the IP information has to be assigned to the BVI to actually work. So, a bit more fiddling and then hooray, we have a link and we can get IPv4 addresses over it.

Let go the TAC guy and set about working out how to add IPv6 to this (he's got better things to do and I won't learn unless I at least try first).

First thing to try, add it to the BVI. Hmm.... doesn't work.

What happens if I add it to the VLAN. Nope, that doesn't work either.

Now add it to the sub interface. Nope

How about the main interface. Yes.

Then a bit of fiddling to see if I can clean up some of the allocated addresses. No. Looks like it doesn't want to play unless everything that's attached to the bridge has IPv6 on it. Oh well, lucky there's lots of IP space to make use of. The address the clients get is from the Dot11Radio0 sub interface though.

Add a few ACLs (via ipv6 inspect and ipv6 access-list/traffic-filter) and we're good to go.

psas-macbook-pro:~ psa$ traceroute6 ipv6.google.com
traceroute6 to ipv6.l.google.com (2001:4860:b002::68), 30 hops max, 12 byte packets
.1  2001:470::1  1.754 ms  1.005 ms  0.951 ms
 2  hurdboy.tunnel.tserv2.fmt.ipv6.he.net  23.486 ms  23.25 ms  24.015 ms
 3  1g-3-9.core1.fmt1.ipv6.he.net  21.41 ms  30.676 ms  29.087 ms
 4  10gigabitethernet1-2.core1.sjc2.he.net  24.006 ms  22.048 ms  24.402 ms
 5  eqixsjc-v6.google.com  23.339 ms  22.513 ms  22.583 ms
 6  * * *
 7  2001:4860:b002::68  101.545 ms  101.264 ms *

For others, here's my minimally stripped configuration (no, you don't get to peek at my access lists):

Current configuration : 11738 bytes
!
version 12.4
no service pad
service tcp-keepalives-in
service tcp-keepalives-out
service timestamps debug datetime msec localtime show-timezone
service timestamps log datetime msec localtime show-timezone
service password-encryption
service sequence-numbers
!
hostname ROUTER_NAME
!
boot-start-marker
boot system flash c870-advipservicesk9-mz.124-22.T.bin
boot-end-marker
!
logging message-counter syslog
logging buffered 51200
logging console critical
!
aaa new-model
!
!
aaa group server radius rad_eap
!
aaa group server radius rad_mac
!
aaa group server radius rad_acct
!
aaa group server radius rad_admin
!
aaa group server tacacs+ tac_admin
!
aaa group server radius rad_pmip
!
aaa group server radius dummy
!
aaa authentication login eap_methods group rad_eap
aaa authentication login mac_methods local
aaa authorization ipmobile default group rad_pmip 
aaa accounting network acct_methods
 action-type start-stop
 group rad_acct
!
!
!
aaa session-id common
!
crypto pki trustpoint TP-self-signed-3426617278
 enrollment selfsigned
 subject-name cn=IOS-Self-Signed-Certificate-3426617278
 revocation-check none
 rsakeypair TP-self-signed-3426617278
!         
!         
crypto pki certificate chain TP-self-signed-3426617278
 certificate self-signed 01
  LONG STRING 
  	quit
dot11 syslog
!
dot11 ssid No network selected
 vlan 16
 authentication open 
 authentication key-management wpa
 guest-mode
 wpa-psk ascii 7 MY_PRIVATE_PSK
!
dot11 ssid OTOH
 vlan 64
 authentication open 
 authentication key-management wpa
 wpa-psk ascii 7 MY_GUEST_PSK
!
no ip source-route
!
!
no ip dhcp use vrf connected
!
ip dhcp pool otoh
   network VLAN_32_IP 255.255.255.0
   bootfile nbp.SUNW.i86pc
   next-server BOOT_SERVER
   default-router VLAN_32_IP
   dns-server 64.81.79.2 216.231.41.2 
   domain-name otoh.org
!
ip dhcp pool wireless
   network VLAN_64_IP 255.255.255.0
   dns-server 64.81.79.2 216.231.41.2 
   domain-name otoh.org
   default-router VLAN_64_ROUTER
!
ip dhcp pool ip5200r
   host IP5200_ADDR 255.255.255.0
   hardware-address 0000.855e.8241
   client-name ip5200r
!
ip dhcp pool vlan16
   network VLAN_16 255.255.255.0
   dns-server 64.81.79.2 216.231.41.2 
   domain-name otoh.org
   default-router VLAN_16_ROUTER 
!
!
ip cef
no ip bootp server
ip domain name otoh.org
ip name-server 64.81.79.2
ip name-server 216.231.41.2
ip ips notify SDEE
ip inspect name external-out dns
ip inspect name external-out tcp
ip inspect name external-out udp
ip inspect name external-out ntp
ip inspect name external-out imaps
ip inspect name external-out pptp
ip inspect name external-out isakmp
ip inspect name external-out ssh
ip inspect name external-out snmp
ip inspect name external-out icmp
ipv6 unicast-routing
ipv6 cef
ipv6 inspect name ipv6-inspect icmp
ipv6 inspect name ipv6-inspect ftp
ipv6 inspect name ipv6-inspect tcp
ipv6 inspect name ipv6-inspect udp
ipv6 dhcp pool otoh.org
 domain-name otoh.org
!
!
multilink bundle-name authenticated
!
!
!
!
no spanning-tree vlan 4
no spanning-tree vlan 8
no spanning-tree vlan 16
no spanning-tree vlan 64
!
!
archive   
 log config
  hidekeys
!
!
ip tcp synwait-time 10
ip ssh version 2
!
bridge irb
!
!
interface Tunnel0
 description Hurricane Electric IPv6 Tunnel
 no ip address
 ipv6 address TUNNEL_ROUTE/64
 ipv6 enable
 ipv6 traffic-filter ipv6-tunnel0-in in
 ipv6 inspect ipv6-inspect out
 tunnel source EXTERNAL_IP
 tunnel destination HE_ROUTER
 tunnel mode ipv6ip
!
interface Null0
 no ip unreachables
!
interface ATM0
 no ip address
 ip verify unicast reverse-path
 no ip redirects
 no ip unreachables
 no ip proxy-arp
 ip flow ingress
 ip virtual-reassembly
 no ip mroute-cache
 snmp trap ip verify drop-rate
 no atm ilmi-keepalive
 pvc 0/35 
  encapsulation aal5snap
 !
 bundle atm
 !
 bridge-group 1
 hold-queue 224 in
!
interface FastEthernet0
 description Server Briged Interface
 switchport access vlan 4
 no cdp enable
!
interface FastEthernet1
 description DMZ server
 switchport access vlan 4
 no cdp enable
 hold-queue 100 out
!
interface FastEthernet2
 description DMZ server
 switchport access vlan 4
 no cdp enable
!
interface FastEthernet3
 switchport access vlan 8
 no cdp enable
!
interface Dot11Radio0
 description Wireless
 no ip address
 ip verify unicast reverse-path
 no ip redirects
 no ip unreachables
 no ip proxy-arp
 ip flow ingress
 snmp trap ip verify drop-rate
 no dot11 extension aironet
 !
 encryption vlan 64 mode ciphers aes-ccm 
 !
 encryption vlan 16 mode ciphers aes-ccm 
 !
 broadcast-key vlan 64 change 45
 !
 broadcast-key vlan 16 change 45
 !
 !
 ssid No network selected
 !
 ssid OTOH
 !
 speed basic-5.5 6.0 9.0 basic-11.0 12.0 18.0 24.0 36.0 48.0 54.0
 station-role root
 world-mode dot11d country US both
 ipv6 address 2001:470:D16::1/64
 ipv6 enable
 ipv6 dhcp server otoh.org
 ipv6 inspect ipv6-inspect in
 no cdp enable
!
interface Dot11Radio0.16
 encapsulation dot1Q 16
 ip flow ingress
 ipv6 address 2001:470:E16::1/64
 ipv6 enable
 ipv6 dhcp server otoh.org
 ipv6 inspect ipv6-inspect in
 no cdp enable
 bridge-group 16
 bridge-group 16 subscriber-loop-control
 bridge-group 16 spanning-disabled
 bridge-group 16 block-unknown-source
 no bridge-group 16 source-learning
 no bridge-group 16 unicast-flooding
!
interface Dot11Radio0.64
 encapsulation dot1Q 64
 ip flow ingress
 no cdp enable
!
interface Vlan1
 no ip address
 shutdown
!
interface Vlan16
 description Private wireless VLAN
 no ip address
 ipv6 address 2001:470:F16::1/64
 ipv6 enable
 ipv6 dhcp server otoh.org
 ipv6 inspect ipv6-inspect in
 bridge-group 16
!
interface Vlan4
 description Briged VLAN
 no ip address
 no ip redirects
 no ip unreachables
 no ip proxy-arp
 bridge-group 1
!
interface Vlan8
 description Wired Lan
 ip address INTERNAL_IP 255.255.255.0
 no ip redirects
 no ip unreachables
 no ip proxy-arp
 ip flow ingress
 ip nat inside
 ip virtual-reassembly
 ipv6 address 2001:470:32::1/64
 ipv6 enable
 ipv6 nd other-config-flag
 ipv6 dhcp server otoh.org
 ipv6 inspect ipv6-inspect in
!
interface Vlan64
 description Guest Wireless VLAN
 no ip address
 ip verify unicast reverse-path
 no ip redirects
 no ip unreachables
 no ip proxy-arp
 ip virtual-reassembly
 snmp trap ip verify drop-rate
 bridge-group 64
!
interface BVI16
 ip address INTERNAL_IP 255.255.255.0
 ip verify unicast reverse-path
 ip flow ingress
 ip nat inside
 ip virtual-reassembly
 snmp trap ip verify drop-rate
 ipv6 address 2001:470:16::1/64
 ipv6 enable
 ipv6 nd other-config-flag
 ipv6 dhcp server otoh.org
 ipv6 inspect ipv6-inspect in
!
interface BVI1
 ip address EXTERNAL_IP 255.255.255.0
 ip access-group 107 in
 no ip redirects
 no ip unreachables
 no ip proxy-arp
 ip flow ingress
 ip nat outside
 ip inspect external-out out
 ip virtual-reassembly
!
interface BVI64
 ip address INTERNAL_IP 255.255.255.0
 ip verify unicast reverse-path
 ip flow ingress
 ip nat inside
 ip virtual-reassembly
 snmp trap ip verify drop-rate
 ipv6 address 2001:470:64::1/64
 ipv6 enable
 ipv6 nd other-config-flag
 ipv6 dhcp server otoh.org
 ipv6 inspect ipv6-inspect in
!
ip default-gateway UPSTREAM_ROUTER
ip forward-protocol nd
ip route 0.0.0.0 0.0.0.0 UPSTREAM_ROUTER
no ip http server
ip http authentication local
no ip http secure-server
ip http timeout-policy idle 5 life 86400 requests 10000
!
!
ip nat inside source list 1 interface BVI1 overload
!
logging trap debugging
logging my-log-host-ip
access-list 1 permit INTERNAL_IP_RANGE 0.0.0.255
access-list 1 remark NAT ACL
access-list 10 permit SNMP_HOST 0.0.0.7
access-list 10 remark SNMP 
access-list 107 remark BVI1 inbound
access-list 107 deny   ip host ROUTER any
access-list 107 deny   ip 10.0.0.0 0.255.255.255 any
access-list 107 deny   ip 172.16.0.0 0.15.255.255 any
access-list 107 deny   ip 192.168.0.0 0.0.255.255 any
access-list 107 deny   ip 224.0.0.0 31.255.255.255 any
access-list 107 permit icmp any any echo-reply
access-list 107 permit icmp any any time-exceeded
access-list 107 permit icmp any any packet-too-big
access-list 107 permit icmp any any unreachable
access-list 107 permit icmp any host EXTERNAL_IP echo
access-list 107 permit udp host HOST_A host HOST_B eq snmp
access-list 107 deny   ip any any
snmp-server community SNMP_COMMUNITY RO 10
no cdp run
ipv6 route 2001:470::/48 Tunnel0
ipv6 route ::/0 Tunnel0
!
!
!
!
radius-server attribute 32 include-in-access-req format %h
radius-server vsa send accounting
!
ipv6 access-list ipv6-tunnel0-in
 permit icmp any any
 deny ipv6 any any
!
control-plane
!
bridge 1 protocol ieee
bridge 1 route ip
bridge 16 protocol ieee
bridge 16 route ip
bridge 64 protocol ieee
bridge 64 route ip
banner login ^C
This is a private server.
Unauthorized access is forbidden. Log off now!
^C
!
line con 0
 no modem enable
line aux 0
line vty 0 4
 privilege level 15
 transport input ssh
 transport output ssh
!
scheduler max-task-time 5000
scheduler allocate 4000 1000
scheduler interval 500
ntp server 64.209.210.20
ntp server 66.148.71.103
!
webvpn context Default_context
 ssl authenticate verify all
 !
 no inservice
!
end