Usare Ubuntu come router VPN

Networking, configurazione della connessione, periferiche e condivisioni di rete.
Scrivi risposta
MaxPaxIT
Prode Principiante
Messaggi: 6
Iscrizione: giovedì 7 settembre 2023, 9:26
Distribuzione: Ubuntu 20.04.6 LTS
Sesso: Maschile

Usare Ubuntu come router VPN

Messaggio da MaxPaxIT »

Buongiorno a tutti e grazie a chi vorrà rispondermi,
Vorrei capire se è possibile utilizzare un PC con ubuntu, che uso come server, per fargli fare il lavoro che farebbe un router con OpenWrt.
Per spiegare che cosa vorrei ottenere, forse un'immagine vale più di tante parole:
Schema1.jpg
In pratica vorrei ottenere una LAN principale (in azzurro) ed una LAN_VPN in rosso ottenendo che tutto quello che si collega a valle dello switch3 vada via VPN.
Riguardo i servizi che attualmente girano sul server (PC UBUNTU) , per esempio la domotica, vorrei capire se posso decidere se farli connettere ad internet via VPN oppure no.
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 12816
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: Usare Ubuntu come router VPN

Messaggio da thece »

:ciao: e benvenuto sul Forum.

Ovviamente si può fare. Basta giocare un pò con le tabelle di routing e IPTables.

Dove è installato il server VPN? Presumo sul PC con Ubuntu

Se nello schema indicavi anche le subnet era meglio.

Un qualcosa di simile lo puoi vedere in

[HOWTO] OpenVPN - Easy RSA 3 - Instal. & Conf.

oppure basta che cerchi le discussioni su OpenVPN in cui ho partecipato io.
MaxPaxIT
Prode Principiante
Messaggi: 6
Iscrizione: giovedì 7 settembre 2023, 9:26
Distribuzione: Ubuntu 20.04.6 LTS
Sesso: Maschile

Re: Usare Ubuntu come router VPN

Messaggio da MaxPaxIT »

Grazie @thece,
sono abbastanza digiuno riguardo le reti e quindi potrei dire delle cose con poco senso.
L'idea è di collegarsi ad una VPN esistente al di fuori della mia lan, che potrebbe essere la VPN aziendale o un servizio VPN per questione di privacy.

Ipotizzando:
LAN principale è 192.168.0.0 / 24 Ubuntu ci si collega con eth1

In pratica dovrei:
1) Installare OpenVPN client su UBUNTU

2) Usare Ubuntu come se fosse un router facendogli creare la rete (172.16.0.0 / 24) su eth2
- Abilitare il forwarding IP su Ubuntu
- configuare ipTables per NAT e tutto il resto
- abilitare il server DHCP

3) Instradare il traffico sulla VPN
- inserire l'indirizzo di Ubuntu come gateway di tutto quello che voglio girare sulla VPN oppure collegare attraverso eth2

Se fin qui tutto è corretto, mi rimane da capire come fare a fare passare dalla VPN o meno tutti i servizi che girano su Ubuntu (in realtà, ad oggi, vorrei che nessuno passasse dalla VPN)
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 12816
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: Usare Ubuntu come router VPN

Messaggio da thece »

MaxPaxIT ha scritto:
giovedì 7 settembre 2023, 19:24
Se fin qui tutto è corretto ...
Corretto.

Hai fatto qualche progresso?
MaxPaxIT
Prode Principiante
Messaggi: 6
Iscrizione: giovedì 7 settembre 2023, 9:26
Distribuzione: Ubuntu 20.04.6 LTS
Sesso: Maschile

Re: Usare Ubuntu come router VPN

Messaggio da MaxPaxIT »

thece ha scritto:
venerdì 8 settembre 2023, 22:10
MaxPaxIT ha scritto:
giovedì 7 settembre 2023, 19:24
Se fin qui tutto è corretto ...
Corretto.

