Ошибка туннеля SSH для root: sys_tun_open: не удалось настроить туннель (режим 1): операция не разрешена

Итак, я прочитал ответ heemayl и был весьма обескуражен. Затем я заметил Ulrich Schwarz предложение сделать это с помощью ssh. Почитал немного о ssh и наткнулся на нечто под названием sshpass. Оно принимает пароль и дает ввод команде ssh. Я бы просмотрел документацию по дырке/страницу man.

Решение моей проблемы: Предполагая, что мой пароль для test1 1tset, команда для моей проблемы будет: sshpass -p '1tset' ssh test1@host

2
03.07.2018, 13:57
1 ответ

Для создания сетевого интерфейса требуются привилегии root (или не ниже CAP_NET_ADMIN). Сообщение об ошибке сообщает, что клиентской команде ssh не удалось создать интерфейс tun0, что подтверждается этой выдержкой из strace при запуске клиентского ssh :

.
21510 open("/dev/net/tun", O_RDWR)      = 4
21510 ioctl(4, TUNSETIFF, 0x7fff5f9f1530) = -1 EPERM (Operation not permitted)
21510 close(4)                          = 0
21510 write(2, "Tunnel device open failed.\r\n", 28) = 28
21510 write(2, "Could not request tunnel forward"..., 38) = 38

Проще всего запустить его от имени пользователя root, например (настроить и )с помощью sudoили su -cи, возможно, предоставить правильный ключ ssh с помощью-i(или вместо этого выбрать ключ ssh пользователя root ). В клиенте Debian это работает:

su -c 'ssh -i ~myuser/.ssh/id_rsa -NTCf -w 0:0 root@server-ip'

Во время тестирования следует заменить -w 0:0на -w any, чтобы избежать конфликтов.

Альтернативный метод, все равно требующий root (или CAP_NET_ADMIN), состоит в том, чтобы заранее создать интерфейс в соответствии с общим соглашением об именах (tunX с числом X, повторно используемым позже в параметре ssh ), но дающим доступ пользователя ssh к этому интерфейсу:

# ip tuntap add name tun0 mode tun user myuser
# ip address add 192.0.2.10/24 dev tun0
# ip link set dev tun0 up

То же самое может быть сделано (пользователем root )на удаленном сервере, если удаленный пользователь ssh не является пользователем root.

Команда ssh (, работающая от имени пользователя myuser, например :ssh -NTCf -w 0:0 remoteuser@server-ip), затем сможет туннелировать трафик, используя предварительно -существующие туннельные интерфейсы с соответствующими именами.

Если у вас нет никаких привилегий на стороне клиента, и вам не разрешено вместо этого запускать виртуальные машины или контейнеры с сетевым доступом к серверу -ip, вы, вероятно, не добьетесь успеха.

ПРИМЕЧАНИЕ. :во время этого Q/A, как обнаружил OP,в Debian buster (тестирование в это время )пакеты openssh -client и openssh -server версии 1 :7.7p1 -2 имели ошибку , препятствующую использованию tun/tap туннели . Исправление в Debian стало доступным, начиная с (Debian )версии 1 :7.7p1 -3.

5
27.01.2020, 22:09

Теги

Похожие вопросы