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)