this post was submitted on 24 Oct 2023
36 points (95.0% liked)

Linux

47337 readers
674 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

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?

all 30 comments
sorted by: hot top controversial new old
[–] zzzzzz@lemmy.ml 9 points 10 months ago (2 children)

I have solved this problem! The trick is to use two Docker containers:

  1. Gluetun (https://github.com/qdm12/gluetun): set this up to connect to your VPN.
  2. Tailscale (https://tailscale.com/kb/1282/docker/): set this to use the Gluetun network.

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
[–] LunchEnjoyer@lemmy.world 4 points 10 months ago (1 children)

Wow! You know what, I was just thinking about using Gleutun for this enefore I went to bed last night, and then I wake up to this gem of a message!! 😅 Well done sir, I'll be cooking this up ASAP!

[–] zzzzzz@lemmy.ml 3 points 10 months ago (2 children)

Let me know how it works out for you! I'm happy to be able to share this. I was very pleased with myself but had no one to tell haha. I actually have several copies of this set up with each Gluetun instance connected to different countries. Then, changing country is as easy as changing your tailnet exit node!

[–] LunchEnjoyer@lemmy.world 3 points 10 months ago

Awesome stuff dude! I will totally do this too 😁 Worst thing is I am already using Gleutun and I am ashamed I didn't think about using it for this before... But honestly gonna have to donate some money to the developer of Gleutun as its just so awesome.

[–] LunchEnjoyer@lemmy.world 2 points 10 months ago (1 children)

Hell yeah, got that working in an instant! Appreciate the pointer, have a great weekend! :)

[–] zzzzzz@lemmy.ml 2 points 10 months ago

Awesome! You too.

[–] RandomlyRight@sh.itjust.works 1 points 3 weeks ago* (last edited 3 weeks ago)

For anyone trying this, make sure you do not have "- TS_USERSPACE=false" in your yaml from previous experimentation. After removing this, it works for me too.

In the documentation they say to add sysctl entries, it is possible in docker compose like so:

tailscale:
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv6.conf.all.forwarding=1

But it does not seem to make a difference for me. Does anyone know why these would not be required in this specific setup?

[–] mfat@lemdro.id 5 points 11 months ago (1 children)

Maybe this can be achieved by doing this: 1.Connect to ProtonVPN on your exit node machine 2.Create a vm inside that machine 3.Install Tailscale on the vm 4.Use it as an exit node

[–] LunchEnjoyer@lemmy.world 2 points 10 months ago (1 children)

Interesting, I could try that. Already tried with a docker container, which didn't work. But could try this too.

[–] mfat@lemdro.id 2 points 10 months ago

Use vit-manager and install a minimal ubuntu vm.

[–] lemmyvore@feddit.nl 3 points 11 months ago (1 children)
[–] LunchEnjoyer@lemmy.world 1 points 11 months ago
[–] maggio@discuss.tchncs.de 3 points 11 months ago (1 children)

Yes you can do this, you can use ANY device/node as an exit-node among your tailscale nodes.

You do need a server to setup the nodes though. Tailscale offer this as a paid service I believe, or you could run your own headscale (open source project) server yourself, this requires a lot more knowledge

[–] LunchEnjoyer@lemmy.world 4 points 11 months ago

I am aware I can run a tailscale exit node. But want to know if it is possible do so with the same node running protonvpn...

[–] robotfriend@lemmy.ca 3 points 10 months ago* (last edited 10 months ago) (1 children)

I've been trying to accomplish the exact same thing. In the same vein I've also been trying to setup a tailscale exit node with mitmproxy so that i can inspect mobile app traffic without having to fiddle with proxy configs on my phone each time. In relation to that i found this - https://www.aapelivuorinen.com/blog/2022/09/12/transparent-mitmproxy-tailscale-vm/

Let me know how you get on as I'm super keen on having both a VPN and mitmproxy setup as exit nodes.

[–] LunchEnjoyer@lemmy.world 2 points 10 months ago (1 children)

A solution was posted in later comments, did you see?

[–] robotfriend@lemmy.ca 2 points 10 months ago

I did thanks, will be trying it out later today. Cheers.

[–] cheet@infosec.pub 2 points 11 months ago (1 children)

I've read some of the comments and it sounds like you've already tried installing proton VPN and tailscale on the same machine, but depending on your setup maybe you could make a "VPN gateway"

Like take your pi, install protonvpn, then enable IP forwarding and use a little nat IP tables script to nat your lan to your proton VPN interface like a home router would with the wan and lan ports.

Then on your tailscale gateway set the default route to be that box instead of your normal router. Then just use the tailscale node as the exit node on your client and check your IP.

In theory this would be similar to a qubes type setup which is what I tend to use for this kind of work.

[–] cheet@infosec.pub 1 points 11 months ago

This also adds the benefit that any other devices that wanna VPN can just use the gateway

[–] BaalInvoker@lemmy.eco.br 2 points 11 months ago* (last edited 11 months ago) (1 children)

With Tailscale you have only to declare this device as exit node. It's just one single command, pretty simple

Edit:

Here's how: https://tailscale.com/kb/1103/exit-nodes/#step-2-advertise-a-device-as-an-exit-node

[–] LunchEnjoyer@lemmy.world 5 points 11 months ago* (last edited 11 months ago) (1 children)

Right that is pretty much clear, but I want this exit node to be running ProtonVPN as well. This however does not seem to be possible (to my knowledge). Edit: This is also why Tailscale added support for Mullvad VPN i assume.

[–] BaalInvoker@lemmy.eco.br 3 points 11 months ago* (last edited 11 months ago) (1 children)

Ok... I think I didn't get what you're trying to say. Do you wanna run a VPN through a VPN?

I mean, you have your RPI 4b as a Tailscale exit node, but the RPI 4b itself connects to the ProtonVPN?

[–] LunchEnjoyer@lemmy.world 3 points 11 months ago* (last edited 11 months ago) (1 children)

Right, so I've got Alpine on the RPI, and have installed/configured protonvpn with wireguard. However, if I then start Tailscale, the already running ProtonVPN connection goes down. Same happens if Tailscale is already running, and I try to start the ProtonVPN connection it will just refuse the connection.

I want it to connect to both services, as then this can act as the exitnode for all other devices on the tailnet. Whilst also giving the benefit of ""being in a different location"" with protonvpn.

So essentially, both services wants to use /dev/net/tun, but only one can.

[–] BaalInvoker@lemmy.eco.br 3 points 11 months ago (1 children)

Well, I found this article saying that theoretically is possible, however not so much. It says that depends on how the other VPN works. They even suggest some workarounds, so take a look

Anyway, have you tried to create another tun/tap service to run both VPN?

[–] LunchEnjoyer@lemmy.world 2 points 11 months ago (1 children)

Yeah already scoured their documentation for this, but no luck with any of the workarounds sadly.

Have not tried to do the latter you mentioned though? Not sure how to do that, but I will look into it asap.

[–] BaalInvoker@lemmy.eco.br 1 points 11 months ago

I never had to create a new TUN/TAP interface before, so I'm on the same boat as you. I'm brainstorming here with you and hoping for the best

But here is how to create a new tun interface:

https://www.baeldung.com/linux/create-check-network-interfaces

You'll have to manually set some parameters to make it work, I guess

[–] mzumquadrat@lemmy.ml 1 points 10 months ago (1 children)

If you are able to switch away from Proton VPN in the long run you could use the new tailscale/mullvad partnership to use mullvad as an exit node. https://tailscale.com/kb/1258/mullvad-exit-nodes/

[–] LunchEnjoyer@lemmy.world 1 points 10 months ago

I did think about it, but I use all of their services anyway, so for me it's plenty worth it. I save money on paying for a suit, rather than individual services here an there.