An OSPF Virtual Link allow two backbone area connected trough each ABR. The two ABRs form a neighbor relationship through the same nonbackbone area with that virtual link, even when separated by many other routers and subnets.
Example, two Company want to connect they nonbackbone area respectively. It makes there are two backbone area exist, and OSPF requires that backbone area be contiguous. To solve this problem, we will configures a virtual link between ABRs C1 and C2. The virtual link exists inside area 0, making area 0 contiguous.

The two ABRs will send their LSDB to each others as a unicast packet over virtual link, —the other router in nonbackbone area just forward this packet— so that all routers in both parts of area 0 learn the routes from the other area 0.  In this concept, LSA mark the Do Not Age (DNA), meaning that all routers on the other side of the virtual link will not expects the LSAs to be reflooded over the virtual link on the usual 30 minutes refresh interval, it helps reduce overhead over the virtual link.

C1#sh run | begin interface
interface Loopback1
 ip address 1.1.1.1 255.255.255.0
 ip ospf 1 area 1
!
interface FastEthernet0/0
 ip address 10.1.1.1 255.255.255.0
 ip ospf 1 area 0
 duplex auto
 speed auto
!
interface FastEthernet0/1
 ip address 10.21.1.1 255.255.255.0
 ip ospf 1 area 1
 duplex auto
 speed auto
!
router ospf 1
 log-adjacency-changes
 area 1 virtual-link 4.4.4.4
!
C1#sh ip ospf virtual-links
Virtual Link OSPF_VL0 to router 4.4.4.4 is up
  Run as demand circuit
  DoNotAge LSA allowed.
  Transit area 1, via interface FastEthernet0/1, Cost of using 30
  Transmit Delay is 1 sec, State POINT_TO_POINT,
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
    Hello due in 00:00:01
    Adjacency State FULL (Hello suppressed)
    Index 1/2, retransmission queue length 0, number of retransmission 1
    First 0x0(0)/0x0(0) Next 0x0(0)/0x0(0)
    Last retransmission scan length is 1, maximum is 1
    Last retransmission scan time is 0 msec, maximum is 0 msec
C1#

C2#sh run | be interface
interface Loopback1
 ip address 4.4.4.4 255.255.255.255
 ip ospf 4 area 1
!
interface FastEthernet0/0
 ip address 10.1.1.1 255.255.255.0
 ip ospf 4 area 0
 duplex auto
 speed auto
!
interface FastEthernet0/1
 ip address 10.24.1.1 255.255.255.0
 ip ospf 4 area 1
 duplex auto
 speed auto
!
router ospf 4
 log-adjacency-changes
 area 1 virtual-link 1.1.1.1
!
C2#sh ip ospf virtual-links
Virtual Link OSPF_VL0 to router 1.1.1.1 is up
  Run as demand circuit
  DoNotAge LSA allowed.
  Transit area 1, via interface FastEthernet0/1, Cost of using 30
  Transmit Delay is 1 sec, State POINT_TO_POINT,
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
    Hello due in 00:00:09
    Adjacency State FULL (Hello suppressed)
    Index 1/2, retransmission queue length 0, number of retransmission 1
    First 0x0(0)/0x0(0) Next 0x0(0)/0x0(0)
    Last retransmission scan length is 1, maximum is 1
    Last retransmission scan time is 0 msec, maximum is 0 msec
C2#

The “key” of this configuration is, interface that connect to nonbackbone area –for instance, interface FastEthernet0/1 in C1 and C2 router– must be in different subnet.

OSPF Virtual Link Authentication

C1#sh run | section ospf
router ospf 1
 log-adjacency-changes
 area 1 virtual-link 4.4.4.4 authentication message-digest
 area 1 virtual-link 4.4.4.4 message-digest-key 1 md5 pembajak
C1#

C2#sh run | section ospf
router ospf 4
 log-adjacency-changes
 area 1 virtual-link 1.1.1.1 authentication message-digest
 area 1 virtual-link 1.1.1.1 message-digest-key 1 md5 pembajak
C2#

Hope this post can inspire you.