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