tuntap.txt
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:5k
- Universal TUN/TAP device driver.
- Copyright (C) 1999-2000 Maxim Krasnyansky <max_mk@yahoo.com>
- Linux, Solaris drivers
- Copyright (C) 1999-2000 Maxim Krasnyansky <max_mk@yahoo.com>
- FreeBSD TAP driver
- Copyright (c) 1999-2000 Maksim Yevmenkin <m_evmenkin@yahoo.com>
- 1. Description
- TUN/TAP provides packet reception and transmission for user space programs.
- It can be viewed as a simple Point-to-Point or Ethernet device, which
- instead of receiving packets from a physical media, receives them from
- user space program and instead of sending packets via physical media
- writes them to the user space program.
- When a program opens /dev/net/tun, driver creates and registers corresponding
- net device tunX or tapX. After a program closed above devices, driver will
- automatically delete tunXX or tapXX device and all routes corresponding to it.
- This package(http://vtun.sourceforge.net/tun) contains two simple example
- programs how to use tun and tap devices. Both programs works like
- bridge between two network interfaces.
- br_select.c - bridge based on select system call.
- br_sigio.c - bridge based on async io and SIGIO signal.
- However the best example is VTun http://vtun.sourceforge.net :))
- 2. Configuration
- Create device node:
- mknod /dev/net/tun c 10 200
- Driver module autoloading
- Make sure that "Kernel module loader" - module auto-loading support is enabled
- in your kernel.
- Add following line to the /etc/modules.conf:
- alias char-major-10-200 tun
-
- Run:
- depmod -a
- Driver will be automatically loaded when application access /dev/net/tun.
- 3. Program interface
- 3.1 Network device allocation:
- 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));
- /* Flags: IFF_TUN - TUN device (no Ethernet headers)
- * IFF_TAP - TAP device
- *
- * IFF_NO_PI - Do not provide packet information
- */
- 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 Frame format:
- If flag IFF_NO_PI is not set each frame format is:
- Flags [2 bytes]
- Proto [2 bytes]
- Raw protocol(IP, IPv6, etc) frame.
- Universal TUN/TAP device driver Frequently Asked Question.
-
- 1. What is the TUN ?
- The TUN is Virtual Point-to-Point network device.
- TUN driver was designed as low level kernel support for
- IP tunneling. It provides to userland application
- two interfaces:
- - /dev/tunX - character device;
- - tunX - virtual Point-to-Point interface.
- Userland application can write IP frame to /dev/tunX
- and kernel will receive this frame from tunX interface.
- In the same time every frame that kernel writes to tunX
- interface can be read by userland application from /dev/tunX
- device.
- 2. What is the TAP ?
- The TAP is a Virtual Ethernet network device.
- TAP driver was designed as low level kernel support for
- Ethernet tunneling. It provides to userland application
- two interfaces:
- - /dev/tapX - character device;
- - tapX - virtual Ethernet interface.
- Userland application can write Ethernet frame to /dev/tapX
- and kernel will receive this frame from tapX interface.
- In the same time every frame that kernel writes to tapX
- interface can be read by userland application from /dev/tapX
- device.
- 3. What platforms are supported by TUN/TAP driver ?
- Currently driver has been written for 3 Unices:
- Linux kernels 2.2.x, 2.4.x
- FreeBSD 3.x, 4.x, 5.x
- Solaris 2.6, 7.0, 8.0
- 4. What is TUN/TAP driver used for?
- As mentioned above, main purpose of TUN/TAP driver is tunneling.
- It is used by VTun (http://vtun.sourceforge.net).
- 5. How does Virtual network device actually work ?
- Virtual network device can be viewed as a simple Point-to-Point or
- Ethernet device, which instead of receiving packets from a physical
- media, receives them from user space program and instead of sending
- packets via physical media sends them to the user space program.
- Let's say that you configured IPX on the tap0, then whenever
- kernel sends any IPX packet to tap0, it is passed to the application
- (VTun for example). Application encrypts, compresses and sends it to
- the other side over TCP or UDP. Application on other side decompress
- and decrypts them and write packet to the TAP device, kernel handles
- the packet like it came from real physical device.
- 6. What is the difference between TUN driver and TAP driver?
- TUN works with IP frames. TAP works with Ethernet frames.
- 7. What is the difference between BPF and TUN/TAP driver?
- BFP is a advanced packet filter. It can be attached to existing
- network interface. It does not provide virtual network interface.
- TUN/TAP driver does provide virtual network interface and it is possible
- to attach BPF to this interface.
- 8. Does TAP driver support kernel Ethernet bridging?
- Yes. Linux and FreeBSD drivers support Ethernet bridging.