Portál AbcLinuxu, 9. května 2025 00:37

Dotaz: SSH spojení za NAT

23.4.2014 20:27 Malinář
SSH spojení za NAT
Přečteno: 643×
Odpovědět | Admin
Věc se má tak, že na privátě mám notebook s Linuxem, který je schovaný minimálně za dvěma NATy (síť poskytovatele + síť v domě), a doma o půl republiky dál mám doma RPi jako server, který je z internetu dostupný přímo pod veřejnou IP. Moje otázka je jestli je možné to nějak udělat abych třeba z tabletu (který je obvykle taky někde za NATem) se dostal k tomu notebooku přes SSH, přičemž by RPi doma sloužil nejspíš jako proxy. Předpokládám, že to asi nějak jde, ale netuším jak. Poradíte někdo prosím?
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Jendа avatar 23.4.2014 20:41 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: SSH spojení za NAT
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na notebooku vytvořit skript a dát ho do cronu:
ps axu | grep -q [u]ser@pi || ssh -p 22 user@pi -N -R 0.0.0.0:9944:localhost:22
na RPi musíš vyrobit uživatele, přidat mu SSH klíč z notebooku a nastavit v /etc/ssh/sshd_config GatewayPorts clientspecified (jinak se půjde připojit jen z localhostu).
xkucf03 avatar 24.4.2014 17:19 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: SSH spojení za NAT
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jak píše Jenda. Nebo si nahoď IPv6 tunel.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
25.4.2014 01:46 lertimir | skóre: 64 | blog: Par_slov
Rozbalit Rozbalit vše Re: SSH spojení za NAT
Odpovědět | | Sbalit | Link | Blokovat | Admin
Možností je několik. Buď, co píše Jenda. Nebo na malině a klientech spustit openVPN, což může být trochu overkill. Nebo již zmíněný IPv6 tunel. Nebo podle Krčmářova článku na rootu.
25.4.2014 11:21 GeBu | skóre: 27 | blog: zápisky
Rozbalit Rozbalit vše Re: SSH spojení za NAT
Jak jsem to vyřešil já. Je to v podstatě IPv6 tunel.
25.4.2014 12:31 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: SSH spojení za NAT
Odpovědět | | Sbalit | Link | Blokovat | Admin
  1. Dá se vytvořit IPSec VPN s podporou IPv6 a tím spojit notebook za NATem se serverem, jako by byly na jedné síti. (Místo IPv6 se dá taky použít nějaký neveřejný IPv4 rozsah, ale otázka je, kdo by o takovou fosilii stál. Pro tento typ VPN používám StrongSwan.
  2. Někteří považují za jednodušší použít OpenVPN v režimu tap, což je VPN na 2. vrstvě síťového stacku (narozdíl od IPSec, který je (z hlediska uživatele) spíš jen na 3. vrstvě). To s jednoduchostí je pouze a výhradně věc názoru, nicméně OpenVPN je bezesporu další jednoduchá možnost, jak dostat obě zařízení na jednu síť.
  3. Pak je tu možnost, která je nejsnazší na vyzkoušení, ale trocho otrava na údržbu, a sice připojit se pomocí SSH přes SSH tunel. Tedy na notebooku při startu spustit ssh -f -N -R adresa_serveru:port:localhost:22 uživatel@adresa_serveru. Tím se naváže SSH tunel a na notebook se pak dá dostat přes SSH pomocí ssh -p port adresa_serveru. Ten port je vhodné zvolit jiný než implicitní SSH, aby nedocházelo ke konfliktům při spuštění sshd, tedy něco jako 22222 a podobně. Je vhodné vyrobit si službu pro systemd, která takové spuštění SSH zajistí.

K bodu 3 bych doplnil příklad takové služby pro systemd. Stačí to trochu tweaknout, dát to někam do /etc/systemd/system/sshtunnel.service a pak už jen systemctl daemon-reload; systemctl enable sshtunnel; systemctl start sshtunnel. U této konfigurace má uživatel root na notebooku ve svém ~/.ssh uložený nešifrovaný soukromý SSH klíč pro uživatele lojza na vzdáleném serveru. Díky tomu se služba může automaticky spustit, bez zadávání čehokoliv. (Lojza by měl být samozřejmě extrémně omezený, tedy neměl by smět v podstatě nic kromě otvírání nějakého portu 22222.)

[Unit]
Description=SSH over SSH tunnel to reach this machine from outside
After=NetworkManager-wait-online.service
Requires=NetworkManager-wait-online.service

[Service]
Type=forking
ExecStart=/usr/bin/ssh -o ConnectionAttempts=3600 -f -C -N -R *:22222:[::1]:22 lojza@my.server.example.com

[Install]
WantedBy=multi-user.target

Pokud jde o možnosti (1) a (2), v případě zájmu sem můžu dát nějakou konfiguraci IPSec (StrongSwan) s podporou IPv6, případně OpenVPN konfigurák, obojí samozřejmě s podporou autentifikace certifikátem. Ale na obojí se dá tak či tak najít spousta návodů na webu. Možnost (3) je tak trochu quick and dirty řešení, ale někdy se může fakt hodit. IPSec nebo OpenVPN mají samozřejmě tu výhodu, že se přes ně dá routovat i spousta dalších věcí, nikoliv jenom SSH. Například když má server veřejnou IPv4 adresu, má automaticky taky 2^80 veřejných IPv6 adres. Tedy může sloužit jako vzdálený IPv6 router pro notebook schovaný za dvěma NATy, který by se jinak k IPv6 třeba vůbec nedostal. Něco takového možnost (3) zkrátka neumí.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.