24 January 2018

Cisco ACI APIC and Spine/Leaf Upgrade Process

I'm just getting started with ACI in general. Here's the general process to upgrade the APICs/spine/leaf.

First check out the Cisco document here. In case the link moves/etc the document is "Cisco APIC Management, Installation, Upgrade and Downgrade Guide". This is essentially an abbreviated version of that document.

Of particular importance in that link is the section around  "Supported Upgrade Paths for APIC Controller and Switch Software" and associated downgrade section. Make sure you can jump from where you are to where you want to go. If it ain't listed, it ain't supported... and prepare for headaches.

The basic process is:

  1. Get files from Cisco onto a HTTP/SCP server and then uploaded to APIC
  2. Get APICs upgraded
  3. Wait for things to stabilise.
  4. Get Leaf/Spines upgraded
  5. Wait for things to stabilise.
This whole process took a few hours to complete... but I was gifted with having a fast internet connection to download files/etc with. I do the above using the (wimpy) GUI methods but the linked document lists ways to do the same using REST/CLI/Console/etc.

Getting the files from Cisco, to an intermediate HTTP/SCP box and onto the APICs
I couldn't believe it when I downloaded them but the files are gigantic. There is basically two main bits of software to get; APIC and ACI switch software. Thankfully Cisco put the matching APIC and ACI versions in the same sub-heading/version "Application Policy Infrastructure Controller (APIC)" on their download site. Basically if you click on 3.0 it has the APIC version (3.0.1 in my case) and the leaf/spine version (13.0.1) in the same section. In my case (going from 2.2 to 3.0) the files were:
  • aci-apic-dk9.3.0.1k.iso - For APICs 
  • aci-n9000-dk9.13.0.1k.bin - For ACI Leaf/Spine
Grab them from Cisco per normal process. Upload them to a HTTP/SCP server. 

In APIC, create a "Download Task" (Admin > Firmware > Download Tasks) point to each file individually. Once the task is created the file will be downloaded to APIC. You can see the status under the "Operational" tab of this page.

