## Last commit: 2017-05-18 08:39:52 UTC by root
version 12.1X46-D20.5;
system {
    host-name vsrx1;
    root-authentication {
        encrypted-password "$1$gpbfk/Jr$lF2foqHYBd/Sp56dlmkXH1"; ## SECRET-DATA
    }
    name-server {
        8.8.8.8;
        8.8.4.4;
    }
    services {
        ssh;
        web-management {
            http {
                interface ge-0/0/0.0;
            }
        }
    }
    syslog {
        file messages {
            any any;
        }
    }
    license {
        autoupdate {
            url https://ae1.juniper.net/junos/key_retrieval;
        }
    }
    ntp {
        peer 46.243.48.4;
        peer 147.251.48.140;
        peer 46.243.48.88;
    }
}
interfaces {
    ge-0/0/0 {
        unit 0 {
            family inet {
                address 172.16.10.90/24;
            }
        }
    }
    ge-0/0/1 {
        unit 0 {
            family inet {
                address 192.168.10.90/24;
            }
        }
    }
    ge-0/0/2 {
        unit 0 {
            family inet {
                address 10.70.0.90/24;
            }
        }
    }
}
routing-options {
    route-distinguisher-id 172.16.10.90;
    autonomous-system 64512;
    dynamic-tunnels {
        dynamic_overlay_tunnels {
            source-address 172.16.10.90;
            gre;
            destination-networks {
                172.16.10.0/24;
            }
        }
    }
}
protocols {
    mpls {
        interface all;
    }
    bgp {
        group Contrail_Controller {
            type internal;
            local-address 172.16.10.90;
            keep all;
            family inet-vpn {
                unicast;
            }
            allow 172.16.10.0/24;
        }
    }
}
security {
    forwarding-options {
        family {
            mpls {
                mode packet-based;
            }
        }
    }
}
routing-instances {
    public {
        instance-type vrf;
        interface ge-0/0/1.0;
        vrf-target target:64512:10000;
        vrf-table-label;
        routing-options {
            static {
                route 192.168.10.0/24 discard;
                route 0.0.0.0/0 next-hop 192.168.10.1;
            }
        }
    }
}
