Настройка: ПК I (Ubuntu 11.10, есть sudo), Mac T (OS X 10.7.2, есть sudo), Smart device S (едва настраивается).

S может видеть меня в локальной сети, но не может видеть T. Я и Т можем видеть друг друга.

Есть программа, которая слушает T на порту N. Если кто-то подключается к программе и не говорит по ее проприетарному протоколу или ничего не говорит при подключении, программа завершает работу и требует мучительного перезапуска вручную.

S должен подключиться к T через порт N и поговорить с программой. Фактический IP S подключается к настраивается.

Я вижу, что мне нужно настроить какое-то реле от I, порт N к T, порт N, но пока я не могу понять, как это сделать. Подсказки приветствуются.

Временное решение (например, запуск ssh с некоторыми причудливыми ключами) предпочтительнее, чем "постоянное" (например, настройка iptables или чего-то еще), поскольку это временная проблема.

3 ответа3

1

Настройте удаленный обратный туннель ssh на "I", чтобы перенаправить порт "N" на порт "N" на "T". Таким образом, машина S может подключиться к "T" через "I".

Если "N", например, порт 8080, на "I" вы можете вручную установить это как

ssh -R 8080:IpofT:8080 localhost

При необходимости вы можете добавить -N, -f, -n и -v. Смотрите страницу руководства ssh.

Есть некоторые проблемы безопасности, которые могут быть на пути. Например, если порт "N" является портом с более низким диапазоном, вам нужны привилегированные права пользователя root, подойдет sudo.

Также по умолчанию многие серверы Ubuntu не допускают внешнего перенаправления IP. Это можно переключить, настроив /etc/ssh/ssh.conf и установив

GatewayPorts yes

Чтобы автоматизировать вход в систему, вы можете добавить свой собственный ключ ssh на компьютере "I" в файл авторизованный_keys2 на "I" (при входе через localhost). Вы также можете настроить cronjobs для проверки выполнения задания ssh, а также для его удаления / перезапуска.

В качестве альтернативы вы можете настроить так, чтобы машина "T" входила в систему "I" и туннелировала трафик к себе (хотя не знакома с набором инструментов ssh на osx)

     ssh -R 8080:localhost:8080 username@IPofI

Больше информации о переадресации / туннелировании портов в Ubuntu

1

Окей, не заметил, что ты предпочел не использовать iptables. Установите socat и вы можете создать форвардер порт , как это на I:

        "LOCAL/LISTEN"   PORT        "TARGET" DEST : PORT
sudo socat TCP4-LISTEN:N,reuseaddr,fork   TCP4:T:N

лайк

sudo socat TCP4-LISTEN:888,reuseaddr,fork TCP4:1.2.3.4:888

Для получения дополнительной информации см. Man-страницу socat.

Вот способ iptables для выполнения назначения NAT порта (трансляция сетевого адреса).

# allow forwarding
sysctl -w net.ipv4.ip_forward=1

# forward port 888 to host 1.2.3.4:888 
iptables -I PREROUTING -t nat -p tcp  --dport 888 -j DNAT --to 1.2.3.4:888

# most likely you'll need this to get routing back to your device to work.
# try without this first.
iptables -I POSTROUTING -t nat -j MASQUERADE

Немного "более безопасная" версия, где вы определяете сеть, из которой разрешены соединения / переадресация

# forward port 888 to host 1.2.3.4:888 allowd from net 2.2.2.0/24
iptables -I PREROUTING -t nat -p tcp -s 2.2.2.0/24  --dport 888 -j DNAT --to 1.2.3.4:888
iptables -I POSTROUTING -t nat -s 2.2.2.0/24 -j MASQUERADE
0

Кажется, все так просто:

user@I$ ssh -L I:N:T:N user@T

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .