ルートのSSHトンネルエラー:sys_tun_open:トンネル設定に失敗しました(モード1):操作は許可されていません。

ルートのSSHトンネルエラー:sys_tun_open:トンネル設定に失敗しました(モード1):操作は許可されていません。

SSH Debian OSサーバーとクライアント(VPN)を設定しようとしています。

/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.
...

質問がありますか?助けてください!

修正する

SSHをrootとして実行しようとしましたが、まだエラーが発生しました(クライアント)。

# 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)

答え1

ネットワークインタフェースを作成するには、root(または少なくともCAP_NET_ADMIN)権限が必要です。エラーメッセージは、クライアントsshを実行すると、次のstraceの抜粋が示すように、sshコマンドがtun0インターフェースを生成できないことをクライアントに通知します。

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として実行することです。たとえば、(設定および)正しいSSHキーを使用またはsudo提供することができます(またはルートのSSHキーを選択することもできます)。 Debian クライアントでは、次のように動作します。su -c-i

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

-w 0:0衝突を防ぐには、テスト時に交換する必要があります-w any

まだルート(または)を必要とする別のアプローチは、一般的なCAP_NET_ADMIN命名規則(tunXです。

# 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が一致する既存のトンネルインターフェイスを使用してトラフィックをトンネリングできます。

クライアントに対する権限がなく、サーバーIPへのネットワークアクセスを介して仮想マシンまたはコンテナを実行できない場合、成功しない可能性があります。

注:このQ&Aの時点で、OPはDebian Buster(現在テスト済み)でopenssh-clientおよびopenssh-serverバージョン1:7.7p1-2パッケージに次のものがあることを発見しました。tun/tap トンネルの使用を防ぐバグ。これDebian で修正(Debian)バージョン1:7.7p1-3から利用可能です。

関連情報