Example #1
0
    def __init__(self, *args, **kwargs):
        super(SNAT, self).__init__(*args, **kwargs)
        wsgi = kwargs['wsgi']
        wsgi.register(SNATRest, {nat_instance_name: self})

        self.ingress_table_id = service_config.service_sequence['nat_ingress']
        self.egress_table_id = service_config.service_sequence['nat_egress']
        self.forward_table_id = service_config.service_sequence['forwarding']
        self.goto_table_priority = service_config.service_priority[
            'goto_table']
        self.service_priority = service_config.service_priority['nat']

        settings = nat_settings.load()
        self.wan_port = settings['wan_port']
        self.public_ip = str(settings['public_ip'])
        self.public_gateway = str(settings['public_gateway'])
        self.public_ip_subnetwork = settings['public_ip_subnetwork']
        self.private_gateway = settings['private_gateway']
        self.private_subnetwork = settings['private_subnetwork']
        self.mac_on_wan = settings['mac_on_wan']
        self.mac_on_lan = settings['mac_on_lan']

        self.IDLE_TIME = 100
        self.port_counter = -1
        self.ports_pool = range(2000, 65536)
Example #2
0
    def nat_config_save(self, req, **kwargs):
        json_body = json.loads(req.body)

        save_dict = nat_settings.load()
        if save_dict is None:
            save_dict = {}

        save_dict['wan_port'] = json_body.get('wanPort')
        save_dict['public_ip'] = IPAddress(json_body.get('publicIP'))

        public_gateway = json_body.get('publicGateway')
        save_dict['public_gateway'] = IPAddress(public_gateway)
        save_dict['public_ip_subnetwork'] = IPNetwork(public_gateway + '/24')

        net = json_body.get('privateNetwork') + '/24'
        save_dict['private_subnetwork'] = IPNetwork(net)
        save_dict['private_gateway'] = IPNetwork(net)[1]

        save_dict['broadcast_ip'] = IPNetwork(net)[255]
        save_dict['dns_ip'] = IPAddress('8.8.8.8')

        save_dict['mac_on_dhcp'] = '08:00:27:b8:0f:8d'
        save_dict['mac_on_wan'] = '00:0e:c6:87:a6:fb'
        save_dict['mac_on_lan'] = '00:0e:c6:87:a6:fa'

        if nat_settings.save(save_dict):
            pp = pprint.PrettyPrinter(indent=2)
            pp.pprint(save_dict)
            return Response(status=200)
        else:
            return Response(status=400)
Example #3
0
    def __init__(self, *args, **kwargs):
        super(SimpleDHCPServer, self).__init__(*args, **kwargs)
        self.table_id = service_config.service_sequence['dhcp']
        self.service_priority = service_config.service_priority['dhcp']

        self.dhcp_msg_type_code = {
            1: 'DHCP_DISCOVER',
            2: 'DHCP_OFFER',
            3: 'DHCP_REQUEST',
            4: 'DHCP_DECLINE',
            5: 'DHCP_ACK',
            6: 'DHCP_NAK',
            7: 'DHCP_RELEASE',
            8: 'DHCP_INFORM',
        }

        dhcp_settings = nat_settings.load()
        self.private_gateway = dhcp_settings['private_gateway']
        self.broadcast_ip = dhcp_settings['broadcast_ip']
        self.private_subnetwork = dhcp_settings['private_subnetwork']
        self.ip_pool_list = list(self.private_subnetwork)

        print self.ip_pool_list
        print self.broadcast_ip

        self.dns_ip = dhcp_settings['dns_ip']
        self.mac_on_dhcp = dhcp_settings['mac_on_dhcp']
        self.mac_to_client_ip = {}
        assert self.private_gateway in self.ip_pool_list

        # self.ip_pool_list.remove(self.private_gateway)
        self.ip_pool_list.remove(self.private_gateway)
        self.ip_pool_list.remove(self.broadcast_ip)
        self.ip_pool_list.remove(self.private_subnetwork[0])
Example #4
0
    def nat_config_save(self, req, **kwargs):
        json_body = json.loads(req.body)

        save_dict = nat_settings.load()
        if save_dict is None:
            save_dict = {}

        save_dict['wan_port'] = json_body.get('wanPort')
        save_dict['nat_public_ip'] = IPAddress(json_body.get('natPublicIp'))
        save_dict['default_gateway'] = IPAddress(json_body.get('defaultGateway'))

        net = json_body.get('natPrivateNetwork') + '/24'
        save_dict['ip_network'] = IPNetwork(net)
        save_dict['dhcp_gw_addr'] = IPNetwork(net)[1]

        save_dict['broadcast_addr'] = IPAddress('192.168.8.255')
        save_dict['dns_addr'] = IPAddress('8.8.8.8')

        save_dict['dhcp_hw_addr'] = '08:00:27:b8:0f:8d'
        save_dict['MAC_ON_WAN'] = '00:0e:c6:87:a6:fb'
        save_dict['MAC_ON_LAN'] = '00:0e:c6:87:a6:fa'

        if nat_settings.save(save_dict):
            pp = pprint.PrettyPrinter(indent=2)
            pp.pprint(save_dict)
            return Response(status=200)
        else:
            return Response(status=400)
