Getting Started · Free starter lab

Your first Cisco lab: the CLI basics

Boot one router, configure an interface, ping a PC. Free, ungraded, no account — the basics every other lab assumes.

Get the lab

One file to import into CML: router R1 wired to PC1. PC1 is already set up — you configure R1.

Free · ungraded · no sign-in.

Topology: router R1 (Ethernet0/0, 192.168.1.1) connected to host PC1 (192.168.1.10) on the 192.168.1.0/24 network.R1PC1Et0/0192.168.1.1192.168.1.10
Walk-through

Ten steps from blank router to a working ping

Type each one yourself in R1's console.

  1. Import and start the lab

    Download first-cisco-lab.yaml below and import it into CML (Dashboard → Import), then press Start. When the nodes are running, click R1 and open its console. New to CML? The getting-started guide covers installing it.

    You should land at a Router> prompt. If you're asked “Would you like to enter the initial configuration dialog?”, type no and press Enter.

    The CML Import Lab page, with an empty “File(s) to import” field ready for a topology file.
    Dashboard → Import, then choose imports/lab-work.yaml from the unzipped package.
  2. Meet the command line (user EXEC mode)

    That Router> prompt is user EXEC mode — read-only. Four habits to build now:

    • Help: type ? to list what you can do, or show ? for everything show can do.
    • Tab completion: type pin then press Tab — IOS finishes it to ping.
    • Abbreviation: shorten any command to the fewest unique letters — sh ip int br is show ip interface brief.
    • Command history: press ↑ to bring back your last command.

    Nothing you do in user EXEC can change the device — explore freely.

    A CML console open on router RTR-BRANCH-R1, showing IOS boot messages above the RTR-BRANCH-R1> user EXEC prompt.
    Open a node's console and you land here — user EXEC mode, read-only.
  3. Enter privileged EXEC mode

    Type enable. The prompt changes from > to # — privileged EXEC mode, with full access to view and change. This lab has no enable password set, so it just works.

    Have a look around before you change anything:

    Router# show ip interface brief
    Router# show version
    Router# show running-config

    What you should see from show ip interface brief — the Ethernet interfaces are all down, because we haven't configured them yet:

    Interface              IP-Address      OK? Method Status                Protocol
    Ethernet0/0            unassigned      YES unset  administratively down down
    Ethernet0/1            unassigned      YES unset  administratively down down
    Ethernet0/2            unassigned      YES unset  administratively down down
    Ethernet0/3            unassigned      YES unset  administratively down down
    Loopback0              unassigned      YES unset  up                    up

    Loopback0 is a virtual interface — ignore it for now. show version gives the IOS version and uptime; show running-config is the live configuration. We only need Ethernet0/0 for this lab.

  4. Enter global configuration mode

    Enter global configuration mode with configure terminal (or conf t). The prompt gains (config):

    Router# configure terminal
    Enter configuration commands, one per line.  End with CNTL/Z.
    Router(config)#

    Everything you type here changes the running configuration immediately.

  5. Set the hostname

    Give the router a name. The prompt changes the instant you press Enter:

    Router(config)# hostname R1
    R1(config)#
  6. Configure the interface and bring it up

    Give Ethernet0/0 an address and turn it on. interface Ethernet0/0 drops you into interface configuration mode ((config-if)#):

    R1(config)# interface Ethernet0/0
    R1(config-if)# description Link to PC1
    R1(config-if)# ip address 192.168.1.1 255.255.255.0
    R1(config-if)# no shutdown

    What you should see — a moment after no shutdown:

    %LINK-3-UPDOWN: Interface Ethernet0/0, changed state to up
    %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to up

    description is optional — it just labels the port. Interfaces are administratively down by default; no shutdown enables them. The mask 255.255.255.0 is a /24.

  7. Back out and verify

    Return to privileged EXEC with end (or Ctrl+Z), then check your work:

    R1(config-if)# end
    R1# show ip interface brief

    What you should see — Ethernet0/0 is now up/up with your address:

    Interface              IP-Address      OK? Method Status                Protocol
    Ethernet0/0            192.168.1.1     YES manual up                    up
    Ethernet0/1            unassigned      YES unset  administratively down down
    Ethernet0/2            unassigned      YES unset  administratively down down
    Ethernet0/3            unassigned      YES unset  administratively down down
    Loopback0              unassigned      YES unset  up                    up

    Both right-hand columns need to read up — line status, then protocol.

  8. Ping PC1 — the payoff

    PC1 is already set to 192.168.1.10 with its gateway at 192.168.1.1 — the address you just gave R1:

    R1# ping 192.168.1.10

    What you should see:

    Type escape sequence to abort.
    Sending 5, 100-byte ICMP Echos to 192.168.1.10, timeout is 2 seconds:
    .!!!!
    Success rate is 80 percent (4/5), round-trip min/avg/max = 1/1/2 ms

    Each ! is a reply; a . is a timeout. The first packet often shows a . while ARP resolves PC1's MAC address — run the ping again for a clean !!!!!.

  9. Save your work

    Your work lives in the running-config (RAM). A reload boots from the startup-config (NVRAM) instead and loses it. Save the running config to startup:

    R1# copy running-config startup-config
    Destination filename [startup-config]?

    Press Enter to accept the destination.

    Building configuration...
    [OK]

    write memory (or wr) does the same thing.

  10. Find your way around the modes

    The whole map you just used:

    Router>User EXEC — read-only. enter with: log in
    Router#Privileged EXEC — full view + save/reload. enter with: enable
    (config)#Global config — change the device. enter with: configure terminal
    (config-if)#Interface config — change one interface. enter with: interface Ethernet0/0

    To move back out:

    • exit — steps back one level (interface → global → privileged).
    • end or Ctrl+Z — jumps straight back to privileged EXEC from any config mode.
    • disable — drops from privileged EXEC back to user EXEC.
When it doesn't work

Common IOS messages, decoded

Everyone hits these on day one.
% Ambiguous command: "co"

Too few letters — co could be configure, copy, and more. Type a few more.

% Incomplete command.

The command needs more after it — ip address still needs an address and mask. Add ? at the end to see what IOS expects.

% Invalid input detected at '^' marker.

A typo, or you're in the wrong mode. The ^ points at the character IOS didn't like — check your spelling and your prompt.

Nothing happens when I type a config command

Config commands only work in a config mode. From a > or # prompt, type enable, then configure terminal, first.

Ready for the real thing?

Build it, submit your config, get pass/fail on every requirement. Then pick from the CCNA labs.

Cisco, Cisco IOS, and Cisco Modeling Labs are trademarks of Cisco Systems, Inc. Goldfish Networks is not affiliated with or endorsed by Cisco; we publish independent practice labs that import into CML.