В настоящее время я использую ssh для пересылки нескольких таких портов:
Есть 3 машины:
A-host
- машиностроительный туннель, доступный для обоих B
и C
B-host
- машина, у которой нет доступа к A или C, которая должна иметь возможность подключиться к C:636
C-host
- машина обслуживающая на порту 636A-host>ssh -R 636:C-host:636 -R 8080:C-host:8080 root@B-host
Вопрос в том, как сделать это туннелирование постоянным, чтобы восстановить его даже после перезапуска той или иной машины.
Я знаю, что для этого, вероятно, потребуется autossh, но это еще не все.
Вот мое текущее решение, если вы знаете лучшее, я буду рад принять его.
На машине, запускающей туннелирование:
/etc/cron.d/autossh
@reboot autossh -f -nNT -R 3269:host-providing:3269 firewalled-host &
Теперь firewalled-host может подключиться к localhost: 3269 для доступа к службе, которая раньше была недоступна.
Добавить autossh
команда для службы, которая управляет системными службами.
Большинство установок Linux используют init, читая конфигурацию того, с чего начать /etc/inittab
, строка что-то вроде rc:2:respawn:autossh <options> >>/var/log/autosshoutput 2>&1
сделает свое дело. Это будет (если вы находитесь на уровне запуска 2, что является обычным случаем для работающей системы Linux в наши дни) запускает процесс при загрузке и перезапускает его, если он умирает. Если вы хотите, чтобы он запустился до следующей перезагрузки, запустите telinit
чтобы указать процессу инициализации перечитать его конфигурацию. См. Страницу руководства для inittab
Больше подробностей.
Некоторые дистрибутивы Linux перешли на использование выскочки для управления тем, что используется init (среди других функций выскочки, поскольку он делает больше, чем когда-либо делал init) - вы легко найдете множество документации по этому поводу.