Guide: Tailscale Exit Node LXC till NordVPN LXC till internet

Målet är att ansluta från en fjärrdator/telefon till mitt Tailscale VPN-nätverk samtidigt som min internetåtkomst går genom en VPN (Nordvpn)… att koppla till båda VPN:erna fungerar inte för mig på mobil och mac

Nätverkslayout - Telefon <> TailscaleLXC <> NordVPN LXC <> Allmän internet

Noteringar:

  • Två LXCs på samma nätverk med samma brygga (standardbrygga om du har en mycket enkel pve-uppsättning)
    • En för Tailscale = TailLXC
    • En för NordVPN = NordLXC
  • LXCs är ubuntu 22.04… inte säker på hur kompatibelt detta skript är för andra Linux-versioner
  • Jag rekommenderar att ta ögonblicksbilder när du utför kommandon
  • Det är bäst att se till att det är en statisk IP (kan göras via lxc men jag föredrar via min router)
    • för denna guide… TailLXC = 192.168.1.100 och NordLXC = 192.168.1.200
  • Stort tack för det stora arbetet med att lösa detta
  • förlåt om guiden är otydlig, första gången jag gör en guide och jag är ny på nätverk
  • FÖR PERSONER SOM ÄR BÄTTRE PÅ NÄTVERK, jag skulle älska att veta om det finns sätt att göra det mer säkert/och att dubbelkolla att detta är säkert och krypterat hela vägen
  • kommandot att köra publiceras antingen som kodblock eller "----> kod"

Installera Tailscale-kontainer

1. Skapa TailLXC som vanligt från proxmox (t.ex. ubu 22.04, pveid=105)

sudo apt update
sudo apt upgrade

2. lägg till följande i lxc-konfigurationen (nano /etc/pve/lxc/105.conf) baserat på Tailscale in LXC containers · Tailscale Docs Notera att du kan behöva göra de andra felsökningsstegen som föreslås i Tailscale on a Proxmox host · Tailscale Docs För mig var det helt enkelt att lägga till följande i lxc-konfigurationsfilen:

lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file

3. installera tailscale ----> curl -fsSL https://tailscale.com/install.sh | sh

4. aktivera tailscale-tjänsten (för autostart) ----> sudo systemctl enable tailscaled

5. starta tailscale-tjänsten ----> sudo systemctl start tailscaled

6. logga in på tailscale ----> sudo tailscale login

7. Aktivera IP- vidarebefordran enligt Subnet routers · Tailscale Docs From tailscales guide ovan (Linux, “Aktivera IP- vidarebefordran”). Notera att du kan behöva följa mer av guiden beroende på din Linux-distribution/specifikation

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

7.1 i mitt fall var det också nödvändigt att göra följande

sudo sysctl -w net.ipv4.conf.all.forwarding=1

8. kontrollera att vidarebefordran är aktiverad med följande rader – bör vara lika med 1

sysctl net.ipv4.ip_forward
cat /proc/sys/net/ipv4/ip_forward

8.1 Starta om och kontrollera igen 8. ibland vid omstart återställs den till 0 och om det händer dig också, gör följande 3 steg.

  1. Skapa och redigera fil ----> sudo nano /etc/sysctl.conf
  2. Lägg till följande rader i filen ----> net.ipv4.ip_forward=1
  3. kontrollera igen

9. Konfigurera Tailscale för att tillåta trafik att routas genom LXC ----> tailscale up --advertise-exit-node

  • du måste gå till tailscale-konsolen och godkänna denna ändring

10. Använd traceroute för att se IP-adresserna din data färdas igenom för att ansluta till en server/plats

Kör ----> traceroute https://8.8.8.8

det bör visa något som från TailLXC (notera hem/routerIP/defaultIP)

# traceroute till 8.8.8.8 (8.8.8.8), 30 hopp max, 60 byte paket
#  1  home/routerIP  3.803 ms  3.605 ms  3.795 ms
#  2  ... ytterligare hopp

från en extern/fjärrklient (t.ex. macOS) - anslut till TailLXC som exitnode (hitta tailscale-appen på ditt operativsystem och ställ in exitnode till TailLXC) Notera förändringen med att din data nu först går till tailscale-kontainern

# traceroute till 8.8.8.8 (8.8.8.8), 64 hopp max, 40 byte paket
#  1  tailscaleCountainerIP  39.715 ms  16.685 ms  16.852 ms
#  2  home/routerIP 19.194 ms  23.825 ms  16.560 ms
#  3  ... ytterligare hopp

