Refactoring code for new lab environment, adding settings file

This commit is contained in:
Dom 2023-09-09 02:34:01 +01:00
parent 439cf7e389
commit 10a713b01c
12 changed files with 32 additions and 211 deletions

View File

@ -1,5 +1,6 @@
import socket
import struct
import yaml
from dataclasses import dataclass
from datetime import datetime
@ -141,7 +142,7 @@ class Packet():
reply_packet_object.OP = bytes([0x02])
reply_packet_object.YIADDR = bytes([yiaddr[0], yiaddr[1], yiaddr[2], yiaddr[3]]) # Client IP
reply_packet_object.SIADDR = bytes([172, 16, 0, 200]) # Server IP: 172.16.0.200
reply_packet_object.SIADDR = bytes([192, 168, 1, 7]) # Server IP: 192.168.1.7
if _type == 'offer':
packet_type = bytes([53, 1, 2]) # DHCP offer packet
@ -152,11 +153,11 @@ class Packet():
reply_packet_object.OPTIONS = b"".join(
[
packet_type,
bytes([54, 4, 172, 16, 0, 200]), # Server identifier: 172.16.0.200
bytes([54, 4, 192, 168, 1, 7]), # Server identifier: 192.168.1.7
bytes([51, 4, 0x00, 0x01, 0x51, 0x80]), # Lease time: 86400
bytes([1, 4, 255, 255, 255, 254]), # Subnet mask: 255.255.255.254
bytes([3, 4, giaddr[0], giaddr[1], giaddr[2], giaddr[3]]), # Default gateway
bytes([150, 4, 172, 16, 0, 200]), # TFTP server: 172.16.0.200
bytes([150, 4, 192, 168, 1, 7]), # TFTP server: 192.168.1.7
Packet.construct_junos_suboptions(f'/configs/{client_device_name}.conf'), # Juniper specific suboptions
]
)
@ -164,11 +165,11 @@ class Packet():
reply_packet_object.OPTIONS = b"".join(
[
packet_type,
bytes([54, 4, 172, 16, 0, 200]), # Server identifier: 172.16.0.200
bytes([54, 4, 192, 168, 1, 7]), # Server identifier: 192.168.1.7
bytes([51, 4, 0x00, 0x01, 0x51, 0x80]), # Lease time: 86400
bytes([1, 4, 255, 255, 255, 254]), # Subnet mask: 255.255.255.254
bytes([3, 4, giaddr[0], giaddr[1], giaddr[2], giaddr[3]]), # Default gateway
bytes([150, 4, 172, 16, 0, 200]), # TFTP server: 172.16.0.200
bytes([150, 4, 192, 168, 1, 7]), # TFTP server: 192.168.1.7
Packet.construct_tlv(67, f'/configs/{client_device_name}.conf'), # Cisco specific bootfile
]
)
@ -297,10 +298,14 @@ class Packet():
return giaddr, yiaddr
class DHCPServer():
MAX_BYTES = 1024
SERVER_IP = '172.16.0.200'
PORT = 67
class DHCPServer(object):
def __init__(self, SETTINGS_FILE):
self.SETTINGS = yaml.load(open(SETTINGS_FILE), Loader=yaml.SafeLoader)
self.DHCP_SERVER_IP = self.SETTINGS.get('DHCP_SERVER_IP')
self.DHCP_SERVER_PORT = self.SETTINGS.get('DHCP_SERVER_PORT')
self.TFTP_SERVER_IP = self.SETTINGS.get('TFTP_SERVER_IP')
self.MAX_BYTES = self.SETTINGS.get('MAX_BYTES')
def create_socket(self):
'''
@ -321,7 +326,7 @@ class DHCPServer():
_socket=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)
_socket.bind((self.SERVER_IP, self.PORT))
_socket.bind((self.DHCP_SERVER_IP, self.DHCP_SERVER_PORT))
return _socket
@ -334,6 +339,9 @@ class DHCPServer():
topology: networkx Graph object detailing the network topology
'''
log('DHCP server is starting...', 'info')
log(f'DHCP server IP: {self.DHCP_SERVER_IP} running on port {self.DHCP_SERVER_PORT}', 'info')
log(f'TFTP server IP: {self.TFTP_SERVER_IP}', 'info')
socket = self.create_socket()
while True:

View File

