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

не может использовать localhost, но 127.0.0.1 работает

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

Однако на одной машине туннелирование перестало работать.

ssh -fN -R 9999:localhost:22 user@host

После долгого устранения неполадок выяснилось, что использование 127.0.0.1 вместо localhost все еще работает.

ssh -fN -R 9999:127.0.0.1:22 user@host

Итак, при подключении к целевой машине я заметил, что многие вещи не работают с localhost. Например пинг.

ping -v localhost
ping: socket: Permission denied, attempting raw socket...
ping: socket: Permission denied, attempting raw socket...
ping: localhost: System error

При использовании 127.0.0.1 работает

ping -v 127.0.0.1
ping: socket: Permission denied, attempting raw socket...
ping: socket: Permission denied, attempting raw socket...
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.022 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.017 ms

sshd выдавал мне столь же бесполезные сообщения об ошибках

error: connect_to localhost: unknown host (Bad file descriptor)
error: connect_to localhost: unknown host (Bad file descriptor)
error: connect_to localhost: unknown host (System error)
error: connect_to localhost: unknown host (System error)

Естественно я посмотрел в файл / etc / hosts. Но мне это кажется нормальным.

cat /etc/hosts
#
# /etc/hosts: static lookup table for host names
#

#<ip-address>   <hostname.domain.org>   <hostname>
127.0.0.1   localhost.localdomain   localhost
::1     localhost.localdomain   localhost

# End of file

Кроме того, поиск в файле hosts, по крайней мере, в некоторой степени работает. Потому что, например, попытка ping localhostq дает мне обычный ответ «неизвестный хост».

Запуск Arch Linux на целевой машине. Актуально по состоянию на 23.06.2016 (также на другом аналогичном компьютере с той же версией Arch не было этой проблемы).

РЕДАКТИРОВАТЬ (2016-06-23 15:30):

Iptables (очень расслабленный банкомат)

sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Не использовать nftables вообще.

Хосты из /etc/nsswitch.conf:

cat /etc/nsswitch.conf | grep hosts
hosts: = files mdns4_minimal [NOTFOUND=return] dns mdns4

[EDIT: 2016-06-23 15:45] На самом деле, на работающей машине у меня есть следующее:

cat /etc/nsswitch.conf | grep hosts
hosts: files dns myhostname

Очень удивлен, увидев, что строки отличаются, так как этот файл я не изменял. Я тоже не знаю, что это значит :)

Оказалось, это файл / etc / nsswitch

Видите проблему?

cat /etc/nsswitch.conf | grep hosts
hosts: = files mdns4_minimal [NOTFOUND=return] dns mdns4

Неправильный знак '=' в скрипте. Это было сделано в нашем специальном пакете (написанном не мной, виноват распределение FTW!). который просто не был установлен на тот, который работал, а был установлен на тот, который не работал.

Теперь я могу исправить пакет (используемый для автоматической настройки avahi), и все должно вернуться в нормальное состояние.

Большое спасибо всем, кто задавал дополнительные вопросы. Тем более @ 7171u, который правильно спросил :)