[Network] GRE Tunnel

1. GRE 터널 μœ ν˜•

μœ ν˜• μ„€λͺ… νŠΉμ§•
Transparent Tunnel
(IP-over-IP)
원본 νŒ¨ν‚· κ·ΈλŒ€λ‘œ μΊ‘μŠν™”
별도 λ‚΄λΆ€ IP μ—†μŒ
λΈŒλ¦¬μ§€ν˜• 터널
λ‚΄λΆ€ IP 없이 λ‹¨μˆœ 전달
Routed Tunnel
(Point-to-Point)
GRE μΈν„°νŽ˜μ΄μŠ€μ— 자체 IP λΆ€μ—¬(/30 λ“±)
λΌμš°νŒ…μ„ 톡해 내뢀망 전달
가상 λΌμš°ν„° μ—­ν• 
경둜 μ œμ–΄ κ°€λŠ₯
μ•ˆμ •μ 

Transparent Tunnel (IP-over-IP, 투λͺ… 터널)

GRE1 (192.168.179.38) <--> GRE1 (192.168.179.133)
   β”‚                           β”‚
192.168.10.10             192.168.20.10

Routed Tunnel (Point-to-Point λ§ν¬ν˜• 터널)

[192.168.100.1] --- GRE 터널 --- [192.168.100.2]
        ↑                             ↑
192.168.179.38                   192.168.179.133
(wlan0, μ‹€μ œ IP(192.168.10.10))   (wlan0, μ‹€μ œ IP(192.168.20.10))

2. Transparent GRE 터널 ꡬ성 μ˜ˆμ‹œ

솑신 (wlan0: 192.168.179.38, 슀마트폰: 192.168.10.10)

# GRE 터널 생성
ip tunnel add gre1 mode gre local 192.168.179.38 remote 192.168.179.133
ip link set dev gre1 up

# 솑신 νŒ¨ν‚·μ„ GRE μΈν„°νŽ˜μ΄μŠ€λ‘œ λΌμš°νŒ…
ip route add 192.168.20.0/24 dev gre1

μˆ˜μ‹  (wlan0: 192.168.179.133, 슀마트폰: 192.168.20.20)

# GRE 터널 생성
ip tunnel add gre1 mode gre local 192.168.179.133 remote 192.168.179.38
ip link set dev gre1 up

# 솑신 νŒ¨ν‚·μ„ GRE μΈν„°νŽ˜μ΄μŠ€λ‘œ λΌμš°νŒ…
ip route add 192.168.10.0/24 dev gre1

3. GRE 터널 ꡬ성 μ˜ˆμ‹œ

솑신 μΈ‘ (wlan0: 192.168.179.38, 슀마트폰: 192.168.10.10)

# GRE 터널 생성
ip tunnel add gre1 mode gre local 192.168.179.38 remote 192.168.179.133
ip link set dev gre1 up

# GRE μΈν„°νŽ˜μ΄μŠ€μ— point-to-point IP ν• λ‹Ή
ip addr add 192.168.100.1/30 dev gre1

# 터널을 톡해 μƒλŒ€ λ‚΄λΆ€λ§μœΌλ‘œ λΌμš°νŒ…
ip route add 192.168.20.0/24 via 192.168.100.2

μˆ˜μ‹  μΈ‘ (wlan0: 192.168.179.133, 슀마트폰: 192.168.20.20)

# GRE 터널 생성
ip tunnel add gre1 mode gre local 192.168.179.133 remote 192.168.179.38
ip link set dev gre1 up

# GRE μΈν„°νŽ˜μ΄μŠ€μ— point-to-point IP ν• λ‹Ή
ip addr add 192.168.100.2/30 dev gre1

# 터널을 톡해 μƒλŒ€ λ‚΄λΆ€λ§μœΌλ‘œ λΌμš°νŒ…
ip route add 192.168.10.0/24 via 192.168.100.1

ꡬ쑰

[솑신 내뢀망] 192.168.10.0/24
       β”‚
      gre1 (192.168.100.1)
       β”‚   GRE μΊ‘μŠν™”
       β–Ό
      wlan0 (192.168.179.38) β†’ 인터넷
       β”‚
