Я запустил свой автошоу со временем опроса 30 с:
AUTOSSH_POLL=30 AUTOSSH_LOGLEVEL=7 autossh -M 0 -f -S none -f -N -L localhost:34567:localhost:6543 user1@server1
И это работает нормально:
Sep 5 12:26:44 serverA autossh[20935]: check on child 23084
Sep 5 12:26:44 serverA autossh[20935]: set alarm for 30 secs
Но если я физически отсоединяю сетевой кабель, то есть туннель больше не может работать, autossh не убивает демон ssh. Почему? Я понимаю, что autossh не может ничего сделать, если ссылка не работает, но, по моему мнению, он должен попытаться сделать следующее:
- Проверьте дочерний процесс ssh (
check on child ...
) - Проверьте дальний конец !!! (пингоподобная операция через туннель)
- Поймите, что туннель не работает
- Остановить процесс ssh
- Попробуйте снова создать туннель
- Поймите, что это не работает, и установите (экспоненциально увеличивающийся?) Таймер, чтобы проверить снова скоро
Вот почему я запускаю autossh: если что-то происходит с туннелем (будь то программная или аппаратная проблема), он должен попытаться перезапустить его. Вместо этого он просто ждет, когда процесс ssh умрет. Разве он не должен пытаться перезапустить его, даже если нет надежды на восстановление соединения?
Что за проверка делает autossh? Просто убедитесь, что ssh запущен и работает? Разве это не делает какую-либо проверку дальнего конца?
редактировать
По запросу я добавляю соответствующую часть конфигурации ssh:
# (see http://aaroncrane.co.uk/2008/04/ssh_faster)
# The ServerAliveInterval tells SSH to send a keepalive message every 60 seconds while the connection is open;
# that both helps poor-quality NAT routers understand that the NAT table entry for your connection should
# be kept alive, and helps SSH detect when there’s a network problem between the server and client.
ServerAliveInterval 60
# The ServerAliveCountMax says that after 60 consecutive unanswered keepalive messages, the connection should
# be dropped. At that point, AutoSSH should try to invoke a fresh SSH client. You can tweak those
# specific values if you want, but they seem to work well for me.
ServerAliveCountMax 60
TCPKeepAlive yes
dev tun
оба параметра и настройки remote
в конфигурации клиента. Единственный раздражающий бит - это управление сертификатами. Мы используем CA «easy-rsa», который поставляется с OpenVPN. Как только у вас есть сертификаты, все остальное легко.