You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- SSH / RDP / VNC into your home or work laptop from anywhere, without port forwarding or exposing anything to the internet
46
47
- reach selfhosted services (Nextcloud, Home Assistant, Bitwarden, ...) privately
47
48
- route traffic through a remote device as a SOCKS5 proxy — useful for bypassing regional blocks
49
+
- route *all* your traffic through a remote device at the IP layer — a full-tunnel VPN gateway / exit node
48
50
- LAN-style multiplayer gaming across the internet
49
51
- keep an old Android phone accessible for apps that only run there (e.g. with [scrcpy](https://github.com/Genymobile/scrcpy))
50
52
@@ -64,6 +66,7 @@ Tradeoffs worth knowing about:
64
66
## Features
65
67
66
68
- fully peer-to-peer, no coordination server — see [Why Anywherelan](#why-anywherelan) above
69
+
- route **all** your traffic through a device — full-tunnel VPN gateway / exit node
67
70
- route traffic through a device as a SOCKS5 proxy
68
71
- automatic NAT traversal via libp2p; falls back to community relays when a direct path isn't possible
69
72
- TLS 1.3 encryption (QUIC or TCP+TLS)
@@ -114,7 +117,7 @@ awl's transport security comes from [libp2p](https://docs.libp2p.io/).
114
117
115
118
awl ships in two desktop flavors:
116
119
117
-
-**`awl-tray`** — desktop build with a system-tray indicator: status at a glance, start/stop/restart, peer list. Use this for regular desktop usage.
120
+
-**`awl-tray`** — desktop build with a system-tray indicator: status at a glance, start/stop/restart, peer list, and quick exit-node selection (SOCKS5 proxy / VPN gateway). Use this for regular desktop usage.
118
121
-**`awl`** — headless server build, no GUI. Use this for servers and embedded devices.
119
122
120
123
Both share the same web UI and the same [CLI](#terminal-based-client).
@@ -231,6 +234,95 @@ On desktop you can also pick the active exit node from the web UI or the system
231
234
232
235
Traffic through a peer has no restrictions beyond the connection between the two of you — direct and relayed paths both work. You can reach the remote peer's LAN, but not the remote peer's `localhost`.
233
236
237
+
## VPN gateway (full-tunnel exit node)
238
+
239
+
awl can route **all** of your IPv4 traffic through a remote device at the IP layer — the same model as classic full-tunnel WireGuard/OpenVPN. The remote device becomes your exit node: your traffic reaches the internet from its IP, not yours.
240
+
241
+
### VPN gateway vs SOCKS5 proxy
242
+
243
+
awl has two independent ways to send your traffic through another device, and a device can offer either one without the other. The **SOCKS5 proxy** works per-application: you point a specific app (a browser, say) at awl's local proxy, and only that app's traffic goes through the peer — nothing on your system changes. The **VPN gateway** is system-wide: it routes *all* of your IPv4 traffic through the exit node at the IP layer, so every app is covered without configuring anything.
244
+
245
+
In short: reach for SOCKS5 to send a single app through a peer, and for the VPN gateway when you want the whole device to look like it's at the exit node.
246
+
247
+
### Status
248
+
249
+
| Platform | As client | As exit node | Notes |
250
+
| --- | --- | --- | --- |
251
+
| Linux | ✅ | ✅ | fully supported |
252
+
| Android | ✅ | ❌ | exit-node role needs root — not planned |
253
+
| Windows | ⏳ | ⏳ | coming next |
254
+
| macOS | ❌ | ❌ | needs volunteers for testing |
255
+
256
+
On macOS and Windows awl currently refuses to start with VPN gateway enabled.
257
+
258
+
> ⚠️ **IPv6 is not tunnelled.** The gateway only carries IPv4. While it's on, all IPv6 traffic is dropped so that your real IPv6 address is never exposed past the exit node:
259
+
> -**Dual-stack (IPv4 + IPv6):** everything automatically uses IPv4 through the tunnel.
260
+
> -**IPv6-only network:** you'll have no internet connectivity until you turn the gateway off.
261
+
262
+
> **Linux: host network changes mid-session aren't tracked.** If the host switches network (new Wi-Fi, Ethernet or cellular connection) while the gateway is on, restart awl. This will be fixed in a future release.
263
+
264
+
### Serve as an exit node
265
+
266
+
This lets your other devices route their internet traffic out through this one. It is **off by default** — see [Why serving as an exit node is opt-in](#why-serving-as-an-exit-node-is-opt-in) below. Two things need to be set: turn the gateway service on, then allow each specific device to use it. Serving as an exit node is Linux-only (see the status table above).
267
+
268
+
**Desktop (web UI):** open http://admin.awl, go to **Settings** (the gear icon, top-right) and turn on **Serve as VPN Gateway**. Then, for each device you want to permit, open its card on the Overview page, click **Settings**, and set **Allow as exit node** to *Allowed*. On `awl-tray` you can also toggle the service from the tray menu under **VPN Gateway → Serve as VPN Gateway**.
269
+
270
+
Turning the service on takes effect immediately — no restart. awl enables IP forwarding and sets up firewall rules that let that traffic out while keeping your own LAN private (see "Security and privacy notes" below); everything is reversed when you turn it off or shut awl down.
271
+
272
+
Once enabled, your permitted devices can pick this one as their exit node. It may take a few minutes to show up on their side — awl exchanges status with each device periodically (≤ 5 minutes) and on every reconnect.
273
+
274
+
> The "Allow as exit node" permission is shared with SOCKS5. If you need separate permissions for SOCKS5 vs the VPN gateway, [open an issue](https://github.com/anywherelan/awl/issues) and we'll split it.
275
+
276
+
#### Via the CLI
277
+
278
+
```bash
279
+
# turn the gateway service on (server disable turns it off)
280
+
awl cli gateway server enable
281
+
# allow a specific device to use this one as an exit node
### Use a remote device as your exit node (client side)
286
+
287
+
First make sure you've added the remote device and it has the gateway service enabled on its side (see above).
288
+
289
+
**Desktop (web UI):** open http://admin.awl; on the Overview page, find the **VPN Gateway** card on the right and pick the peer in the **Exit peer** dropdown. That's it — all your traffic now goes out through that device. Set it back to *None* to turn the gateway off. On `awl-tray` the same picker is in the tray menu, and on Android you use the gateway control in the app.
290
+
291
+
This takes effect immediately — no restart. Switching to a different peer in the dropdown atomically moves the gateway to the new device.
292
+
293
+
To confirm it's working, open a "what's my IP" site such as https://ifconfig.co — it should show the exit node's public IP, not yours.
294
+
295
+
#### Via the CLI
296
+
297
+
```bash
298
+
# list peers available as exit nodes
299
+
awl cli gateway list
300
+
# route all traffic through a peer (or --pid=<peer-id>)
301
+
awl cli gateway client use --name="peer-name"
302
+
# show status: gateway peer, whether it's connected, its public IP and ping
303
+
awl cli gateway status
304
+
# stop using the gateway
305
+
awl cli gateway client stop
306
+
```
307
+
308
+
### Why serving as an exit node is opt-in
309
+
310
+
Unlike the SOCKS5 proxy, serving as a VPN gateway changes global system state on the host: awl turns on `net.ipv4.ip_forward` and installs iptables rules. That can interfere with the host's existing networking or firewall setup, and it isn't something awl can sandbox — so we don't enable it on a routine install. You opt in explicitly, the same way every mainstream VPN (Tailscale, ZeroTier, WireGuard, OpenVPN, …) keeps exit-node mode opt-in.
311
+
312
+
The privacy exposure — your IP appearing as the source of another device's traffic — is *not* what this toggle gates: it is the same for SOCKS5 and the VPN gateway, and it's controlled by the per-device **Use as exit** permission (see "Security and privacy notes" below). This toggle only governs the host-level networking changes above.
313
+
314
+
### Troubleshooting
315
+
316
+
-**A device isn't available as an exit node.** It hasn't turned on **Serve as VPN Gateway**, or hasn't set **Allow as exit node** to *Allowed* for you, or the status exchange hasn't propagated yet — wait up to ~5 minutes or until the next reconnect.
317
+
-**A "what's my IP" site still shows your own IP after enabling.** Check the gateway status (the **VPN Gateway** card, or `awl cli gateway status`): if it's not connected, awl can't reach the exit node, so nothing is being tunnelled.
318
+
-**A site works over IPv6 but not through the gateway.** Expected — IPv6 isn't tunnelled (see the note above). Dual-stack hosts fall back to IPv4 automatically; anything IPv6-only won't work while the gateway is on.
319
+
320
+
### Security and privacy notes
321
+
322
+
-**Your IP is exposed.** Once you serve as an exit node, the public IPs that those devices reach see your IP, not theirs.
323
+
-**Your LAN is not.** awl drops forwarded traffic to RFC 1918 / RFC 6598 / RFC 3927 ranges (`10/8`, `172.16/12`, `192.168/16`, `100.64/10`, `169.254/16`) so a gateway client cannot reach the exit node's home network.
324
+
-**DNS:** in client gateway mode awl forces upstream DNS to a public resolver (`1.1.1.1` by default) so the LAN resolver can't leak queries past the tunnel. If you'd rather use a different resolver, you can change it by hand in the config file (`dns.upstreamDNSAddress`) while awl is stopped.
325
+
234
326
## Configuration
235
327
236
328
Awl stores all its state in a single JSON file called `config_awl.json`. The file is created automatically on the first launch and is rewritten by the application every time you change something through the web UI or CLI. You can also edit it by hand while awl is stopped.
0 commit comments