11. Nästa steg är lite knepigt och kan kräva viss arbetsinsats… du försöker egentligen routa LXC-trafik till NordLXC. därför vill du ändra din standardgateway till NordLXC. starkt rekommenderat att ta en snapshot/backup av Proxmox LXC innan du leker med detta eftersom du kan göra något som är svårt att ångra

Mitt ursprungliga IP-route visade detta ----> ip route

# default via 192.168.1.1 dev eth0 proto dhcp src <TailLXC IP> metric 1024
# 192.168.1.0/24 dev eth0 proto kernel scope link src <TailLXC IP> metric 1024
# 192.168.1.1 dev eth0 proto dhcp scope link src <TailLXC IP> metric 1024
# 207.164.244.195 via 192.168.1.1 dev eth0 proto dhcp src <TailLXC IP> metric 1024

11.1 Från detta identifierade jag IP-routingen. Sedan skapade jag en konfigurationsfil för nätplan och redigerade den ---->

sudo nano /etc/netplan/01-netcfg.yaml

11.2 Ange netplan-konfigurationen - jag kopierade och klistrade in mina ip-route-resultat i chatgpt och bad det skapa en netplan-konfig (utan gateway4) och kopierade och klistrade in resultatet från ip route. Sedan lade jag till rutten till min NordLXC

network: 
  version: 2 
  ethernets: 
    eth0: 
      dhcp4: nej 
      addresses: 
        - 192.168.1.100/24 #Tailscale LXC IP
      routes:
        - to: 0.0.0.0/0 
          via: 192.168.1.200 #NordLXC IP
          metric: 1024 
          on-link: true 
        ### YTTERLIGARE RUTTER KAN FINNAS HÄR BASERAT PÅ VAD SOM VAR I DINA ORIGINALA IP-RT-RESULTAT
        ### CHATGPT SKAPADE DEN DELEN FÖR MIG... JAG LADE BODDE IN DEN ÖVERSTÅENDE ROUTEN
      nameservers: 
        adresser: 
          - 8.8.8.8 
          - 8.8.4.4

det kan vara bra att leka med ip-rutterna först... genom att göra detta men #OBS - BARA TILLFÄLLIGT.. detta kommer att återställas vid omstart, och detta är helt enkelt en kopia av standardraden ovan med ändrade rutter ---->

sudo ip route change default via <Nord LXCIP> dev eth0 proto dhcp src <Tail LXCIP> metric 1024

12. Tillämpa den nya netplan och starta om ----> sudo netplan apply

13. Kontrollera ip-rutterna efter ----> ip route

  • här bör du se NordLXCIP vara standard

    default via dev eth0 proto static metric 1024 onlink

    192.168.1.0/24 dev eth0 proto kernel scope link src

    207.164.244.195 via 192.168.1.1 dev eth0 proto static metric 1024 onlink

Installera NordVPN-kontainer

1 Skapa NordLXC som vanligt från proxmox (t.ex. ubu 22.04)

sudo apt update
sudo apt upgrade

2 Aktivera IP- vidarebefordran och gör det permanenta --skapa/redigera fil–> sudo nano /etc/sysctl.conf

2.1 Lägg till följande rader i filen ----> net.ipv4.ip_forward=1

3. Installera och anslut NORDVPN

