L4 Switching - Introduction
L4 switching typically involves connection tracking, NAT and common attack checks. Stateful inspection firewalls, NAT, URL filtering and SLB (Server Load Balancing) are some of the middle-box functions that take advantage of L4 switching. These middle-box functions inspect first few packets of every connection (TCP/UDP/ICMP etc..) and offload the connection processing to some fast path entity to do L4 switching. Normally both fastpath and normal path functionality reside in the same box/device.
Openflow, promoted by industry big names, is one of the protocols that separates control plane from data plane where control planes of multiple switches implemented in one logical central controller and leaving the data plane alone at devices, which are programmable to work in a specified way, thereby making devices simple.
Middle-box functions described above can also be separated - Normal path (service plane) and fast path (L4 switchiing). Normal path works on first packet or at the most first few packets and fast path works on the connection for rest of the packets in the connection. By implementing normal path (Service plane) in centralized logical controllers and leaving the fastpath (L4 switching) at the physical/logical device level, similar benefits of CP/DP separation can be achieved. Benefits include
- Programmable devices where device personality can be changed by controller applications. Now, Openflow switch can be made as L2 switch, L3 switch and/or L4 switch.
- By removing major software logic (in this case, it is service plane) from device to the central location, cost of ownership goes down for end customers.
- By centralizing the service plane, operation efficiency can be improved significantly
- Ease-of software upgrades
- Configure/Manage from a central location.
- Granular flow control.
- Visibility across all devices.
- Comprehensive traffic visualization
L4 Switching - Use cases:
- Branch office connectivity with corporate head quarters : Instead of having firewall, URL filtering and Policy control on every branch office device, it can be centralized at corporate office. First few packets of every connection could go to main office. Main office controller decides on the connection. If the connection is allowed, it lets the openflow switch in the branch office to forward rest of the traffic on that connection. This method only requires simple openflow switches in the branch office and all intelligence can be centralized at one location, that is, at main office. Thus, it reduces the need for skilled administrator at every branch office.
- Server Load Balancing in Data Centers: Today data-centers have expensive server load balancers to distribute the incoming connections to multiple servers. SLB devices are big boxes today for two reasons - Normal path processing that selects the best server for every new connection and fastpath packet processing are combined into one box/device. By offloading packet processing to inexpensive openflow switches, SLB devices only need to worry about normal path processing, which could be done in lesser expensive boxes and even using commodity PC hardware.
- Managed Service providers providing URL filtering capability to home & SME offices : Many homes today use PC based software to do URL filtering to provide safe internet experience to kids. SME administrators require URL filtering service to increase the productivity of their employees by preventing them to access recreational sites and also to prevent any malware contamination. Again, instead of deploying URL filtering service at customer office premises, service providers like to host this service centrally and manage centrally across multiple of their customers for operational efficiency. Openflow controller implementing URL filtering service can get hold of packets until URL is fetched, find the category of URL, apply policy and decide on whether to continue the connection. If the connection is to be continued, then it can program the openflow switch in customer premises to forward rest of the packets.
- Though URL filtering service is one use case given, this concept of centralizing the intelligence at one central place and programming the openflow switches for fast path is equally applicable for "Session Border Controller" and "Application Detection using DPI" and other services. Whichever service needs to inspect first few packets of the connection is candidate for Service Plane/L4 Switching separation using Openflow.
L4 Switching - Processing
L4 switching or fastpath entity are used to do connection level processing. Any connection consists of two flows - Client-to-Server (C-S) flow and Server-to-Client (S-C) flow.
Connections are typically 5-tuple based.
Functionality of L4 switching:
- Connection Management :
- Acts on the connection Add/Remove/Query/Modify requests from the service plane.
- Inactivity timeout : Activity is observed on the connection. If no activity for some time (programmed during the connection entry creation), connection entry is removed and notification is sent to the normal path.
- TCP Termination : L4 switching entity can remove the connection entry if it observes the both endpoints of TCP connections exchange FINs and ACKed. It can also remove the entry if TCP packet with RST is seen.
- Periodic notifications of the state collected to Service plane.
- Packet processing logic involves
- Pre-flow lookup actions typically performed:
- Packet integrity checks : Checksum verification of both IP and transport headers, Ensuring that the length field values are consistent with packet sizes etc..
- IP Reassembly: As the flows are identified by 5-tuples, it is required that packets are reassembled to determine the flow across fragments.
- IP Reassembly related attack checks and remediation
- Ping-of-Death attack checks (IP fragment Overrun) - Checking for full IP packet never exceeds 64K.
- Normalization of the IP fragments to remove overlaps to protect from teardrop related vulnerabilities.
- Too many overlap fragments - Remove the IP reassembly context when too many overlaps observed.
- Too many IP fragments & Very small IP fragment size: Drop the reassembly context and associated IP fragments.
- Incomplete IP fragments resulting Denial of Service attacks - Limit the number of reassembly contexts on per IP address pair, IP address etc..
- TCP Syn flood protection using TCP Syn Cookie mechanism
- Flow & Connection match: Find the flow entry and corresponding connection entry.
- Post lookup actions
- Network Address Translation : Translation of SIP, DIP, SP, DP.
- Sequence number translation in TCP connections : This is normally needed when the service plane updates the TCP payload that decreases or increases the size or when the TCP syn cookie processing is applied on the TCP connection.
- Delta Sequence number updates in TCP connections : This is normally required to ensure that right sequence number translation is applied, especially for retransmitted TCP packets.
- Sequence number attack checks : Ensuring that sequence numbers of the packets going in one direction of the connection are within some particular range. This is to ensure that any attacker injecting the traffic is not honored. This check is mainly required to stop TCP RST packets that are generated and sent by attackers. As RST packet terminates the connection and thereby creating DoS attack, it is required that this check is done.
- Forwarding action : To send the packet out by referring to routing tables and ARP tables.
IPSec - Introduction
IPSec is used to secure the IP packets. IP packets are encrypted to avoid leakage of data on the wire and also authenticated to ensure that the packets are indeed sent by the trusted party. It runs in two modes - Tunnel mode and transport mode. IP packets are encapsulated in another IP packet in tunnel mode. No additional IP header in involved in transport mode. IPSec applies the security on per packet basis - Hence it is datagram oriented protocol. Multiple encryption and authentication algorithms can be used to secure the packets. Encryption keys and authentication keys are established on per tunnel basis by the Internet Key Exchange Protocol (IKE). Essentially, IPSec protocol suite contains IKE protocol and IPSec-PP (Packet processing).
Traditionally, implementations use proprietary mechanism between IKE and IPSec-PP as both of them sit in the same box. New way of networking (SDN) centralizes control plane with distributed data paths. IPSec is one good candidate for this. When the control plane (IKE) is separated from the data path(IPSec-PP), then there is a need for some standardization for communication between IKE and IPSec-PP. Openflow is thought to be one of the protocols to separate out control plane and data plane. But Openflow as defined in OF 1.3.x specification did not keep IPSec CP-DP separation in mind. This blog post tries to provide extensions required in OF specification to enable IPsec CP-DP separation.
Openflow
ONF (Open Networking Foundataion) is standardizing Openflow protocol. Controllers using OF protocol programs the OF switches with flows and instructions/actions to be performed on packets. Openflow 1.3+ specification supports multiple tables which simplifies the controller programming as each table in the switch can be used for a purpose.
Contrary to what everybody says, Openflow protocol is not really friendly let alone to SP/FP separation, but also to L3 CP/DP separation. The way I look at OF today is that it is good for L2 CP/DP separation and also good for traffic steering kind of use cases, but it is not sufficient for L3 and L4 switching. This post tries to give some of the features that are required in OF specifications to support L4 switching in particular and L3 switching to some extent.
Contrary to what everybody says, Openflow protocol is not really friendly let alone to SP/FP separation, but also to L3 CP/DP separation. The way I look at OF today is that it is good for L2 CP/DP separation and also good for traffic steering kind of use cases, but it is not sufficient for L3 and L4 switching. This post tries to give some of the features that are required in OF specifications to support L4 switching in particular and L3 switching to some extent.
Extensions Required to realize L4 switching & IPSec CP-DP separation
Generic extensions:
Table selection on packet-out message:
Problem Description
Current OF 1.3 specification does not give provision for controllers to start the processing of packet-out message from a specific table in the switch. Currently, controller can send the packet-out message with set of actions. These actions are expected to be executed in the switch. Typically 'OUTPUT' action is expected to be specified by the controller in the action list. This action sends the packets out on the port given in "OUTPUT" action. One facility is provided to run through OF pipeline though. If the port in 'OUTPUT' action is specified to be a reserved port OFPP_TABLE, then the packet-out message execution starts from table 0.
Normally controllers takes advantage of multiple tables in the OF switch by dedicating tables to purposes. For example, when L4 switching with L3 forwarding are used, multiple tables are used - A table to classify packets, A table for Traffic Policing entries, A table for PBR and few tables for routing tables, a table for L4 connections and a table for next hop entries and a table for traffic shaping rules. Some tables are populated pro-actively by the OF controller , hence miss packets are not expected by controllers. Entries in some tables are populated re-actively. Tables such as 'L4 connections', 'Next hop' entries are created reactively by the controllers. Processing of the miss packets (packet-in) can result into a flow being created in the table which was the cause of miss packet. Then controllers likes to send back the packet to the OF switch and would like OF switch to start processing the packet as OF switch does when there is a matching entry. Controller programming does not get complicated if that was possible. As indicated before, due to limitations of the specification, controller can't ask switch to start from a specific table. Due to lack of this feature in the switches, controllers are forced to figure out the actions that would need to be performed and then program the action list in the packet-out message. In our view, that is quite complex task for the controller programmers. As I understand, many controller applications simply using packet-in message to create the fow, but drop the packet-in message. This is not good at all. Think of SYN packet getting lost. It would take some time for client to retransmit the TCP SYN packet and that delay results into very bad user experience.
Also, in few cases, applications (CP protocols such as OSPF, BGP) generate packets that needs to be sent out on the data network. Controllers typically sit in management network, not on the data network. Hence these packets are to be sent to the data network via OF switches. This can only be achieved by sending these packets as packet-out messages to the switch. Yet times, these packets need to be exposed to only part of the table pipeline. In these cases, it would be required to have ability for controllers to start the packet processing in the switch for these packets from a specific table given by controller.
Solution
Problem Description
Current OF 1.3 specification does not give provision for controllers to start the processing of packet-out message from a specific table in the switch. Currently, controller can send the packet-out message with set of actions. These actions are expected to be executed in the switch. Typically 'OUTPUT' action is expected to be specified by the controller in the action list. This action sends the packets out on the port given in "OUTPUT" action. One facility is provided to run through OF pipeline though. If the port in 'OUTPUT' action is specified to be a reserved port OFPP_TABLE, then the packet-out message execution starts from table 0.
Normally controllers takes advantage of multiple tables in the OF switch by dedicating tables to purposes. For example, when L4 switching with L3 forwarding are used, multiple tables are used - A table to classify packets, A table for Traffic Policing entries, A table for PBR and few tables for routing tables, a table for L4 connections and a table for next hop entries and a table for traffic shaping rules. Some tables are populated pro-actively by the OF controller , hence miss packets are not expected by controllers. Entries in some tables are populated re-actively. Tables such as 'L4 connections', 'Next hop' entries are created reactively by the controllers. Processing of the miss packets (packet-in) can result into a flow being created in the table which was the cause of miss packet. Then controllers likes to send back the packet to the OF switch and would like OF switch to start processing the packet as OF switch does when there is a matching entry. Controller programming does not get complicated if that was possible. As indicated before, due to limitations of the specification, controller can't ask switch to start from a specific table. Due to lack of this feature in the switches, controllers are forced to figure out the actions that would need to be performed and then program the action list in the packet-out message. In our view, that is quite complex task for the controller programmers. As I understand, many controller applications simply using packet-in message to create the fow, but drop the packet-in message. This is not good at all. Think of SYN packet getting lost. It would take some time for client to retransmit the TCP SYN packet and that delay results into very bad user experience.
Also, in few cases, applications (CP protocols such as OSPF, BGP) generate packets that needs to be sent out on the data network. Controllers typically sit in management network, not on the data network. Hence these packets are to be sent to the data network via OF switches. This can only be achieved by sending these packets as packet-out messages to the switch. Yet times, these packets need to be exposed to only part of the table pipeline. In these cases, it would be required to have ability for controllers to start the packet processing in the switch for these packets from a specific table given by controller.
Solution
Freescale Extension :
struct ofp_action_fsl_experimenter_goto_table {
uint16_t type; /* OFPAT_EXPERIMENTER. */
uint16_t len; /* Length is a multiple of 8. */
uint32_t experimenter; /** FSL Experimenter ID **/
uint16_t fsl_action_type; /** OFPAT_FSL_GOTO_TABLE **/
uint16_t table_id;
}
OFP_ASSERT(sizeof(struct ofp_action_fsl_experimenter_goto_table == 8);
table_id : When switch encounters this action, switch starts processing the packet from the table specified by 'table_id'.
Though this action is normally present in the action_list of e packet-out messages, this action can be used in flow_mod actions too. When there is GOTO_TABLE instruction and GOTO_TABLE action, then the GOTO_TABLE action takes precedence and GOTO_TABLE instruction is ignored.
Notice that 'table_id' size is 2 bytes. This was intentional. We believe that OF specifications in future would need to support more than 256 tables.