[μˆ˜μ‹  wlan0] 192.168.179.133
       β”‚
      gre1 (192.168.100.2)
       β”‚
[μˆ˜μ‹  내뢀망] 192.168.20.0/24
  • via 192.168.100.x β†’ GRE λ‚΄λΆ€ point-to-point μ£Όμ†Œλ₯Ό 톡해 λΌμš°νŒ…
  • dev gre1 만 μ‚¬μš©ν•  μˆ˜λ„ μžˆμ§€λ§Œ, μ•ˆμ •μ„±κ³Ό 디버깅을 μœ„ν•΄ via μΆ”μ²œ

4. GRE 터널 관리 λͺ…λ Ή

생성/μ‚­μ œ

# 터널 μ‚­μ œ
ip link delete gre1

# 생성
ip tunnel add gre1 mode gre local <local_IP> remote <remote_IP>
ip link set dev gre1 up

μƒνƒœ 확인

ip link show gre1
ip addr show dev gre1
ip route show

# ν¬μ›Œλ”© μ„€μ •
cat /proc/sys/net/ipv4/conf/gre1/forwarding

νŠΈλž˜ν”½ 확인 (tcpdump)

tcpdump -i gre1 -n

# GRE νŒ¨ν‚· 캑처 (λͺ¨λ“  μΈν„°νŽ˜μ΄μŠ€)
tcpdump -i any 'ip proto 47'

# νŠΉμ • μΈν„°νŽ˜μ΄μŠ€λ§Œ dump
tcpdump -i wlan0 'ip proto 47'
tcpdump -i gre1 'ip proto 47'

# μΆœλ°œμ§€(source) λ˜λŠ” λͺ©μ μ§€(destination)κ°€ `<IP>`인 νŒ¨ν‚·λ§Œ 필터링
tcpdump -i any host <IP>

라우트 제거

ip route del 192.168.20.0/24 via 192.168.100.2

5. 디버깅 μˆœμ„œ

  1. GRE μΈν„°νŽ˜μ΄μŠ€ ν™œμ„±ν™” 확인
    ip link show gre1
    
  2. 터널 λ‚΄λΆ€ IP 확인
    ip addr show dev gre1
    
  3. λΌμš°νŒ… 확인
    ip route show
    
  4. νŒ¨ν‚· 캑처
    tcpdump -i any 'ip proto 47'
    tcpdump -i gre1 -n
    
  5. ping ν…ŒμŠ€νŠΈ
    ping 192.168.100.2   # tunnel point-to-point ping
    ping 192.168.20.10   # μˆ˜μ‹  내뢀망 ping
    

6. 주의 사항

  1. 같은 μ„œλΈŒλ„· μ‚¬μš© κΈˆμ§€
    • 솑신/μˆ˜μ‹  내뢀망이 동일 μ„œλΈŒλ„·μ΄λ©΄ dev gre1 λΌμš°νŠΈλ§ŒμœΌλ‘œλŠ” GREκ°€ 정상 λ™μž‘ν•˜μ§€ μ•ŠμŒ
    • 내뢀망이 겹치면 λΈŒλ¦¬μ§€ν˜•(gretap) μ‚¬μš© ν•„μš” (2 Layer κΉŒμ§€ μ˜¬λΌκ°€μ•Όν•¨.)
  2. Android ν™˜κ²½
    • rp_filter, ip_forward ν™œμ„±ν™” ν•„μš”
    • 일뢀 μ»€λ„μ—μ„œλŠ” μΈν„°νŽ˜μ΄μŠ€μ— IP μ—†μœΌλ©΄ GRE decap μ‹€νŒ¨ κ°€λŠ₯ β†’ /30 IP ν• λ‹Ή ꢌμž₯
  3. 디버깅
    • 터널 IPλ₯Ό ping β†’ μΊ‘μŠν™”/λ””μΊ‘μŠ 확인
    • tcpdump둜 GRE νŒ¨ν‚· μˆ˜μ‹  확인

Categories:

Updated:

Leave a comment