web-dev-qa-db-ja.com

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

私は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)
2
user3601435

ネットワークインターフェイスを作成するには、root(または少なくともNET_CAP_ADMIN)権限が必要です。エラーメッセージは、クライアント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

最も単純なのは、たとえばSudoまたはsu -cを使用して(構成および)ルートとして実行し、おそらく-iを使用して適切なsshキーを提供することです(または、代わりにルートのsshキーを選択することもできます) )。 Debianクライアントでは、これは機能します。

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

競合を避けるため、テスト中は-w 0:0-w anyに置き換える必要があります。

いずれにしてもルート(またはNET_CAP_ADMIN)を必要とする別の方法は、共通の命名規則(XのtunXとsshパラメータで後で再利用される番号)に従ってインターフェースを事前に作成することですが、このインターフェースへのsshユーザーへのアクセスを許可します。

# ip tuntap add name tun0 type 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へのネットワークアクセスでVMまたはコンテナを実行することが許可されていない場合、おそらく成功することはできません。

注:OPが見つかり、2018-07-02の時点でテストできたように、Debianバスター(テスト)パッケージopenssh-clientおよびopenssh-server 7.7p1-2には バグがtunの使用を妨げています)/tapトンネル

2
A.B