OpenInfra Day Taiwan Speaker ◦ Massive Bare-Metal Operating System Provisioning Improvement • 2019 OSC Tokyo Fall Speaker • 2019 COScon ‘19 Speaker • 2019 Hong Kong Open Source Conference Speaker ◦ De-centralized Bare-Metal Operating System Provisioning • 2018 ISC High Performance Project Poster Demo ◦ The Design and Implementation of Bare Metal Cluster Deployment Using BitTorrent • 2017 Open Source Summit North America co-Speaker ◦ Building Cloud Infra using cost-effective ARM Boards • 2017 OpenStack Day Taiwan Speaker ◦ Combine Continuous Integration (CI) with OpenStack • 2016 OpenStack Day Taiwan Invited Speaker ◦ OpenStack on ARM64 Open Source Porject • EZIO • STUNMESH-go 2
IPsec tunnel via Broadband or Mobile Network • Rich Redundancy between multiple WAN type to Internet ◦ Primary: Broadband Network ◦ Backup: Mobile Network • Need Fixed Public IP in most of time ◦ e.g. AWS VPC Customer Gateway (IPsec) need Public IPs in both side 10
Firewall Traversal Persistence • Built-in Keepalive • Built-in Roaming ◦ Auto adjust remote peer connection info • Performance better than OpenVPN and IPsec (AES) ◦ Wireguard have good performance without hardware crypto engine ◦ Suitable to Embedded system or Network Box • Much Simpler Configuration than OpenVPN ◦ OpenVPN need 5KB config file ◦ Wireguard only need several bytes • Encapsulate IPv6-in-IPv4, IPv4-in-IPv6 14
bother to setup static route when new peer is added • Built-in Keepalive ◦ Fast re-route to redundant route when link status or route is changed • Fast Convergence in small scale network 15
status ◦ It will need to send a packet to remote peer and check if receving reply to check link status ◦ OSPF Hello Packet could test link status and check remote OSPF routing engine status 16
Translate into Same Port and IP mapping when Destation IP and Port are different • NAT Session to allow ingress traffic ◦ Record Src IP, Src Port, Dst IP, Dst Port ◦ Allow Firewall Rule 28
and try to connect to each other via 3rd party server • STUN: Session Traversal Utilities for NAT • STUN is common implement for UDP Hole Punching (RFC 5389) 30
◦ IP and Port translation mapping will be same even different destination • Written in Golang • Multiple Architecture Support ◦ X86_64, MIPS • Standalone Executable ◦ Don’t need to care about library dependency • Inspired by wireguard-p2p project • Open Source ◦ https://github.com/tjjh89017/stunmesh-go ◦ GPLv2 or later • Tested with ◦ UBNT ER-X v2.0.8-hotfix.1 and Wireguard v1.0.20210424 ◦ VyOS 1.4-rolling-202105200417 32
◦ cBPF Filter to receive packet from same UDP port as Wireguard used ◦ Raw Socket to construct STUN 5389 request packet to same UDP port • Encrypt Public Info with Wireguard Curve25519 Key • Save Ciphertext into Cloudflare TXT Record • Query TXT Record from Cloudflare • Decrypt Ciphertext and Update Wireguard Peer Endpoint • Usually, Only need to run once when initiating connection in first time ◦ Or disconnect in the same time 33
into tunnel ◦ Start from IP header ◦ Without L2 MAC address, VLAN • Some Protocols or Operations will need L2 ◦ VM migration, two sites need to be in same L2 if VMs connect to each other with same subnet IPs 49