{"id":13509845,"url":"https://github.com/tcfw/vpc","last_synced_at":"2025-04-23T19:33:25.458Z","repository":{"id":98255460,"uuid":"220448453","full_name":"tcfw/vpc","owner":"tcfw","description":"Create simple VPCs written in (mostly) Go using Linux bridges/netlinks, iptables \u0026 network namespaces","archived":false,"fork":false,"pushed_at":"2020-11-11T04:29:50.000Z","size":769,"stargazers_count":35,"open_issues_count":1,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-02T19:42:50.426Z","etag":null,"topics":["golang","linux-bridge","netlink","netns","vlans","vxlan","xdp"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tcfw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-11-08T10:58:38.000Z","updated_at":"2024-11-19T05:47:18.000Z","dependencies_parsed_at":"2023-03-16T15:00:35.922Z","dependency_job_id":null,"html_url":"https://github.com/tcfw/vpc","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tcfw%2Fvpc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tcfw%2Fvpc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tcfw%2Fvpc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tcfw%2Fvpc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tcfw","download_url":"https://codeload.github.com/tcfw/vpc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250499939,"owners_count":21440718,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golang","linux-bridge","netlink","netns","vlans","vxlan","xdp"],"created_at":"2024-08-01T02:01:14.312Z","updated_at":"2025-04-23T19:33:25.063Z","avatar_url":"https://github.com/tcfw.png","language":"Go","funding_links":[],"categories":["Go","golang"],"sub_categories":[],"readme":"\u003cdiv style=\"text-align: center;\"\u003e\n\u003ch1\u003eVPC\u003c/h1\u003e\nCreate simple VxLAN based VPC's written in (mostly) Go using Linux bridges/netlink, iptables \u0026 network namespaces.\n\u003cp\u003e\n\u003ca href=\"https://goreportcard.com/report/github.com/tcfw/vpc\" title=\"Go Report Card\"\u003e\u003cimg alt=\"Go Report Card\" src=\"https://goreportcard.com/badge/github.com/tcfw/vpc\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003c/div\u003e\n\u003chr/\u003e\n\n## Why?\nFor fun and to learn!\n\n# Schematic\n![vpc](./docs/res/vpc.jpg \"VPC\")\n\n## Host Types\n - Compute hosts facilitate the creation and management of VM's or containers \n - Route hosts provide virtual routers\n - Management hosts (not in diagram) provide management facilities such as BGP route reflection and configuration management. \n\n\u003e There is no technical reason why a compute host can also be a route host and vice-versa. This simply provides better security, bandwidth and segregation of duties on hosts.\n\n## Connectivity\nEach VM, namespace or container is connected to a Linux bridge (with VLAN filtering enabled) on a compute host. Compute hosts are connected via Linux VxLAN devices (VTEPs).\n\n## VTEP Learning\nVxLAN learning is disabled by default. Learning is derived from an ML-BGP-L2VPN-EVPN client (via [frr](https://github.com/FRRouting/frr)) on each compute host and route reflectors on management hosts. \n\n## Segregation\nEach 'tenant' is separated by VxLAN VNI's and each Subnet is protected via inner VLAN tagging on a Linux bridge per tenant. \n\n# Agents\n## L2\nThe L2 agent provides a GRPC API to create bridges, VxLAN VTEPs and manage VLAN tagging on the bridges.\n\n### Transports\nCan set up to use a linux VxLAN device, or use a TAP device with VxLAN encapsulation. The TAP device allows easier handling of ARP/ICMPv6 soliciations in the future.\n\n## L3\nThe L3 agent provides the functionality to create the virtual router namespaces and provide simple DHCP/NAT \u0026 routing capabilities.\n\n## SBS\nSimple block storage - raft based replicated block storage medium exposing NBD endpoints\n\n# Similar architectures\n[Openstacks Neutron](https://wiki.openstack.org/wiki/Neutron) in Linux bridge mode.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftcfw%2Fvpc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftcfw%2Fvpc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftcfw%2Fvpc/lists"}