Is it possible to make a connection between a Linux router and AWS Direct Connect without the need of physical hardware?

It turns out that it's pretty easy to connect to EC2 by using Quagga with Debian Linux.

/etc/network/interfaces

auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet static
    address 10.x.x.x
    netmask 255.255.255.0
    network 10.x.x.x
    broadcast 10.x.x.x
    gateway 10.x.x.x

allow-hotplug eth1
iface eth1 inet static
    address 169.254.237.18
    netmask 255.255.255.252
    network 169.254.237.16
    broadcast 169.254.237.19

/etc/quagga/bgpd.conf

!
! Zebra configuration saved from vty
!   2006/06/09 16:13:05
!
hostname rr1-bgp
password zebra
enable password zebra
log file /var/log/quagga/bgpd.log
!
router bgp 65000
  neighbor 169.254.237.17 remote-as 7224
  neighbor 169.254.237.17 password PASSWORD_FROM_AWS_CONSOLE
  network 10.10.21.0/24
!
line vty

However, as Quagga does not really support BFD we also gave BIRD (http://bird.network.cz) a try. A connection can be established with both, but I think it's better to support BFD on our side, too.

/etc/bird.conf

router id 169.254.237.18;

#debug protocols all;

protocol direct {
    interface "eth0";
}

protocol kernel {
    persist;        
    scan time 20;       
    export all;     
}

protocol device {
    scan time 100;
}

protocol bgp {
    description "My BGP link";
    local as 65000;
    neighbor 169.254.237.17 as 7224;
    password "PASSWORD_FROM_AWS_CONSOLE";
    export all;
    bfd on;
}

protocol bfd {
        interface "eth*" {
                min rx interval 5000 ms;
                min tx interval 5000 ms;
                idle tx interval 5000 ms;
        };
        multihop {
                interval 200 ms;
                multiplier 10;
        };
        neighbor 169.254.237.17;
}