It looks like you can upload files directly onto the APIC from the GUI as well now (I didn't try that here though). This looks to be done through "Firmware Repository" under Admin > Firmware > Firmware Repository and clicking the "Upload Firmware to APIC" action.

Upgrading the APICs
In Admin > Firmware > Controller Firmware you'll have an action to "Upgrade Controller". Select the version/scheduled/etc and off you go. The screen will update the Upgrade Progress status bar for each APIC. The system will do one APIC at a time automatically/etc so just sit back and let it do its thing.... which brings me to...


Waiting for things to Stabilise
Just note that during this waiting time APICs will reload. This is non-disruptive as APICs aren't involved in production traffic but are only used to push policy to nodes/etc. This was a good 10-30min process for me. Had to reload the APIC browser session after they rebooted as well.

The APICs all appeared in the "Controller Firmware" screen as being "Upgraded Successfully"

Upgrading the Leaf/Spines
Similar to the APICs, except that you are going to be potentially impacting production traffic if things go bad. Basically under "Firmware Groups" in Admin > Firmware > Fabric Node Firmware > Firmware Groups create a group of AllNodes and select the ACI version you want to go to. 

Before worrying about doing all at the same time... just keep in mind the next bit is to create Maintenance Groups whereby you dictate which switches to upgrade at the same time. under "Maintenance Groups" in Admin > Firmware > Fabric Node Firmware > Maintenance Groups. Make a primary and a secondary maintenance group of nodes.

You kick off the upgrade by clicking "Upgrade Now" action of the primary Maintenance Group... then you wait patiently for things to come back and do the same for the secondary group. \

Based on the link (I've not tested though):

  • Up to 20 nodes are upgraded at the same time
  • Only one member of a VPC peer is ever upgraded at the same time (nice!)

Waiting for things to Stabilise
Up to 12 minutes is the estimate on how long it will take in the guide... be patient. The nodes will come back and things will be good (hopefully). During the upgrade process nodes will reboot and production traffic will experience some minor disruption provided everything is dual-mode connected.

Obviously take this all with a grain of salt... I am not an ACI expert but wanted to write some notes to summarise the wordy Cisco process. Some of my colleagues have screwed this up in the past and managed to get things going again (albeit onsite) using some of the other methods (i.e. CLI/etc).

Good luck! Hope this helps...

12 January 2017

VPN over Satellite - Why it doesn't always work at full bandwidth

I came across an interesting situation recently whereby a customer had to move datacentres and had to reconnect their Satellite connected remote sites to connect to a different datacentre using different VPN technologies. Through the move we discovered and interesting situation regarding Satellite and VPN that I thought warranted a quick post.

Some background about Satellite communications...
Satellite communications have inherit limitations in regards to round trip time (RTT) due to the distance packets travel in order to get from source to destination (i.e. propagation delay). RTT of Satellite links are typically above the 500ms mark. Consider what this delay does to network communications. UDP will suffer the RTT delay associated with opening the connection (i.e. handshake) with a back-n-forth of 500ms required for each part of the handshake but after that the performance across these high-RTT links may not be so bad. Once the stream is opened data will quite happily flow until its finished as UDP doesn't care if bits are lost along the way it just sends one after another until its sent everything (i.e. connectionless).

On the other hand consider TCP. It also has to establish a handshake and will require the 500ms delay for each back-n-forth of the setup. However, once the handshake is completed the data stream, compared to UDP, behaves nothing like the UDP stream! It chugs!

TCP is a connection orientated protocol and it will only send the next chunk of data once the last chunk it has sent has been acknowledged and received successfully. Over short-RTT links this isn't such a big deal, we lose a packet and we simply kick it off again and wait for the other end to acknowledge. In standard networks, because the RTT is low, the penalty for doing this is negligible... and life goes on. Over satellite links the delay associated with a lost chunk of data in a TCP stream is very detrimental due to the 500ms per-direction back-n-forth required to restart the chunk that was lost.

To get around the inherit limitations of TCP over Satellite (and make it workable), network boffins came up with some fancy optimization. Satellite providers these days typically provide some sort of TCP/UDP header optimization for their services that buffers packets and tricks the PCs at either end of the Satellite into thinking the network is more responsive than it is or that data can be sent quicker than what the typical RTT back-n-forth would dictate under normal circumstances. This works great provided the optimization technology supports the protocols you're using.... (*ominous fore-shadowing*).

Now what about VPNs? Typical IPSEC VPNs over Satellite behave pretty similar to the vanilla TCP situation described above (i.e poorly) except (you guessed it) the Satellite modems can't optimize the TCP/UDP packet headers tunnels across the VPN. This is because the TCP packet headers are encapsulated and encrypted inside ESP packets (i.e. the modem can't see it's TCP or optimize it). Similar is true for IP Tunnels (i.e. using GRE)!

Overall this results in a lot of frustration and stock-standard VPNs connecting without issue but not forwarding traffic at speeds that non-VPN traffic operates at.

How to configuring VPNs over Satellite links in a way that can be optimized...
So in the wall of text above, we noted that UDP is connectionless, that satellite modems do some form of spoofing to trick TCP/UDP into working fast despite the poor RTT and that VPNs hide the underling TCP/UDP from the modems preventing this optimization! Phew!

A standard VPN uses ESP packets for the tunnel... what if we made it use UDP as the transport instead? On a Cisco router this would be configured using the following (note this is default in newer software)
crypto isakmp nat-traversal  20
The above command points to the fact that NAT traversal suffers from the similar issues.

Hope it helps someone!

ASA - Which serial number to lodge PAKs against

ASAs sometimes show one serial number in the "show version" output and a completely different one in the "show inventory" output. If you are tasked with applying a license to your ASA you will probably ask "which serial number do I use?" The simple answer is; use the "show inventory" serial number.

But what if I've already lodged my license against the wrong serial number? Simply email/contact the licensing team (licensing@cisco.com) and they'll sort it out for you.

Solution for nuisance phone calls from 0198339100 to my mobile

So I've been very annoyed lately. I've been getting phone calls from 0198339100 randomly on my mobile... 24/7. The problem was the service would hang up after one or two rings or would hang up on me even if I answered it. Sometimes I'd answer it in time for it to wait 5 seconds before reading me a text message. This was only happening from a single person. As you can imagine, this is really annoying and I'll be honest... a few swear words were said said over the last few days.

Googling the number reveals it's related to Telstra's Talking Text service. Basically if the phone the SMS was sent to is not SMS capable Telstra convert it into a talking text instead where a robot reads it back to you. The problem is I was receiving these calls on my mobile... which handles SMS perfectly well.... so I was stumped as to why Telstra was sending these through to me. The phone calls and annoyance continued for days.

It took me a while but I figured out what the problem was for me and my situation. I have no doubts someone else will have the same issue so I thought I'd make a post.

My desk phone at work is call-forwarded to mobile... So what was happening was a specific person was innocently sending SMSs to me from his mobile but his mobile had my desk phone listed as my primary contact number. Hence I was getting talking text calls on my desk phone... which forwarded to my mobile 4-5 rings afterwards. By the time they connect through to my mobile they're at the end of the default "wait for answer" period and hang up.

How to properly fix it:

  • Get the friend/enemy sending SMSs to your desk number to fix it on his end (i.e. change primary contact number to be your mobile rather than desk phone for your contact on his phone).
How to prevent Talking Text from reaching you on mobile:
  • Block the 0198339100 number on your mobile. For my Samsung S6 it was a case of clicking [...] next to number and saying "block". It won't stop the friend/enemy from sending SMSs to the wrong spot but will stop your mobile phone from ringing. NOTE: Your desk phone will still ring!

How to disable Talking Text service:

  • Disable the message bank service on your desk phone 
How to prevent the calls from being forwarded to your mobile:
  • Disable call-forwarding on your desk phone.

How to make it work (i.e. keep talking texts from desk phone forwarding to mobile without hanging up):

  • Increase the "time to wait for answer" by calling 0198339999 from your desk phone and follow the prompts.

There is a bunch of technical information here if you have other requirements/etc.

Hope this helps someone. Good luck!

19 March 2015

Cisco IronPort (WSA/WSAV) - Licensing/Feature Key Enablement

The process to enable feature keys provided by Cisco is vague. As of right now (19/03/2015) I've noted the following as a general guide to the experience:

  • You need to go through the standard Cisco licensing process and get your license, associated with your device.
    • If you are migrating from one device to another you can "try" re-host the license yourself on the licensing website or you can email licensing@cisco.com and let them do it for you.
  • The Cisco Licensing site/team will send you a zip file (or you can download it from the Cisco licensing page). In that zip file a ".bin" file is located as well as a generic "instructions" HTML file. The instructions file should be similar to the below (I've been provided variations to the below throughout my experience):
    To apply the key(s), please follow the instructions below:
    
        In the Web Interface, use the System Administration > Feature Keys page.
        In the Command Line Interface, issue the command 'featurekey'.
    
    Virtual Appliance License Installation Instructions:
    1. From the console, note the IP address of the appliance (e.g. enter interfaceconfig)
    2. From SSH or telnet, login to the virtual appliance with admin/ironport
    
    3. Enter loadlicense, then
        a. Use option <1> to input the license file by pasting its contents and pressing Ctrl-D, or
        b. Use option <2> to load the license file that has been uploaded to the virtual appliance via FTP:
                   i. Using FTP to transfer license file to appliance: ftp to appliance with admin/Ironport, cd into directory configuration, put license.xml, exit
                   ii. Using SCP to copy license file to appliance: scp license.xml admin@:configuration
    
    4. Read and agree to the End User License Agreement
    5. Enter showlicense to view the license details
    6. Log on to the web UI (http://:8080) and run the system setup wizard
      • The first section is the part you are concerned with if you just have a physical appliance.
      • The "Virtual Appliance License Installation Instructions" are aimed at WSAV devices and has to do with defining a shared "serial number" across all virtual appliances.
    • Open the ".bin" file in a text editor. You'll note that a single/series of features, dates and keys are listed similar to the below:
    Type: McAfee Anti-Malware, apply by: 2015/04/17, expires: 2015/10/09(12 months, 0 days)
    Key : aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaa=-=

    Type: Sophos Anti-Virus, apply by: 2015/04/15, expires: 2015/10/09(12 months, 0 days)
    Key : aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaa=-=

    Type: IronPort Web Reputation Filters, apply by: 2015/04/15, expires: 2015/10/09(12 months, 0 days)
    Key : aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaa=-=

    Type: Webroot, apply by: 2015/04/15, expires: 2015/10/09(12 months, 0 days)
    Key : aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaa=-=

    Type: Cisco IronPort Web Usage Controls, apply by: 2015/04/15, expires: 2015/10/09(12 months, 0 days)
    Key : aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaa=-=
    • What you need to do is copy each key which in the above would be "aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaaa-aaaa=-=" to web GUI or featurekey command as instructed in the instructions.
    • DO NOT COPY THE ENTIRE DOCUMENT INTO THE GUI/FEATUREKEY COMMAND. It doesn't work...

    Provided you follow this you should be ok until next time Cisco change the process. The above was tested on 8.0.6 code on WSAv and WSA appliances.

    If you have multiple physical appliances just email the licensing team and they'll sort it out for you.

    13 May 2014

    NAT-T VPN - What ports are needed to access through a firewall?

    This post relates to a IPSEC/ISAKMP connection enabled with the NAT-T feature and establishing its ports used through a firewall.

    Basic topology per the below diagram:



    Two routers R1 and R3 build a VPN to each other across a NAT translating device (R2).

    R1 Configuration:
    crypto isakmp policy 1
     encr 3des
     hash md5
     authentication pre-share
     group 2
    crypto isakmp key password address 1.1.1.6
    crypto isakmp nat keepalive 10
    !
    !
    crypto ipsec transform-set 3DES-MD5 esp-3des esp-md5-hmac
    !
    crypto map VPN_MAP 1 ipsec-isakmp
     set peer 1.1.1.6
     set transform-set 3DES-MD5
     match address VPN_ACL
    !
    interface FastEthernet0/0
     ip address 192.168.0.1 255.255.255.0
    !
    interface FastEthernet0/1
     ip address 1.1.1.1 255.255.255.252
     crypto map VPN_MAP
    !
    ip route 0.0.0.0 0.0.0.0 1.1.1.2
    !
    ip access-list extended VPN_ACL
     permit ip 192.168.0.0 0.0.0.255 192.168.1.0 0.0.0.255


    R2 Configuration:
    interface FastEthernet0/0
     ip address 1.1.1.2 255.255.255.252
     ip nat inside
    !
    interface FastEthernet0/1
     ip address 1.1.1.5 255.255.255.252
     ip nat outside
    !
    ip nat inside source list NAT_ACL interface FastEthernet0/1 overload
    !
    ip access-list extended NAT_ACL
     permit ip any any



    R3 Configuration:
    crypto keyring spokes
      pre-shared-key address 0.0.0.0 0.0.0.0 key password
    !
    crypto isakmp policy 1
     encr 3des
     hash md5
     authentication pre-share
     group 2
    crypto isakmp nat keepalive 10
    crypto isakmp profile L2L
       keyring spokes
       match identity address 0.0.0.0
    !
    crypto ipsec transform-set 3DES-MD5 esp-3des esp-md5-hmac
    !
    crypto dynamic-map DYN_MAP 1
     set transform-set 3DES-MD5
     set isakmp-profile L2L
    !
    crypto map VPN_MAP 1 ipsec-isakmp dynamic DYN_MAP
    !
    interface FastEthernet0/0
     ip address 192.168.1.1 255.255.255.0
    !
    interface FastEthernet0/1
     ip address 1.1.1.6 255.255.255.252
     crypto map VPN_MAP
    !
    ip route 0.0.0.0 0.0.0.0 1.1.1.5
    !
    ip access-list extended VPN_ACL
     permit ip 192.168.1.0 0.0.0.255 192.168.0.0 0.0.0.255



    Evidence:

    VPN is active:

    R1#show crypto isa sa
    IPv4 Crypto ISAKMP SA
    dst             src             state          conn-id slot status
    1.1.1.6         1.1.1.1         QM_IDLE           1002    0 ACTIVE

    R3#show crypto isa sa
    IPv4 Crypto ISAKMP SA
    dst             src             state          conn-id slot status
    1.1.1.6         1.1.1.5         QM_IDLE           1002    0 ACTIVE


    NAT-T Ports Used:

    R2#show ip nat translations
    Pro Inside global      Inside local       Outside local      Outside global
    udp 1.1.1.5:500        1.1.1.1:500        1.1.1.6:500        1.1.1.6:500
    udp 1.1.1.5:4500       1.1.1.1:4500       1.1.1.6:4500       1.1.1.6:4500


    So there you have it. UDP/500 and UDP/4500 are used for the ISAKMP and NAT-T IPSEC accordingly.

    8 April 2014

    Route Filtering - Prefix Lists - LE and GE Examples

    I always get the le and ge confused when I write prefix-lists to filter routes. I think I get a mental hang-up trying to get my head around the "more specific than x" is equal to "greater than x length subnet mask". I did a lab this afternoon because I had to provide a filter and decided to write down the results into this blog so I can reference in the future. Hope it does help someone else.

    Topology is as per the below points:

    • R1 and R2 have BGP adjacency across 1.1.1.0/30 network. 
    • R1 has LAN interfaces 192.168.3.1/28 and 192.168.3.250/30
    In the below examples we look at "matching the /30 routes only within the /24 range" as one example and "matching the smaller routes within the /24" as a second example. The last example we "match routes that are /28 to /29 in length from within the /24" by chaining both le and ge together.

    Match all /30 routes within larger supernet
    I wanted to write a prefix-list that would:

    • Advertise /30 routes only from within the 192.168.3.0/24 supernet (i.e don't advertise 192.168.3.0/28 but advertise 192.168.3.250/30)
    The below achieves that:

    R1#router bgp 1
     no synchronization
     bgp log-neighbor-changes
     network 1.1.1.0 mask 255.255.255.252
     network 192.168.3.0 mask 255.255.255.240
     network 192.168.3.252 mask 255.255.255.252
     timers bgp 5 20
     neighbor 1.1.1.2 remote-as 2
     neighbor 1.1.1.2 soft-reconfiguration inbound
     neighbor 1.1.1.2 route-map BGP-OUT out
     no auto-summary
    !
    route-map BGP-OUT permit 10
     match ip address prefix-list TEST
    !
    ip prefix-list TEST seq 5 permit 192.168.3.0/24 ge 30

    In the above we match /30 routes only within the /24 supernet. Below is the output proving it. You can see that we don't advertise the 192.168.3.0/28 route we have.

    R1#show ip bgp neigh 1.1.1.2 advertised-routes
    BGP table version is 6, local router ID is 192.168.3.253
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
                  r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

       Network          Next Hop            Metric LocPrf Weight Path
    *> 192.168.3.252/30 0.0.0.0                  0         32768 i

    Total number of prefixes 1

    Match all smaller routes within larger supernet
    I wanted to write a prefix-list that would:
    • Advertise all smaller routes within a specific supernet (192.168.3.0/24)
    The below achieves that:

    R1#router bgp 1
     no synchronization
     bgp log-neighbor-changes
     network 1.1.1.0 mask 255.255.255.252
     network 192.168.3.0 mask 255.255.255.240
     network 192.168.3.252 mask 255.255.255.252
     timers bgp 5 20
     neighbor 1.1.1.2 remote-as 2
     neighbor 1.1.1.2 soft-reconfiguration inbound
     neighbor 1.1.1.2 route-map BGP-OUT out
     no auto-summary
    !
    route-map BGP-OUT permit 10
     match ip address prefix-list TEST
    !
    ip prefix-list TEST seq 5 permit 192.168.3.0/24 le 32

    In the above I match routes that have a subnet mask between /24 and /32. Below is evidence of this being true (note that both the /28 and /30 routes are advertised):

    R1#show ip bgp neigh 1.1.1.2 advertised-routes
    BGP table version is 8, local router ID is 192.168.3.253
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
                  r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

       Network          Next Hop            Metric LocPrf Weight Path
    *> 192.168.3.0/28   0.0.0.0                  0         32768 i
    *> 192.168.3.252/30 0.0.0.0                  0         32768 i

    Total number of prefixes 2

    Match /28 to /29 routes from within a supernet
    I wanted to write a prefix-list that would:
    • Advertise only routes that are between /28 and /29 in length from within a specific supernet (192.168.3.0/24)
    The below achieves that:

    R1#router bgp 1
     no synchronization
     bgp log-neighbor-changes
     network 1.1.1.0 mask 255.255.255.252
     network 192.168.3.0 mask 255.255.255.240
     network 192.168.3.252 mask 255.255.255.252
     timers bgp 5 20
     neighbor 1.1.1.2 remote-as 2
     neighbor 1.1.1.2 soft-reconfiguration inbound
     neighbor 1.1.1.2 route-map BGP-OUT out
     no auto-summary
    !
    route-map BGP-OUT permit 10
     match ip address prefix-list TEST
    !
    ip prefix-list TEST seq 5 permit 192.168.3.0/24 ge 28 le 29

    In the above I match routes that have a subnet mask between /28 and /29 only from within the /24 supernet. Below is evidence of this being true (note: that we only advertise the /28 route as it is the only one meeting the criteria):

    R1#show ip bgp neigh 1.1.1.2 advertised-routes
    BGP table version is 8, local router ID is 192.168.3.253
    Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
                  r RIB-failure, S Stale
    Origin codes: i - IGP, e - EGP, ? - incomplete

       Network          Next Hop            Metric LocPrf Weight Path
    *> 192.168.3.0/28   0.0.0.0                  0         32768 i

    Total number of prefixes 1

    5 February 2014

    3850 Switch Stacks - StackCabling and Switch Renumbering?

    I'm not sure why but I've always found the switch renumbering command confusing to understand on 3750/3750-X/3850 switch stacks. Mostly because I wondered what happens when you renumber two switches at the same time with overlaps? i.e. You want Switch 1 to be "4", Switch 4 to be "3", etc.

    First thing first, for a switch stack you don't need to cable them in specific pattern or arrangement. As long as every switch is connected in a big uninterrupted loop it will work it out and you'll be fine. For a stack of four switches here are some options:



    Which is best? Really it all depends on how they are deployed in a rack or across racks and what length stack-cables you have. The default is 50cm but longer cables can be ordered (I think 3m is the max).

    For the 3750X/3850 don't forget you also have StackPower cables to worry about as well.

    So back to the main topic, how does the switch renumbering work... I had a stack of 4 switches I built recently. After connecting and booting them all it turned out that...
    Switch 1 thinks its stack member 2
    Switch 2 thinks its stack member 4
    Switch 3 thinks its stack member 3
    Switch 4 thinks its stack member 1
    The switch renumber command swaps a single switch with the number of another switch. Logically this shouldn't work as I had multiple overlaps in the above. I gave it a go regardless. So in the above I tried to:

    • Swap 1 & 2
    • Swap 2 & 4
    • Swap 4 & 1

    It didn't work. :) I ended up with another mess altogether.

    The best way I've found to do this is to do all the renumber commands you can without overlapping with the previously applied renumber commands. Then you need to reboot! Once that's done renumber out the remaining switch members and reboot... again. This chews up time since the reboot takes roughly 10mins for 3850 switches.

    Lastly, you can figure out which switch is which switch member based on the lights on the front of the chassis. Highlight the "stack" LED by pressing the mode button and the switchports LEDs instead indicate the "stack" member number.

    Thanks for reading. Hope it helps.

    Nexus - SSH Error

    Working on a Nexus 5548 last week I came across the following error when trying to SSH to another switch from here.
    CORE-01# ssh admin@10.113.150.252
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    Someone could be eavesdropping on you right now (man-in-the-middle attack)!
    It is also possible that the RSA host key has just been changed.
    The fingerprint for the RSA key sent by the remote host is
    70:81:d5:1e:64:51:e5:ba:2d:9a:55:8d:fa:43:59:b8.
    Please contact your system administrator.
    Add correct host key in /var/home/admin/.ssh/known_hosts to get rid of this message.
    Offending key in /var/home/admin/.ssh/known_hosts:8
    RSA host key for 10.1.150.252 has changed and you have requested strict checking.
    Host key verification failed.
    Solution is pretty easy...
    CORE-01# clear ssh hostsCORE-01# ssh admin@10.1.150.252
    The authenticity of host '10.1.150.252 (10.113.150.252)' can't be established.
    RSA key fingerprint is 70:81:d5:1e:64:51:e5:ba:2d:9a:55:8d:fa:43:59:b8.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '10.1.150.252' (RSA) to the list of known hosts.
    admin@10.1.150.252's password:
    Type help or '?' for a list of available commands.
    EDGE-01> en
    Password: *********
    This happens when the Nexus switch has a pre-existing SSH key stored for the remote device and the remote device's key changes. The command simply clears the buffer of local SSH keys stored for remote hosts. I've seen this on Linux servers before as well.

    Hope it helps. Thanks for reading.

    22 August 2013

    PPPoE Problems on Cisco 2911 Router (TPG EFM / Business Ethernet Broadband)

    TPG are a great cheap little ISP, however their support is not crash hot nor their guidance on how to configure network gear to work with them. Basically TPG provide a fairly cheap unlimited data-plan for businesses under the name of EFM (Ethernet First Mile). When you get this service from TPG we received an abrupt email saying simply:
    Network Details: 
    • Username: user@pig.tpg.com.au
    • Password: password 
    • CE IP Address: 1.1.1.1/30 
    • PE IP Address: 1.1.1.2/30
    Then a "test and validate it works within 2 days otherwise we assume it is operational and will start billing" line. So I suppose I need to test this...

    The inclusion of the username/password was a little different to what I expected from TPG. I assumed that we'd just get an Ethernet feed and connect into that with an IP address, no questions or authentication asked... however the inclusion of a username/password indicated that a PPPoE connection was required (not that TPG tell you that anywhere from what I can see).

    This was not expected... but it was not that big a deal either. I grabbed a 2911 we had sitting around in our lab, connect it up and started googling away for a solution. Guides came up pretty quick for ISR routers with PPPoE... but when trying to apply these configurations to our router I noted that it refused to accept a section frequently referenced in these guides:
    vpdn enable
    no vpdn logging
    vpdn−group pppoe
     request−dialin
      protocol pppoe
    Now the section refused is the last line. 2911's don't have the PPPoE option here. You can type protocol but the only option after that is l2tp which didn't help here. Turns out this is another ISR G2 thing. To force the PPPoE to take place you instead have to do the following:

    bba-group pppoe global virtual-template 1
    vpdn enablevpdn-group 1
    Below is the full sample configuration I used:
    bba-group pppoe global
     virtual-template 1
    !
    vpdn enable
    vpdn-group 1
    !
    interface GigabitEthernet0/0
     no ip address
     duplex auto
     speed auto
     pppoe enable group global
     pppoe-client dial-pool-number 1
    !
    interface Dialer1
     ip address 1.1.1.1 255.255.255.252
     ip mtu 1492
     encapsulation ppp
     dialer pool 1
     dialer-group 1
     ppp authentication pap callin
     ppp pap sent-username user@pig.tpg.com.au password 0 password
     no cdp enable
    !
    ip route 0.0.0.0 0.0.0.0 Dialer1
    !
    dialer-list 1 protocol ip permit
    Hopefully this saves someone else some hassle. Thanks for reading.

    19 July 2013

    ASA - How to get automatic email notification of firewall failover events?


    ASAs have a habit of automatically failing over quietly and efficiently without anybody knowing about it. Sometimes this occurs because an upstream/downstream device rebooted or a switch failed momentarily. What's annoying is that the firewall can failover without you knowing about it at all... sometimes you get stuck focusing on the other issue and never notice the firewalls are in a failed state. I've seen customers who have (thinking they were running on their primary firewall) rebooted their failover infrastructure to find they've caused a short outage to their network.

    There are a few ways to find out when an ASA has failed-over without looking at the box or logging into it and doing a "show failover". Firstly you could invest in commercial software/etc... which most smaller companies can't afford to run/maintain ($$$). Open source options might appeal to those inclined. Another way to do this "cheaply" is to use the "logging mail" function which, when a syslog event matching a syslog ID list occurs, sends an email to a recipient with the logging event/s.

    So which syslog IDs do you match? Well you have a few options here, you could run a few tests and see what log events occur OR you can find the ASA syslog event list for your ASA code version and figure out the syslog codes that are appropriate.

    The table linked specifies HA events as starting with 101, 102, 103, 104, 210, 311, 709. It also says that error codes are between 100000-999999. As you're probably aware there are different "logging" levels that can be applied/viewed/etc... these are typically referenced as a number between 0 - 7 (where 0=Emergencies, 1=Alerts and 7=Debug). It turns out that 1xxxxx numbers are therefore the "Alert" (1) messages and likely the ones we want to see.

    So if we matched 101xxx, 102xxx, 103xxx, 104xxx we'll probably see what we want to see. Further snooping/sniffing of alerts tells me that 105xxx is likely needed as well.
    logging list SMTP-FAILOVER message 101000-101999
    logging list SMTP-FAILOVER message 102000-102999
    logging list SMTP-FAILOVER message 103000-103999
    logging list SMTP-FAILOVER message 104000-104999
    logging list SMTP-FAILOVER message 105000-105999
    logging mail SMTP-FAILOVER
    logging from-address ASAFirewallAlarm@company.com.au
    logging recipient-address SupportTeam@company.com.au level alerts
    smtp-server 10.1.1.1
    Note: In the above you need a SMTP server configured/available for emailing to work.

    I haven't tested the above configuration exactly but have tested a very similar one on a customer's network. It works like a charm!


    Hope it helps! Thanks for reading.

    30 April 2013

    How to generate TCP traffic to/from a Cisco router

    Found a nifty hidden command on Cisco IOS routers that generates TCP traffic from router to router.

    TTCP Receiver
    To setup a server to accept a connection do the following on a router:

    R2#ttcp receive
    ttcp-r: buflen=8192, align=16384/0, port=5001
    rcvwndsize=4128, delayedack=yes  tcp
    ttcp-r: accept from 10.2.1.2 (mss 536, sndwnd 4128, rcvwnd 3592)
    ttcp-r: 16777216 bytes in 1296360 ms (1296.360 real seconds) (~11 kB/s) +++
    ttcp-r: 32293 I/O calls
    ttcp-r: 0 sleeps (0 ms total) (0 ms average)

    TTCP Transmitter
    To initiate a connection do the following on a second router:

    R6#ttcp tran 2.2.2.2
    ttcp-t: buflen=8192, nbuf=2048, align=16384/0, port=5001  tcp  -> 2.2.2.2
    ttcp-t: connect (mss 536, sndwnd 4128, rcvwnd 4128)
    ttcp-t: 16777216 bytes in 1296140 ms (1296.140 real seconds) (~11 kB/s) +++
    ttcp-t: 2048 I/O calls
    ttcp-t: 0 sleeps (0 ms total) (0 ms average)

    You can just use TTCP command by itself to access more specific configuration options (change port/etc).

    R2#ttcp
    transmit or receive [receive]:
    perform tcp half close [n]:
    receive buflen [8192]:
    bufalign [16384]:
    bufoffset [0]:
    port [5001]:
    sinkmode [y]:
    rcvwndsize [4128]:
    delayed ACK [y]:
    show tcp information at end [n]:

    To quit the connection you do the “Ctrl+Shift+6, X” break sequence and you get the following:

    ttcp-t: buflen=8192, nbuf=2048, align=16384/0, port=5002  tcp  -> 3.3.3.3
    ttcp-t: connect (mss 536, sndwnd 4128, rcvwnd 4128)
    ttcp-t: 16777216 bytes in 1415708 ms (1415.708 real seconds) (~10 kB/s) +++
    ttcp-t: 2048 I/O calls
    ttcp-t: 0 sleeps (0 ms total) (0 ms average)

    The rate is presented in Bytes per second…  so to get bits per second :

    (Total bytes transmitted * 8) / Total Seconds = bits per second.

    Summary
    This was very handy in a virtual lab when trying to generate traffic matching QoS marking/scheduling policy. Throughput-wise I’ve been able to generate around 450Kbps in the virtual lab which is good enough for my situation/testing. Since it is pretty raw you have to figure out optimal TCP sliding window sizes in order to congest links with more latency. This is more of a consideration for doing it on live routers with some real distance between them (i.e. RTT higher than 50ms). 

    You can also configure a PC to be a receiver/transmitter as well but I haven't tried this. I believe there is an application you can get from Cisco's download page.

    29 January 2013

    Setting up SecureCRT - Change Default Appearance + Auto-create Log File On Connect

    This is just a collection of convenient settings I've found elsewhere on the Internet. SecureCRT is a nice little piece of software to have in sitting on your laptop to connect to console/Telnet/SSH sessions you frequent/etc. Some of the settings I'd prefer to change from the default, mainly around appearance and with it not automatically creating a log file on connect.

    Change Default Appearance
    To change the default colour theme do the following:

    1. Go to Options > Global Options
    2. Under General > Default Session on left
    3. Click Edit Default Settings
    4. Navigate to Appearance in left pane
    5. Select the desired Color Theme in the drop down box
    Turn on Auto-Create Log with Automatic Log File Name
    To setup SecureCRT to log everything (trust me, it's useful from time to time)... pretty much follow the first 3 steps above then:
    1. Navigate to Log File in left pane
    2. Under the Log File Name entry box, type in the path and name of the log file to use. For me I said the following: "C:\Console Logs\%Y-%M-%D.%h:%m - %H -- %S.txt"
    The % variables are all listed in the help file as follows:
    • %H - hostname
    • %S - session name
    • %Y - four-digit year
    • %M - two-digit month
    • %D - two-digit day of the month
    • %h - two-digit hour
    • %m - two-digit minute
    • %s - two-digit seconds
    • %t - three-digit milliseconds
    • %% - percent (%)
    • %envvar% - environment variable
    Thanks for reading. Hope it helps.

    23 November 2012

    Cisco ASA: Anyconnect - How to source how many users and which users are logged in via Anyconnect?

    With standard IPSEC/ISAKMP I am used to running "show crypto isa sa detail" style commands to figure out how many and who is logged into a client VPN session. With AnyConnect the above commands don't work. As AnyConnect is typically configured as a SSL VPN client, you have to use a different set of commands to troubleshoot. The below is for the Cisco ASA product set... there should be something similar for IOS devices.


    FW01# show vpn-sessiondb anyconnect 
    Session Type: AnyConnect
    Username     : bob                Index        : 71
    Assigned IP  : 10.0.1.1            Public IP    : x.x.x.x
    Protocol     : AnyConnect-Parent SSL-Tunnel
    License      : AnyConnect Essentials
    Encryption   : RC4                    Hashing      : none SHA1
    Bytes Tx     : 399272098              Bytes Rx     : 10860313
    Group Policy : VPN_CLIENT_POLICY      Tunnel Group : VPN
    Login Time   : 09:04:59 EST Fri Nov 23 2012
    Duration     : 7h:02m:46s
    Inactivity   : 0h:00m:00s
    NAC Result   : Unknown
    VLAN Mapping : N/A                    VLAN         : none
    [...]
    The above shows all active users logged into the SSL VPN client. You get their username, public IP and mapped VPN IP as well as the encryption mechanisms used. Pretty handy.

    If you are just after an overview of how many users are connected the below is a good starting point. For the below I had 3 active VPN tunnels in use below.


    FW01# show vpn-sessiondb          
    ---------------------------------------------------------------------------
    VPN Session Summary                                                      
    ---------------------------------------------------------------------------
                                   Active : Cumulative : Peak Concur : Inactive
                                 ----------------------------------------------
    AnyConnect Client            :      3 :         20 :           4 :        0
      SSL/TLS/DTLS               :      3 :         20 :           4 :        0
    Clientless VPN               :      0 :          4 :           1
      Browser                    :      0 :          4 :           1
    ---------------------------------------------------------------------------
    Total Active and Inactive    :      3             Total Cumulative :     24
    Device Total VPN Capacity    :    250
    Device Load                  :     1%
    ---------------------------------------------------------------------------
    ---------------------------------------------------------------------------
    Tunnels Summary
    ---------------------------------------------------------------------------
                                   Active : Cumulative : Peak Concurrent  
                                 ----------------------------------------------
    Clientless                   :      0 :          7 :               2
    AnyConnect-Parent            :      3 :         17 :               4
    SSL-Tunnel                   :      3 :         22 :               4
    ---------------------------------------------------------------------------
    Totals                       :      6 :         46
    ---------------------------------------------------------------------------
     Hope this helps someone. Thanks for reading.

    9 November 2012

    Cisco ASA - How to allow client VPN access to site-to-site VPN reachable networks? (Hairpin routing)

    Hello!

    First thing is first, these were both fantastic resources/guides on how to get this working and I really can't stress this more "GO READ THEM FIRST":

    The above links pretty much show the "how to get it setup". The below will consider a basic topology as follows:

    "SITE-TO-SITE VPN REACHABLE OFFICE" --> "HEAD OFFICE ASA" <-- "REMOTE VPN CLIENT USER CONNECTING TO HEAD OFFICE"

    The goal being to allow the VPN client user to reach the site-to-site VPN office via the head office ASA. The main steps to get  this working with ASA code 8.4 are:
    • Interesting-traffic ACLs - So, on the head office ASA, you basically need to allow the VPN client pool to be considered a source for traffic traversing the site-to-site VPN connection (i.e. adjusting the ACL for interesting traffic for the site-to-site VPN). For the remote site-to-site reachable office, the VPN router needs to have the VPN client pool marked as a VPN-interesting destination network across the VPN. Lastly, for client VPNs configuration on the head office ASA you need to make sure the client VPN configuration allows the client pool network access to the site-to-site VPN reachable networks as well.
    • NAT/NO-NAT statements - These are a bit mind-bending. Essentially, on the ASA side you need a "nat (outside,outside) [...]" statement which says "don't NAT traffic coming in on the outside interface from the VPN client pool going to site-to-site VPN reachable networks". You also need to pay attention to the "(inside,outside)" NO-NAT statements controlling how the internet-facing dynamic overload NAT takes effect. I'll cover this off in more detail the end as essentially this is the only thing that the above guides lacked...
    • Allowing intra-interface traffic traversal - ASAs by default don't allow "hairpin" routing... this means that if a packet is received on an interface (e.g. outside) and is destined to a network that according to the routing table is reachable via the same interface (e.g. outside) then drop the traffic. As client VPN and site-to-site VPN are both, from the ASA's perspective, reachable via the "same" interface of the ASA (outside) the packets are normally dropped. The command "same-security-traffic permit intra-interface" allows the ASA to process and allow same-interface routing of packets
    Pretty much that is a summarized version of the linked documents. The issue I had twice over the last two days was that the NO-NAT for "(inside,outside)" traffic destination was taking effect and causing the ASA to sprout some error along the lines of:
    "route lookup failed for host <VPN-CLIENT-IP> outside to <SITE-TO-SITE VPN REACHABLE IP> inside"
    Essentially the no NAT rule I had in place doing overall inside to outside processing was as follows:
    nat (inside,outside) source static any any destination static NO_NAT NO_NAT  
    The NO_NAT object group simply defines all remote networks we don't want to NAT traffic on when traffic goes from inside to outside interfaces. The above config worked fine up until the point I needed the VPN client to hairpin route. Essentially on 8.4 code, any any NATs are evil. They take effect regardless of positioning in the rule-set and regardless of whether a NAT should logically match another rule above/etc.

    The resolution is very easy though:
    nat (inside,outside) source static SITE_LANS SITE_LANS destination static NO_NAT NO_NAT
    This says that we don't NAT traffic to the NO_NAT destinations unless the source IP is from the site's LAN network ranges.

    I found the best way to troubleshoot this was by:
    • Using ASDM logging and filtering by a specific traffic flow that "should" work (this is how I spotted the "route lookup failed" error) 
    • Using the "packet-tracer" utility to figure out which NAT statement it is being used by the ASA for a packet received on the outside interface going to a site-to-site VPN reachable IP.
    Hope this helps someone!

    5 August 2012

    How to configure basic Anyconnect Essentials on Cisco ASA?

    Over the last few days I've struggled to find a nice concise guide to configuring AnyConnect on an ASA for the specific requirements needed for some work I've been doing. So... here is a basic configuration that addresses the following requirements:
    1. Authenticate VPN users to local database of ASA (no radius/LDAP servers used)
      • VPN-only users will not have admin access to ASA.
    2. Allow AnyConnect VPNs to access the ASA's LAN network across the VPN
    3. AnyConnect must run on a non-default port (TCP 442 was chosen for this example)
    4. NAT translate ports of router's outside IP address to internal servers
      • HTTPS and SMTP port will be NAT translated to a specific server on the LAN
    This configuration is for ASA code 8.4. This won't work for 8.2 or below (different CLI commands for NAT and Anyconnect). 

    The configuration follows...

    Define the interface settings. Inside/Outside + IPs:
    interface Ethernet0/0
     nameif inside
     security-level 100
     ip address 192.168.1.254 255.255.255.0
    !
    interface Ethernet0/1
     nameif outside
     security-level 0
     ip address 1.1.1.1 255.255.255.128
    !
    Define some object groups for NAT statements later on...
    object service SMTP
     service tcp source eq smtp
    object service HTTPS
     service tcp source eq https
    object network 192.168.16.2
     host 192.168.16.2
    object network 192.168.16.0
     subnet 192.168.16.0 255.255.255.0
    object-group network NO_NAT
     network-object 10.1.88.0 255.255.255.128
     network-object 10.1.88.128 255.255.255.128
    Define an ACL for VPN Client access.
    access-list VPN_CLIENT_ACL remark === ACL for range the VPN users will access across VPN
    access-list VPN_CLIENT_ACL standard permit 192.168.1.0 255.255.0.0
    ip local pool VPN_CLIENT_POOL 10.1.1.1-10.1.1.254 mask 255.255.255.0
    Define NAT statements for PAT of outside interface (192.168.1.2 is actually the name of an object-group):
    nat (inside,outside) source static 192.168.1.2 interface service HTTPS HTTPS
    nat (inside,outside) source static 192.168.1.2 interface service SMTP SMTP
    Define NAT statements for NO-NAT traffic (i.e. traffic destinations we never want to apply NAT on)
    nat (inside,outside) source static any any destination static NO_NAT NO_NAT
    Define NAT statement for overload NAT (i.e. everyone from object group 192.168.1.0 can be overloaded with NAT to appear as 1.1.1.1 on way out to internet).
    object network 192.168.1.0
     nat (inside,outside) dynamic interface
    Define AAA to use local database for ASDM/SSH.
    aaa authentication ssh console LOCALaaa authentication http console LOCAL 
    Define default route to internet via next hop 1.1.1.2.
    route outside 0.0.0.0 0.0.0.0 1.1.1.2 1
    Define global anyconnect settings (image locations, port used, interface anyconnect is enabled on, etc)
    webvpn
     port 442
     enable outside
     anyconnect-essentials
     anyconnect image disk0:/anyconnect-win-3.0.08057-k9.pkg 2
     anyconnect image disk0:/anyconnect-linux-2.5.2014-k9.pkg 3
     anyconnect enable
     tunnel-group-list enable
    Define group-policy settings for VPN clients to use (anything not defined here is inherited from default group-policy (do a show run all to see it)
    group-policy VPN_CLIENT_POLICY internal
    group-policy VPN_CLIENT_POLICY attributes
     dns-server value 192.168.1.2
     vpn-simultaneous-logins 25
     vpn-tunnel-protocol ssl-client
     split-tunnel-policy tunnelspecified
     split-tunnel-network-list value VPN_CLIENT_ACL
     default-domain value domain.com
     address-pools value VPN_CLIENT_POOL
    Define local accounts:
    username testaccount password xxxxxx encrypted
    username testaccount attributes
     service-type remote-access
    username admin password xxxxxx encrypted privilege 15
    Define VPN profile
    tunnel-group VPN type remote-access
    tunnel-group VPN general-attributes
     address-pool VPN_CLIENT_POOL
     default-group-policy VPN_CLIENT_POLICY
     tunnel-group VPN webvpn-attributes
     group-alias VPN enable
    In the above: 
    • Under the webvpn section there is the port 442 which moves Anyconnect to terminate to TCP port 442 rather then default 443 (HTTPS).
    • The outside interface IP has it's TCP ports for HTTPS and SMTP NAT translated to 192.168.1.2 in this example through the use of static NAT translations. 
    • We have a NO_NAT NAT statement which defines that we don't NAT anything going to the VPN Pool's IP (i.e. the IPs VPN users use - In this case 10.1.1.x/24) 
    • We have a global overload NAT which defines that on the way out to the internet from the inside interface we will be hidden behind the outside IP address of the ASA (i.e. 1.1.1.1 in this example). 
    • We also have two user accounts setup, 
      • admin account which has full admin/VPN access 
      • testaccount one which has access only to VPN (not to ASA admin).
    I'll stop here for now.... Hope this helps someone.

    3 August 2012

    Can you bridge ADSL PPPoA to an ASA using PPPoE... and make it work?

    No.

    ASA/PIX only support PPPoE as a PPP negotiation method. PPPoA and PPPoE have different methods of negotiating and to my knowledge there is no way to make them tunnel/work in unison from a bridged  Cisco router to the Cisco ASA running PPPoE.

    Background here is that today I was asked to configure a Cisco 887VA router and Cisco ASA 5510 together so that the ASA would have the public IP of the internet service on it's outside interface. This would mean running the 887VA in bridged mode (which is possible) and running PPP on the ASA 5510. This scenario is fine provided the ISP supports PPPoE for the internet service. If the ISP does PPPoA only... then forget it because the ASA only suppports PPPoE. The reasons why are that PPPoA requires specific ATM drivers/interactions which the ASA will never support (it has to do with ATM being CELL based technology vs packet-based). PPPoE is designed to be encapsulated by Ethernet (i.e. it is more abstracted from the medium used then PPPoA).

    This post helped me understand the PPPoE/PPPoA a lot better: http://www.petri.co.il/forums/showthread.php?t=1728

    Looks like I'm stuck configuring double-NAT for this one... oh well. If anyone knows better let me know. I tried this in my lab and just couldn't find a way to make this work.


    11 May 2012

    Where is "show dsl int atm 0" on newer 887VA / EHWIC-VA-DSL?

    Frequently in my career as a network engineer you need to find the true reason for why an issue is occurring. For ADSL it is important to know things like noise margins, attenuation and error counts as well as DSL sync statistics such as are you syncing at ADSL1/ADSL2/ADSL2+. With Cisco's recent refresh of equipment a few commands I relied upon with daily troubleshooting of ADSL ("show dsl interface atm 0") suddenly disappeared. I thought I'd help others who may be looking for the similar commands on the new router models.

    Behold!
    "show controllers vdsl 0 brief"
    Example output:
    RT01#show controllers vdsl 0/0/0 brief
    Controller VDSL 0/0/0 is UP
    Daemon Status:           Up                        XTU-R (DS)              XTU-C (US)
    Chip Vendor ID:         'BDCM'                   'ALCB'
    Chip Vendor Specific:   0x0000                   0x0000
    Chip Vendor Country:    0xB500                   0xB500
    Modem Vendor ID:        'CSCO'                   '    '
    Modem Vendor Specific:  0x4602                   0x0000
    Modem Vendor Country:   0xB500                   0x0000
    Serial Number Near:   FOCxxxxxxx2911/K9  15.2(1)
    Serial Number Far:
    Modem Version Near:    15.2(1)
    Modem Version Far:     0x0000
    Modem Status:            TC Sync (Showtime!)
    DSL Config Mode:         AUTO
    Trained Mode:            G.992.1 (ADSL) 
    Annex ATC Mode:                 
    ATMSelftest Result:         0x00
    DELT configuration:      disabled
    DELT state:              not running
    Trellis:                 ON                       
    ONSRA:                     disabled                        disabled 
    SRA count:              0                       0
    Bit swap:                enabled                         enabled 
    Bit swap count:         0                       0
    Line Attenuation:         7.5 dB                  7.0 dB
    Signal Attenuation:       7.5 dB                  0.0 dB
    Noise Margin:            18.5 dB                 24.0 dB
    Attainable Rate:        12132 kbits/s            1120 kbits/s
    Actual Power:            15.6 dBm                 9.1 dBm
    Total FECS:             0                        0
    Total ES:               0                        0
    Total SES:              0                        0
    Total LOSS:             0                        0
    Total UAS:              0                        0
    Total LPRS:             0                        0
    Total LOFS:             0                        0
    Total LOLS:             0                        0
    Full inits:             1Failed full inits:      0
    Short inits:            0Failed short inits:     0
    Firmware        Source          
    File Name (version)--------        ------          -------------------
    VDSL            embedded        
    VDSL_LINUX_DEV_01212008 (1)
    Modem FW  Version:      110331_1212-4.02L.03.A2pv6C032b.d23f
    Modem PHY Version:      A2pv6C032b.d23f
                      
                       DS Channel1     DS Channel0   US Channel1       US Channel0Speed (kbps):
                              0             7616            0               384
    SRA Previous Speed:       0                0             0                 0
    Previous Speed:           0                0             0                 0
    Total Cells:              0         92746827             0                 0
    User Cells:               0          1160177             0                 0
    Reed-Solomon EC:          0                0             0                 0
    CRC Errors:               0                0             0                 0
    Header Errors:            0                0             0                 0
    Interleave (ms):       0.00            16.00          0.00              0.25
    Actual INP:            0.00             2.00          0.00              0.00
    Training Log :  StoppedTraining 
    Log Filename : flash:vdsllog.bin
    From this command you can see the attenuation (7.0dB/7.5dB), noise margin (18.5dB/24dB) and the actual data rate we're synced at (bottom table in the "DS Channel0" and "US Channel0" for row "Speed (kbps)" - 7.6Mbps DOWN/384Kbps UP in this case).

    That's it. Hope it helps someone out there! I've been hunting for this one for a while.

    2 April 2012

    Cisco 887VAG - Unable to get the 3G working

    Today I was tasked with configuring a Cisco 887VAG's 3G interface... and had some issues. Here in Australia I've done plenty of 3G on Cisco router configurations so this one kind of frustrated me a little
    The basics of the issue are that the Cisco 887VAG doesn't seem to support "encapsulation ppp" even though the router happily accepts the command.
    The configuration for most 3G varieties with Cisco looks something like the following:

    TEST#
    cellular 0 gsm profile create 1 <APN> chap <username@domain.com.au> <password>
    TEST(config)#
    chat-script gsm "" "ATDT*98*1#" TIMEOUT 60 "CONNECT"
    !
    interface Cellular0
    description NextG Modem Dialer Interface
    no ip address
    encapsulation ppp
    dialer in-band
    dialer pool-member 1
    async mode interactive
    !
    interface Dialer1
    ip address negotiated
    ip virtual-reassembly
    encapsulation ppp
    dialer pool 1
    dialer idle-timeout 0
    dialer string gsm
    dialer persistent
    dialer-group 1
    no fair-queue
    no cdp enable
    ppp chap hostname <username@domain.com.au>
    ppp chap password <password>
    ppp ipcp dns request
    !
    !
    ip route 0.0.0.0 0.0.0.0 Dialer1 250
    !
    !
    access-list 1 permit any
    dialer-list 1 protocol ip list 1
    !
    !
    line 3
    script dialer gsm
    no exec
    transport input all
    transport output telnet
    In the above, you have a 3G profile, a cellular interface and dialer interface all joined together. On the 887VAG the encapsulation ppp command spat out an issue as follows:
    TEST(config)#int cell 0
    TEST(config-if)#encapsulation ppp
    Cellular0: Only SLIP encapsulation supported

    Without PPP we can't authenticate. Without authentication... it won't allow me to connect. Regardless, I couldn't find much information out there on this specific issue so I thought a blog entry would be handy. I've got a TAC case lodged with Cisco now... will update as more information comes to hand.
    The Cisco 887VAG is running:
    TEST#show ver

    Cisco IOS Software, C880 Software (C880DATA-UNIVERSALK9-M), Version 15.1(4)M3, RELEASE SOFTWARE (fc1)

    Technical Support: http://www.cisco.com/techsupport
    Copyright (c) 1986-2011 by Cisco Systems, Inc.
    Compiled Tue 06-Dec-11 22:52 by prod_rel_team
    ROM: System Bootstrap, Version 15.1(2r)T2, RELEASE SOFTWARE (fc1)

    TEST uptime is 1 hour, 11 minutes
    System returned to ROM by power-on
    System restarted at 00:56:10 UTC Mon Apr 2 2012
    System image file is "flash:c880data-universalk9-mz.151-4.M3.bin"
    Last reload type: Normal ReloadTEST(config)#int cell 0

    =======================================

    Update 1:
    As John Marshall indicated in the comments below, there is a configuration guide available from Cisco here. I was directed to that guide by TAC just over the last week or so. I've had some delays with getting through to TAC for me due to SmartNet coverage and so forth.

    For me, the guide indicated didn't work.... I have several devices all fresh from factory. I tried setup a second 887VAG with the guide configuration from scratch like for like to what John did and still no go.

    I'm making some progress with TAC now... we will see how we go. Oh, and the SIM definitely works (it was confirmed on a 887G on my desk using the old style configuration security).

    This isn't all to say I haven't been making "some" progress though. The cellular interface on the new routers "HAS" to be slip encapsulation. It is just the way the new modem interfaces with the chassis. Refer to the configuration guide from Cisco for more information on that.

    I'll probably write another post with configuration/troubleshooting steps once I get it sorted completely... for the moment I'm still stuck but am working with TAC to get this resolved.

    For the meantime here are some useful commands:
    • debug cellular 0 messages all - If you want to see if the cellular interface is doing "something" chuck this command in to have a look at the back/forth between the cellular interface and the cell tower.
    • show cell 0 radio history all - This shows you RSSI history on the modem much like "show proc cpu history" shows you CPU loading history. Cool.
    • debug ppp negotiation / debug ppp authentication - In theory (at least on the old routers) these commands were useful because they confirmed either you were at the PPP level of the connection. I'm not sure if these work on the newer models though... yet. I plan to find out.
    Useful information:
    • The cellular profile referenced by the "AT" command seems to still be configured using the "cell 0 gsm profile create" command according to the guide
    • The chat-script line referenced by the old (AT98*1)/new (AT!SCACT=1,1) routers differs but achieves the same thing. These are the AT commands the chassis runs to initiate a connection on the onboard Sierra Wireless card to connect using a profile. The differences are mainly cosmetic and you shouldn't need to tinker with them beyond defining "1" as the profile.
    What I am thinking:
    • At the moment if I telnet into the modem itself (you shouldn't need to do this) and run the AT command specified by Cisco's guide I get an error:

      Router#telnet 1.1.1.1 2003
      Trying 1.1.1.1, 2003 ... Open
      AT!SCACT=1,1
      +CME ERROR: no network service

      Now I also tried creating a profile on the modem itself using AT commands that specified PAP authentication... and when I ran the AT command described above "OK". Which means "successful". Frustrating. (I've been careful to only play with AT commands on one device in case it breaks it)
    I'll continue to work through with Cisco...

    =======================================

    Update 2: Resolution
    In the end the Cisco provided configuration in the link above (or in comments) is correct. Use that configuration. My issue was related to the cellular profile not being the correct type. Telstra need IPv4 type profiles for internet. I was configuring PPP type profiles. I will write up a more detailed guide at some point.

    29 March 2012

    Outlook 2010 and the curse of the invisible mail rules...

    I just had a fun morning troubleshooting outlook. My mailbox had certain rules stopping noisy/mis-configured monitoring servers from popping up in my inbox all day. The monitoring server was repaired today and I wanted to remove the rule that pushed the "noise" mail to a particular folder and marked it as read... Easy enough, navigated to manage rules in Outlook 2010 and... huh? It looks like there are no rules pushing the false-positive alerts to the folder. Mails are still definitely being redirected though. This must be fixed!

    Just to be sure, I disable all rules in Outlook and wait for a few monitoring alerts to come through and of course they are still being caught by an invisible rule somewhere, and being moved to the specific folder and marked as read. So what's going on here?

    A few minutes Google-teching the issue I came across a few possible ways to resolve the issue.

    1. Quick-rebuild the Outlook profile - Remove profile in Windows Mail control panel item and pull it down again from Exchange server. This didn't work for me...
    2. Hard-rebuild of Outlook profile - Remove the profile completely (navigate to and delete AppData files/etc) and pull it down from the server again. Again, this didn't work for me...
    3. Break the rule - Removed the Outlook folder that contains the moved monitoring mails and also rebooted Outlook with a "/clearrules" argument - This worked...

    I know that removing folders that rules rely upon to breaks the Outlook rule logic thus the rule stops... so this may have resolved it. I am thinking the "/clearrules" flag also helped as well.

    Which one fixed it? Not exactly sure... but it works now. Regardless, hopefully this helps someone else...