diff --git a/README.md b/README.md index 449290e..4d50690 100644 --- a/README.md +++ b/README.md @@ -224,6 +224,8 @@ A host that connects to the VPN and registers a VPN subnet address such as `192. A publicly reachable peer/node that serves as a fallback to relay traffic for other VPN peers behind NATs. A bounce server is not a special type of server, it's a normal peer just like all the others, the only difference is that it has a public IP and has kernel-level IP forwarding turned on which allows it to bounce traffic back down the VPN to other clients. +See more: https://tailscale.com/blog/how-nat-traversal-works/ (Tailscale uses Wireguard under the hood) + ### Subnet A group of IPs separate from the public internet, e.g. 192.0.2.1-255 or 192.168.1.1/24. Generally behind a NAT provided by a router, e.g. in office internet LAN or a home Wi-Fi network. @@ -952,6 +954,8 @@ WireGuard can sometimes natively make connections between two clients behind NAT A known port and address need to be configured ahead of time because WireGuard doesn't have a signalling layer or public STUN servers that can be used to search for other hosts dynamically. WebRTC is an example of a protocol that can dynamically configure a connection between two NATs, but it does this by using an out-of-band signaling server to detect the IP:port combo of each host. WireGuard doesn't have this, so it only works with a hardcoded `Endpoint` + `ListenPort` (and `PersistentKeepalive` so it doesn't drop after inactivity). +Learn more from Tailscale's bible of NAT traversal: https://tailscale.com/blog/how-nat-traversal-works/ + #### Requirements for NAT-to-NAT setups - At least one peer has to have to have a hardcoded, directly-accessible `Endpoint` defined. If they're both behind NATs without stable IP addresses, then you'll need to use Dynamic DNS or another solution to have a stable, publicly accessibly domain/IP for at least one peer