## 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 {{ private_address }}/24;
            }
        }
    }
    ge-0/0/1 {
        unit 0 {
            family inet {
                address {{ public_address }}/24;
            }
        }
    }
    ge-0/0/2 {
        unit 0 {
            family inet {
                address {{ admin_address }};
            }
        }
    }
}
routing-options {
    route-distinguisher-id {{ private_address }};
    autonomous-system 64512;
    dynamic-tunnels {
        dynamic_overlay_tunnels {
            source-address {{ private_address }};
            gre;
            destination-networks {
                {{ private_network }}/24;
            }
        }
    }
}
protocols {
    mpls {
        interface all;
    }
    bgp {
        group Contrail_Controller {
            type internal;
            local-address 172.16.10.90;
            keep all;
            family inet-vpn {
                unicast;
            }
            allow {{ private_network }}/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 {{ public_network }} discard;
                route 0.0.0.0/0 next-hop {{ public_network_gateway }};
            }
        }
    }
}
