I would really really really like to have one device on my tailnet as the exitnode for all other devices on the tailnet. However, most VPNs make this really difficult. Is there any way to do this? I’ve read it’s possible with split-tunnelling, but ProtonVPN (which I use) doesn’t support that. I just installed Alpine Linux on my RPI 4b. And would like to use this as my exit node. Does anyone have any tips for how this could be done?
I have solved this problem! The trick is to use two Docker containers:
Here is an example docker-compose.yml:
version: "3" services: gluetun: image: qmcgaw/gluetun container_name: gluetun # line above must be uncommented to allow external containers to connect. # See https://github.com/qdm12/gluetun-wiki/blob/main/setup/connect-a-container-to-gluetun.md#external-container-to-gluetun restart: unless-stopped cap_add: - NET_ADMIN devices: - /dev/net/tun:/dev/net/tun volumes: - ./gluetun:/gluetun environment: - VPN_SERVICE_PROVIDER=airvpn - VPN_TYPE=wireguard - WIREGUARD_PRIVATE_KEY=xxx - WIREGUARD_PRESHARED_KEY=xxx - WIREGUARD_ADDRESSES=xxx - WIREGUARD_MTU=1320 - SERVER_COUNTRIES=United States # See https://github.com/qdm12/gluetun-wiki/tree/main/setup#setup # Timezone for accurate log times - TZ=America/New_York # Server list updater # See https://github.com/qdm12/gluetun-wiki/blob/main/setup/servers.md#update-the-vpn-servers-list - UPDATER_PERIOD=24h tailscale: container_name: tailscale cap_add: - NET_ADMIN - NET_RAW volumes: - ./tailscale/var/lib:/var/lib - ./tailscale/state:/state - /dev/net/tun:/dev/net/tun network_mode: "service:gluetun" restart: unless-stopped environment: - TS_HOSTNAME=airvpn-exit-node - TS_AUTHKEY=xxxxxxxx - TS_EXTRA_ARGS=--login-server=https://example.com/ --advertise-exit-node - TS_NO_LOGS_NO_SUPPORT=true - TS_STATE_DIR=/state image: tailscale/tailscale
I get 0.8mbps when using this as exit node compared to 100+mpbs when using an exit node on the same server installed as system package. Have you noticed any performance issues?