@ -1,2 +1,4 @@
DHCP_SERVER_IP: 172.16.0.200
TFTP_SERVER_IP: 172.16.0.200
DHCP_SERVER_IP: 192.168.1.7
DHCP_SERVER_PORT: 67
TFTP_SERVER_IP: 192.168.1.7
MAX_BYTES: 1024

View File

@ -1,11 +0,0 @@
2023-04-08 14:16:10,531 [INFO] 👾 | Building topology...
2023-04-08 14:16:10,581 [INFO] 👾 | Topology name: Lab
2023-04-08 14:16:10,584 [INFO] 👾 | Drawing topology...
2023-04-08 14:16:11,510 [INFO] 👾 | Topology drawn, saved as: topology/topology.png
2023-04-08 14:16:11,512 [INFO] 👾 | Topology build complete
2023-04-08 14:16:11,515 [INFO] 👽 | Rendering configs...
2023-04-08 14:16:11,549 [INFO] 👽 | Rendered /srv/tftp/configs/LAB-897VA.conf
2023-04-08 14:16:11,573 [INFO] 👽 | Rendered /srv/tftp/configs/LAB-SRX300.conf
2023-04-08 14:16:11,575 [INFO] 👽 | Config rendering complete
2023-04-08 14:16:11,580 [INFO] 🤖 | DHCP server is starting...
2023-04-08 14:16:11,582 [INFO] 🤖 | Waiting for DHCP packets...

2
midas
View File

@ -11,7 +11,7 @@ if __name__ == '__main__':
topology.build()
provisioning = Provisioning()
provisioning.render(topology)
dhcp_server = DHCPServer()
dhcp_server = DHCPServer(SETTINGS_FILE='dhcp/settings.yaml')
dhcp_server.run(topology)
# Todo

View File