Hai fatto qualche progresso?
Ancora no, mi sto leggendo le varie guide.
Per instradare selettivamente i servizi verso la VPN ho trovato vari sistemi, ma credo che forse opterò per creare un utente ad hoc per tutto quello che dovrà passare dalla VPN.
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 12816
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: Usare Ubuntu come router VPN

Messaggio da thece »

Intanto potresti mettere in piedi la LAN a valle del PC Ubuntu, quindi installare e configurare il server DHCP per servire (solo) questa LAN, e verificare che da questa rete la connettività funzioni come previsto.
Questo passaggio è propedeutico per tutto il resto.
MaxPaxIT ha scritto:
domenica 10 settembre 2023, 10:44
Per instradare selettivamente i servizi verso la VPN ho trovato vari sistemi, ma credo che forse opterò per creare un utente ad hoc per tutto quello che dovrà passare dalla VPN.
Non ho capito, mi fai un esempio concreto?
Avatar utente
Miner34
Prode Principiante
Messaggi: 62
Iscrizione: sabato 5 novembre 2022, 15:09
Desktop: Gnome su Xorg
Distribuzione: Ubuntu 22.04.2 LTS

Re: Usare Ubuntu come router VPN

Messaggio da Miner34 »

Per fare questo lavoro io ti consiglierei un Raspberry Pi invece di un normale PC, ma per provare va bene comunque.
Comunque, buona fortuna.
Mai arrendersi.
MaxPaxIT
Prode Principiante
Messaggi: 6
Iscrizione: giovedì 7 settembre 2023, 9:26
Distribuzione: Ubuntu 20.04.6 LTS
Sesso: Maschile

Re: Usare Ubuntu come router VPN

Messaggio da MaxPaxIT »

thece ha scritto:
domenica 10 settembre 2023, 12:38
Intanto potresti mettere in piedi la LAN a valle del PC Ubuntu, quindi installare e configurare il server DHCP per servire (solo) questa LAN, e verificare che da questa rete la connettività funzioni come previsto.
Questo passaggio è propedeutico per tutto il resto.
MaxPaxIT ha scritto:
domenica 10 settembre 2023, 10:44
Per instradare selettivamente i servizi verso la VPN ho trovato vari sistemi, ma credo che forse opterò per creare un utente ad hoc per tutto quello che dovrà passare dalla VPN.
Non ho capito, mi fai un esempio concreto?
Ho Homeassitant con i sui servizi e Nextcloud in docker ed un bot in python che non vorrei far passare dalla VPN.
Un container per il backup, semnpre in docker, che vorrei far passare dalla VPN.
Questa è la parte che trovo più complicata, anche perche per home assistant ed i suoi servizi devo usare l'opzione network_mode host.
Ultima modifica di MaxPaxIT il lunedì 11 settembre 2023, 11:26, modificato 1 volta in totale.
MaxPaxIT
Prode Principiante
Messaggi: 6
Iscrizione: giovedì 7 settembre 2023, 9:26
Distribuzione: Ubuntu 20.04.6 LTS
Sesso: Maschile

Re: Usare Ubuntu come router VPN

Messaggio da MaxPaxIT »

Miner34 ha scritto:
domenica 10 settembre 2023, 14:40
Per fare questo lavoro io ti consiglierei un Raspberry Pi invece di un normale PC, ma per provare va bene comunque.
Comunque, buona fortuna.
Si, ma dovrei comperarne uno per fargli fare solo questo, ma a questo punto forse un micropc con pfsense, ce ne sono con 4 porte 2.5 gbyte.
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 12816
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: Usare Ubuntu come router VPN

Messaggio da thece »

Proposta di soluzione


Obiettivi:

- per tutti gli host appartenenti alla LAN di subnet 192.168.0.0/24 tutte le connessioni in uscita dirette verso Internet devono passare attraverso il gateway 192.168.0.1.
- per tutti gli host appartenenti alla LAN di subnet 192.168.10.0/24 tutte le connessioni in uscita dirette verso Internet devono passare attraverso la VPN
- tutti gli host appartenenti alla LAN di subnet 192.168.10.0/24 devono poter comunicare con gli host appartenenti alla LAN di subnet 192.168.0.0/24 (connessione iniziata dalla LAN 192.168.10.0/24)


Nota:

per fare in modo che tutti gli host appartenenti alla LAN di subnet 192.168.0.0/24 possano comunicare con gli host appartenenti alla LAN di subnet 192.168.10.0/24 (connessione iniziata dalla LAN 192.168.0.0/24) dovrebbe essere sufficiente aggiungere nella tabella di routing del gateway 192.168.0.1 una rotta che instradi le connessioni dirette alla LAN 192.168.10.0/24 attraverso l'host 192.168.0.23.
Non l'ho provato.



Il mio "router VPN" è un Raspberry Pi con sistema operativo Raspberry Pi OS basato su Debian 11.


Assegno gli indirizzi IP statici

/etc/network/interfaces

Codice: Seleziona tutto

# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
source /etc/network/interfaces.d/*

auto lo
	iface lo inet loopback
	address 127.0.0.1
	netmask 255.0.0.0

auto eth0
	iface eth0 inet static
	address 192.168.0.23
	netmask 255.255.255.0
	gateway 192.168.0.1
	dns-nameservers 192.168.0.1 208.67.222.222 208.67.220.220

# Si, e' una scheda di rete Ethernet/USB
allow-hotplug eth1
auto eth1
	iface eth1 inet static
	address 192.168.10.23
	netmask 255.255.255.0
Abilito l'IPv4 Forwarding

/etc/sysctl.conf

Codice: Seleziona tutto

...
net.ipv4.ip_forward=1
...
Installo e configuro il server DHCP

/etc/default/isc-dhcp-server

Codice: Seleziona tutto

# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server)

# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
#DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
#DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf

# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPDv4_PID=/var/run/dhcpd.pid
#DHCPDv6_PID=/var/run/dhcpd6.pid

# Additional options to start dhcpd with.
#	Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#	Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="eth1"
# INTERFACESv6=""
/etc/dhcp/dhcpd.conf

Codice: Seleziona tutto

ddns-update-style none;

log-facility local7;

subnet 192.168.10.0 netmask 255.255.255.0
{
	range 192.168.10.200 192.168.10.254;
	option routers 192.168.10.23;
	option subnet-mask 255.255.255.0;
	option broadcast-address 192.168.10.255;
	option domain-name-servers 192.168.0.1, 208.67.222.222, 208.67.220.220;
	option netbios-name-servers 192.168.0.1;
	default-lease-time 900;
	max-lease-time 7200;
}
Abilito l'IP Masquerading

Codice: Seleziona tutto

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
(non ci sono altre regole, le default policy sono tutte impostate su ACCEPT)

Codice: Seleziona tutto

***********************************************************************
************************* IPv4 IPTables Rules *************************
***********************************************************************

                  ********** Table filter **********

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

                  ********** Table nat **********

Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1      384 25813 MASQUERADE  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0           
2      319 19642 MASQUERADE  all  --  *      tun0    0.0.0.0/0            0.0.0.0/0           

                  ********** Table mangle **********

Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

                  ********** Table raw **********

Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

                  ********** Table security **********

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
Questa è la tabella di routing dopo l'attivazione del Client VPN

Codice: Seleziona tutto

ip route list [table main]

default via 192.168.0.1 dev eth0 
10.96.0.0/16 dev tun0 proto kernel scope link src 10.96.0.21 
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.23 
192.168.10.0/24 dev eth1 proto kernel scope link src 192.168.10.23
Queste sono le regole di policy routing dopo l'attivazione del Client VPN

Codice: Seleziona tutto

ip rule list

0:	from all lookup local
32766:	from all lookup main
32767:	from all lookup default
Il Client VPN è configurato per NON effettuare la redirezione del default gateway. In pratica: tutte le connessioni in uscita dirette verso Internet NON passano dalla VPN.

Aggiungo una tabella di routing

Codice: Seleziona tutto

sudo ip route add default via 10.96.0.21 dev tun0 table 100
quindi ...

Codice: Seleziona tutto

ip route list table 100

default via 10.96.0.21 dev tun0
Aggiungo 2 regole di policy routing

Codice: Seleziona tutto

sudo ip rule add priority 10000 iif eth1 to 192.168.0.0/24 lookup main
sudo ip rule add priority 10001 iif eth1 lookup 100
quindi ...

Codice: Seleziona tutto

ip rule list

0:	from all lookup local
10000:	from all to 192.168.0.0/24 iif eth1 lookup main
10001:	from all iif eth1 lookup 100
32766:	from all lookup main
32767:	from all lookup default
Le regole di policy routing vengono processate in ordine di priorità a partire da 0


@MaxPaxIT questa proposta di soluzione è abbastanza vicina al tuo desiderata. Occorrerebbe raffinare un pò di più l'instradamento delle connessioni in uscita verso Internet.
Allegati
network.png
Avatar utente
OMBRA_Linux
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2646
Iscrizione: mercoledì 18 febbraio 2015, 14:24
Desktop: HP / Lenovo / Samsung
Distribuzione: Android / Linux / Windows10-11
Sesso: Maschile
Località: Napoli

Re: Usare Ubuntu come router VPN

Messaggio da OMBRA_Linux »

Puoi configurare la VPN su OpenWRT tenendolo separato dal Router Principale.
Oltretutto puoi collegarlo con Cavo Wan-Lan.
In rete è pieno di Guide.
Se per vivere devi strisciare, alzati e muori.
MaxPaxIT
Prode Principiante
Messaggi: 6
Iscrizione: giovedì 7 settembre 2023, 9:26
Distribuzione: Ubuntu 20.04.6 LTS
Sesso: Maschile

Re: Usare Ubuntu come router VPN

Messaggio da MaxPaxIT »

thece ha scritto:
mercoledì 13 settembre 2023, 23:03
Proposta di soluzione
Grazie mille.
Farò sicuramente un test con la tua soluzione.

Nel frattempo ho cercato di leggermi la documentazione riguardante le reti e come vengono gestite da Ubuntu.
Finora ho fatto un solo due test pratici per capire come gestire i container docker:
1) Client VPN in docker: posso facilemnte instradare il traffico dei containers che desidero attraverso la VPN, ma ho trovato più difficoltoso instradare il traffico delle applicazioni o servizi attraverso la VPN perchè credo di aver capito che dovrei utilizzare un proxy (tipo privoxy). Comunque essendo un test preliminare non ho approfondito.
2) Client VPN lanciato nel sistema: tutto il traffico del computer passa dalla VPN compresi tutti i container docker. Da quello che ho capito la selezione di che cosa passa dalla VPN e che cosa non passa la si può fare solo in base all'utente. Questa soluzione la scarterei in partenza.

Una soluzione che mi è venuta in mente "studiando" le guide è quella di utilizzare un diverso namespace di rete per lanciare il client VPN e poi usare delle interfacce virtuali per collegare il nuovo namespace alle applicazioni o interfacce fisiche. In pratica:
- Eth_0 è collegata al modem
- Eth_1 è quella che dovrè collegare tutti i device che devono passare dalla VPN
- creo Veth_0 in peer con Veth_1
- collego Veth_0 ad Eth_1
- Sposto Veth_1 nel namespace NS_1
- imposto il routing ed installo il server DHCP (come gateway ci metto l'indirizzo di Veth_0)
- creo Veth_2 in peer con Veth_3
- collego Veth_2 ad Eth_0
- Sposto Veth_3 nel namespace NS_1
... da qui in poi non sono certo che sia corretto perchè ancora è tutto teorico perchè ancora non ho fatto nessun test
-lancio la VPN nel namespace NS_1
-collego l'interfaccia della VPN, immagino tun_0 alla Veth _3 (sempre in NS_1)


Pero, prima di procedere voglio testare la tua soluzione perchè la mia al momento è solo pura teoria, e forse anche un po vacillante, soprtutto perchè ancora non mi sono sufficientemente documentato su come "dire" ai vari servizi/applicazioni usa questa connessione oppure usa quell'altra.



Oppure,
potrei installare openWRT sul mio secondo router (Cudy WR2100 ... ho già scaricato il firmware ufficiale dal sito del produttore).
OMBRA_Linux ha scritto:
giovedì 14 settembre 2023, 11:25
Puoi configurare la VPN su OpenWRT tenendolo separato dal Router Principale.
Visto che comunque sia, dato che dovrò cambiare la posizione del modem/router (del fornitore internet), avrò bisogno di un nuovo swithc/AP magari prenderne uno con un processore piu performante anzichè "allargare" la copertura wifi con mesh.
Avatar utente
tokijin
Moderatore Globale
Moderatore Globale
Messaggi: 4594
Iscrizione: mercoledì 3 giugno 2009, 23:10
Desktop: plasma 5.27.4
Distribuzione: Kubuntu 23.04
Località: Abruzzo

Re: Usare Ubuntu come router VPN

Messaggio da tokijin »

OMBRA_Linux ha scritto:
giovedì 14 settembre 2023, 11:25
Puoi configurare la VPN su OpenWRT tenendolo separato dal Router Principale.
Oltretutto puoi collegarlo con Cavo Wan-Lan.
In rete è pieno di Guide.
Cito questo messaggio particolare ma ovviamente vale per chiunque:
leggiamo bene sempre il primo messaggio e cerchiamo di fornire la soluzione al problema descritto.

Questo link è sempre valido: viewtopic.php?f=8&t=633601
Sei abbruzzese se dopo che ti sei strafogato un chilogrammo di pasta, hai il coraggio di dire alla cuoca "cacc ch'è cott" - Se entra un piccione in casa..chiudi le finestre!
Ubuntu User #28657 - Il mio vecchio hardware - Tag Codice
Avatar utente
OMBRA_Linux
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2646
Iscrizione: mercoledì 18 febbraio 2015, 14:24
Desktop: HP / Lenovo / Samsung
Distribuzione: Android / Linux / Windows10-11
Sesso: Maschile
Località: Napoli

Re: Usare Ubuntu come router VPN

Messaggio da OMBRA_Linux »

tokijin ha scritto:
martedì 10 ottobre 2023, 10:25
OMBRA_Linux ha scritto:
giovedì 14 settembre 2023, 11:25
Puoi configurare la VPN su OpenWRT tenendolo separato dal Router Principale.
Oltretutto puoi collegarlo con Cavo Wan-Lan.
In rete è pieno di Guide.
Cito questo messaggio particolare ma ovviamente vale per chiunque:
leggiamo bene sempre il primo messaggio e cerchiamo di fornire la soluzione al problema descritto.

Questo link è sempre valido: viewtopic.php?f=8&t=633601


Contro Cito:

Beh visto che hai la soluzione perchè non la posti, cosi che chi avrà lo stesso problema legga e trova il ( Risolto ) al suo problema.
Magari potrei trovarmici io nella stessa situazione e saprei cosa fare.
Se per vivere devi strisciare, alzati e muori.
Avatar utente
tokijin
Moderatore Globale
Moderatore Globale
Messaggi: 4594
Iscrizione: mercoledì 3 giugno 2009, 23:10
Desktop: plasma 5.27.4
Distribuzione: Kubuntu 23.04
Località: Abruzzo

Re: Usare Ubuntu come router VPN

Messaggio da tokijin »

Non ho la soluzione e di conseguenza non posso condividerla.

A proposito di link sempre validi c'è anche questo: app.php/rules#regola-4s

Ora finiamo di sporcare la discussione con questo tipo di messaggi; se serve scrivi, a me o allo staff, in privato.

Ciao
Sei abbruzzese se dopo che ti sei strafogato un chilogrammo di pasta, hai il coraggio di dire alla cuoca "cacc ch'è cott" - Se entra un piccione in casa..chiudi le finestre!
Ubuntu User #28657 - Il mio vecchio hardware - Tag Codice
Scrivi risposta

Ritorna a “Connessione e configurazione delle reti”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti