Jak mogę określić port lokalny podczas nawiązywania połączeń SSH?

13

Mam dwa serwery hostowane w IDC. Mogę używać portów 20/21/22/23/3389 / 33101-33109 do nawiązywania połączeń między dwoma serwerami. Urządzenie sieciowe IDC zablokuje wszelkie inne pakiety, których port źródłowy lub docelowy nie znajduje się w liście / zakresie 20/21/22/23/80/3389 / 33101-33109. Ale port źródłowy SSH jest losowy.

Za pomocą polecenia można łatwo określić port zdalny.ssh username@server -p remote_port

Czy istnieje sshparametr polecenia lub jakiś inny sposób określenia lokalnego portu źródłowego, dzięki czemu mogę na przykład użyć portu 33101 do ustanowienia połączenia SSH?

Moja topologia sieci wygląda następująco:
Topologia sieci

fajin yu
źródło

Odpowiedzi:

2

W sytuacjach jednorazowych lub okazjonalnych podejście ProxyCommand jest bardzo wygodne.

Z drugiej strony, jeśli potrzebujesz kilku równoczesnych połączeń lub być może musisz często używać tego polecenia do codziennej pracy, możesz zamiast tego rozważyć ustawienie reguły translacji adresów sieciowych (NAT) na serwerze.

Wymaga to rootdostępu administratora (zwykle ) na serwerze, aby najpierw zastosować jedną regułę NAT. Zauważ, że może nie być dozwolone (lub skuteczne) stosowanie reguły NAT, nawet jeśli masz dostęp administratora, jeśli twój „serwer” jest w rzeczywistości kontenerem (takim jak Docker) zamiast maszyny.

Mówiąc o typowym systemie Linux z iptablespakietem, reguła NAT stosowana na serwerze 1 w przykładowym przypadku może wyglądać następująco:

iptables -t nat -I POSTROUTING -d <server2-ip-address> -p tcp --dport <server2-port> -j SNAT --to :33101-33109

Że komenda instruuje jądro Linux, aby wszystkie połączenia w kierunku portu server2 portu z server2 adres-IP- wyjść przy użyciu portu źródłowego wybranego w zakresie 33101-33109, który jest dostępny w tym momencie.

Po wprowadzeniu tej reguły łączysz się ze swoim serwerem2 zwykłymi:

ssh username@server2 -p remote_port

i możesz używać tej samej sshkomendy jednocześnie tyle razy, ile potrzebujesz, o ile są dostępne porty w zakresie określonym w regule NAT.

Należy jednak zauważyć, że netstat(lub równoważne polecenie) uruchomione na serwerze zgłasza, że ​​lokalny adres połączenia jest niezmodyfikowanym , losowo wybranym numerem portu źródłowego, nawet jeśli rzeczywisty ruch dostarczany na serwer2 niesie zmodyfikowany numer portu źródłowego.

Aby cofnąć regułę NAT, polecenie jest takie samo, z wyjątkiem -Dopcji zamiast -I.

Automatyczne stosowanie reguły NAT podczas rozruchu zależy od tego, jaką dystrybucję Linuksa masz na serwerze i od tego, czy ma już jakąś konfigurację zapory ogniowej, czy nie.

Nie mam doświadczenia z systemami podobnymi do BSD, ale ufam, że istnieje odpowiednik.

LL3
źródło