LINUX.ORG.RU
решено ФорумAdmin

ssh падает, а порт продолжает использоваться, что делать?

 , ,


1

1
Linux ubuntu 3.13.0-24-generic 

Постоянно висит ssh тоннель для бытовых нужд, ssh поднимает socks прокси внутри сети и биндит его на порт. Это и ежу ясно.)

Периодически ssh тоннель падает и ssh падает вмести с ним.(иногда приходится снимать процесс) ps -aux | grep ssh молчит.

А теперь проблема.
После падения, netstat -pl показывает что порт уже не используется. Поднимаю новый тоннель, netstat -pl порт используется ssh. Это конечно хорошо, но тоннель не работает.

Лог ssh

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3145
Как же так, если до поднятия тоннеля, по версии netstat, порт был свободен?

Пробовал ронять интерфейс, после поднимать тоннель, толку нет. Помогает только перезагрузка.

Мои варианты:
1) netstat врёт
2) ssh создаёт временные файлы, после падения и перезапуска, использует файлы от предыдущего вхождения и сходит с ума
3) я чего то не знаю в работе сети

Вопросы:
1) Что делать?
2) Чем проверить занят ли порт, помимо netstat?
3) Как принудительно снять бинд с порта?


ты опцией -l смотришь LISTEN демоны, подозреваю что демон после падения становится не LISTEN но предыдущая сессия та что ESTABLISHED сохраняется. короче после падения глянь нетстатом без опции -l

CHIPOK ★★★
()

netstat -na
а ещё из полезных опций есть -с и -p.

dada ★★★★★
()

а вообще рекомендую доку глянуть https://help.ubuntu.com/community/SSH/OpenSSH/PortForwarding

а конкретно в самом конце решение твоих проблем

Troubleshooting
If you get a message like this when you try to forward a port:


bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: <port number>
Could not request local forwarding.
then someone is already listening on that port number. You won't be able to listen on that port until the other person has finished with it.

If forwarding doesn't seem to work, even though you didn't get a warning message, then your SSH server might have disabled forwarding. To check, do the following:


grep Forwarding /etc/ssh/sshd_config
If you see something like this:


X11Forwarding no
AllowTcpForwarding no

CHIPOK ★★★
()
Ответ на: комментарий от CHIPOK

Был там.
Так там же сказано, что если порт используется, то нельзя ничего поднять.
Я же проверяю netstat и ps наличие процесса. Порт свободен, процесса нет. Но тоннель то не поднимается.

dzirtt
() автор топика
Ответ на: комментарий от dzirtt

естественно что нельзя, так ты прочитай еще мой предыдущий пост там написано что ты смотришь все что LISTEN

CHIPOK ★★★
()
Ответ на: комментарий от leave

net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1

Спасибо, попробую.

dzirtt
() автор топика
Ответ на: комментарий от CHIPOK

Что биндить на уже используемый порт нельзя я и так знаю. Потому и проверяю с помощью netstat.
Как я понял, система после падения ssh назначает статус порту TIME_WAIT и netstat -pl мне не показывает ничего, так как порт уже не LISTEN.
Это я и из первого вашего сообщения понял.)
Попробую netstat -p, когда упадёт, думаю там будет ssh 3145 TIME_WAIT.
Но как я уже написал, гайд от убунты не решает проблемы. Как на этот порт повесить нового слушателя?)

Посоветовали, попробуем, оно ли.
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1

dzirtt
() автор топика
Ответ на: комментарий от dzirtt

вполне возможен вариант с TIME_WAIT

net.ipv4.tcp_tw_recycle = 1 будет оперативно грохать сокеты TIME_WAIT
net.ipv4.tcp_tw_reuse = 1 этим ты разрешаешь использовать существующие сокеты

и на последок включи net.ipv4.tcp_timestamps = 1 чтоб работал net.ipv4.tcp_tw_reuse

CHIPOK ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.