Example #5
0
    def __init__(self, *args, **kwargs):
        super(SNAT, self).__init__(*args, **kwargs)
        wsgi = kwargs['wsgi']
        wsgi.register(SNATRest, {nat_instance_name: self})

        settings = nat_settings.load()

        self.wan_port = settings['wan_port']

        self.gateway = str(settings['default_gateway'])

        self.nat_public_ip = str(settings['nat_public_ip'])
        self.nat_private_ip = settings['dhcp_gw_addr']

        self.private_subnetwork = settings['ip_network']

        self.MAC_ON_WAN = settings['MAC_ON_WAN']
        self.MAC_ON_LAN = settings['MAC_ON_LAN']
        self.IDLE_TIME = 100

        self.port_counter = -1
        self.ports_pool = range(2000, 65536)

        pp = pprint.PrettyPrinter(indent=2)
        pp.pprint(settings)
Example #6
0
    def dhcp_config_get(self, req, **kwargs):
        dhcp_settings = nat_settings.load()
        dic = {}

        dic['privateGateway'] = str(dhcp_settings['private_gateway'])
        dic['broadcastIP'] = str(dhcp_settings['broadcast_ip'])
        dic['dnsIP'] = str(dhcp_settings['dns_ip'])
        dic['macDhcp'] = str(dhcp_settings['mac_on_dhcp'])

        body = json.dumps(dic)
        return Response(status=200, content_type='application/json', body=body)
Example #7
0
    def dhcp_config_get(self, req, **kwargs):
        dhcp_settings = nat_settings.load()
        dic = {}

        dic['dhcp_gw_addr'] = str(dhcp_settings['dhcp_gw_addr'])
        dic['broadcast_addr'] = str(dhcp_settings['broadcast_addr'])
        dic['dns_addr'] = str(dhcp_settings['dns_addr'])
        dic['dhcp_hw_addr'] = str(dhcp_settings['dhcp_hw_addr'])

        body = json.dumps(dic)
        return Response(status=200, content_type='application/json', body=body)
Example #8
0
    def _packet_in_handler(self, ev):
        msg = ev.msg
        datapath = msg.datapath
        ofproto = datapath.ofproto
        parser = datapath.ofproto_parser
        in_port = msg.match['in_port']

        settings = nat_settings.load()
        if in_port == settings['wan_port']:
            return

        pkt = packet.Packet(msg.data)
        eth = pkt.get_protocols(ethernet.ethernet)[0]

        if eth.ethertype == ether_types.ETH_TYPE_LLDP:
            # ignore lldp packet
            return
        dst = eth.dst
        src = eth.src

        dpid = datapath.id
        self.mac_to_port.setdefault(dpid, {})

        # self.logger.info("packet in %s %s %s %s", dpid, src, dst, in_port)
        # learn a mac address to avoid FLOOD next time.
        self.mac_to_port[dpid][src] = in_port

        if dst in self.mac_to_port[dpid]:
            out_port = self.mac_to_port[dpid][dst]
        else:
            out_port = ofproto.OFPP_FLOOD

        actions = [parser.OFPActionOutput(out_port)]

        # install a flow to avoid packet_in next time
        if out_port != ofproto.OFPP_FLOOD:
            match = parser.OFPMatch(in_port=in_port, eth_dst=dst)
            # verify if we have a valid buffer_id, if yes avoid to send both
            # flow_mod & packet_out
            if msg.buffer_id != ofproto.OFP_NO_BUFFER:
                ofp_helper.add_flow(datapath, 1, match, actions, msg.buffer_id)
                return
            else:
                ofp_helper.add_flow(datapath, 1, match, actions)
        data = None
        if msg.buffer_id == ofproto.OFP_NO_BUFFER:
            data = msg.data

        out = parser.OFPPacketOut(datapath=datapath,
                                  buffer_id=msg.buffer_id,
                                  in_port=in_port,
                                  actions=actions,
                                  data=data)
        datapath.send_msg(out)
Example #9
0
    def _packet_in_handler(self, ev):
        msg = ev.msg
        datapath = msg.datapath
        ofproto = datapath.ofproto
        parser = datapath.ofproto_parser
        in_port = msg.match['in_port']

        settings = nat_settings.load()
        if in_port == settings['wan_port']:
            return

        pkt = packet.Packet(msg.data)
        eth = pkt.get_protocols(ethernet.ethernet)[0]

        if eth.ethertype == ether_types.ETH_TYPE_LLDP:
            # ignore lldp packet
            return
        dst = eth.dst
        src = eth.src

        dpid = datapath.id
        self.mac_to_port.setdefault(dpid, {})

        # self.logger.info("packet in %s %s %s %s", dpid, src, dst, in_port)
        # learn a mac address to avoid FLOOD next time.
        self.mac_to_port[dpid][src] = in_port

        if dst in self.mac_to_port[dpid]:
            out_port = self.mac_to_port[dpid][dst]
        else:
            out_port = ofproto.OFPP_FLOOD

        actions = [parser.OFPActionOutput(out_port)]

        # install a flow to avoid packet_in next time
        if out_port != ofproto.OFPP_FLOOD:
            match = parser.OFPMatch(in_port=in_port, eth_dst=dst)
            # verify if we have a valid buffer_id, if yes avoid to send both
            # flow_mod & packet_out
            if msg.buffer_id != ofproto.OFP_NO_BUFFER:
                ofp_helper.add_flow(datapath, 1, match, actions, msg.buffer_id)
                return
            else:
                ofp_helper.add_flow(datapath, 1, match, actions)
        data = None
        if msg.buffer_id == ofproto.OFP_NO_BUFFER:
            data = msg.data

        out = parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id,
                                  in_port=in_port, actions=actions, data=data)
        datapath.send_msg(out)
