Skip to content

Latest commit

 

History

History
48 lines (31 loc) · 5.69 KB

File metadata and controls

48 lines (31 loc) · 5.69 KB

tun 이란?

tunneling을 하기 위한 device

터널링(Tunneling)은 한 네트워크에서 다른 네트워크로 데이터를 안전하게 전송하기 위한 기술입니다. 터널링은 데이터를 캡슐화하여 전송하는데, 이는 데이터에 새로운 헤더를 추가하여 다른 네트워크로 전송함으로써 이루어집니다.

기본적으로 터널링은 두 지점 간에 안전한 통로를 만들어내어 데이터가 해당 통로를 통해 안전하게 전송되도록 합니다. 이를 위해서는 터널링의 시작점과 종료점에서 각각 터널링 프로토콜을 이해하고 지원해야 합니다.

TUN/TAP 디바이스는 리눅스 운영체제에서 제공되는 가상 네트워크 인터페이스로, 주로 터널링에 사용됩니다. 여기서 TUN은 IP 패킷을 처리하는데 사용되고, TAP은 이더넷 프레임을 처리하는데 사용됩니다.

간단한 예시로 설명하면, A와 B 두 지점이 있고, A에서 B로 안전한 통신이 필요한 경우, A에서 데이터를 터널링하여 B로 전송할 수 있습니다. A에서 데이터를 TUN/TAP 디바이스를 통해 보내면, 해당 데이터는 터널링을 통해 안전한 헤더로 감싸져서 B로 전송됩니다. B에서는 해당 헤더를 해석하여 원본 데이터를 추출하게 됩니다.

가상의 터널을 만들어내어 마치 두 지점이 직접 연결되어 있는 것처럼 동작하게끔 하는 것이 터널링의 기본 아이디어입니다. 따라서 '가상'이라는 용어는 이런 의미에서 사용되며, 터널을 통해 물리적으로 떨어져 있는 두 지점을 마치 가상으로 연결하는 것입니다.

B에서는 TUN 디바이스를 통과할 필요가 없습니다. TUN/TAP 디바이스는 주로 터널링을 시작하는 지점에서 사용됩니다. 데이터는 TUN/TAP 디바이스를 통과하여 터널링 헤더로 감싸지고, 이후에 안전한 통로를 통해 전송됩니다.

터널링은 데이터를 안전하게 전송하기 위한 목적으로 사용되는데, 일반적으로 데이터는 터널링을 시작하는 측에서 안전한 형태로 감싸져서 전송됩니다. 수신 측에서는 해당 터널링 헤더를 해석하여 원본 데이터를 추출합니다.

따라서 B에서는 TUN 디바이스를 통과할 필요 없이, 안전한 통로를 통해 전송된 데이터를 받아 해당 터널링 헤더를 해석하고 원본 데이터를 처리합니다. 이렇게 함으로써 두 지점 간에 안전한 통신이 이루어집니다.

  1. TUN/TAP 디바이스의 역할:

    • TUN: 네트워크 레이어(레이어 3) 패킷 전송을 담당하는 가상 네트워크 디바이스입니다. TUN은 IP 패킷을 처리하고, 이를 통해 커널 공간과 사용자 공간 간에 IP 패킷을 전달합니다.
    • TAP: 데이터 링크 레이어(레이어 2)에서 동작하는 가상 이더넷 어댑터입니다. TAP은 이더넷 프레임을 처리하고, 커널 공간에서 사용자 공간으로 전달하거나 그 반대로 사용자 공간에서 커널 공간으로 전송합니다.
  2. 커널 공간에서 사용자 공간으로의 전달:

    • TUN/TAP 디바이스를 통해 운영체제의 네트워크 스택이 사용자 공간 프로그램과 상호 작용할 수 있습니다.
    • TUN 디바이스를 통한 패킷은 커널 공간에서 사용자 공간으로 전달됩니다. 이는 주로 VPN 소프트웨어나 터널링 애플리케이션 등에서 사용됩니다.
    • 사용자 공간 프로그램은 TUN/TAP 디바이스로부터 받은 패킷을 읽어들이고, 필요에 따라 해당 패킷을 가공하여 다시 TUN/TAP 디바이스로 전송할 수 있습니다.
  3. 사용자 공간에서 커널 공간으로의 전달:

    • 사용자 공간 프로그램이 TUN/TAP 디바이스에 패킷을 전송하면, 해당 패킷은 커널 공간의 네트워크 스택으로 전달됩니다.
    • 이는 커널 공간에서 네트워크 레이어로 패킷이 주입되는 것이므로, 마치 실제 네트워크에서 수신되었던 것과 유사한 처리를 받게 됩니다.

종합적으로, TUN/TAP 디바이스를 통해 커널 공간과 사용자 공간 간에 패킷이 전달되므로, 가상화된 네트워크 인터페이스를 통해 사용자가 커널 공간의 네트워크 스택과 상호 작용할 수 있게 됩니다.

정확한 상황에 따라 다르지만, 일반적으로 TUN 디바이스나 비슷한 가상 네트워크 인터페이스를 사용하지 않으면 사용자 공간 프로그램과 운영체제의 네트워크 스택 간의 직접적인 상호 작용이 제한됩니다. 이러한 가상 네트워크 인터페이스를 사용하지 않는다면, 운영체제의 네트워크 스택이 주로 커널 내부에서 동작하며, 사용자 공간 프로그램이 직접적으로 네트워크 패킷을 조작하거나 읽어들이는 것이 어렵습니다.

TUN/TAP 디바이스를 사용하는 이유 중 하나는 사용자 공간에서 프로그램이 네트워크 트래픽을 조작하고 가공할 수 있게 하기 위함입니다. 특히, VPN 소프트웨어나 터널링 애플리케이션에서 이를 활용하여 사용자가 가상의 네트워크를 만들고 사용할 수 있습니다.

따라서 TUN 디바이스나 비슷한 가상 네트워크 인터페이스를 사용하지 않는 경우, 사용자 공간 프로그램은 주로 운영체제의 네트워크 스택이 제공하는 소켓 API 등을 통해 통신하게 되며, 네트워크 패킷을 직접적으로 조작하기가 어려울 수 있습니다.

$ sudo ./tun_device_test
$ sudo ip addr add 10.0.0.1/24 dev tun0
$ sudo ip link set tun0 up
$ ping 10.0.0.1
$ ifconfig tun0 (or ip addr show tun0)