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.
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.