All Projects → Jamesits → pilot

Jamesits / pilot

Licence: AGPL-3.0 license
Simple web-based SDN controller for family and friends

Programming Languages

python
139335 projects - #7 most used programming language
HTML
75241 projects
Dockerfile
14818 projects
shell
77523 projects
javascript
184084 projects - #8 most used programming language
CSS
56736 projects
powershell
5483 projects

Projects that are alternatives of or similar to pilot

pathman-sr
Pathman SR is an open-source app to compute paths and deploy routes in Segment Routing-enabled network.
Stars: ✭ 79 (+139.39%)
Mutual labels:  bgp, sdn, mpls
Exabgp
The BGP swiss army knife of networking
Stars: ✭ 1,713 (+5090.91%)
Mutual labels:  bgp, mpls, flowspec
calico-bgp-daemon
GoBGP based Calico BGP Daemon
Stars: ✭ 23 (-30.3%)
Mutual labels:  bgp, gobgp
gobgp exporter
Prometheus Exporter for GoBGP
Stars: ✭ 15 (-54.55%)
Mutual labels:  bgp, gobgp
Corebgp
CoreBGP is a BGP library written in Go that implements the BGP FSM with an event-driven, pluggable model.
Stars: ✭ 124 (+275.76%)
Mutual labels:  bgp, sdn
zero-ui
ZeroUI - ZeroTier Controller Web UI - is a web user interface for a self-hosted ZeroTier network controller.
Stars: ✭ 432 (+1209.09%)
Mutual labels:  sdn, sdn-controller
goplane
an agent for configuring linux network stack via GoBGP
Stars: ✭ 112 (+239.39%)
Mutual labels:  bgp, gobgp
Frr
The FRRouting Protocol Suite
Stars: ✭ 2,009 (+5987.88%)
Mutual labels:  bgp, mpls
Ryu-SDN-IP
SDN-IP project implemented by Ryu SDN framework.
Stars: ✭ 33 (+0%)
Mutual labels:  bgp, sdn
Kathara
A lightweight container-based network emulation system.
Stars: ✭ 139 (+321.21%)
Mutual labels:  bgp, sdn
freeRouter
freeRouter - networking swiss army knife
Stars: ✭ 26 (-21.21%)
Mutual labels:  bgp, mpls
hybridnet
A CNI plugin, provides networking environment where overlay and underlay containers can run on the same node and have cluster-wide bidirectional network connectivity.
Stars: ✭ 188 (+469.7%)
Mutual labels:  bgp, sdn
Kube Router
Kube-router, a turnkey solution for Kubernetes networking.
Stars: ✭ 1,814 (+5396.97%)
Mutual labels:  bgp, gobgp
Yabgp
Yet Another BGP Python Implementation
Stars: ✭ 177 (+436.36%)
Mutual labels:  bgp, sdn
python-openflow
Low level OpenFlow messages parser used by Kytos SDN Platform
Stars: ✭ 44 (+33.33%)
Mutual labels:  sdn, sdn-controller
Asn
ASN / RPKI validity / BGP stats / IPv4v6 / Prefix / URL / ASPath / Organization / IP reputation and geolocation lookup tool / Traceroute server
Stars: ✭ 242 (+633.33%)
Mutual labels:  bgp
pocketinternet
A Pocket Internet for teaching how the Internet really works.
Stars: ✭ 28 (-15.15%)
Mutual labels:  bgp
Hyperglass
hyperglass is the network looking glass that tries to make the internet better.
Stars: ✭ 242 (+633.33%)
Mutual labels:  bgp
terraform-metal-kubernetes-bgp
Kubernetes on Equinix Metal using Calico and MetalLB
Stars: ✭ 110 (+233.33%)
Mutual labels:  bgp
Looking Glass
Easy to deploy Looking Glass
Stars: ✭ 233 (+606.06%)
Mutual labels:  bgp

Pilot

Simple web-based SDN controller for family and friends.

Build Status

Introduction

Pilot is the SDN controller for your home. Once Pilot is set up, any device in your LAN can visit Pilot's web interface to easily select their own VRF.

Pilot web interface screenshot

Requirements

Server running Pilot:

  • Python 3.7 or later (if you don't use the Docker image)
  • GoBGP with gRPC enabled (if you don't use the Docker image)
  • LAN devices should not go through SNAT/masquerade to access the server (for proper IP address detection)

Gateway router:

Usage

Router Setup

  • Put different network profiles in different VRFs
  • Add BGP session with your GoBGP instance and enable ipv4 flowspec and ipv6 flowspec address families
  • Allow flowspec rule installation on the interfaces to LAN clients

Example configuration for Cisco IOS XE 16.x:

! Enable flowspec rule installation
flowspec
 local-install interface-all

! VRF definition
ip vrf UPLINK1
 rd 100:100
 route-target both 100:100
ip vrf UPLINK2
 rd 200:200
 route-target both 200:200

! Uplink interfaces
interface GigabitEthernet0/0/0
 description uplink-1
 ip vrf select source
 ip vrf receive UPLINK1
 ip flowspec disable
 ipv6 flowspec disable
interface GigabitEthernet0/0/1
 description uplink-2
 ip vrf select source
 ip vrf receive UPLINK2
 ip flowspec disable
 ipv6 flowspec disable

! LAN interfaces
interface GigabitEthernet0/0/2
 description LAN
 ip address 192.168.1.1 255.255.255.0
 ip vrf select source
 ip vrf receive UPLINK1
 ip vrf receive UPLINK2

! BGP peer setup
router bgp 65540
 bgp router-id 169.254.1.2
 neighbor 169.254.1.1 remote-as 65540
 address-family ipv4 flowspec
  neighbor 169.254.1.1 activate
 address-family ipv6 flowspec
  neighbor 169.254.1.1 activate

! Routes for global and VRFs
ip route 0.0.0.0 0.0.0.0 x.x.x.x 10
ip route 0.0.0.0 0.0.0.0 y.y.y.y 20
ip route vrf UPLINK1 0.0.0.0 0.0.0.0 x.x.x.x
ip route vrf UPLINK2 0.0.0.0 0.0.0.0 y.y.y.y

Example configuration for Juniper Junos OS (interface configuration left out):

set policy-options policy-statement accept-all term 1 then accept
set protocols bgp local-as 65540
set protocols bgp group flowspec family inet flow no-validate accept-all
set protocols bgp group flowspec family inet6 flow no-validate accept-all
set protocols bgp group flowspec neighbor 169.254.1.1 peer-as 65540
set routing-options flow term-order standard
# exclude your upstream interfaces:
# set routing-options flow interface-group [<group-id>] [exclude <group-id>]

Pilot Setup

The easiest way to run Pilot is using the Docker image. Download all the files in config and put them in a directory.

In gobgpd.toml:

  • Change global.config.as and global.config.router-id
  • Change neighbors[].config.neighbor-address and neighbors[].config.peer-as

In pilot.toml:

  • Add or change rule

Then spin up our Docker container:

docker run --restart=always --name=pilot --network=host -v path/to/your/config/directory:/etc/pilot:ro jamesits/pilot:latest

The web UI will be on port 80.

Thanks

This project is inspired by xtomcom/NetworkSwitch.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].