Як я можу вказати локальний порт при встановленні з'єднань SSH?


13

У мене розміщено два сервери в IDC. Я можу використовувати тільки порти 20/21/22/23/3389 / 33101-33109 для встановлення з'єднань між двома серверами. Мережевий пристрій IDC блокує будь-які інші пакети, вихідний або вихідний порт яких немає у списку / діапазоні 20/21/22/23/80/3389 / 33101-33109. Але вихідний порт SSH є випадковим.

За допомогою команди можна легко вказати віддалений порт.ssh username@server -p remote_port

Отже, чи є sshпараметр команди чи інший спосіб вказати локальний вихідний порт, щоб я міг використовувати, наприклад, порт 33101 для встановлення з'єднання SSH?

Моя мережа топологія така:
мережева топологія

Відповіді:



2

Для разових або будь-яких випадкових ситуацій підхід ProxyCommand легко є дуже зручним.

З іншого боку, якщо вам потрібно декілька одночасних з'єднань або коли вам, можливо, вам потрібно часто використовувати цю команду для щоденної роботи, ви можете також замість цього встановити на сервері правило перекладу мережевих адрес (NAT).

Для цього потрібен суперпопулярний (зазвичай root) доступ на вашому сервері, щоб спочатку застосувати одне єдине правило NAT. Зауважте, що можливо, взагалі не буде дозволено (або ефективно) застосовувати правило NAT, навіть якщо у вас є суперпользовательский доступ, якщо ваш "сервер" насправді є контейнером (як Docker) замість машини.

Якщо говорити про типову систему Linux з iptablesнабором, то правило NAT, яке застосовується на сервері1 для вашого зразка, може виглядати так:

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

Ця команда інструктує ядро Linux , щоб зробити якесь - або з'єднання в напрямку порту server2-порту в server2-IP-адреса , щоб вийти , використовуючи порт джерела , обраний в діапазоні 33101-33109 , який доступний в даний момент.

Як тільки це правило діє, ви підключаєтесь до свого сервера2 просто за допомогою свого звичного:

ssh username@server2 -p remote_port

і ви можете використовувати цю ж sshкоманду одночасно стільки разів, скільки вам потрібно, доки є доступні порти в діапазоні, визначеному в правилі NAT.

Зауважте, однак, що netstat(або еквівалентна команда), запущена на вашому сервері, повідомляє про локальну адресу з'єднання як про немодифікований , випадково вибраний номер вихідного порту, навіть незважаючи на те, що фактичний трафік, який постачається на ваш сервер2, містить модифікований номер вихідного порту.

Щоб скасувати правило NAT, команда така ж, за винятком -Dпараметра замість -I.

Якщо автоматичне застосування NAT застосовується під час завантаження, залежить від того, який дистрибутив Linux у вас є на вашому сервері та від того, чи має він вже встановлену брандмауер чи ні.

Я не маю досвіду роботи з BSD-подібними системами, але я вірю, що існує еквівалент.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.