@ -3,7 +3,7 @@ import yaml
from jinja2 import Environment, FileSystemLoader
from utils.log import log
class Provisioning():
class Provisioning(object):
def render(self, topology):
'''
Summary:

View File

@ -127,9 +127,6 @@ interface GigabitEthernet8
interface Vlan1
no ip address
!
interface Vlan10
ip address {{ management_ip }} 255.255.255.0
!
interface Vlan20
ip address 10.0.0.5 255.255.255.254
ip ospf authentication message-digest

View File

@ -4,13 +4,6 @@ system {
plain-text-password-value "Juniper1";
}
login {
user datatech {
uid 2001;
class read-only;
authentication {
plain-text-password-value "Juniper1";
}
}
user neteng {
uid 2000;
class super-user;
@ -27,10 +20,6 @@ system {
ssh;
}
}
tacplus-server {
10.10.10.10 secret "Juniper1"; ## SECRET-DATA
11.11.11.11 secret "Juniper1"; ## SECRET-DATA
}
syslog {
archive size 100k files 3;
user * {
@ -46,36 +35,6 @@ system {
}
}
security {
authentication-key-chains {
key-chain BGP-KC-LHR14-R101-NCL62-R2 {
key 1 {
secret "$9$Vyws4JZjq.57-YoZU.m"; ## SECRET-DATA
start-time "2022-7-1.00:00:00 +0000";
}
key 2 {
secret "$9$0Yfd1clVbs2oJdV69pOSybs2aUj5TF9AuiHP5FnpuNdVbs24aZ"; ## SECRET-DATA
start-time "2023-4-3.15:13:45 +0000";
}
}
key-chain BGP-KC-NCL62-R2-SC-FW2 {
key 1 {
secret "$9$8x0Xxdws4ZGiKM7Vs2GU"; ## SECRET-DATA
start-time "2022-7-1.00:00:00 +0000";
}
key 2 {
secret "$9$B74EeW24JikmlKDH.m3n1RhyvWxNV24JikSreKLX7-VYGjzF6"; ## SECRET-DATA
start-time "2023-4-3.15:42:04 +0000";
}
}
key-chain BRMA-KC-LHR30-R101-NCL60-R1 {
key 1 {
apply-flags omit;
secret "$9$1HCREyeK87NbuOhrKMN-"; ## SECRET-DATA
key-name 4953bd1120ffcc31e1d044870c52d67b215c04f0c2ba1fccc970fa16d18a6b6f;
start-time "2023-3-31.14:22:24 +0000";
}
}
}
forwarding-options {
family {
mpls {
@ -83,21 +42,6 @@ security {
}
}
}
macsec {
connectivity-association BRMA-WAN-LHR30-R101-NCL60-R1 {
security-mode static-cak;
mka {
transmit-interval 6000;
sak-rekey-interval 60;
}
pre-shared-key-chain BRMA-KC-LHR30-R101-NCL60-R1;
}
interfaces {
ge-0/0/7 {
connectivity-association BRMA-WAN-LHR30-R101-NCL60-R1;
}
}
}
}
interfaces {
ge-0/0/0 {
@ -124,14 +68,6 @@ interfaces {
}
}
}
ge-0/0/5 {
description "Management Network";
unit 0 {
family inet {
address {{ management_ip }}/24;
}
}
}
lo0 {
unit 0 {
family inet {
@ -140,98 +76,6 @@ interfaces {
}
}
}
snmp {
v3 {
usm {
local-engine {
user snmp-user {
authentication-sha {
authentication-password "Juniper1"; ## SECRET-DATA
}
privacy-aes128 {
privacy-password "Juniper1"; ## SECRET-DATA
}
}
}
}
}
}
policy-options {
policy-statement BN-10-RMA-EXPORT {
term BGP {
from protocol bgp;
then {
community add BN-10-RMA-TARGET;
accept;
}
}
term OSPF {
from protocol ospf;
then {
community add BN-10-RMA-TARGET;
accept;
}
}
term AGGREGATE {
from protocol aggregate;
then {
community add BN-10-RMA-TARGET;
accept;
}
}
term REJECT-ALL {
then reject;
}
}
policy-statement BN-10-RMA-IMPORT {
term BGP {
from {
protocol bgp;
community BN-10-RMA-TARGET;
}
then accept;
}
term REJECT-ALL {
then reject;
}
}
community BN-10-RMA-TARGET members target:65100:1000;
}
access {
radius-server {
10.10.10.10 secret "Juniper1"; ## SECRET-DATA
11.11.11.11 secret "Juniper1"; ## SECRET-DATA
}
}
routing-instances {
BN-10-RMA {
protocols {
bgp {
group SEC-NET-FW {
type external;
description "eBGP to Security Network Firewall";
local-address 192.168.32.78;
hold-time 30;
peer-as 64900;
neighbor 192.168.32.79 {
description ncl62-sc-fw2;
authentication-key-chain BGP-KC-NCL62-R2-SC-FW2;
}
}
traceoptions {
file bgp.log;
flag state;
}
log-updown;
}
}
instance-type vrf;
route-distinguisher 65100:1000;
vrf-import BN-10-RMA-IMPORT;
vrf-export BN-10-RMA-EXPORT;
vrf-table-label;
}
}
protocols {
ospf {
area 0.0.0.0 {
@ -252,29 +96,12 @@ protocols {
}
}
}
bgp {
group IBGP-FULL-MESH {
type internal;
description "IBGP Full Mesh";
hold-time 30;
multipath {
multiple-as;
}
neighbor 172.17.0.0 {
description lhr14-bn-com-agg-r101;
authentication-key-chain BGP-KC-LHR14-R101-NCL62-R2;
}
}
traceoptions {
file bgp.log;
flag state;
}
log-updown;
}
lldp {
interface all;
}
}
routing-options {
autonomous-system 65100;
static {
route 192.168.1.0/24 next-hop 10.0.0.0;
}
}

View File

@ -1,3 +1,2 @@
hostname: LAB-897VA
management_ip: 172.16.0.3
loopback_ip: 2.2.2.2

View File

@ -1,3 +1,2 @@
hostname: LAB-SRX300
management_ip: 172.16.0.1
loopback_ip: 1.1.1.1

View File

@ -4,7 +4,7 @@ import yaml
from networkx.drawing.nx_agraph import to_agraph
from utils.log import log
class Topology():
class Topology(object):
def __init__(self):
self.G = nx.MultiGraph()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 91 KiB

View File

@ -1,6 +1,6 @@
Lab:
nodes:
PI-DHCP:
UBUNTU:
os: ubuntu
no_render: True
LAB-RELAY:
@ -28,10 +28,10 @@ Lab:
b_end_interface: GigabitEthernet8
edge_index: 0
3:
a_end: PI-DHCP
a_end: UBUNTU
b_end: LAB-RELAY
a_end_ip: 172.16.0.200
b_end_ip: 172.16.0.2
a_end_ip: 192.168.1.7
b_end_ip: 192.168.1.150
a_end_interface: eth0
b_end_interface: GigabitEthernet8
edge_index: 0