sh <(curl -sSf https://downloads.nordcdn.com/apps/linux/install.sh)
nordvpn login --token <TOKEN>
nordvpn connect

# Kontrollera anslutningen
nordvpn status

# Gör så att anslutningen är kvar vid omstart
nordvpn set autoconnect on

# Aktivera kill switch
nordvpn set killswitch on

# Aktivera CyberSec-funktionen (blockerar annonser och malware), obfuskera, notifiera om du vill (jag gör inte det)
# nordvpn set cybersec on
# nordvpn set obfuscate on
# nordvpn set notify on

4. kör ip addr och få reda på gränssnitten… i mitt fall var det “eth0” och “nordlynx” ----> ip addr

5. redigera iptables för att tillåta vidarebefordran med följande kommandon

sudo iptables -t nat -A POSTROUTING -o nordlynx -j MASQUERADE

sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o nordlynx -j ACCEPT
sudo iptables -A FORWARD -i nordlynx -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

sudo iptables-save > /etc/iptables/rules.v4

6. gör reglerna permanenta —> sudo apt-get install iptables-persistent

Under installationen frågar den om du vill spara nuvarande regler - välj ‘Yes’.

not - om du gör ändringar i framtiden och vill spara, gör —> sudo netfilter-persistent save

7. Kontrollera reglerna

sudo iptables -L -v -n
sudo iptables -t nat -L -v -n

8. Tillåt TailLXC att komma åt NordLXC.. NOTERA - /32 är för enskild IP för säkerhets skull, bättre än att tillåta hela subnätet access till nordLXC, kontrollera Trace Route (traceroute 8.8.8.8)

nordvpn allowlist add subnet <TailLXC IP>/32

Kontrollera Trace Route —> “traceroute 8.8.8.8”

Notering - detta bör nu visa NordLXC IP i hopp som visas nedan.

Exempel. TailLXC till NordLXC

# traceroute till 8.8.8.8 (8.8.8.8), 30 hopp max, 60 byte paket
#  1  NordLXCIP  0.393 ms  0.332 ms  0.308 ms
#  2  ... Ytterligare hopp

Exempel. Fjärrdator ansluten till TailLXC via exitnode

# traceroute till 8.8.8.8 (8.8.8.8), 64 hopp max, 40 byte paket
#  1  TailLXCIP  39.016 ms  18.384 ms  23.738 ms
#  2  NordLXCIP  24.389 ms  24.231 ms  23.300 ms
#  3 ... Ytterligare hopp

Ändring 1: Klargör guide och fixa formateringen

Jag ville bara dela ett litet projekt jag jobbade på för att förenkla detta. Detta kör 2 docker-containrar - en för Tailscale, och en annan för NordVPN.

Känn dig fri att prova, och bidra gärna tillbaka!

Funkade som en dröm! Min exit node har mullvad. Så jag är alltid ansluten till mullvad nu.

sjuk! ska prova detta med openvpn för att ansluta till protonvpn och rapportera tillbaka. Jag ville göra detta häromdagen och lade det lite åt sidan.

Jag har redan qbitT som ansluter till protonvpn via openvpn med ett skal skript för att plocka en slumpmässig konfiguration jag lade till i mappen, och en hälsokontroll som körs var femte minut eller så, om tun-anslutningen är nere (vpn är dött), kör den startskriptet igen. Kan vara värt att titta på för detta projekt.

Skulle du kunna installera nordvpn direkt på tailscale-lxc?

Tack så mycket för detta! Vill bara bekräfta att jag inte gjort något fel/att det inte kommer att vara ett problem. När jag testar mina DNS-servrar på en enhet som använder TailLXC, ändras min publika IP men mina DNS-servrar pekar samma som om de inte använde VPN. Jag har gjort samma test på NordLXC och DNS-servrarna är NordVPN:s DNS-servrar.

Eftersom all trafik ändå routas genom NordLXC antar jag att detta inte är ett problem, men ville bara vara säker?

Väldigt bra! tack. Kan det göras ännu mer allmänt med något som detta? qdm12/gluetun: VPN-klient i en tunn Docker-container för flera VPN-leverantörer, skrivet i Go, och använder OpenVPN eller Wireguard, DNS över TLS, med några proxyservrar inbyggda. (github.com)

Tack för detta. Hur distribuerar jag allt detta? Jag är ganska ny på detta. Hälsningar

Älskar det, ärligt talat… en av de bästa sakerna jag insåg efteråt är att jag aldrig behöver konfigurera nordvpn igen (även om det var en lokal maskin i samma LAN) när jag har tailscale på en maskin/telefon… om jag någonsin behöver passera saker genom en offentlig VPN igen, ändrar jag bara exit-noden och genast ändras den publika IP:n

plus om en vän/partner behöver tillgång till en VPN (t.ex. på semestern), kan de skapa sitt eget tailscale-konto och jag kan dela exit-noden…

Det har bara gått några dagar och det verkar ha hållit de tester jag har gjort (dns-ändringar, omstarter, enheter, lokal/fjärrkontroll)

Jag kunde inte få det att fungera. Det kan finnas ett sätt. Om jag minns rätt, var det problem med båda VPN:erna som är “på” samtidigt. ELLER Om tailscale är på men nordvpn inte.. men tailscale-data förväntas alltid gå till nordvpn, då kan det vara så att tailscale inte skulle kunna slå på eftersom det inte kan ansluta till tailscale-servrar. Kan ha fel på detta men det var mina tankar om vad som hände.

Glad att det hjälpte! Intressant, jag testade inte DNS-servrarna och är inte så bekant med alla detaljer. Jag tror inte att det borde vara ett problem men kanske kan du manuellt ställa in DNS-servern för TailLXC för att prioritera NordDNS-servrarna?

/u/ritalimo är ännu ett alt-konto för en spammer som marknadsför NordVPN, hänvisningslänkar, romansbots och mer. Köpare varnas, klicka inte på några länkar.

Känn dig fri att skicka in en PR för det. Jag är glad att granska och sammanfoga den.

Jag tror att du har rätt. Försökte många upplägg, slutligen är det din skrivning som är snabbast! Jag får mellan 150-200mbps jämfört med docker 30mbps.