Я розпочав свій аутосш із допиткою 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
Але якщо я фізично видаляю мережевий кабель, тобто тунель більше не може працювати, автошшш не вбиває демона ssh. Чому? Я розумію, що autossh не може нічого зробити, якщо посилання не працює, але, на мою думку, слід спробувати зробити наступне:
- Перевірте дочірню процедуру ssh (
check on child ...
) - Перевірте дальність кінця !!! (операція, що нагадує пінг через тунель)
- Зрозумійте, що тунель вниз
- Зупинити процес ssh
- Спробуйте створити тунель ще раз
- Зрозумійте, що він не працює, і встановіть (експоненціально зростаючий?) Таймер, щоб незабаром знову перевірити
Ось чому я запускаю autossh: якщо щось трапиться з тунелем (будь то проблема з програмним чи апаратним забезпеченням), слід спробувати його перезапустити. Натомість він просто чекає, коли загине процес ssh. Чи не слід намагатися перезапустити його, навіть якщо немає надії відновити з'єднання?
Яка перевірка робить автошшш? Просто переконайтеся, що 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
в клієнтській конфігурації. Єдиний дратівливий біт - це управління сертифікатами. Ми використовуємо «easy-rsa» CA, що постачається з OpenVPN. Після отримання сертифікатів, решта легко.