˥С TUN/TAP ǥХɥ饤
Copyright (C) 1999-2000 Maxim Krasnyansky <max_mk@yahoo.com>

  Linux, Solaris бɥ饤
  Copyright (C) 1999-2000 Maxim Krasnyansky <max_mk@yahoo.com>

  FreeBSD б TAP ɥ饤
  Copyright (c) 1999-2000 Maksim Yevmenkin <m_evmenkin@yahoo.com>

  ʸ 2002 ǯ Florian Thiel <florian.thiel@gmx.net> ˤä
  ޤ

1. 

  TUN/TAP ǥХɥ饤ФϡѥåȤ륤󥿥ե
  桼֤Υץ󶡤ޤ
  ΥǥХñ Point-to-Point ǥХ䡢ͥåȥǥХ
Τ褦ʤΤȤߤʤޤʪǥǤϤʤ桼֤
ץफѥåȤʪǥˤǤϤʤ桼֤
ץ˥ѥåȤޤ

  Υɥ饤ФȤˤϡץ /dev/net/tun 򥪡ץ󤷡
  Ŭڤ ioctl() ȯԤƥͥ˥ͥåȥǥХϿ
  ʤƤϤʤޤ
  ͥåȥǥХϡ򤵤줿ץ˱ tunXX ⤷
  tapXX ȤƸޤ
  ץबΥեǥץ򥯥ȡ
  ͥåȥǥХӤΥǥХ̿Ƥ뤹٤ƤΥ롼
  (route) Ǥޤ

  򤵤줿ǥХΥפ˱ơ桼֤Υץब
  ɤ߽񤭤оݤϡIP ѥå (tun ǥХξ) ⤷
  ͥåȥե졼 (tap ǥХξ) Τ줫ˤʤޤ
  ioctl() Ϳե饰ˤäơɤˤʤ뤫ޤޤ

  http://vtun.sourceforge.net/tun ˤѥåˤϡtun ǥХ
  tap ǥХλȤ򼨤դĤδñʥץ㤬
  ƱƤޤ
  ɤΥץ⡢դĤΥͥåȥ󥿥ե֤ζ
  (֥å) Τ褦ưޤ
  br_select.c - select ƥॳ١ˤ֥å
  br_sigio.c  - async io  SIGIO ʥ١ˤ֥å
  Ǥ⡢٥Ȥμ VTun http://vtun.sourceforge.net Ǥ :))  

2. 

  ǥХΡɤ:
     mkdir /dev/net (ޤ /dev/net ¸ߤʤ)
     mknod /dev/net/tun c 10 200

  ѡߥåꤹ
     ȤФΥǥХؤΥ root ˸¤ꤿ:
     chmod 0700 /dev/net/tun
     ͥåȥǥХ򥢥󤹤븢̥桼ͿΤ
     ͤǤϡ֤ޤס桼ե
     ԤޤŪǡˤΥͥåȥ󥿥ե
     Ǥ褦ˤʤäƤޤޤ      

  ɥ饤ФΥ⥸塼ưŪ˥ɤ
     ȤΥͥǡ֥ͥ⥸塼סݥ⥸塼
     ưɤΥݡȡݤͭˤʤäƤΤǧƤ

     ιԤ /etc/modules.conf ɲä:
	alias char-major-10-200 tun

     Υޥɤ¹Ԥ
        depmod -a 

  ưǥɤ
     ⥸塼ưǥɤˤ:
        modprobe tun

  Ԥξ硢ɬפȤʤ뤿Ӥ⥸塼ɤʤƤϤʤޤ
  Ԥξȡ/dev/net/tun ץ󤵤줿˥⥸塼ϼưŪ
  ɤޤ

3. ץΥ󥿥ե

  3.1 ͥåȥǥХγ:

  char *dev ϡѤǥХ̾˽񼰻ʸ򤯤äĤΤ
  ٤Ǥ (Ȥ "tun%d")Ǥ⡢(錄Τ¤Ǥ) 
  ͥåȥǥХ̾ʤʤǤȤޤ
  ʸؤΥݥ󥿤ϡºݤΥǥХ̾ (Ȥ "tun0")
