mirror of
https://github.com/pirate/wireguard-docs.git
synced 2026-04-25 06:56:18 +00:00
Add Firecracker WireGuard example docs
This commit is contained in:
50
README.md
50
README.md
@@ -1293,6 +1293,56 @@ PersistentKeepalive = 21
|
|||||||
|
|
||||||
For more details see the Further Reading: Docker section below.
|
For more details see the Further Reading: Docker section below.
|
||||||
|
|
||||||
|
#### Example Firecracker MicroVM Setup
|
||||||
|
|
||||||
|
If you want to run application code inside a Firecracker microVM, the simplest stable pattern is usually to keep WireGuard on the host, attach the microVM to the host with a TAP device, and route a dedicated subnet from `wg0` into the guest. Firecracker networking is host-managed: the Firecracker Go SDK supports Linux TAP devices or CNI-created TAP-backed interfaces, and `firectl` exposes this directly via `--tap-device`. `wg-quick` only provides interface lifecycle hooks (`PreUp`, `PostUp`, `PreDown`, `PostDown`), so "launch a VM when a peer connects" requires a separate control-plane or supervisor, not just a WireGuard config. [Firecracker Go SDK networking docs](https://github.com/firecracker-microvm/firecracker-go-sdk) / [firectl](https://github.com/firecracker-microvm/firectl) / [wg-quick(8)](https://man7.org/linux/man-pages/man8/wg-quick.8.html)
|
||||||
|
|
||||||
|
If you want to study a more opinionated end-to-end design, [distvirt](https://github.com/hansihe/distvirt) is an experimental project that combines Firecracker microVMs with WireGuard ingress and on-demand activation.
|
||||||
|
|
||||||
|
**Host setup:**
|
||||||
|
```bash
|
||||||
|
ip tuntap add dev fc-tap0 mode tap
|
||||||
|
ip addr add 172.31.200.1/24 dev fc-tap0
|
||||||
|
ip link set fc-tap0 up
|
||||||
|
|
||||||
|
sysctl -w net.ipv4.ip_forward=1
|
||||||
|
|
||||||
|
iptables -A FORWARD -i wg0 -o fc-tap0 -j ACCEPT
|
||||||
|
iptables -A FORWARD -i fc-tap0 -o wg0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
|
||||||
|
```
|
||||||
|
|
||||||
|
If you also want the guest to reach the public internet through the host, add a NAT rule on the host's external interface:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
iptables -t nat -A POSTROUTING -s 172.31.200.0/24 -o eth0 -j MASQUERADE
|
||||||
|
```
|
||||||
|
|
||||||
|
**Launch the microVM:**
|
||||||
|
```bash
|
||||||
|
firectl \
|
||||||
|
--kernel=vmlinux \
|
||||||
|
--root-drive=rootfs.ext4 \
|
||||||
|
--tap-device=fc-tap0/06:00:ac:10:c8:02
|
||||||
|
```
|
||||||
|
|
||||||
|
**Guest setup:**
|
||||||
|
```bash
|
||||||
|
ip addr add 172.31.200.2/24 dev eth0
|
||||||
|
ip link set eth0 up
|
||||||
|
ip route add default via 172.31.200.1
|
||||||
|
```
|
||||||
|
|
||||||
|
**WireGuard client route to the guest subnet:**
|
||||||
|
```ini
|
||||||
|
[Peer]
|
||||||
|
Endpoint = relay1.wg.example.com:51820
|
||||||
|
PublicKey = zJNKewtL3gcHdG62V3GaBkErFtapJWsAx+2um0c0B1s=
|
||||||
|
AllowedIPs = 192.0.2.1/24,172.31.200.0/24
|
||||||
|
PersistentKeepalive = 21
|
||||||
|
```
|
||||||
|
|
||||||
|
That keeps WireGuard termination and peer authentication on the host while forwarding decrypted traffic into the Firecracker guest. If you want *all* client traffic to go through the guest, replace the guest subnet above with `0.0.0.0/0` (and `::/0` for IPv6) and make the host/guest forwarding and NAT policy explicit.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Further Reading
|
# Further Reading
|
||||||
|
|||||||
Reference in New Issue
Block a user