Как я могу указать локальный порт при установлении 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?

Моя топология сети такая:
топология сети

Fajin Yu
источник

Ответы:

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-подобными системами, но я верю, что есть эквивалент.

LL3
источник