ˤäƾ񤭤뤳ȤܤƤ

  #include <linux/if.h>
  #include <linux/if_tun.h>

  int tun_alloc(char *dev)
  {
      struct ifreq ifr;
      int fd, err;

      if( (fd = open("/dev/net/tun", O_RDWR)) < 0 )
         return tun_alloc_old(dev);

      memset(&ifr, 0, sizeof(ifr));

      /* ե饰: IFF_TUN   - TUN ǥХ (ͥåȤΥإåʤ) 
       *         IFF_TAP   - TAP ǥХ
       *
       *         IFF_NO_PI - ѥåȤξ󶡤ʤ
       */

      ifr.ifr_flags = IFF_TUN; 
      if( *dev )
         strncpy(ifr.ifr_name, dev, IFNAMSIZ);

      if( (err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ){
         close(fd);
         return err;
      }
      strcpy(dev, ifr.ifr_name);
      return fd;
  }              

  3.2 ե졼Υեޥå:

  ե饰 IFF_NO_PI åȤƤʤ硢
  줾Υե졼ΥեޥåȤ:
    ե饰     [2 Х]
    ץȥ [2 Х]
    Υץȥ (IP, IPv6, ʤ) Υե졼

˥С TUN/TAP ǥХɥ饤ФˤĤƤ褯

1. TUN/TAP ɥ饤ФϤɤΥץåȥե򥵥ݡȤƤޤ?
ΤȤɥ饤Ф 3  Unix  OS ˸ƽ񤫤Ƥޤ
   Linux kernels 2.2.x, 2.4.x
   FreeBSD 3.x, 4.x, 5.x
   Solaris 2.6, 7.0, 8.0

2. TUN/TAP ɥ饤ФϤɤӤ˻ȤΤǤ?
嵭̤ꡢTUN/TAP ɥ饤ФμӤϥȥͥ󥰤Ǥ
VTun (http://vtun.sourceforge.net) ѤƤޤ

TUN/TAP Ȥ⤦ҤȤĤζ̣ץꥱϡpipsecd Ǥ
(http://perso.enst.fr/~beyssac/pipsec/)
(FreeS/WAN Ȥϰ㤤) ʥͥ٥Υ롼ƥ󥰤ȤȤǤ
桼֤Ǥ IPSec μǤ

3. ۥͥåȥǥХϼºݤɤΤ褦ưΤǤ?
ۥͥåȥǥХñ Point-to-Point ǥХ䡢
ͥåȥǥХΤ褦ʤΤȤߤʤޤ
ʪǥǤϤʤ桼֤Υץफ
ѥåȤʪǥˤǤϤʤ桼֤Υץ
ѥåȤޤ

 tap0  IPX ꤷȤȡθϥͥ뤬 tap0 
IPX ѥåȤ뤿ӤˡΥѥåȤϥץꥱ
(Ȥ VTun) ϤޤץꥱϥѥåȤ
Ź沽̤TCP  UDP ͳ̿ޤ
̿ưƤ륢ץꥱϡǡ
Ĺ沽ơ줿ѥåȤ TAP ǥХ˽񤭤ߤޤ
ȥͥϤΥѥåȤ򤢤ºݤʪǥХ
褿ΤƱͤ˽ΤǤ

4. TUN ɥ饤Ф TAP ɥ饤Фΰ㤤ϤʤǤ?
TUN  IP ե졼ФưޤTAP ϥͥåȥե졼
Фưޤ

ȡtun ѤƤʤ IP ѥåȤɤ߽񤭤Ǥʤ
tap ѤƤʤ饤ͥåȥե졼षɤ߽񤭤Ǥʤ
ȤȤǤ

5. BPF  TUN/TAP ɥ饤Фΰ㤤ϤʤǤ?
BPF Ūʥѥåȥե륿ǤǤ¸ߤƤ
ͥåȥ󥿥ե˷ӤĤ뤳ȤǤޤ
BPF ϲۥͥåȥ󥿥ե󶡤ޤ
TUN/TAP ɥ饤Фϲۥͥåȥ󥿥ե󶡤ޤ
βۥͥåȥ󥿥ե BPF ӤĤ뤳Ȥ
ǽǤ

6. TAP ɥ饤ФϥͥΥͥåȥ֥å󥰤򥵥ݡ
Ƥޤ?
ϤLinux  FreeBSD ѤΥɥ饤Фϥͥåȥ֥å󥰤
ݡȤƤޤ

ܸ:  ŵ <zap03216@nifty.ne.jp> (2003/01/24)

:  ͺ <nakano@apm.seikei.ac.jp>
       Ƿ <dica@eurus.dti.ne.jp>
