Debian

root 的 SSH 隧道錯誤:sys_tun_open:配置隧道失敗(模式 1):不允許操作

  • April 20, 2021

我嘗試設置一個 ssh vpn(Debian OS 伺服器和客戶端)。

我更改了 /etc/ssh/sshd_config (伺服器):

PermitTunnel yes
PermitRootLogin without-password

但是當我嘗試連接(客戶端)時:

$ ssh -NTCf -vvvw  0:0 root@server-ip

...
debug1: Authentication succeeded (publickey).
Authenticated to <server-ip> ([<server-ip>]:22).
debug1: Requesting tun unit 0 in mode 1
debug1: sys_tun_open: failed to configure tunnel (mode 1): Operation not permitted
Tunnel device open failed.
Could not request tunnel forwarding.
...

有什麼問題?請幫忙!

更新

我嘗試以 root 身份執行 ssh,但仍然有錯誤(客戶端):

# ssh -i ~user/.ssh/id_rsa -NTCf -vvvw any root@server-ip
....    
debug1: Requesting tun unit 2147483647 in mode 1
debug1: sys_tun_open: tunnel mode 1 fd 5
Tunnel device open failed.
Could not request tunnel forwarding.
debug2: fd 3 setting TCP_NODELAY
...

客戶端配置:

OpenSSH_7.7p1 Debian-2, OpenSSL 1.0.2o  27 Mar 2018
Linux 4.16.0-2-amd64 #1 SMP Debian 4.16.12-1 (2018-05-27) x86_64
Debian GNU/Linux testing (buster)

創建網路介面需要root(或至少CAP_NET_ADMIN)權限。錯誤消息告訴客戶端 ssh 命令無法創建 tun0 介面,正如執行客戶端 ssh 時此 strace 摘錄所證實的那樣:

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 身份執行它,例如(配置和)使用sudosu -c可能提供正確的 ssh 密鑰-i(或者它可以選擇 root 的 ssh 密鑰)。在 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

如果遠端 ssh 使用者不是 root,則可以在遠端伺服器上(通過 root)完成相同的操作。

然後,ssh 命令(以 myuser 身份執行,例如:)ssh -NTCf -w 0:0 remoteuser@server-ip將能夠通過使用具有匹配名稱的預先存在的隧道介面來隧道傳輸流量。

如果您在客戶端沒有任何權限,也不允許執行具有對 server-ip 的網路訪問權限的 VM 或容器,那麼您可能無法成功。

注意:在此 Q/A 時,正如 OP 所發現的,在 Debian buster(此時正在測試)中,軟體包 openssh-client 和 openssh-server 版本 1:7.7p1-2 有一個錯誤阻止使用 tun/tap隧道。從 (Debian) 版本 1:7.7p1-3 開始提供 Debian 中的修復程序。

引用自:https://unix.stackexchange.com/questions/452433