Configuración SDN en router TP-LINK WR1043NDv3

Conectamos al switch por ssh
ssh root@192.168.1.1

Instalamos openvswitch
opkg update && opkg install openvswitch

Confirmamos que ovsdb-server en funcionamiento
ps | grep openvswitch

Modificamos las configuración de red editando el archivo /etc/config/network

config interface 'loopback'  
    option ifname 'lo'
    option proto 'static'
    option ipaddr '127.0.0.1'
    option netmask '255.0.0.0'

config globals 'globals'  
    option ula_prefix 'fd9e:ad02:4a25::/48'

# dhcp wan for management
config interface 'wan'  
    option ifname 'eth0'
    option proto 'static'
    option ipaddr '192.168.0.10' 
    option netmask '255.255.255.0'

config interface 'wan6'  
    option ifname 'eth0'
    option proto 'dhcpv6'

config switch  
    option name 'switch0'
    option reset '1'
    option enable_vlan '1'
    option enable_learning '0'

# Wan en vlan 2
# las demas interfaces en vlan 1
config switch_vlan  
    option device 'switch0'
    option vlan '2'
    option ports '5 6'

config switch_vlan  
    option device 'switch0'
    option vlan '3'
    option ports '1 0t' # 0t indica etiquetar paquetes en la interfaz 0

config switch_vlan  
    option device 'switch0'
    option vlan '4'
    option ports '2 0t'

config switch_vlan  
    option device 'switch0'
    option vlan '5'
    option ports '3 0t'

config switch_vlan  
    option device 'switch0'
    option vlan '6'
    option ports '4 0t'

# eth1.* estática y controlada por el controlador
config interface 'lan1'  
    option ifname 'eth1.3'
    option proto 'static'

config interface 'lan2'  
    option ifname 'eth1.4'
    option proto 'static'

config interface 'lan3'  
    option ifname 'eth1.5'
    option proto 'static'

config interface 'lan4'  
    option ifname 'eth1.6'
    option proto 'static'

Modificamos el archivo /etc/config/firewall para permitir todo el tráfico en la wan que usamos para la conexión con el controlador

config defaults  
    option syn_flood        1
    option input            ACCEPT
    option output           ACCEPT
    option forward          ACCEPT

Reiniciamos firewall y red.

/etc/init.d/firewall restart && /etc/init.d/network restart 

Conectamos a la wan del router ssh root@192.168.0.10

Configuramos ovs

ovs-vsctl add-br br-lan \
    -- set bridge br-lan other-config:hwaddr=00:00:aa:bb:cc:dd \
    -- set bridge br-lan protocols=OpenFlow10,OpenFlow13 \
    -- set-controller br-lan tcp:192.168.0.1:6633 \
    -- add-port br-lan eth1.3 \
    -- add-port br-lan eth1.4 \
    -- add-port br-lan eth1.5 \
    -- add-port br-lan eth1.6

 

En el controlador creamos el archivo de configuración /etc/ryu/faucet/faucet.yaml

vlans:
 1:
  vid: 1

dps:
 switch-1:
  dp_id: 0xaabbccdd
  timeout: 3600
  arp_neighbor_timeout: 3600
  proactive_learn: True

  interfaces:
   1:
    name: "eth1.3"
    native_vlan: 1
   2:
    name: "eth1.4"
    native_vlan: 1
   3:
    name: "eth1.5"
    native_vlan: 1
   4:
    name: "eth1.6"
    native_vlan: 1

Comandos útiles:

# Reiniciar faucet
pkill -HUP -f faucet.faucet

# Mostrar puerto-interfaz en Open vSwitch
ovs-vsctl -- --columns=name,ofport list Interface

# Mostrar flujos en switch, dump_flows br-lan
dump_flows () {
  ovs-ofctl -OOpenFlow13 --names --no-stat dump-flows "$@" \
    | sed 's/cookie=0x5adc15c0, //'
}

# Configurar datapath (16 dígitos hexa) en Open vSwitch
ovs-vsctl set bridge $BRIDGE other-config:datapath-id=$DATAPATHID