Example #10
0
    def nat_config_get(self, req, **kwargs):
        settings = nat_settings.load()
        dic = {}
        # local network
        ip = settings['private_subnetwork'].ip
        mask = settings['private_subnetwork'].netmask
        mask_len = mask.bits().replace('.', '').find('0')
        dic['privateNetwork'] = str(ip) + '/' + str(mask_len)

        dic['wanPort'] = settings['wan_port']
        dic['publicGateway'] = str(settings['public_gateway'])
        dic['publicIP'] = str(settings['public_ip'])

        body = json.dumps(dic)
        return Response(status=200, content_type='application/json', body=body)
Example #11
0
    def nat_config_get(self, req, **kwargs):
        settings = nat_settings.load()
        dic = {}

        # local network
        ip = settings['ip_network'].ip
        mask = settings['ip_network'].netmask
        mask_len = mask.bits().replace('.', '').find('0')
        dic['ip_network'] = str(ip) + '/' + str(mask_len)

        dic['wan_port'] = settings['wan_port']
        dic['default_gateway'] = str(settings['default_gateway'])
        dic['nat_public_ip'] = str(settings['nat_public_ip'])

        body = json.dumps(dic)
        return Response(status=200, content_type='application/json', body=body)
Example #12
0
    def __init__(self, *args, **kwargs):
        super(SimpleDHCPServer, self).__init__(*args, **kwargs)

        self.dhcp_msg_type_code = {
            1: 'DHCP_DISCOVER',
            2: 'DHCP_OFFER',
            3: 'DHCP_REQUEST',
            4: 'DHCP_DECLINE',
            5: 'DHCP_ACK',
            6: 'DHCP_NAK',
            7: 'DHCP_RELEASE',
            8: 'DHCP_INFORM',
        }

        dhcp_settings = nat_settings.load()
        self.dhcp_addr = dhcp_settings['dhcp_gw_addr']

        self.gw_addr = dhcp_settings['dhcp_gw_addr']
        self.broadcast_addr = dhcp_settings['broadcast_addr']

        self.ip_network = dhcp_settings['ip_network']
        self.ip_pool_list = list(self.ip_network)
        print self.ip_pool_list
        print self.broadcast_addr
        self.dns_addr = dhcp_settings['dns_addr']

        self.dhcp_hw_addr = dhcp_settings['dhcp_hw_addr']

        self.mac_to_client_ip = {}

        assert self.dhcp_addr in self.ip_pool_list
        assert self.gw_addr in self.ip_pool_list

        # self.ip_pool_list.remove(self.dhcp_addr)
        self.ip_pool_list.remove(self.gw_addr)
        self.ip_pool_list.remove(self.broadcast_addr)
        self.ip_pool_list.remove(self.ip_network[0])
Example #13
0
    def __init__(self, *args, **kwargs):
        super(SimpleDHCPServer, self).__init__(*args, **kwargs)

        self.dhcp_msg_type_code = {
            1: 'DHCP_DISCOVER',
            2: 'DHCP_OFFER',
            3: 'DHCP_REQUEST',
            4: 'DHCP_DECLINE',
            5: 'DHCP_ACK',
            6: 'DHCP_NAK',
            7: 'DHCP_RELEASE',
            8: 'DHCP_INFORM',
        }

        dhcp_settings = nat_settings.load()
        self.dhcp_addr = dhcp_settings['dhcp_gw_addr']

        self.gw_addr = dhcp_settings['dhcp_gw_addr']
        self.broadcast_addr = dhcp_settings['broadcast_addr']

        self.ip_network = dhcp_settings['ip_network']
        self.ip_pool_list = list(self.ip_network)
        print self.ip_pool_list
        print self.broadcast_addr
        self.dns_addr = dhcp_settings['dns_addr']

        self.dhcp_hw_addr = dhcp_settings['dhcp_hw_addr']

        self.mac_to_client_ip = {}

        assert self.dhcp_addr in self.ip_pool_list
        assert self.gw_addr in self.ip_pool_list

        # self.ip_pool_list.remove(self.dhcp_addr)
        self.ip_pool_list.remove(self.gw_addr)
        self.ip_pool_list.remove(self.broadcast_addr)
        self.ip_pool_list.remove(self.ip_network[0])