Назад | Перейти на главную страницу

Обратный туннель SSH: адрес привязки игнорируется

Я пытаюсь настроить сервер на одном сайте для работы в качестве прокси для нескольких серверов на другом сайте, используя SSH. Сервер имеет один физический интерфейс в своей локальной сети:

eth0 10.1.1.10

Этот сервер имеет несколько виртуальных интерфейсов, созданных следующим образом:

server$ ifconfig eth0:0 10.1.1.200 netmask 255.255.255.128 broadcast 10.1.1.255

Я убедился, что в локальной сети этот виртуальный интерфейс отличается от реального интерфейса, привязывая слушателей к обоим. Этому способствует включение переадресации IP в /etc/sysctl.d/01-ip_forwarding.conf : net.ipv4.ip_forward = 1

Например, это работает, создавая два разных файла:

client$ curl 10.1.1.10 > 10.txt
client$ curl 10.1.1.200 > 200.txt

Я включил порты шлюза в /etc/ssh/sshd_config : GatewayPorts yes

С удаленного сервера я запускаю это:

remote$ ssh -N -R 10.1.1.200:443:remote:443 user@server

Затем я проверяю порт прослушивания с помощью netstat:

server$ nestat -tln
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:443            0.0.0.0:*               LISTEN
tcp6       0      0 :::443                 :::*                    LISTEN

(Я удалил ненужные строки)

Я хочу привязать его к 10.1.1.200:443, но вместо этого он привязывается к 0.0.0.0:443.

Почему он не привязывается к правильному ip?

Вы должны установить GatewayPorts к clientspecified на сервере (в sshd_config file), чтобы иметь возможность привязать удаленные туннели к любому интерфейсу. Согласно справочная страница sshd_config (5):

GatewayPorts может использоваться, чтобы указать, что sshd должен разрешать переадресацию удаленного порта для привязки к адресам без обратной связи, тем самым позволяя другим хостам подключаться. Аргумент может быть no чтобы принудительная переадресация удаленного порта была доступна только локальному хосту, yes для принудительной привязки перенаправления удаленного порта к подстановочному адресу, или clientspecified чтобы позволить клиенту выбрать адрес, к которому привязана пересылка. По умолчанию no.