루트에 대한 SSH 터널 오류: sys_tun_open: 터널 구성 실패(모드 1): 작업이 허용되지 않습니다.

루트에 대한 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.
...

질문이 있으신가요? 도와주세요!

고쳐 쓰다

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)

답변1

네트워크 인터페이스를 생성하려면 루트(또는 최소한 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

가장 간단한 것은 이를 루트로 실행하는 것입니다. 예를 들어 (구성 및) 올바른 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 사용자가 루트가 아닌 경우 루트를 통해 원격 서버에서 동일한 작업을 수행할 수 있습니다.

그런 다음 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) 버전 1:7.7p1-3부터 사용 가능합니다.

관련 정보