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

Совместное использование туннеля порта SSH с локальной сетью

Я успешно создал SSH-туннель к нашему облачному серверу postgresql на локальном сервере Linux с помощью этой команды:

ssh -N -f -L 5431:localhost:xxxx mycloudserver.com

(где xxxx - удаленный порт)

С помощью этой команды я могу получить доступ к удаленной базе данных PostgreSQL через порт 5431, но только на этом сервере Linux.

Теперь я хочу «поделиться» этим соединением с другими ПК в сети, чтобы я мог подключиться к linux_server: 5431 с драйвером ODBC и читать облачную базу данных без установки какого-либо программного обеспечения SSH на клиентах. Не удалось открыть порт 5431 с помощью iptables.

iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d 192.168.128.5 --dport 5431 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 192.168.128.5 --sport 5431 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT

Уже пробовал

 ssh -N -f -L 5431:0.0.0.0:xxxx mycloudserver.com

слишком. Туннель успешно построен и работает на сервере, но я не могу «видеть» соединение от клиентов.

Вам нужно изменить свою команду, чтобы указать bind_address, например:

ssh -N -f -L 0.0.0.0:5431:localhost:xxxx mycloudserver.com

Это заставит его прослушивать все интерфейсы. Для проверки используйте:

netstat -lnp | grep 5431

Это действительно неправильный подход. Не используйте туннель SSH. Вместо этого настройте SSL на облачном сервере и сделайте прямые SSL-соединения, используя при необходимости ограничения IP-адресов.

Или, если вам необходимо использовать VPN, используйте тот, который предназначен для этой роли, вместо того, чтобы включать ssh в работу.

SSH туннелирует TCP через TCP, что вызывает проблемы с алгоритмами контроля перегрузки, повторной передачи и масштабирования окна. Это отличная утилита для специальной работы, но я бы не стал предлагать производственную многопользовательскую работу для вещей, которые используют значительную полосу пропускания.

если ты действительно должен, то вы можете использовать адрес привязки * в твоем -L, например

-L *:5431:localhost:xxxx

или установить GatewayPorts yes в твоем .ssh/config для этого хоста или через -o параметр командной строки, например:

-o GatewayPorts=yes