PDA

View Full Version : SSH senza passare dalla vpn


boboms
04-12-2016, 11:57
Buongiorno a tutti.
Mi rivoglo alla comunita' per avere un chiarimento se possibile su un problema che non riesco a risolvere.

La situazione:
- Ho un Raspberry Pi 3 con Raspbian (kernel 4.1.19), ip 192.168.0.70/24, ssh in ascolto su 2345 e 2346
- Ho un Odroid C2 con Archlinux (kernel 3.14.79), ip 192.168.0.77/24, ssh in ascolto su 2222 e 2223
- Il router adsl e' il 192.168.0.1
Sul router le porte sono configurate per l'inoltro. Funziona tutto, ovvero mi collego ai due dispositivi dall'esterno attraverso un dns dinamico.
Ho poi configurato su entrambi una vpn con openvpn. Anche questa funziona egregiamente, ed ho sfruttato la possibilita' del port forwarding offerto per avere l'ssh attraverso la vpn. Quindi su ognuno dei due dispositivi una delle due porte ssh e' "agganciata" ad una del server vpn che mi inoltra il traffico ssh su quella designata.
Anche in questo caso, su entrambi i dispositivi, tutto funziona perfettamente. Ho creato un'altra entry su un dns dinamico per questo, quindi di fatto ho 3 nomi in dns dinamico: uno per l'ip pubblico della connessione con il provider (lo fa il router) e uno per ognuno dei due dispositivi quando collegati in vpn.
Per "esercizio" ho deciso che volevo accedere ai due dispositivi in ssh anche non attraverso la vpn (nel caso ci fossero problemi sulla vpn) e per questo ho messo il server ssh in ascolto su due porte. Le porte che ho deciso di mantenere al di fuori della vpn sono la 2222 e 2345.
Per fare questo ho seguito alcune guide trovate, e riassumo cosa ho fatto:
- Su entrambi e' installato il pacchetto iproute2;
- Ho creato una nuova definizione di tabella in /etc/iproute2/rt_tables (201 novpn);
- Ho creato una nuova regola per il routing
ip rule add fwmark 65 table novpn
dopo aver verificato di non averne altre di simili ed implementata
ip route add default via 192.168.0.1 dev eth0 table novpn
- Ho istruito iptables perche' marchi i pacchetti ssh che voglio non passino attraverso la vpn
iptables -t mangle -A OUTPUT -p tcp --sport 2222 -j MARK --set-mark 65
Eseguiti da riga di comando ognuno di questi comandi non da nessun errore.
So che questi comandi non sono permanenti e al riavvio sono persi (a parte la creazione della tabella) e per questo ho creato uno script ma il punto non e' questo.

Il problema: sul Raspberry Pi 3 funziona perfettamente, sull'Odroid C2 no...

I comandi sono gli stessi, nessuno riporta alcun errore ma il collegamento ssh all'odroid sulla porta non gestita dalla vpn (2222 come dai comandi sopra) non funziona. Ho verificato e riverificato varie volte sul router e sulla vpn che le porte siano corrette e lo sono. Sul raspberry invece funziona tutto perfettamente, ovvero con la vpn attiva posso collegarmi in ssh sia alla 2345 (puntando all'ip del router) sia alla 2346 (puntando al server vpn). Sull'odroid riesco a collegarmi soltanto attraverso la vpn (porta 2223 su ip del server vpn quindi).
Verificando su ognuno dei dispositivi (ip rule, ip route show table novpn, iptables -t mangle -L) vedo che tutto e' impostato come da comandi. L'unica differenza tra i due sta nel comando netstat -r (la terza riga del Pi3 manca sul C2).
Raspberry Pi 3
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default 10.4.0.1 128.0.0.0 UG 0 0 0 tun0
default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
10.4.0.0 * 255.255.0.0 U 0 0 0 tun0
128.0.0.0 10.4.0.1 128.0.0.0 UG 0 0 0 tun0
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
x.x.x.x 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0

Odroid C2
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.4.0.1 128.0.0.0 UG 0 0 0 tun0
default gateway 0.0.0.0 UG 0 0 0 eth0
10.4.0.0 0.0.0.0 255.255.0.0 U 0 0 0 tun0
128.0.0.0 10.4.0.1 128.0.0.0 UG 0 0 0 tun0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
x.x.x.x gateway 255.255.255.255 UGH 0 0 0 eth0
(ho sostituito qui l'ip pubblico del server vpn con x.x.x.x)

E' come se il C2 non gestisse sulla stessa interfaccia diversi gateway.
La cosa non e' fondamentale, come ho detto l'ho fatto per "esercizio", ma vorrei capire per quale motivo la cosa non funziona su uno dei due dispositivi... Sono aperto a suggerimenti su altri metodi per ottenere il risultato, ma vorrei soprattutto capire perche' non funziona il caso citato. Ho cercato in rete di capire se il problema potesse essere attribuibile al "vecchio" kernel, ma non ho trovato nulla di specifico.

Vi ringrazio anticipatamente.

eaman
05-12-2016, 10:45
Hanno distro / kernel diversi?
Avranno qualche settaggio di sysctl diverso..

/etc/sysctl.conf
sysctl -a

boboms
06-12-2016, 07:44
Ciao, come ho scritto sopra si, hanno distro/kernel diversi:
- Il Raspberry 3 ha Raspbian (una derivata debian) con kernel 4.1.19
- L'Odroid C2 ha una Arch Linux con kernel 3.14.79
I due sistemi sono aggiornati all'ultima release, ed il kernel e' quello "ufficiale" in entrambi i casi.
Non mi sono avventurato in ricompilazioni del kernel perche' su Odroid chi ne sa ben piu' di me ha avuto non poche difficolta'... non sono cosi' scafato su linux....

Per quanto riguarda la verifica dei parametri del kernel ti ringrazio del suggerimento, non ci avevo pensato.
Sto verificando alcuni di essi perche' effettivamente hanno valori diversi (il ramo net.ipv4 in particolare) ma prima di modificarli voglio capire cosa fanno.... Sono comunque i valori preimpostati dal momento che non ne ho modificato nessuno rispetto ai default.

demikiller
06-12-2016, 08:03
Un'idea per testare se funzionano bene:

tu hai:

- un Raspberry Pi 3 con Raspbian (kernel 4.1.19), ip 192.168.0.70/24, ssh in ascolto su 2345 e 2346
- un Odroid C2 con Archlinux (kernel 3.14.79), ip 192.168.0.77/24, ssh in ascolto su 2222 e 2223

Provate ad invertire i parametri: Odroid C2 al posto di Raspberry Pi 3 e Raspberry Pi 3 al posto di Odroid C2

Per capire se gli ex parametri di Raspberry su Odroid non funzionassero, significa che è il sistema operativo o kernel da sistemare.

Gli ex parametri di Odroid su Raspberry, se non dovessero andare a buon fine, forse il problema è da rivedere meglio le configurazioni (?)

E' solo un'idea...

boboms
06-12-2016, 09:07
Ciao e grazie anche a te.
Per "invertire i parametri" intendi scambiare gli ip tra i due?
Se e' cosi' ho gia' provato, e' stato uno dei primi tentativi per capire se avevo sbagliato qualcosa, dopo aver rivisto i passaggi. Ma non ha sortito effetti.
Se invece ti riferisci ai parametri del kernel, sto guardando e cercando di capire le differenze oltre che il loro significato prima di avventurarmi in cambi.
Gli unici che avevo modificato (subito dopo l'installazione tempo fa) fino ad ora rispetto ai valori di default sono "vm.swappiness" e "vm.vfs_cache_pressure" sull'odroid, ma non hanno a che fare con rotte e rete, quindi mi viene da pensare che se il problema e' nei paramteri del kernel su quello piu' vecchio sia da attivare qualcosa che in quello nuovo lo e' per default... cercando in rete non ho trovato informazioni in tal senso al momento pero'...

Le differenze tra i parametri al momento sono:

boboms
07-12-2016, 19:02
Rieccomi.
Come suggeritomi il problema stava in alcuni settaggi del kernel.
In particolare ho risolto impostando a zero il parametro
net.ipv4.conf.eth0.rp_filter

che nella distribuzione ArchLinux era impostato a 1, o meglio quello globale lo era e non c'era lo specifico.

Ringrazio chi mi ha risposto per il prezioso aiuto.