#
# USAGI Linux - ISATAP -
#
# $USAGI: ISATAP,v 1.4 2002/04/08 07:55:57 yoshfuji Exp $
#

This document is based on <http://v6web.litech.org/isatap/>.

1. What is ISATAP

Intra-Site Automatic Tunnel Addressing Protocol(ISATAP) is one of transition 
technology from IPv4 to IPv6. It connects IPv6 hosts and routers within IPv4 
sites.  You want more detail of ISATAP, please see 
draft-ietf-ngtrans-isatap-XX.txt.

USAGI contains ISATAP implementation in linux 2.4 series which is based on
 draft-ietf-ngtrans-isatap-01.txt.  The latest Internet-Draft of ISATAP is 
revision 3 (2002.4.1).  This implementation is written by Fred Templin 
is a author of ISATAP draft.

2. Preparation

Compile and install USAGI kernel with ISATAP support.  ISATAP support
(CONFIG_IPV6_ISATAP) is in "Networking options."

Compile and install radvd which is in usagi/usagi/radvd. We use radvd to 
advertise prefix on ISATAP router interface.

3. Configuration

There is two configuration. One is ISATAP router and the other is ISATAP host.

1)Configuring the ISATAP router

The router is responsible for routing IPv6 packets to and from the ISATAP 
clients, so it must have IPv6 connectivity, including routing for at least 
one /64 subnet that will be dedicated to the ISATAP network. This /64 subnet 
prefix will be referred to as PREFIX in this discussion.

ISATAP functionality is enabled by creating a tunnel of mode isatap ysing
the ip command or iptunnel command.  A specific IPv4 address must be chosen 
as the ISATAP router address, and this address generally must not be used to 
any other IP tunnels. If V4ADDR is the chosen address, the command syntax
to create a new ISATAP interface on the router would be:

# ip tunnel add is0 mode isatap local V4ADDR ttl 64
or
# iptunnel add is0 mode isatap local V4ADDR ttl 64

Although the tunnel interface can have any name allowed by the kernel, 
using "isN" where N counts from 0 is suggested.

Once the is0 interface has been created, it needs to be enabled and an 
ISATAP-compliant IPv6 address needs to be assigned to it.

# ip link set is0 up
# ip addr add PREFIX::5efe:V4ADDR/64 dev is0
or
# ifconfig is0 up
# ifconfig is0 add PREFIX::5efe:V4ADDR/64

As an example, consider a router which will use 192.0.2.1 as its ISATAP 
router address with the prefix 3ffe:ffff:1234:5678::/64 assigned to its
clients. The commands needed to create and enable the ISATAP interface 
would be:

# ip tunnel add is0 mode isatap local 192.0.2.1 ttl 64
# ip link set is0 up
# ip addr add 3ffe:ffff:1234:5678::5efe:192.0.2.1/64 dev is0
or
# iptunnel add is0 mode isatap local 192.0.2.1 ttl 64
# ifconfig is0 up
# ifconfig is0 add 3ffe:ffff:1234:5678::5efe:192.0.2.1/64

Once the ISATAP has been created and configured, radvd needs to be set to 
advertise the appropriate prefix to ISATAP clients. The radvd configuration 
for an ISATAP interface is identical to configuration of an Ethernet interface,
except that the UnicastOnly directive must appear in the interface definition.
Here is an interface definition for the sample configuration above:

interface is0
{
    AdvSendAdvert on;
    UnicastOnly on;
    AdvHomeAgentFlag off;

    prefix 3ffe:ffff:1234:5678::/64
    {
        AdvOnLink on;
	AdvAutonomous on;
	AdvRouterAddr off;
    };
};

2)Configuring the ISATAP clients

The configuration for the clients is much easier than for the router, of 
course. The only configuration necessary is to create and enable the ISATAP
interface. With clients, however, the address of the ISATAP router must be
specified when creating the tunnel so that the clients know where to send 
router solicitations. This is done by specifying the v4any option to the 
ip command.

# ip tunnel add is0 mode isatap local V4ADDR_NODE v4any V4ADDR_RTR ttl 64
# ip link set is0 up
or
# iptunnel add is0 mode isatap local V4ADDR_NODE v4any V4ADDR_RTR ttl 64
# ifconfig is0 up

The clients will solicit address and route information from the ISATAP 
router and automatically configure themselves for IPv6 network access. 
Here is an example of client configuration for the example router above:

# ip tunnel add is0 mode isatap local 192.0.40.25 v4any 192.0.2.1 ttl 64
# ip link set is0 up
or
# iptunnel add is0 mode isatap local 192.0.40.25 v4any 192.0.2.1 ttl 64
# ifconfig is0 up

3)Static configuration

ISATAP may also be used in situations where automatic configuration is not 
desirable. In this case, there will be no node designated as an ISATAP router, 
and each node will need to configure its own address and routing information.
All nodes in a static configuration such as this will configure their 
interfaces in the same manner as the router described above, omitting the v4any option from the ip tunnel create command and configuring the global addresses
manually. However, radvd will not be used at all since it is only necessary 
for autoconfiguration.

