Настройка удаленной переадресации портов

Дано: локальный компьютер с работающим web-сервисом, доступ к которому из сети Internet ограничен — провайдер использует NAT и/или запрещает доступ к определенным портам.

Требуется: с помощью внешнего компьютера-шлюза с реальным IP-адресом и выходом в интернет обеспечить доступ пользователей к web-сервису на локальном компьютере.

Рассмотрим шаблон команды для задания удаленной переадресации портов:

ssh -R [bind_address:]port:host:hostport user@myGateWayAddress,

port — номер порта машины-шлюза, откуда трафик будет перенаправляться по адресу host:hostport,
host — имя или ip-адрес машины, куда мы хотим перенаправлять трафик
hostport — соответственно номер порта этого локального компьютера. На данном порту работает наше приложение/сервис, доступ к которому мы открываем через машину-шлюз.
user — имя пользователя на компьютере-шлюзе, с которым устанавливается ssh соединение,
GateWayAddress — адрес компьютера-шлюза (машины с “белым” ip адресом)

В настройках ssh сервера удаленной машины (/etc/ssh/sshd_config) нужно разрешить привязку к интерфейсам, отличным от loopback. Это позволит получить доступ к сервису, запущенному на нашем локальном компьютере, не только с машины-шлюза, но и с любого другого компьютера, который будет подключаться к шлюзу по адресу «bind_address:port». Для этого в конфигурационном файле должна быть строчка:

GatewayPorts yes

В случае, если в качестве операционной системы компьютера-шлюза используется Ubuntu возникает еще одна проблема. Дело в том, что для задания переадресации привилегированных портов необходимо иметь права root, а этот аккаунт по умолчанию отключен. Существуют как минимум два способа решения этой задачи:

1. Имея доступ к компьютеру-шлюзу, можно установить переадресацию с привилегированного парта на непривилегированный, используя таблицу маршрутизации, командой:

iptables -t nat -A PREROUTING -p tcp —dport 80 -j REDIRECT —to 8080

Чтобы команда выполнялась автоматически после перезагрузки системы ее помещают в /etc/rc.local
Эти вопросы рассматриваются в следующих статьях:

http://askubuntu.com/questions/427600/persist-port-routing-from-80-to-8080
http://askubuntu.com/questions/444729/redirect-port-80-to-8080-and-make-it-work-on-local-machine

2. Активировать аккаунт root в системе. Однако такой способ нежелателен. О причинах, а также о том, как обойти это ограничение, используя аутентификацию пользователя root с публичным ключом можно прочитать в статьях:

http://stackoverflow.com/questions/18395622/remote-login-as-root-in-ubuntu
https://lists.debian.org/debian-security/2002/06/msg00418.html

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *