def build(self, *args, **kwargs): """ +--------+ | server | +---+----+ | +--+-+ +-----+ r1 +-----+ | +----+ | +-------+ +-+--+ +--+-+ +--------+ | slave +-----+ r2 +----------+ r3 +-----+ master | +-------+ +----+ +----+ +--------+ """ # Add routers r1, r2, r3 = self.addRouters('r1', 'r2', 'r3') self.addLinks((r1, r2), (r1, r3), (r3, r2)) # Add hosts server = self.addHost('server') lr1server = self.addLink(r1, server) self.addSubnet(links=[lr1server], subnets=["192.168.0.0/24", "fc00::/64"]) master = self.addHost('master') master.addDaemon(Named) self.addLink(r3, master) slave = self.addHost('slave') slave.addDaemon(Named) self.addLink(r2, slave) # Declare a new DNS Zone # By default all the NS, A and AAAA records are generated # but you can add them explicitly to change their TTL records = [ARecord(server, "fc00::2", ttl=120)] self.addDNSZone(name="mydomain.org", dns_master=master, dns_slaves=[slave], nodes=[server], records=records) # By default IPMininet creates the reverse DNS zones for the addresses # of the other zones but if you want to change the default values of # the zone or of the PTR records, you can declare them explicitly. # The missing PTR records will be placed in this zone if their prefix # match or another reverse zone will be created. ptr_record = PTRRecord("fc00::2", server + ".mydomain.org", ttl=120) # reverse_domain_name is "f.ip6.arpa" reverse_domain_name = ip_address("fc00::").reverse_pointer[-10:] self.addDNSZone(name=reverse_domain_name, dns_master=master, dns_slaves=[slave], records=[ptr_record], ns_domain_name="mydomain.org", retry_time=8200) super().build(*args, **kwargs)
def test_dns_network(named_cfg, zone_args, exp_named_cfg, exp_zone_cfg): try: net = IPNet(topo=CustomDNSNetwork(named_cfg, zone_args)) net.start() # Check generated configurations with open("/tmp/named_master2.cfg") as fileobj: cfg = fileobj.readlines() for line in exp_named_cfg: assert line + "\n" in cfg,\ "Cannot find the line '%s' in the generated " \ "main configuration:\n%s" % (line, "".join(cfg)) with open("/tmp/named_master2.test.org.zone.cfg") as fileobj: cfg = fileobj.readlines() for line in exp_zone_cfg: assert line + "\n" in cfg,\ "Cannot find the line '%s' in the generated zone " \ "configuration:\n%s" % (line, "".join(cfg)) # Check port number configuration dns_server_port = named_cfg.get("dns_server_port", 53) assert_dns_record(net["master2"], "localhost", AAAARecord("master2.test.org", net["master2"].defaultIntf().ip6), port=dns_server_port) # Check connectivity assert_connectivity(net, v6=False) assert_connectivity(net, v6=True) # Check generated DNS record records = [ NSRecord("mydomain.org", "master"), NSRecord("mydomain.org", "slave"), ARecord("master.mydomain.org", net["master"].defaultIntf().ip), AAAARecord("master.mydomain.org", net["master"].defaultIntf().ip6), ARecord("slave.mydomain.org", net["slave"].defaultIntf().ip), AAAARecord("slave.mydomain.org", net["slave"].defaultIntf().ip6), ARecord("server.mydomain.org", net["server"].defaultIntf().ip), AAAARecord("server.mydomain.org", net["server"].defaultIntf().ip6, ttl=120), PTRRecord(net["master"].defaultIntf().ip, "master.mydomain.org"), PTRRecord(net["master"].defaultIntf().ip6, "master.mydomain.org"), PTRRecord(net["slave"].defaultIntf().ip, "slave.mydomain.org"), PTRRecord(net["slave"].defaultIntf().ip6, "slave.mydomain.org"), PTRRecord(net["server"].defaultIntf().ip, "server.mydomain.org"), PTRRecord(net["server"].defaultIntf().ip6, "server.mydomain.org", ttl=120) ] for node in [net["master"], net["slave"]]: for record in records: assert_dns_record(node, "localhost", record) time.sleep(10) net.stop() finally: cleanup()
def build(self, *args, **kwargs): """ Build the topology of our OVH network and set up it by adding routers, links, protocols, setting up routers reflectors, etc. """ # Adding routers fra1_g1 = self.addRouter("fra1_g1", [ IPv6Address("2023", "a", "c", "0", "0", "0", "0", "1", IPV6_LO_PREFIX).__str__(), IPv4Address(12, 16, 216, 1, IPV4_LO_PREFIX).__str__() ]) fra1_g2 = self.addRouter("fra1_g2", [ IPv6Address("2023", "a", "c", "0", "0", "0", "0", "2", IPV6_LO_PREFIX).__str__(), IPv4Address(12, 16, 216, 2, IPV4_LO_PREFIX).__str__() ]) fra_sbb1 = self.addRouter("fra_sbb1", [ IPv6Address("2023", "a", "c", "0", "0", "0", "0", "3", IPV6_LO_PREFIX).__str__(), IPv4Address(12, 16, 216, 3, IPV4_LO_PREFIX).__str__() ]) fra_sbb2 = self.addRouter("fra_sbb2", [ IPv6Address("2023", "a", "c", "0", "0", "0", "0", "4", IPV6_LO_PREFIX).__str__(), IPv4Address(12, 16, 216, 4, IPV4_LO_PREFIX).__str__() ]) fra_1 = self.addRouter("fra_1", [ IPv6Address("2023", "a", "c", "0", "0", "0", "0", "5", IPV6_LO_PREFIX).__str__(), IPv4Address(12, 16, 216, 5, IPV4_LO_PREFIX).__str__() ]) fra_5 = self.addRouter("fra_5", [ IPv6Address("2023", "a", "c", "0", "0", "0", "0", "6", IPV6_LO_PREFIX).__str__(), IPv4Address(12, 16, 216, 6, IPV4_LO_PREFIX).__str__() ]) rbx_g1 = self.addRouter("rbx_g1", [ IPv6Address("2023", "a", "d", "0", "0", "0", "0", "1", IPV6_LO_PREFIX).__str__(), IPv4Address(12, 16, 216, 7, IPV4_LO_PREFIX).__str__() ]) rbx_g2 = self.addRouter("rbx_g2", [ IPv6Address("2023", "a", "d", "0", "0", "0", "0", "2", IPV6_LO_PREFIX).__str__(), IPv4Address(12, 16, 216, 8, IPV4_LO_PREFIX).__str__() ]) sbg_g1 = self.addRouter("sbg_g1", [ IPv6Address("2023", "a", "e", "0", "0", "0", "0", "1", IPV6_LO_PREFIX).__str__(), IPv4Address(12, 16, 216, 9, IPV4_LO_PREFIX).__str__() ]) sbg_g2 = self.addRouter("sbg_g2", [ IPv6Address("2023", "a", "e", "0", "0", "0", "0", "2", IPV6_LO_PREFIX).__str__(), IPv4Address(12, 16, 216, 10, IPV4_LO_PREFIX).__str__() ]) par_th2 = self.addRouter("par_th2", [ IPv6Address("2023", "a", "f", "0", "0", "0", "0", "1", IPV6_LO_PREFIX).__str__(), IPv4Address(12, 16, 216, 11, IPV4_LO_PREFIX).__str__() ]) par_gsw = self.addRouter("par_gsw", [ IPv6Address("2023", "a", "f", "0", "0", "0", "0", "2", IPV6_LO_PREFIX).__str__(), IPv4Address(12, 16, 216, 12, IPV4_LO_PREFIX).__str__() ]) telia = self.addRouter("telia", [ IPv6Address("2299", "a", "5", "0", "0", "0", "0", "1", IPV6_LO_PREFIX).__str__(), IPv4Address(123, 3, 2, 1, IPV4_LO_PREFIX).__str__() ]) google = self.addRouter("google", [ IPv6Address("2169", "a", "6", "0", "0", "0", "0", "1", IPV6_LO_PREFIX).__str__(), IPv4Address(124, 3, 2, 1, IPV4_LO_PREFIX).__str__() ]) cogent = self.addRouter("cogent", [ IPv6Address("2174", "a", "7", "0", "0", "0", "0", "1", IPV6_LO_PREFIX).__str__(), IPv4Address(125, 3, 2, 1, IPV4_LO_PREFIX).__str__() ]) level3 = self.addRouter("level3", [ IPv6Address("2356", "a", "8", "0", "0", "0", "0", "1", IPV6_LO_PREFIX).__str__(), IPv4Address(126, 3, 2, 1, IPV4_LO_PREFIX).__str__() ]) all_routers = [ fra1_g1, fra1_g2, fra_sbb1, fra_sbb2, fra_1, fra_5, rbx_g1, rbx_g2, sbg_g1, sbg_g2, par_th2, par_gsw, telia, google, cogent, level3 ] fra_routers = [fra1_g1, fra1_g2, fra_sbb1, fra_sbb2, fra_1, fra_5] # In Frankfurt rbx_routers = [rbx_g1, rbx_g2] # In Roubaix sbg_routers = [sbg_g1, sbg_g2] # In Strasbourg par_routers = [par_th2, par_gsw] # In Paris ovh_routers = fra_routers + rbx_routers + sbg_routers + par_routers external_routers = [telia, google, cogent, level3] # Adding physical links self.add_physical_link(fra1_g1, fra1_g2, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "0", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 0, IPV4_LINK_PREFIX))) self.add_physical_link(fra1_g1, fra_sbb1, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "2", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 2, IPV4_LINK_PREFIX))) self.add_physical_link(fra1_g2, fra_sbb2, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "4", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 4, IPV4_LINK_PREFIX))) self.add_physical_link(fra_sbb1, fra_sbb2, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "6", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 6, IPV4_LINK_PREFIX))) self.add_physical_link(fra_sbb1, fra_5, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "8", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 8, IPV4_LINK_PREFIX))) self.add_physical_link(fra_sbb1, fra_1, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "a", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 10, IPV4_LINK_PREFIX))) self.add_physical_link( fra_sbb1, sbg_g1, (IPv6Address("2023", "b", "0", "0", "0", "0", "0", "c", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 12, IPV4_LINK_PREFIX)), igp_cost_value=2) self.add_physical_link( fra_sbb1, rbx_g1, (IPv6Address("2023", "b", "0", "0", "0", "0", "0", "e", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 14, IPV4_LINK_PREFIX)), igp_cost_value=5) self.add_physical_link(fra_sbb2, fra_1, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "10", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 16, IPV4_LINK_PREFIX))) self.add_physical_link(fra_sbb2, fra_5, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "12", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 18, IPV4_LINK_PREFIX))) self.add_physical_link( fra_sbb2, rbx_g2, (IPv6Address("2023", "b", "0", "0", "0", "0", "0", "14", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 20, IPV4_LINK_PREFIX)), igp_cost_value=5) self.add_physical_link( fra_sbb2, sbg_g2, (IPv6Address("2023", "b", "0", "0", "0", "0", "0", "16", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 22, IPV4_LINK_PREFIX)), igp_cost_value=2) self.add_physical_link(fra_1, telia, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "18", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 24, IPV4_LINK_PREFIX))) self.add_physical_link(fra_5, telia, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "1a", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 26, IPV4_LINK_PREFIX))) self.add_physical_link(fra_5, level3, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "1c", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 28, IPV4_LINK_PREFIX))) self.add_physical_link(rbx_g1, rbx_g2, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "1e", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 30, IPV4_LINK_PREFIX))) self.add_physical_link( rbx_g1, par_th2, (IPv6Address("2023", "b", "0", "0", "0", "0", "0", "20", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 32, IPV4_LINK_PREFIX)), igp_cost_value=3) self.add_physical_link(rbx_g2, par_gsw, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "22", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 34, IPV4_LINK_PREFIX))) self.add_physical_link(sbg_g1, sbg_g2, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "24", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 36, IPV4_LINK_PREFIX))) self.add_physical_link( sbg_g1, par_th2, (IPv6Address("2023", "b", "0", "0", "0", "0", "0", "26", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 38, IPV4_LINK_PREFIX)), igp_cost_value=5) self.add_physical_link(par_th2, par_gsw, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "28", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 40, IPV4_LINK_PREFIX))) self.add_physical_link( par_th2, google, (IPv6Address("2023", "b", "0", "0", "0", "0", "0", "2a", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 42, IPV4_LINK_PREFIX)), igp_cost_value=2) self.add_physical_link(par_th2, cogent, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "2c", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 44, IPV4_LINK_PREFIX))) self.add_physical_link( par_gsw, sbg_g2, (IPv6Address("2023", "b", "0", "0", "0", "0", "0", "2e", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 46, IPV4_LINK_PREFIX)), igp_cost_value=5) self.add_physical_link(par_gsw, level3, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "30", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 48, IPV4_LINK_PREFIX))) self.add_physical_link(par_gsw, cogent, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "32", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 50, IPV4_LINK_PREFIX))) self.add_physical_link( par_gsw, google, (IPv6Address("2023", "b", "0", "0", "0", "0", "0", "34", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 52, IPV4_LINK_PREFIX)), igp_cost_value=2) # Adding OSPF and BGP daemons to routers self.add_ospf(all_routers) self.add_bgp(ovh_routers, external_routers) # Adding AS ownerships self.addAS(OVH_AS, (fra1_g1, fra1_g2, fra_sbb1, fra_sbb2, fra_1, fra_5, rbx_g1, rbx_g2, sbg_g1, par_th2, par_gsw, sbg_g2)) self.addAS(TELIA_AS, (telia, )) self.addAS(COGENT_AS, (cogent, )) self.addAS(LEVEL3_AS, (level3, )) self.addAS(GOOGLE_AS, (google, )) # Configuring RRs/iBGP sessions peers_fra_fr5_sbb1 = peers_fra_5 = [fra1_g1, fra1_g2, fra_sbb2, fra_1] peers_rbx_g1 = peers_rbx_g2 = [sbg_g1, par_th2, par_gsw, sbg_g2] set_rr(self, rr=fra_sbb1, peers=peers_fra_fr5_sbb1) set_rr(self, rr=fra_5, peers=peers_fra_5) set_rr(self, rr=rbx_g1, peers=peers_rbx_g1) set_rr(self, rr=rbx_g2, peers=peers_rbx_g2) self.addiBGPFullMesh(16276, routers=[fra_sbb1, fra_5, rbx_g1, rbx_g2]) # (4*3)/2 iBGP sessions # Adding eBGP sessions ebgp_session(self, telia, fra_1, link_type=CLIENT_PROVIDER) ebgp_session(self, telia, fra_5, link_type=CLIENT_PROVIDER) ebgp_session(self, level3, fra_5, link_type=CLIENT_PROVIDER) ebgp_session(self, google, par_gsw, link_type=CLIENT_PROVIDER) ebgp_session(self, cogent, par_gsw, link_type=CLIENT_PROVIDER) ebgp_session(self, level3, par_gsw, link_type=CLIENT_PROVIDER) ebgp_session(self, cogent, par_th2, link_type=CLIENT_PROVIDER) ebgp_session(self, google, par_th2, link_type=CLIENT_PROVIDER) # DNS anycast sbg_web = self.addHost("sbg_web") fra_server = self.addRouter("fra_server", [ IPv6Address("2023", "a", "c", "0", "0", "0", "0", "7", IPV6_LO_PREFIX).__str__(), IPv4Address(12, 16, 216, 13, IPV4_LO_PREFIX).__str__() ]) rbx_server = self.addRouter("rbx_server", [ IPv6Address("2023", "a", "c", "0", "0", "0", "0", "7", IPV6_LO_PREFIX).__str__(), IPv4Address(12, 16, 216, 13, IPV4_LO_PREFIX).__str__() ]) fra_server.addDaemon( BGP, address_families=(AF_INET(redistribute=("connected", )), AF_INET6(redistribute=("connected", )))) rbx_server.addDaemon( BGP, address_families=(AF_INET(redistribute=("connected", )), AF_INET6(redistribute=("connected", )))) self.addAS(64512, (fra_server, )) # private ASN self.addAS(64513, (rbx_server, )) self.add_physical_link(rbx_g1, rbx_server, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "36", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 54, IPV4_LINK_PREFIX))) self.add_physical_link(fra_sbb2, fra_server, (IPv6Address( "2023", "b", "0", "0", "0", "0", "0", "36", IPV6_LINK_PREFIX), IPv4Address(12, 16, 217, 54, IPV4_LINK_PREFIX))) self.add_physical_link(sbg_g2, sbg_web, (IPv6Address( "2023", "e", "2", "0", "0", "0", "0", "3", IPV6_LINK_PREFIX), IPv4Address(12, 16, 218, 71, IPV4_LINK_PREFIX))) ebgp_session(self, fra_server, fra_sbb2, link_type=CLIENT_PROVIDER) ebgp_session(self, rbx_server, rbx_g1, link_type=CLIENT_PROVIDER) fra_server.addDaemon(Named) rbx_server.addDaemon(Named) self.addDNSZone(name=DOMAIN, dns_master=fra_server, dns_slaves=[rbx_server], nodes=[sbg_web]) reverse_domain_name_ipv6 = ip_address("2023::").reverse_pointer[ -10:] # adding a missing PTR record ptr_record_ipv6 = PTRRecord( IPv6Address("2023", "b", "0", "0", "0", "0", "0", "38", IPV6_LINK_PREFIX).__str__()[:-4], sbg_web + f".{DOMAIN}") self.addDNSZone(name=reverse_domain_name_ipv6, dns_master=fra_server, dns_slaves=[rbx_server], ns_domain_name=DOMAIN, records=[ptr_record_ipv6]) super().build(*args, **kwargs)
def build(self, *args, **kwargs): print('Building the Network, Please Wait.....') # Add routers # ----------------------------------------------------------------------------------------------------- # Singapore Routers BABE:1:00YM Y = 0 -> for loopback M = 0 -> for Singapore 139.99.0 # ----------------------------------------------------------------------------------------------------- sin_r1 = self.add_config_router( 'sin_r1', ["BABE:1:0000::1/128", "139.99.0.1/32"], family4=AF_INET(networks=('139.99.0.0/17', ), ), family6=AF_INET6(networks=('BABE:1:0000::/64', ), )) sin_r2 = self.add_config_router( 'sin_r2', ["BABE:1:0000::2/128", "139.99.0.2/32"], family4=AF_INET(networks=('139.99.0.0/17', ), ), family6=AF_INET6(networks=('BABE:1:0000::/64', ), )) sin_r3 = self.add_config_router( 'sin_r3', ["BABE:1:0000::3/128", "139.99.0.3/32"], family4=AF_INET(networks=('139.99.0.0/17', ), ), family6=AF_INET6(networks=('BABE:1:0000::/64', ), )) sin_r4 = self.add_config_router( 'sin_r4', ["BABE:1:0000::4/128", "139.99.0.4/32"], family4=AF_INET(networks=('139.99.0.0/17', ), ), family6=AF_INET6(networks=('BABE:1:0000::/64', ), )) sin_r5 = self.add_config_router( 'sin_r5', ["BABE:1:0000::5/128", "139.99.0.5/32"], family4=AF_INET(networks=('139.99.0.0/17', ), ), family6=AF_INET6(networks=('BABE:1:0000::/64', ), )) sin_r6 = self.add_config_router( 'sin_r6', ["BABE:1:0000::6/128", "139.99.0.6/32"], family4=AF_INET(networks=('139.99.0.0/17', ), ), family6=AF_INET6(networks=('BABE:1:0000::/64', ), )) # ----------------------------------------------------------------------------------------------------- # Australia Routers BABE:1:00YM Y = 0 -> for loopback M = 1 -> for Australia 139.99.0 # ----------------------------------------------------------------------------------------------------- syd_bb1 = self.add_config_router( 'syd_bb1', ["BABE:1:0001::1/128", "139.99.0.7/32"], family4=AF_INET(networks=('139.99.0.0/17', ), ), family6=AF_INET6(networks=('BABE:1:0001::/64', ), )) syd_bb2 = self.add_config_router( 'syd_bb2', ["BABE:1:0001::2/128", "139.99.0.8/32"], family4=AF_INET(networks=('139.99.0.0/17', ), ), family6=AF_INET6(networks=('BABE:1:0001::/64', ), )) syd_r3 = self.add_config_router( 'syd_r3', ["BABE:1:0001::3/128", "139.99.0.9/32"], family4=AF_INET(networks=('139.99.0.0/17', ), ), family6=AF_INET6(networks=('BABE:1:0001::/64', ), )) syd_r4 = self.add_config_router( 'syd_r4', ["BABE:1:0001::4/128", "139.99.0.10/32"], family4=AF_INET(networks=('139.99.0.0/17', ), ), family6=AF_INET6(networks=('BABE:1:0001::/64', ), )) syd_r5 = self.add_config_router( 'syd_r5', ["BABE:1:0001::5/128", "139.99.0.11/32"], family4=AF_INET(networks=('139.99.0.0/17', ), ), family6=AF_INET6(networks=('BABE:1:0001::/64', ), )) syd_r6 = self.add_config_router( 'syd_r6', ["BABE:1:0001::6/128", "139.99.0.12/32"], family4=AF_INET(networks=('139.99.0.0/17', ), ), family6=AF_INET6(networks=('BABE:1:0001::/64', ), )) # ----------------------------------------------------------------------------------------------------- # inter AS Routers /(telstra = BABE:1:0005/139.98.0)/(equinix = BABE:1:0007/139.96.0) # ----------------------------------------------------------------------------------------------------- syd_tel1 = self.add_config_router( 'syd_tel1', ["BABE:1:0005::1/128", "139.98.0.1/32"], family4=AF_INET(networks=('139.98.0.0/24', ), ), family6=AF_INET6(networks=('BABE:1:0005::/64', ), )) syd_tel2 = self.add_config_router( 'syd_tel2', ["BABE:1:0005::2/128", "139.98.0.2/32"], family4=AF_INET(networks=('139.98.0.0/24', ), ), family6=AF_INET6(networks=('BABE:1:0005::/64', ), )) syd_ntt1 = self.add_config_router( 'syd_ntt1', ["BABE:1:0006::1/128", "139.97.0.1/32"], family4=AF_INET(networks=('139.97.0.0/24', ), ), family6=AF_INET6(networks=('BABE:1:0006::/64', ), )) syd_eq = self.add_config_router( 'syd_eq', ["BABE:1:0007::1/128", "139.96.0.1/32"], family4=AF_INET(networks=('139.96.0.0/24', ), ), family6=AF_INET6(networks=('BABE:1:0007::/64', ), )) syd_ntt2 = self.add_config_router( 'syd_ntt2', ["BABE:1:0006::2/128", "139.97.0.2/32"], family4=AF_INET(networks=('139.97.0.0/24', ), ), family6=AF_INET6(networks=('BABE:1:0006::/64', ), )) # ----------------------------------------------------------------------------------------------------- # NTT = BABE:1:0006 / 139.96.0 # ----------------------------------------------------------------------------------------------------- sin_eq = self.add_config_router( 'sin_eq', ["BABE:1:0007::2/128", "139.96.0.2/32"], family4=AF_INET(networks=('139.96.0.0/24', ), ), family6=AF_INET6(networks=('BABE:1:0007::/64', ), )) sin_ntt = self.add_config_router( 'sin_ntt', ["BABE:1:0006::3/128", "139.97.0.3/32"], family4=AF_INET(networks=('139.97.0.0/24', ), ), family6=AF_INET6(networks=('BABE:1:0006::/64', ), )) sin_tel = self.add_config_router( 'sin_tel', ["BABE:1:0005::3/128", "139.98.0.3/32"], family4=AF_INET(networks=('139.98.0.0/24', ), ), family6=AF_INET6(networks=('BABE:1:0005::/64', ), )) # ----------------------------------------------------------------------------------------------------- # France Routers BABE:1:00YM = Y = o -> for loopback M = 2 -> for France / 139.95.0 # ----------------------------------------------------------------------------------------------------- mrs = self.add_config_router( 'mrs', ["BABE:1:0002::1/128", "139.95.0.1/32"], family4=AF_INET(networks=('139.95.0.0/24', ), ), family6=AF_INET6(networks=('BABE:1:0002::/64', ), )) # ----------------------------------------------------------------------------------------------------- # USA Routers BABE:1:00YM = Y = o -> for loopback M = 3 -> for USA / 139.94.0 # ----------------------------------------------------------------------------------------------------- lax = self.add_config_router( 'lax', ["BABE:1:0003::1/128", "139.94.0.1/32"], family4=AF_INET(networks=('139.94.0.0/24', ), ), family6=AF_INET6(networks=('BABE:1:0003::/64', ), )) sjo = self.add_config_router( 'sjo', ["BABE:1:0003::2/128", "139.94.0.2/32"], family4=AF_INET(networks=('139.94.0.0/24', ), ), family6=AF_INET6(networks=('BABE:1:0003::/64', ), )) # ----------------------------------------------------------------------------------------------------- # Customers Routers BABE:1:00YM:x+1 = Y = 2 -> for customers / 139.x+1.15 # ----------------------------------------------------------------------------------------------------- client1 = self.add_config_router( 'client1', ["BABE:1:0020:1::0/128", "139.91.15.0/32"], family4=AF_INET(networks=('139.91.15.0/24', ), ), family6=AF_INET6(networks=( 'BABE:1:0020:1::0/64', 'BABE:1f01::0/64', ), )) client1b = self.add_config_router( 'client1b', ["BABE:1:0020:1::1/128", "139.91.15.1/32"], family4=AF_INET(networks=('139.91.15.0/24', ), ), family6=AF_INET6(networks=( 'BABE:1:0020:1::0/64', 'BABE:1f01::0/64', ), )) client2 = self.add_config_router( 'client2', ["BABE:1:0020:2::0/128", "139.92.14.0/32"], family4=AF_INET(networks=('139.91.14.0/24', ), ), family6=AF_INET6(networks=('BABE:1:0020:2::0/64', ), )) client2b = self.add_config_router( 'client2b', ["BABE:1:0020:2::1/128", "139.91.14.1/32"], family4=AF_INET(networks=('139.91.14.0/24', ), ), family6=AF_INET6(networks=('BABE:1:0020:2::0/64', ), )) client3 = self.add_config_router( 'client3', ["BABE:1:0020:3::0/128", "139.91.13.0/32"], family4=AF_INET(networks=('139.93.15.0/24', ), ), family6=AF_INET6(networks=('BABE:1:0020:3::0/64', ), )) client3b = self.add_config_router( 'client3b', ["BABE:1:0020:3::1/128", "139.93.13.1/32"], family4=AF_INET(networks=('139.91.13.0/24', ), ), family6=AF_INET6(networks=('BABE:1:0020:3::0/64', ), )) # ----------------------------------------------------------------------------------------------------- # anycast Routers BABE:1:00YM: = Y = 3 -> for anycast / 139.1.10 # ----------------------------------------------------------------------------------------------------- lo4_anycast = "193.1.10.0/32" lo6_anycast = "BABE:1:0030::0/128" lo_anycast_addresses = (lo6_anycast, lo4_anycast) family4_anycast = "193.1.10.0/24" family6_anycast = "BABE:1:0030::0/64" anycast1 = self.add_config_router( 'anycast1', lo_anycast_addresses, family4=AF_INET(networks=(family4_anycast, ), ), family6=AF_INET6(networks=(family6_anycast, ), )) anycast2 = self.add_config_router( 'anycast2', lo_anycast_addresses, family4=AF_INET(networks=(family4_anycast, ), ), family6=AF_INET6(networks=(family6_anycast, ), )) anycast3 = self.add_config_router( 'anycast3', lo_anycast_addresses, family4=AF_INET(networks=(family4_anycast, ), ), family6=AF_INET6(networks=(family6_anycast, ), )) anycast4 = self.add_config_router( 'anycast4', lo_anycast_addresses, family4=AF_INET(networks=(family4_anycast, ), ), family6=AF_INET6(networks=(family6_anycast, ), )) # ----------------------------------------------------------------------------------------------------- # Add Links # ----------------------------------------------------------------------------------------------------- sin_r5_link_anycast1 = self.addLink(sin_r5, anycast1, igp_metric=2) sin_r5_link_anycast1['sin_r5'].addParams(ip=('139.4.99.1/30', 'BABE:4:99::1/64')) sin_r5_link_anycast1['anycast1'].addParams(ip=('139.4.99.2/30', 'BABE:4:99::2/64')) sin_r6_link_anycast2 = self.addLink(sin_r6, anycast2, igp_metric=2) sin_r6_link_anycast2['sin_r6'].addParams(ip=('139.5.99.1/30', 'BABE:5:99::1/64')) sin_r6_link_anycast2['anycast2'].addParams(ip=('139.5.99.2/30', 'BABE:5:99::2/64')) syd_bb1_link_anycast3 = self.addLink(syd_bb1, anycast3, igp_metric=2) syd_bb1_link_anycast3['syd_bb1'].addParams(ip=('139.8.99.1/30', 'BABE:8:99::1/64')) syd_bb1_link_anycast3['anycast3'].addParams(ip=('139.8.99.2/30', 'BABE:8:99::2/64')) syd_bb2_link_anycast4 = self.addLink(syd_bb2, anycast4, igp_metric=2) syd_bb2_link_anycast4['syd_bb2'].addParams(ip=('139.9.99.1/30', 'BABE:9:99::1/64')) syd_bb2_link_anycast4['anycast4'].addParams(ip=('139.9.99.2/30', 'BABE:9:99::2/64')) sin_r3_link_syd_r3 = self.addLink(sin_r3, syd_r3, igp_metric=2, password=OSPF_PW_OVH) sin_r3_link_syd_r3['sin_r3'].addParams(ip=('139.0.6.1/30', 'BABE:0:6::1/64')) sin_r3_link_syd_r3['syd_r3'].addParams(ip=('139.0.6.2/30', 'BABE:0:6::2/64')) sin_r1_link_syd_bb1 = self.addLink(sin_r1, syd_bb1, igp_metric=2, password=OSPF_PW_OVH) sin_r1_link_syd_bb1['sin_r1'].addParams(ip=('139.2.8.1/30', 'BABE:2:8::1/64')) sin_r1_link_syd_bb1['syd_bb1'].addParams(ip=('139.2.8.2/30', 'BABE:2:8::2/64')) sin_r1_link_mrs = self.addLink(sin_r1, mrs, igp_metric=2, password=OSPF_PW_OVH) sin_r1_link_mrs['sin_r1'].addParams(ip=('139.2.12.1/30', 'BABE:2:12::1/64')) sin_r1_link_mrs['mrs'].addParams(ip=('139.2.12.2/30', 'BABE:2:12::2/64')) sin_r2_link_syd_bb2 = self.addLink(sin_r2, syd_bb2, igp_metric=2, password=OSPF_PW_OVH) sin_r2_link_syd_bb2['sin_r2'].addParams(ip=('139.3.9.1/30', 'BABE:3:9::1/64')) sin_r2_link_syd_bb2['syd_bb2'].addParams(ip=('139.3.9.2/30', 'BABE:3:9::2/64')) sin_r2_link_sjo = self.addLink(sin_r2, sjo, igp_metric=2, password=OSPF_PW_OVH) sin_r2_link_sjo['sin_r2'].addParams(ip=('139.3.13.1/30', 'BABE:3:13::1/64')) sin_r2_link_sjo['sjo'].addParams(ip=('139.3.13.2/30', 'BABE:3:13::2/64')) sin_r2_link_mrs = self.addLink(sin_r2, mrs, igp_metric=2, password=OSPF_PW_OVH) sin_r2_link_mrs['sin_r2'].addParams(ip=('139.3.12.1/30', 'BABE:3:12::1/64')) sin_r2_link_mrs['mrs'].addParams(ip=('139.3.12.2/30', 'BABE:3:12::2/64')) syd_bb2_link_lax = self.addLink(syd_bb2, lax, igp_metric=2, password=OSPF_PW_OVH) syd_bb2_link_lax['syd_bb2'].addParams(ip=('139.9.14.1/30', 'BABE:9:14::1/64')) syd_bb2_link_lax['lax'].addParams(ip=('139.9.14.2/30', 'BABE:9:14::2/64')) sin_r3_link_sin_r1 = self.addLink(sin_r3, sin_r1, igp_metric=2, password=OSPF_PW_OVH) sin_r3_link_sin_r1['sin_r3'].addParams(ip=('139.0.2.1/30', 'BABE:0:2::1/64')) sin_r3_link_sin_r1['sin_r1'].addParams(ip=('139.0.2.2/30', 'BABE:0:2::2/64')) sin_r3_link_sin_r4 = self.addLink(sin_r3, sin_r4, igp_metric=2, password=OSPF_PW_OVH) sin_r3_link_sin_r4['sin_r3'].addParams(ip=('139.0.1.1/30', 'BABE:0:1::1/64')) sin_r3_link_sin_r4['sin_r4'].addParams(ip=('139.0.1.2/30', 'BABE:0:1::2/64')) sin_r1_link_sin_r5 = self.addLink(sin_r1, sin_r5, igp_metric=2, password=OSPF_PW_OVH) sin_r1_link_sin_r5['sin_r1'].addParams(ip=('139.2.4.1/30', 'BABE:2:4::1/64')) sin_r1_link_sin_r5['sin_r5'].addParams(ip=('139.2.4.2/30', 'BABE:2:4::2/64')) sin_r1_link_sin_r2 = self.addLink(sin_r1, sin_r2, igp_metric=2, password=OSPF_PW_OVH) sin_r1_link_sin_r2['sin_r1'].addParams(ip=('139.2.3.1/30', 'BABE:2:3::1/64')) sin_r1_link_sin_r2['sin_r2'].addParams(ip=('139.2.3.2/30', 'BABE:2:3::2/64')) sin_r2_link_sin_r6 = self.addLink(sin_r2, sin_r6, igp_metric=2, password=OSPF_PW_OVH) sin_r2_link_sin_r6['sin_r2'].addParams(ip=('139.3.5.1/30', 'BABE:3:5::1/64')) sin_r2_link_sin_r6['sin_r6'].addParams(ip=('139.3.5.2/30', 'BABE:3:5::2/64')) sin_r4_link_sin_r2 = self.addLink(sin_r4, sin_r2, igp_metric=2, password=OSPF_PW_OVH) sin_r4_link_sin_r2['sin_r4'].addParams(ip=('139.1.3.1/30', 'BABE:1:3::1/64')) sin_r4_link_sin_r2['sin_r2'].addParams(ip=('139.1.3.2/30', 'BABE:1:3::2/64')) syd_r3_link_syd_bb1 = self.addLink(syd_r3, syd_bb1, igp_metric=2, password=OSPF_PW_OVH) syd_r3_link_syd_bb1['syd_r3'].addParams(ip=('139.6.8.1/30', 'BABE:6:8::1/64')) syd_r3_link_syd_bb1['syd_bb1'].addParams(ip=('139.6.8.2/30', 'BABE:6:8::2/64')) syd_r3_link_syd_r4 = self.addLink(syd_r3, syd_r4, igp_metric=2, password=OSPF_PW_OVH) syd_r3_link_syd_r4['syd_r3'].addParams(ip=('139.6.7.1/30', 'BABE:6:7::1/64')) syd_r3_link_syd_r4['syd_r4'].addParams(ip=('139.6.7.2/30', 'BABE:6:7::2/64')) syd_r4_link_syd_bb2 = self.addLink(syd_r4, syd_bb2, igp_metric=2, password=OSPF_PW_OVH) syd_r4_link_syd_bb2['syd_r4'].addParams(ip=('139.7.9.1/30', 'BABE:7:9::1/64')) syd_r4_link_syd_bb2['syd_bb2'].addParams(ip=('139.7.9.2/30', 'BABE:7:9::2/64')) syd_bb1_link_syd_bb2 = self.addLink(syd_bb1, syd_bb2, igp_metric=2, password=OSPF_PW_OVH) syd_bb1_link_syd_bb2['syd_bb1'].addParams(ip=('139.8.9.1/30', 'BABE:8:9::1/64')) syd_bb1_link_syd_bb2['syd_bb2'].addParams(ip=('139.8.9.2/30', 'BABE:8:9::2/64')) syd_bb1_link_syd_r5 = self.addLink(syd_bb1, syd_r5, igp_metric=2, password=OSPF_PW_OVH) syd_bb1_link_syd_r5['syd_bb1'].addParams(ip=('139.8.10.1/30', 'BABE:8:10::1/64')) syd_bb1_link_syd_r5['syd_r5'].addParams(ip=('139.8.10.2/30', 'BABE:8:10::2/64')) syd_bb2_link_syd_r6 = self.addLink(syd_bb2, syd_r6, igp_metric=2, password=OSPF_PW_OVH) syd_bb2_link_syd_r6['syd_bb2'].addParams(ip=('139.9.11.1/30', 'BABE:9:11::1/64')) syd_bb2_link_syd_r6['syd_r6'].addParams(ip=('139.9.11.2/30', 'BABE:9:11::2/64')) sjo_link_lax = self.addLink(sjo, lax, igp_metric=2, password=OSPF_PW_OVH) sjo_link_lax['sjo'].addParams(ip=('139.13.14.1/30', 'BABE:13:14::1/64')) sjo_link_lax['lax'].addParams(ip=('139.13.14.2/30', 'BABE:13:14::2/64')) sin_eq_link_syd_eq = self.addLink(sin_eq, syd_eq, igp_metric=2, password=OSPF_PW_OVH) sin_eq_link_syd_eq['sin_eq'].addParams(ip=('139.16.17.1/30', 'BABE:16:17::1/64')) sin_eq_link_syd_eq['syd_eq'].addParams(ip=('139.16.17.2/30', 'BABE:16:17::2/64')) sin_r5_link_sin_eq = self.addLink(sin_r5, sin_eq, igp_metric=2) sin_r5_link_sin_eq['sin_r5'].addParams(ip=('139.4.16.1/30', 'BABE:4:16::1/64')) sin_r5_link_sin_eq['sin_eq'].addParams(ip=('139.4.16.2/30', 'BABE:4:16::2/64')) syd_bb2_link_syd_eq = self.addLink(syd_bb2, syd_eq, igp_metric=2) syd_bb2_link_syd_eq['syd_bb2'].addParams(ip=('139.9.17.1/30', 'BABE:9:17::1/64')) syd_bb2_link_syd_eq['syd_eq'].addParams(ip=('139.9.17.2/30', 'BABE:9:17::2/64')) sin_ntt_link_syd_ntt1 = self.addLink(sin_ntt, syd_ntt1, igp_metric=2) sin_ntt_link_syd_ntt1['sin_ntt'].addParams(ip=('139.32.33.1/30', 'BABE:32:33::1/64')) sin_ntt_link_syd_ntt1['syd_ntt1'].addParams(ip=('139.32.33.2/30', 'BABE:32:33::2/64')) sin_ntt_link_syd_ntt2 = self.addLink(sin_ntt, syd_ntt2, igp_metric=2) sin_ntt_link_syd_ntt2['sin_ntt'].addParams(ip=('139.32.34.1/30', 'BABE:32:34::1/64')) sin_ntt_link_syd_ntt2['syd_ntt2'].addParams(ip=('139.32.34.2/30', 'BABE:32:34::2/64')) syd_ntt1_link_syd_ntt2 = self.addLink(syd_ntt1, syd_ntt2, igp_metric=2) syd_ntt1_link_syd_ntt2['syd_ntt1'].addParams(ip=('139.33.34.1/30', 'BABE:33:34::1/64')) syd_ntt1_link_syd_ntt2['syd_ntt2'].addParams(ip=('139.33.34.2/30', 'BABE:33:34::2/64')) sin_r5_link_sin_ntt = self.addLink(sin_r5, sin_ntt, igp_metric=2) sin_r5_link_sin_ntt['sin_r5'].addParams(ip=('139.4.32.1/30', 'BABE:4:32::1/64')) sin_r5_link_sin_ntt['sin_ntt'].addParams(ip=('139.4.32.2/30', 'BABE:4:32::2/64')) syd_bb1_link_syd_ntt1 = self.addLink(syd_bb1, syd_ntt1, igp_metric=2) syd_bb1_link_syd_ntt1['syd_bb1'].addParams(ip=('139.8.33.1/30', 'BABE:8:33::1/64')) syd_bb1_link_syd_ntt1['syd_ntt1'].addParams(ip=('139.8.33.2/30', 'BABE:8:33::2/64')) syd_bb2_link_syd_ntt2 = self.addLink(syd_bb2, syd_ntt2, igp_metric=2) syd_bb2_link_syd_ntt2['syd_bb2'].addParams(ip=('139.9.34.1/30', 'BABE:9:34::1/64')) syd_bb2_link_syd_ntt2['syd_ntt2'].addParams(ip=('139.9.34.2/30', 'BABE:9:34::2/64')) sin_tel_link_syd_tel1 = self.addLink(sin_tel, syd_tel1, igp_metric=2) sin_tel_link_syd_tel1['sin_tel'].addParams(ip=('139.48.49.1/30', 'BABE:48:49::1/64')) sin_tel_link_syd_tel1['syd_tel1'].addParams(ip=('139.48.49.2/30', 'BABE:48:49::2/64')) sin_tel_link_syd_tel2 = self.addLink(sin_tel, syd_tel2, igp_metric=2) sin_tel_link_syd_tel2['sin_tel'].addParams(ip=('139.48.50.1/30', 'BABE:48:50::1/64')) sin_tel_link_syd_tel2['syd_tel2'].addParams(ip=('139.48.50.2/30', 'BABE:48:50::2/64')) syd_tel1_link_syd_tel2 = self.addLink(syd_tel1, syd_tel2, igp_metric=2) syd_tel1_link_syd_tel2['syd_tel1'].addParams(ip=('139.49.50.1/30', 'BABE:49:50::1/64')) syd_tel1_link_syd_tel2['syd_tel2'].addParams(ip=('139.49.50.2/30', 'BABE:49:50::2/64')) sin_r6_link_sin_tel = self.addLink(sin_r6, sin_tel, igp_metric=2) sin_r6_link_sin_tel['sin_r6'].addParams(ip=('139.5.48.1/30', 'BABE:5:48::1/64')) sin_r6_link_sin_tel['sin_tel'].addParams(ip=('139.5.48.2/30', 'BABE:5:48::2/64')) syd_bb1_link_syd_tel1 = self.addLink(syd_bb1, syd_tel1, igp_metric=2) syd_bb1_link_syd_tel1['syd_bb1'].addParams(ip=('139.8.49.1/30', 'BABE:8:49::1/64')) syd_bb1_link_syd_tel1['syd_tel1'].addParams(ip=('139.8.49.2/30', 'BABE:8:49::2/64')) syd_bb2_link_syd_tel2 = self.addLink(syd_bb2, syd_tel2, igp_metric=2) syd_bb2_link_syd_tel2['syd_bb2'].addParams(ip=('139.9.50.1/30', 'BABE:9:50::1/64')) syd_bb2_link_syd_tel2['syd_tel2'].addParams(ip=('139.9.50.2/30', 'BABE:9:50::2/64')) client1_link_client1b = self.addLink(client1, client1b, igp_metric=2) client1_link_client1b['client1'].addParams(ip=('139.96.96.1/30', 'BABE:96:96::1/64')) client1_link_client1b['client1b'].addParams(ip=('139.96.96.2/30', 'BABE:96:96::2/64')) sin_r5_link_client1 = self.addLink(sin_r5, client1, igp_metric=2) sin_r5_link_client1['sin_r5'].addParams(ip=('139.4.96.1/30', 'BABE:4:96:1::1/64')) sin_r5_link_client1['client1'].addParams(ip=('139.4.96.2/30', 'BABE:4:96:1::2/64')) sin_r5_link_client1b = self.addLink(sin_r5, client1b, igp_metric=2) sin_r5_link_client1b['sin_r5'].addParams(ip=('139.4.96.3/30', 'BABE:4:96:2::1/64')) sin_r5_link_client1b['client1b'].addParams(ip=('139.4.96.4/30', 'BABE:4:96:2::2/64')) client2_link_client2b = self.addLink(client2, client2b, igp_metric=2) client2_link_client2b['client2'].addParams(ip=('139.97.97.1/30', 'BABE:97:97::1/64')) client2_link_client2b['client2b'].addParams(ip=('139.97.97.2/30', 'BABE:97:97::2/64')) syd_bb1_link_client2 = self.addLink(syd_bb1, client2, igp_metric=2) syd_bb1_link_client2['syd_bb1'].addParams(ip=('139.8.97.1/30', 'BABE:8:97:1::1/64')) syd_bb1_link_client2['client2'].addParams(ip=('139.8.97.2/30', 'BABE:8:97:1::2/64')) syd_bb1_link_client2p = self.addLink(syd_bb1, client2b, igp_metric=2) syd_bb1_link_client2p['syd_bb1'].addParams(ip=('139.8.97.3/30', 'BABE:8:97:2::1/64')) syd_bb1_link_client2p['client2b'].addParams(ip=('139.8.97.4/30', 'BABE:8:97:2::2/64')) client3_link_client3b = self.addLink(client3, client3b, igp_metric=2) client3_link_client3b['client3'].addParams(ip=('139.98.98.1/30', 'BABE:98:98::1/64')) client3_link_client3b['client3b'].addParams(ip=('139.98.98.2/30', 'BABE:98:98::2/64')) syd_bb2_link_client3 = self.addLink(syd_bb2, client3, igp_metric=2) syd_bb2_link_client3['syd_bb2'].addParams(ip=('139.9.98.1/30', 'BABE:9:98:1::1/64')) syd_bb2_link_client3['client3'].addParams(ip=('139.9.98.2/30', 'BABE:9:98:1::2/64')) syd_bb2_link_client3b = self.addLink(syd_bb2, client3b, igp_metric=2) syd_bb2_link_client3b['syd_bb2'].addParams(ip=('139.9.98.3/30', 'BABE:9:98:2::1/64')) syd_bb2_link_client3b['client3b'].addParams(ip=('139.9.98.4/30', 'BABE:9:98:2::2/64')) # ----------------------------------------------------------------------------------------------------- # Add Hosts # ----------------------------------------------------------------------------------------------------- # Singapore hosts sin_h1 = self.addHost("sin_h1") sin_h2 = self.addHost("sin_h2") sin_h3 = self.addHost("sin_h3") sin_h4 = self.addHost("sin_h4") sin_h5 = self.addHost("sin_h5") sin_h6 = self.addHost("sin_h6") # Australia Hosts syd_h1 = self.addHost("syd_h1") syd_h2 = self.addHost("syd_h2") syd_h3 = self.addHost("syd_h3") syd_h4 = self.addHost("syd_h4") syd_h5 = self.addHost("syd_h5") syd_h6 = self.addHost("syd_h6") # mrs_h = self.addHost("mrs_h") sjo_h = self.addHost("sjo_h") lax_h = self.addHost("lax_h") # Equinix syd_eq_h = self.addHost("syd_eq_h") sin_eq_h = self.addHost("sin_eq_h") # NTT syd_ntt1_h = self.addHost("syd_ntt1_h") syd_ntt2_h = self.addHost("syd_ntt2_h") sin_ntt_h = self.addHost("sin_ntt_h") # Telstra syd_tel1_h = self.addHost("syd_tel1_h") syd_tel2_h = self.addHost("syd_tel2_h") sin_tel_h = self.addHost("sin_tel_h") # Clients client_h1 = self.addHost("client_h1") client_h2 = self.addHost("client_h2") client_h3 = self.addHost("client_h3") # ----------------------------------------------------------------------------------------------------- # Add links to Hosts # ----------------------------------------------------------------------------------------------------- self.addLinks( (sin_r3, sin_h1), (sin_r4, sin_h2), (sin_r1, sin_h3), (sin_r2, sin_h4), (sin_r5, sin_h5), (sin_r6, sin_h6), (syd_r3, syd_h1), (syd_r4, syd_h2), (syd_bb1, syd_h3), (syd_bb2, syd_h4), (syd_r5, syd_h5), (syd_r6, syd_h6), (mrs, mrs_h), (lax, lax_h), (sjo, sjo_h), (sin_eq, sin_eq_h), (syd_eq, syd_eq_h), (sin_ntt, sin_ntt_h), (syd_ntt2, syd_ntt2_h), (syd_ntt1, syd_ntt1_h), (syd_tel1, syd_tel1_h), (syd_tel2, syd_tel2_h), (sin_tel, sin_tel_h), (client1, client_h1), (client2, client_h2), (client3, client_h3)) # ----------------------------------------------------------------------------------------------------- # Add Subnets to Hosts # ----------------------------------------------------------------------------------------------------- # Singapore hosts self.addSubnet((sin_r3, sin_h1), subnets=('139.99.0.24/30', 'BABE:1:0000::8/126')) self.addSubnet((sin_r4, sin_h2), subnets=('139.99.0.28/30', 'BABE:1:0000::1C/126')) self.addSubnet((sin_r1, sin_h3), subnets=('139.99.0.32/30', 'BABE:1:0000::18/126')) self.addSubnet((sin_r2, sin_h4), subnets=('139.99.0.36/30', 'BABE:1:0000::2C/126')) self.addSubnet((sin_r5, sin_h5), subnets=('139.99.0.40/30', 'BABE:1:0000::3C/126')) self.addSubnet((sin_r6, sin_h6), subnets=('139.99.0.44/30', 'BABE:1:0000::30/126')) # Australia Hosts self.addSubnet((syd_r3, syd_h1), subnets=('139.99.0.48/30', 'BABE:1:0001::8/126')) self.addSubnet((syd_r4, syd_h2), subnets=('139.99.0.52/30', 'BABE:1:0001::1C/126')) self.addSubnet((syd_bb1, syd_h3), subnets=('139.99.0.56/30', 'BABE:1:0001::2C/126')) self.addSubnet((syd_bb2, syd_h4), subnets=('139.99.0.60/30', 'BABE:1:0001::3C/126')) self.addSubnet((syd_r5, syd_h5), subnets=('139.99.0.64/30', 'BABE:1:0001::30/126')) self.addSubnet((syd_r6, syd_h6), subnets=('139.99.0.68/30', 'BABE:1:0001::34/126')) # self.addSubnet((mrs, mrs_h), subnets=('139.95.0.24/30', 'BABE:1:0002::4/126')) self.addSubnet((sjo, sjo_h), subnets=('139.94.0.28/30', 'BABE:1:0003::4/126')) self.addSubnet((lax, lax_h), subnets=('139.94.0.44/30', 'BABE:1:0003::8/126')) # Equinix self.addSubnet((sin_eq, sin_eq_h), subnets=('139.96.0.36/30', 'BABE:1:0007::1C/126')) self.addSubnet((syd_eq, syd_eq_h), subnets=('139.96.0.44/30', 'BABE:1:0007::3C/126')) # NTT self.addSubnet((sin_ntt, sin_ntt_h), subnets=('139.97.0.48/30', 'BABE:1:0006::1C/126')) self.addSubnet((syd_ntt2, syd_ntt2_h), subnets=('139.97.0.24/30', 'BABE:1:0006::8/126')) self.addSubnet((syd_ntt1, syd_ntt1_h), subnets=('139.97.0.28/30', 'BABE:1:0006::10/126')) # Telstra self.addSubnet((syd_tel1, syd_tel1_h), subnets=('139.98.0.36/30', 'BABE:1:0005::1C/126')) self.addSubnet((syd_tel2, syd_tel2_h), subnets=('139.98.0.32/30', 'BABE:1:0005::8/126')) self.addSubnet((sin_tel, sin_tel_h), subnets=('139.98.0.44/30', 'BABE:1:0005::10/126')) # Clients self.addSubnet((client1, client_h1), subnets=('139.1.15.24/30', 'BABE:1:0020:1::4/126')) self.addSubnet((client2, client_h2), subnets=('139.1.14.28/30', 'BABE:1:0020:2::8/126')) self.addSubnet((client3, client_h3), subnets=('139.1.13.32/30', 'BABE:1:0020:3::10/126')) # In the same AS self.addAS(16276, routers=(sin_r3, sin_r4, sin_r1, sin_r2, sin_r5, sin_r6, syd_r3, syd_r4, syd_bb1, syd_bb2, syd_r5, syd_r6, mrs, sjo, lax, anycast1, anycast2, anycast3, anycast4)) # RR iBGP sessions set_rr(self, rr=sin_r1, peers=[ syd_r3, syd_r4, sin_r4, sin_r3, sin_r2, sin_r5, sin_r6, mrs, sjo, anycast1, anycast2 ]) set_rr(self, rr=sin_r2, peers=[ syd_r3, syd_r4, sin_r3, sin_r1, sin_r4, sin_r5, sin_r6, mrs, sjo, anycast1, anycast2 ]) set_rr(self, rr=syd_r5, peers=[ sin_r3, sin_r4, syd_r4, syd_bb1, syd_bb2, syd_r3, syd_r6, lax, anycast3, anycast4 ]) set_rr(self, rr=syd_r4, peers=[ sin_r3, sin_r4, syd_r3, syd_bb1, syd_bb2, syd_r5, syd_r6, lax, anycast3, anycast4 ]) self.addiBGPFullMesh(1616, (syd_eq, sin_eq)) self.addiBGPFullMesh(2914, (syd_ntt1, syd_ntt2, sin_ntt)) self.addiBGPFullMesh(4637, (syd_tel1, syd_tel2, sin_tel)) self.addiBGPFullMesh(1, (client1, client1b)) self.addiBGPFullMesh(2, (client2, client2b)) self.addiBGPFullMesh(3, (client3, client3b)) # eBGP sessions # Share cost sessions ebgp_session(self, sin_r5, sin_eq) ebgp_session(self, syd_bb2, syd_eq) # Provider sessions ebgp_session(self, syd_bb1, syd_ntt1) ebgp_session(self, syd_bb2, syd_ntt2) ebgp_session(self, sin_r5, sin_ntt) ebgp_session(self, sin_r6, sin_tel) ebgp_session(self, syd_bb1, syd_tel1) ebgp_session(self, syd_bb2, syd_tel2) # Clients sessions ebgp_session(self, client1, sin_r5) ebgp_session(self, client2, syd_bb1) ebgp_session(self, client3, syd_bb2) ebgp_session(self, client1b, sin_r5) ebgp_session(self, client2b, syd_bb1) ebgp_session(self, client3b, syd_bb2) # Send communities from neighbors all_al = AccessList('all', ('any', )) blackhole = AccessList('blackhole', ('BABE:1f01::0/64', )) # Client1 customer link client1.get_config(BGP).set_community('16276:120', to_peer=sin_r5, matching=(all_al, )) # Client1 customer backup link client1b.get_config(BGP).set_community('16276:115', to_peer=sin_r5, matching=(all_al, )) # Client1 blackholed prefix client1.get_config(BGP).set_community('16276:666', to_peer=sin_r5, matching=(blackhole, )) client1b.get_config(BGP).set_community('16276:666', to_peer=sin_r5, matching=(blackhole, )) # Client2 customer link client2.get_config(BGP).set_community('16276:120', to_peer=syd_bb1, matching=(all_al, )) # Client2 customer backup link client2b.get_config(BGP).set_community('16276:115', to_peer=syd_bb1, matching=(all_al, )) # Client3 customer link client3.get_config(BGP).set_community('16276:120', to_peer=syd_bb2, matching=(all_al, )) # Client3 customer backup link client3b.get_config(BGP).set_community('16276:115', to_peer=syd_bb2, matching=(all_al, )) # set MED for providers/peer that have several eBGP connection to OVH to differentiate them: # favor traffic with higher MED # equinix sin_eq.get_config(BGP).set_med(1, to_peer=sin_r5) syd_eq.get_config(BGP).set_med(4, to_peer=syd_bb1) # NTT sin_ntt.get_config(BGP).set_med(1, to_peer=sin_r5) syd_ntt1.get_config(BGP).set_med(1, to_peer=syd_bb1) syd_ntt2.get_config(BGP).set_med(4, to_peer=syd_bb2) # Telstra sin_tel.get_config(BGP).set_med(1, to_peer=sin_r6) syd_tel1.get_config(BGP).set_med(4, to_peer=syd_bb1) syd_tel2.get_config(BGP).set_med(1, to_peer=syd_bb2) # firewall table syd_bb1.addDaemon(IP6Tables, rules=ip6_rules) syd_bb2.addDaemon(IP6Tables, rules=ip6_rules) sin_r5.addDaemon(IP6Tables, rules=ip6_rules) sin_r6.addDaemon(IP6Tables, rules=ip6_rules) # Declare a new DNS Zone server4_addr = "10.11.12.13" server6_addr = "cafe::" domain = "ovh.com" server = self.addHost("server") self.addLink(sin_r1, server) records = [ ARecord(server, server4_addr, ttl=120), AAAARecord(server, server6_addr, ttl=120) ] self.addDNSZone(name=domain, dns_master=anycast3, dns_slaves=[anycast1, anycast2, anycast4], nodes=[server], records=records) ptr_records = [ PTRRecord(server4_addr, server + f".{domain}", ttl=120), PTRRecord(server6_addr, server + f".{domain}", ttl=120) ] reverse_domain_name_v4 = ip_address(server4_addr).reverse_pointer[-10:] reverse_domain_name_v6 = ip_address(server6_addr).reverse_pointer[-10:] self.addDNSZone(name=reverse_domain_name_v4, dns_master=anycast3, dns_slaves=[anycast1, anycast2, anycast4], records=ptr_records, ns_domain_name=domain, retry_time=8200) self.addDNSZone(name=reverse_domain_name_v6, dns_master=anycast3, dns_slaves=[anycast1, anycast2, anycast4], records=ptr_records, ns_domain_name=domain, retry_time=8200) super().build(*args, **kwargs)