# 2017-07-19
Time: **9am PDT** (12pm EDT, 5pm BST) [see the time in your timezone](https://www.timeanddate.com/worldclock/fixedtime.html?msg=Linuxkit+Security+SIG&iso=20170719T09&p1=224)

Meeting location: https://docker.zoom.us/j/779801882

Announcement:
[Moby project forum post](https://forums.mobyproject.org/t/2017-07-19-linuxkit-security-sig-meeting/109)

Video recording: https://www.youtube.com/watch?v=04TsF72o-V4

Previous meeting notes: [2017-07-05](2017-07-05.md)

## Agenda
- Introductions & Administrivia (5 min)
- WireGuard deep dive - @zx2c4 (45 min)
  - Differences from other VPNs
  - Cryptography
  - Usage with network namespaces
  - demo
- Project updates (10 min)
- Next meeting: 2017-08-02
  - deep dive TBD
  - we can propose additional deep dives and discussion topics!

## Meeting Notes

- WireGuard intro;
  [slides](https://www.wireguard.com/talks/dockersig2017-slides.pdf) are
  comprehensive, below is a small discussion of questions that occurred
  - Jason Donenfeld the author and maintainer
  - Patches for traditional userspace tools (ifupdown, OpenWRT/LEDE,
    OpenRC netifrc, NixOS, systemd-networkd WIP, NetworkManager WIP) available
    to allow ease of interface configuration
  - demo
    - ip and wg tools used to configure and inspect WireGuard interfaces
    - no patches needed for iproute2, since the string "WireGuard" just gets
      passed to the kernel via netlink when doing `ip link add type wireguard`
  - WireGuard can live in one netns, physical interface can live in another
    - so you can put wg0 in a container as the only interface, and it *must*
      connect to the world via this interface
  - No additional traffic necessary when packets are successfully sent/received
    - When a unidirectional packet is sent, WireGuard sends back an empty ack
      packet
  - Kernel networking stack is the one allocating the packet buffers,
    WireGuard doesn't allocate anything on top of this
  - WireGuard overhead: ipv4 header (20 bytes) + udp header (8 bytes) + wireguard header (4 byte type, 4 byte keyid, 8 byte nonce, 16 byte authtag = 32 bytes) = 60 bytes
  - performance
    - fast, no copies across \*space
    - ChaChaPoly is fast
  - upstreaming status:
    - no v1 posted
    - need to move from ioctl => netlink
    - need to improve kernel crypto API to remove allocations
  - maturity
    - officially "experimental"
    - formally verified, "pretty damn stable" :)
    - may break protocol, but hopefully not now that it's verified
- Next meeting August 2nd, please propose topics!
