精华内容
下载资源
问答
  • ISATAP隧道处理

    2021-06-08 09:31:06
    基础的sit隧道处理请参考:SIT通用隧道, 此处仅涉及isatap相关部分。 netlink用户接口 函数ipip6_newlink创建新的sit隧道,函数ipip6_tunnel_create创建新的隧道。 static int ipip6_newlink(struct net *src_net, ...

    基础的sit隧道处理请参考:SIT通用隧道, 此处仅涉及isatap相关部分。

    netlink用户接口

    函数ipip6_newlink创建新的sit隧道,函数ipip6_tunnel_create创建新的隧道。

    static int ipip6_newlink(struct net *src_net, struct net_device *dev,
                 struct nlattr *tb[], struct nlattr *data[], struct netlink_ext_ack *extack)
    {
        ...
        if (ipip6_tunnel_locate(net, &nt->parms, 0))
            return -EEXIST;
    
        err = ipip6_tunnel_create(dev);
        if (err < 0) return err;
    

    对于ISATAP隧道,设置新建设备的IFF_ISATAP私有标志位。

    static int ipip6_tunnel_create(struct net_device *dev)
    {
        struct ip_tunnel *t = netdev_priv(dev);
        struct net *net = dev_net(dev);
        struct sit_net *sitn = net_generic(net, sit_net_id);
        int err;
    
        memcpy(dev->dev_addr, &t->parms.iph.saddr, 4);
        memcpy(dev->broadcast, &t->parms.iph.daddr, 4);
    
        if ((__force u16)t->parms.i_flags & SIT_ISATAP)
            dev->priv_flags |= IFF_ISATAP;
    

    数据接收

    在接收函数中,进行欺骗报文检测,由函数packet_is_spoofed实现。

    static int ipip6_rcv(struct sk_buff *skb)
    {
        const struct iphdr *iph = ip_hdr(skb);
        struct ip_tunnel *tunnel;
    
        sifindex = netif_is_l3_master(skb->dev) ? IPCB(skb)->iif : 0;
        tunnel = ipip6_tunnel_lookup(dev_net(skb->dev), skb->dev, iph->saddr, iph->daddr, sifindex);
        if (tunnel) {
            struct pcpu_sw_netstats *tstats;
    
            if (tunnel->parms.iph.protocol != IPPROTO_IPV6 &&
                tunnel->parms.iph.protocol != 0)
                goto out;
    
            skb->mac_header = skb->network_header;
            skb_reset_network_header(skb);
            IPCB(skb)->flags = 0;
            skb->dev = tunnel->dev;
    
            if (packet_is_spoofed(skb, iph, tunnel)) {
                tunnel->dev->stats.rx_errors++;
                goto out;
            }
    

    对于ISATAP隧道,即设置了设备私有标志IFF_ISATAP的隧道,有函数isatap_chksrc检测欺骗报文。

    static bool packet_is_spoofed(struct sk_buff *skb,
                      const struct iphdr *iph, struct ip_tunnel *tunnel)
    {
        const struct ipv6hdr *ipv6h;
    
        if (tunnel->dev->priv_flags & IFF_ISATAP) {
            if (!isatap_chksrc(skb, iph, tunnel))
                return true;
            return false;
        }
        if (tunnel->dev->flags & IFF_POINTOPOINT)
            return false;
    

    如果外层IPv4头部的源地址等于配置的PRL(Potential Router List)中的某个地址,确定报文为合法报文,根据PRL地址的标志设置skb的成员ndisc_nodetype。PRL可通过以下命令配置:

    # ip tunnel add name isatap0 mode isatap local 192.168.1.100
    # 
    # ip tunnel prl dev isatap0 prl-default 192.168.1.1 
    # ip tunnel prl dev isatap0 prl-nodefault 192.168.1.2
    # 
    # ip tunnel show 
    isatap0: ipv6/ip remote any local 192.168.1.100 pdr 192.168.1.1 pr 192.168.1.2 ttl inherit 6rd-prefix 2002::/16
    #
    # sudo ip tunnel prl dev isatap0 prl-delete 192.168.1.1
    

    否则,如果源地址不属于PRL,检测内部IPv6头部的源地址是否是ISATAP格式地址,内嵌的IPv4地址是否等于外层IPv4头部的源地址,以及IPv6源地址是否和隧道设备配置的地址的前缀相同,以上条件都成立,则认为是合法报文。

    static int isatap_chksrc(struct sk_buff *skb, const struct iphdr *iph, struct ip_tunnel *t)
    {
        struct ip_tunnel_prl_entry *p;
        int ok = 1;
    
        rcu_read_lock();
        p = __ipip6_tunnel_locate_prl(t, iph->saddr);
        if (p) {
            if (p->flags & PRL_DEFAULT)
                skb->ndisc_nodetype = NDISC_NODETYPE_DEFAULT;
            else
                skb->ndisc_nodetype = NDISC_NODETYPE_NODEFAULT;
        } else {
            const struct in6_addr *addr6 = &ipv6_hdr(skb)->saddr;
    
            if (ipv6_addr_is_isatap(addr6) &&
                (addr6->s6_addr32[3] == iph->saddr) &&
                ipv6_chk_prefix(addr6, t->dev))
                skb->ndisc_nodetype = NDISC_NODETYPE_HOST;
            else
                ok = 0;
        }
        rcu_read_unlock();
        return ok;
    }
    

    ISATAP格式的IPv6地址判断函数如下,0x02000000中的第6位(从左开始,基数0)为universal/local位,对于全局IPv4地址,值为1,否则为0。

    static inline bool ipv6_addr_is_isatap(const struct in6_addr *addr)
    {            
        return (addr->s6_addr32[2] | htonl(0x02000000)) == htonl(0x02005EFE);
    } 
    

    数据发送

    如下发送函数,对于ISATAP隧道,其处理优先级高于6rd和6to4等隧道,首先,IPv6报文的下一跳地址必须存在于邻居表中;之后,由下一跳地址中取出对应的外部要封装的IPv4目的地址,这就要求下一跳IPv6地址必须是单播地址,而且是ISATAP格式的地址。否则,发生错误。

    static netdev_tx_t ipip6_tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
    {
        const struct iphdr  *tiph = &tunnel->parms.iph;
        const struct ipv6hdr *iph6 = ipv6_hdr(skb);
        __be32 dst = tiph->daddr;
    
        /* ISATAP (RFC4214) - must come before 6to4 */
        if (dev->priv_flags & IFF_ISATAP) {
            struct neighbour *neigh = NULL;
            bool do_tx_error = false;
    
            if (skb_dst(skb))
                neigh = dst_neigh_lookup(skb_dst(skb), &iph6->daddr);
    
            if (!neigh) {
                net_dbg_ratelimited("nexthop == NULL\n");
                goto tx_error;
            }
    
            addr6 = (const struct in6_addr *)&neigh->primary_key;
            addr_type = ipv6_addr_type(addr6);
    
            if ((addr_type & IPV6_ADDR_UNICAST) &&
                 ipv6_addr_is_isatap(addr6))
                dst = addr6->s6_addr32[3];
            else
                do_tx_error = true;
    
            neigh_release(neigh);
            if (do_tx_error)
                goto tx_error;
        }
    
        if (!dst)
            dst = try_6rd(tunnel, &iph6->daddr);
    

    地址配置

    对于ISATAP设备,不发送多播的RS请求。

    static struct inet6_dev *ipv6_add_dev(struct net_device *dev)
    {
        struct inet6_dev *ndev;
    
        ndev = kzalloc(sizeof(struct inet6_dev), GFP_KERNEL);
        if (!ndev)
            return ERR_PTR(err);
    
        if (dev->flags & (IFF_NOARP | IFF_LOOPBACK))
            ndev->cnf.accept_dad = -1;
    
    #if IS_ENABLED(CONFIG_IPV6_SIT)
        if (dev->type == ARPHRD_SIT && (dev->priv_flags & IFF_ISATAP)) {
            pr_info("%s: Disabled Multicast RS\n", dev->name);
            ndev->cnf.rtr_solicits = 0;
        }
    #endif
    

    在生成EUI64格式的接口ID时,对于ISATAP隧道设备,由以下函数__ipv6_isatap_ifid实现。EUI的最后4字节为本地隧道IPv4地址(local),EUI的第一个字节根据地址类型,设置全局或者本地标志位(universal/local),之后的三个字节固定为0x005EFE。

    static int addrconf_ifid_sit(u8 *eui, struct net_device *dev)
    {
        if (dev->priv_flags & IFF_ISATAP)
            return __ipv6_isatap_ifid(eui, *(__be32 *)dev->dev_addr);
        return -1;
    }
    static int __ipv6_isatap_ifid(u8 *eui, __be32 addr)
    {
        if (addr == 0)
            return -1;
        eui[0] = (ipv4_is_zeronet(addr) || ipv4_is_private_10(addr) ||
              ipv4_is_loopback(addr) || ipv4_is_linklocal_169(addr) ||
              ipv4_is_private_172(addr) || ipv4_is_test_192(addr) ||
              ipv4_is_anycast_6to4(addr) || ipv4_is_private_192(addr) ||
              ipv4_is_test_198(addr) || ipv4_is_multicast(addr) ||
              ipv4_is_lbcast(addr)) ? 0x00 : 0x02;
        eui[1] = 0;
        eui[2] = 0x5E;
        eui[3] = 0xFE;
        memcpy(eui + 4, &addr, 4);
        return 0;
    }
    static int ipv6_generate_eui64(u8 *eui, struct net_device *dev)
    {
        switch (dev->type) {
        case ARPHRD_SIT:
            return addrconf_ifid_sit(eui, dev);
    

    内核版本 5.10

    展开全文
  • Linux隧道isatap配置

    2021-05-16 22:41:55
    与6rd不同,ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)将IPv4地址嵌入在IPv6地址的接口ID部分,如下为ISATAP地址的接口ID部分,其组成为:24位的IANA OUI (00-00-5E),8位的值0xFE,以及32位的IPv4...

    与6rd不同,ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)将IPv4地址嵌入在IPv6地址的接口ID部分,如下为ISATAP地址的接口ID部分,其组成为:24位的IANA OUI (00-00-5E),8位的值0xFE,以及32位的IPv4地址。如果嵌入的IPv4地址为公网IP,那么u位(universal/local)设置为1,否则,设置为0。另外g为表示individual/group。

       0                       23      31                                63
       |        OUI            |  0xFE |           IPv4 address          |
       000000ug00000000 0101111011111110 xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx
    

    如下配置环境:

          |----------|                                |----------|
          |          | ens33                    ens33 |          |
          |  Client  |--------------------------------|  Server  |
          |          | 192.168.20.5      192.168.20.1 |          |
          |----------|                                |----------|
    

    服务端配置

    注意接口isatap1的地址结构中,接口ID部分为64位 - :0000:5efe:192.168.20.1(这里u和g两位都是0)。

    # ip address add 192.168.20.1/24 dev ens33
    #
    # ip tunnel add isatap1 mode isatap local 192.168.20.1 ttl 64
    # ip link set isatap1 up
    # 
    # ip addr add 3ffe:ffff:1234:5678::5efe:192.168.20.1/64 dev isatap1
    

    以下查看isatap1接口的信息:

    # ip link
    8: isatap1@NONE: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
        link/sit 192.168.20.1 brd 0.0.0.0
    # ip addr
    8: isatap1@NONE: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
        link/sit 192.168.20.1 brd 0.0.0.0
        inet6 3ffe:ffff:1234:5678:0:5efe:c0a8:1401/64 scope global 
           valid_lft forever preferred_lft forever
        inet6 fe80::5efe:c0a8:1401/64 scope link 
           valid_lft forever preferred_lft forever
    

    客户端配置

    注意接口isatap1的地址结构中,接口ID部分为64位 - :0000:5efe:192.168.20.5。

    # ip address add 192.168.20.5/24 dev ens33
    #
    # ip tunnel add isatap1 mode isatap local 192.168.20.5 remote 192.168.20.1 ttl 64     
    # ip link set isatap1 up
    #
    # ip addr add 3ffe:ffff:1234:5678::5efe:192.168.20.5/64 dev isatap1
    

    以下查看isatap1接口的信息:

    # ip link
    8: isatap1@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
        link/sit 192.168.20.5 peer 192.168.20.1
    # ip address
    8: isatap1@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
        link/sit 192.168.20.5 peer 192.168.20.1
        inet6 3ffe:ffff:1234:5678:0:5efe:c0a8:1405/64 scope global 
           valid_lft forever preferred_lft forever
        inet6 fe80::5efe:c0a8:1405/64 scope link 
           valid_lft forever preferred_lft forever
    

    在客户端主机中ping服务端地址:3ffe:ffff:1234 :5678:0:5efe:c0a8:1401。ICMP请求报文如下:

    在这里插入图片描述

    ICMP回复报文如下:
    在这里插入图片描述

    展开全文
  • ISATAP隧道技术

    2013-10-28 14:41:06
    ISATAP隧道,隧道的配置命令和详细解释
  • Fedora 9 终于换成了 2.6.25 kernel,2.6.25 支持 ISATAP 方式的 ipv6 tunnel 接入。于是把自己的机器简单配置了一下支持IPV61: 保证 kernel 支持 ipv62: 编辑 /etc/sysconfig/network ,增加下面这行IPV6_DEFAULTGW...

    Fedora 9 终于换成了 2.6.25 kernel,2.6.25 支持 ISATAP 方式的 ipv6 tunnel 接入。于是把自己的机器简单配置了一下支持IPV6

    1: 保证 kernel 支持 ipv6

    2: 编辑 /etc/sysconfig/network ,增加下面这行

    IPV6_DEFAULTGW=your ipv6 gateway

    3: 编辑 /etc/sysconfig/network-scripts/ifcfg-sit1, 内容如下

    DEVICE=sit1

    ONBOOT=yes

    IPV6INIT=yes

    IPV6TUNNELIPV4=your isatap tunnel IP

    IPV6TUNNELIPV4LOCAL=your local ipv4 ip

    IPV6ADDR=your ipv6 address

    4: ifup sit1

    UPDATE: 我还没有试验过这个在 F9 上重启是否有效,但在 CentOS 5.1 上面不好用,似乎 ifup-sit 不会创建对应的 sit1 设备,先得手动创建以后才有效。

    作者:kangkang0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • isatap lab configuration guide
  • 8、ISATAP隧道

    2018-06-09 01:02:40
    基本概念 ISATAP(Intra-SiteAutomatic Tunnel Addressing Protocol) ISATAP是一种非常容易部署和使用的IPv6过渡机制。在一个IPv4网络中,我们可以非常轻松的进行ISATAP的部署,首先你的PC需是V4/V6双栈PC,然后...

    基本概念

     ISATAP(Intra-SiteAutomatic Tunnel Addressing Protocol)
     ISATAP是一种非常容易部署和使用的IPv6过渡机制。在一个IPv4网络中,我们可以非常轻松的进行ISATAP的部署,首先你的PC需是V4/V6双栈PC,然后,需要有一台支持ISATAP的路由器,ISATAP路由器可以在网络中的任何位置,只要PC能够ping通它(当然,你要知道路由器的IPv4地址)。那么接下去,我们可以通过在路由器上部署ISATAP,这样网络中支持ISATAP的双栈主机,在需要访问IPv6资源时,可以与ISATAP路由器建立起ISATAP隧道,ISATAP主机根据ISATAP路由器下发的IPv6前缀构造自己的IPv6地址(这个IPv6地址是被自动关联到ISATAP主机本地产生的一个ISATAP虚拟网卡上),并且将这台ISATAP路由器设置为自己的IPv6默认网关,如此一来,后续的这台主机就能够通过这台ISATAP路由器去访问IPv6的资源。

     这种方法部署起来非常简单,在许多场合,客户为了节省成本,又希望网络中的IPv6主机能够访问V6资源,同时又不愿意对现有网络做大规模的变更及设备升级,那么就可以采用这种方法,购买一台支持ISATAP的路由器,甚至可以将ISATAP路由器旁挂在网络上,只要它能够访问V6资源并且响应ISATAPPC的隧道建立请求。

    ISATAP的功能组件如下

    1、自动隧道:
    ISATAP的隧道机制也是自动的,隧道在主机和ISATAP路由器之间被创建。主机首选需要知道ISATAP路由器的IPv4地址。

    2、ISATAP地址格式:
    分配给ISATAP路由器的IPv6地址是全局单播地址,该地址的前缀将被ISATAP主机用于自己的IPv6地址构造。ISATAP主机通过在IPv4建立起来的ISATAP隧道从ISATAP路由器发送的消息中接收/64的IPv6前缀,并且使用这个前缀结合“特殊的接口标识”来构造自己的IPv6地址。

    3、接口标识:

    ISATAP在主机上启用后,会产生一个ISATAP虚拟网卡,该虚拟网卡会产生一个64bits的特殊接口标识,有点类似EUI-64,但是产生机制不同,它是由专为ISATAP保留的32位的0200:5EFE加上主机上配置的IPv4地址构成,如下图,假设ISATAP主机配置的IPv4地址为1.1.1.1,那么ISATAP虚拟网卡的64bits接口标识就是:


    另一方面,在路由器上部署ISATAP后,路由器也会产生一个tunnel接口,用于响应ISATAP主机的隧道建立请求,这个tunnel接口同样会产生接口标识。地址的格式是IANA保留给ISATAP的32比特的0000:5EFE后追加32比特的IPv4地址。如下图,假设给ISATAP路由器配置的IPv4地址(用于隧道的)是2.2.2.2,那么ISATAPtunnel的接口标识就是:


    这里关于64bits的接口标识中“为ISATAP保留的”高阶32bits在维基百科上有这么一段描述:“The link-localaddress is determined by concatenatingfe80:0000:0000:0000:0200:5efe: for global unique andfe80:0000:0000:0000:0000:5efe: for private addresses with the 32bits of the host's IPv4address.”。貌似有全局唯一和私有之分,不过在IETF的相关草案上找到的更多是0200:5efe的描述,在我所作的测试环境中,windows主机上系统使用的是0200:5ede,而CISCO路由器上用的是0000:5efe。

    ISATAP主机和ISATAP路由器产生的这个64btis的接口标识,可进一步用于构造隧道接口的Linklocal地址,以及IPv6全局单播地址。这个下面会描述到。

    另外,因为ISATAP的操作范围在站点内,所以ISATAP主机和ISATAP路由器的IPv4地址可以是私有IP,也可以是公有IP。

    工作机制


    首先,我们有一个IPv4的网络,IPv4网络中绝大部分网路设备都不支持IPv6,除了终端主机,以及一台路由器,这台能够访问我们需要的IPv6资源。现在,一种最廉价的方式是,在这台路由器上部署ISATAP,终端ISATAP主机与路由器之间建立一个ISATAPtunnel,这样一来PC可以直接将IPv6流量放进tunnel传到ISATAP路由器从而穿越整个IPv4网络。

    1)现在我们在ISATAP路由器上进行相应的配置,给路由器分配的IPv4地址是2.2.2.2/24,同时建立一个tunnel接口用于ISATAP,此时tunnel接口会根据IPv4地址产生一个64bits的接口标识。这个接口标识搭配上高位的fe80::就形成了tunnel接口的Linklocal地址:fe80::0000:5efe:202:202。另外,还需给ISATAPtunnel接口配置一个全局单播IPv6地址,这里可以手工配置,也可以通过前缀+EUI64的方式来构建,这里的EUI-64就是上面所述的特殊的64bits接口标识。如上图,构建出来的IPv6地址就是2001:1111::0000:5efe:0202.0202/64,因此IPv4的前缀为2001:1111::/64,这个前缀稍后会通过tunnel下发给ISATAP主机,从而使它能够构建自己的IPv6地址。

    2)现在我们在ISATAP主机上,配置ISATAP,一般来说,在WIN7系统上默认安装了IPv6协议栈,默认就会有一个ISATAP的虚拟网卡。在我们给PC的物理网卡配置IPv4地址如1.1.1.1/24后,ISATAP虚拟网卡就会自动根据这个IPv4地址计算出上面所讲的特殊的接口标识:0200:5efe:1.1.1.1,注意这种格式等同与0200:5efe:0101.0101,在windows系统上我们可以看到前者的简便写法。

    3)当我们在主机上配置了ISATAP路由器之后(指向的是ISATAP路由器的IPv4地址),ISATAP主机开始向ISATAP路由器发送RS消息,如下图:


    这个RS消息是通过IPv4隧道传输的,外层是IPv4的头,源地址是ISATAP的IPv4地址1.1.1.1,目的地址是2.2.2.2,也就是ISATAP的IPv4地址。IPv4头里面裹着IPv6的报文,源地址是ISATAP主机的ISATAP虚拟网卡的Linklocal地址,目的地址是ISATAP路由器的Linklocal地址。

    4)ISATAP主机发出的这个RS消息,会在IPv4网络中被路由,最终转发到ISATAP路由器。这将使得路由器立即以一个RA进行回应:


    而这个回应的RA消息里,就包含ISATAP上所配置的那个IPv6全局单播地址的/64前缀。

    5)ISATAP主机收到这个RA回应后,会拿出里头的IPv6前缀,随后在后面加上自己ISATAP虚拟网卡的64bits的接口标识地址,构成128bits的IPv6全局单播地址,同时会产生一条默认路由,指向ISATAP路由器的Linklocal地址:

    6)从现在起,ISATAP主机需要访问IPv6资源的时候,将IPv6数据包封装在IPv4的隧道里,也就是说,套上ISATAP


    隧道的IPv4头,然后传给ISATAP路由器,再由ISATAP路由器解封装,再帮忙转发IPv6数据。


    四、典型实验


    环境描述

    PC是ISATAP主机,它是一台双栈PC,这里我们使用的是一台win7系统的电脑做测试。电脑网卡的IP地址为1.1.1.1/24,网关为1.1.1.254,网关是SW1的interfacevlan10。

    SW1创建两个VLAN:VLAN10及20,分别对应PC及ISATAP路由器。VLAN20的SVI口IP为2.2.2.254,是ISATAP路由器的默认网关。

    ISATAPRouter的接口IP为2.2.2.2。该IPv4地址在后续的ISATAP配置中使用到,ISATAP主机就是通过这个IP找到ISATAPRouter并与之建立ISATAP tunnel。ISATAPRouter同时连接到了一个IPv6网络,这里我们用loopback模拟:2001:8888::8/64,用于后续的测试。

    最终的实验结果是首先PC要能够ping通ISATAP Router的IPv4地址也就是2.2.2.2。然后PC与ISATAProuter建立隧道并拿到IPv6地址,而且要能够ping通20001:8888::8

    设备配置

    PC1的配置:
    网卡配置IP地址1.1.1.1/24,网关为1.1.1.254
    安装IPv6协议栈,此时Win7会自动产生一个ISATAP隧道虚拟接口:
    隧道适配器isatap.{0DB7233C-89B7-49DB-A8C0-D1AA005F4E6A}:

    SW1的配置:
    vlan 10
    vlan 20
    interface fast0/1
    switchport access vlan 10
    interface fast0/15
    switchport access vlan 20
    interface vlan 10
    ip address 1.1.1.254 255.255.255.0
    interface vlan 20
    ip address 2.2.2.254 255.255.255.0

    Router的配置:

    ipv6 unicast-routing
    !
    interface FastEthernet0/0
     ip address 2.2.2.2 255.255.255.0
     no shutdown
    !
    interface Tunnel1
     ip unnumbered fastEthernet 0/0  !! 这个IPv4地址就是ISATAP隧道的目的地址
     ipv6 enable
     ipv6 address 2001:1111::/64 eui-64 !!这个IPv6地址的前缀会被通告给ISATAP主机
     no ipv6 nd suppress-ra
     tunnel source fastEthernet 0/0
     tunnel mode ipv6ip isatap
    !
    interface loopback0
     ipv6 enable
     ipv6 address 2001:8888::8/64
    !
    ip route 0.0.0.0 0.0.0.0 2.2.2.254

    注意ISATAP路由器的配置,关键部分在于tunnel的配置,tunnel模式是ipv6ipisatap的,同时注意在tunnel这里配置的IPV4地址,就是对应的ISATAP主机上配置的那条CMD命令里ISATAP路由器的地址。我们这个实验演示的是tunnel直接用fa0/0的地址,当然,tunnel也可以有自己的IPv4地址,只要保证ISATAP主机到这个IPv4地址路由可达就行。另外tunnel的IPv6地址,对应的前缀就是稍后要下发给ISATAP主机的前缀,这个实验中,我们tunnel的IPv6全局单播地址使用的是前缀+eui-64的配置方式,这里的eui-64实际上指的就是前面我们介绍的那个特殊的64bits接口标识。

    实验测试

    我们首先在路由器上查看一下:

    R2#show ipv6 interface brief 
    FastEthernet0/0  
    Tunnel0  
    FE80::5EFE:202:202
    2001:1111::5EFE:202:202

    注意,这里的Linklocal地址:FE80::5EFE:202:202就是一个ISATAP格式的地址,最后的64bits是由32bits的0000:5EFE加上32bits的接口IPv4地址(这里是2.2.2.2)构成的,如下图。而IPv6全局单播地址,也是使用64bits的接口标识构成的,当然,你也可以手工配置IPv6全局单播地址,不一定要使用接口标识。


    接下去,我们在ISATAP主机上,CMD模式下输入:
    netsh interface ipv6 isatap set router 2.2.2.2

    PC就会开始发送RS,报文如下:


    我们看到这个RS的ICMPv6报文外是IPv6的头,IPv6的头外是IPv4的头。
    注意外层IPv4的头,源是1.1.1.1,目的是2.2.2.2
    然后内层IPv6的头,源是ISATAP主机的Linklocal地址,目的是ISATAP路由器的Linklocal地址

    在路由器收到RS后回回应一个RA:


    路由器回应的这个RA里,就有一个ICMPv6的Option,其中就包含着ISATAP路由器的IPv6前缀。而ISATAP主机就可以根据这个前缀,结合自己的接口标识构建IPv6地址。

    最终PC获取到的IPv4地址如下:

    隧道适配器 isatap.{0DB7233C-89B7-49DB-A8C0-D1AA005F4E6A}:
     连接特定的 DNS 后缀 . . . . . .. :
     IPv6 地址 . . . . . . . . .. . . : 2001:1111::200:5efe:1.1.1.1
     本地链接 IPv6 地址. . . . . . .. : fe80::200:5efe:1.1.1.1@
     默认网关. . . . . . . . . . .. . : fe80::5efe:2.2.2.2@

    我们看到PC首先根据自己本地配置的IPv4地址:1.1.1.1,生成64bits的接口ID:


    这个64bits的接口ID,与从ISATAP路由器获取到的IPv6全局单播地址前缀2001:1111::的前64bits,构成了PC的IPv6全局单播地址:2001:1111::200:5efe:1.1.1.1。
     这个64bits的接口ID,与FE80::/10构成了PC的Linklocal地址:fe80::200:5efe:1.1.1.1
    同时,PC将ISATAP路由器的Linklocal地址fe80::5efe:2.2.2.2设置为默认网关
     当主机与其它IPv6主机进行通讯时,从隧道接口转发,将从报文的下一跳IPv6地址中取出IPv4地址作为IPv4封装的目的地址。如果目的主机在本站点内,则下一跳就是目的主机本身,如果目的主机不在本站点内,则下一跳为ISATAP路由器的地址。

    我们最后再做一个测试,就是ISATAP主机去ping 2008:8888::1。


    这个到达ISATAP的loopback的IPv6数据包,被套上一个ISATAP的IPv4隧道头,然后传给ISATAP路由器,由路由器进行下一步的IPv6转发。


    展开全文
  • 我的Isatap隧道

    2019-11-21 16:36:59
    我的Isatap隧道 ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)是一种IPv6转换传送机制,允许IPv6数据包通过IPv4网络上双栈节点传输。 通信原理:双栈主机在与其他主机或路由器通信之前,首先要获得一...
  • ISATAP协议分析

    2010-01-21 15:03:35
    通过对RFC5414的分析,研究ISATAP技术。详细接受了ISATAP的技术原理和通信过程。
  • 可使用isatap模式配置isatap隧道(isatap隧道模式),也可使用sit模式实现。如下环境: |----------| |----------| | | ens33 ens33 | | | Client |--------------------------------| Server | |
  • isatap扫盲

    2011-11-02 17:03:30
    isatap 简介  ISATAP ( Intra-Site Automatic Tunnel Addressing Protocol,站内自动隧道寻址协议)是一种地址分配和主机到主机、主机到路由器和路由器到主机的自动隧道技术,它为IPv6主机之间提供了跨越IPv4...
  • 软考之ISATAP隧道配置

    2011-11-17 20:05:26
    软考之ISATAP隧道配置,希望对大家有帮助
  • RFC5214_ISATAP

    2011-05-31 22:12:57
    为解决ipv4地址的匮乏,提出了ipv6的概念。 但从ipv4向ipv6网络的转换是一个漫长的过程,于是出现了包括隧道技术...Ipv6 ISATAP Tunnel是目前运用较广泛的隧道技术之一,借助它可以实现ipv6站点跨越ipv4网络实现通信。
  • 清华大学ISATAP访问IPv6设置

    千次阅读 2019-11-19 23:35:00
    清华大学ISATAP访问IPv6设置什么是ISATAP隧道?清华大学ISATAP隧道信息清华大学ISATAP隧道配置方法Windows 环境(Windows 7及以上系统适用)Linux 环境Mac OS X环境 什么是ISATAP隧道? ISATAP全名是 Intra-Site ...
  • IPv6 ISATAP配置說明

    千次阅读 2018-06-28 17:07:56
    一、什么是ISATAP隧道? ISATAP全名是 Intra-Site Automatic Tunnel Addressing Protocol,是一种IPv6隧道技术,使用户可以在IPv4网络上访问IPv6资源。具体技术原理参见(draft-ietf-ngtrans-ISATAP-23.txt)。 二、...
  • IPv6 to IPv4过渡技术有手工隧道、GRE隧道、6over4、isatap和NAT64五种。从今天给大家发一系列文章,主要介绍IPv6 to IPv4过渡技术。本文介绍的是ISATAP技术。 注意,阅读本文,您需要具有较深的IPv6知识。 一、...
  • netsh int ipv6 isatap set router 219.224.165.235 netsh int ipv6 isatap set state enabled ipconfig 219.224.165.235是学院路isatap路由器地址. 更改文件后缀名为.bat,以管理员权限运行,如果ipconfig显示有...
  • 6to4与isatap的区别

    2020-06-03 13:35:08
    6to4和isatap两种隧道的不同点整理如下: 两种隧道的不同点: 差异 6to4 ISATAP IPv6地址格式 地址前缀为2002::开头, 差异 6to4 ISATAP IPv6地址格式 地址前缀为2
  • 基于有限状态机模型的ISATAP过渡协议一致性测试设计,万惠娟,黄小红,为了实现从IPv4向IPv6的平滑过渡,出现了很多过渡技术,其中ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)是主要的过渡技术之一,...
  • 从IPv4向IPv6过渡技术有3种:双栈技术、隧道技术和协议转换技术。双栈是IPv4向IPv6过渡过程中的一项重要技术,是其他过渡技术的基础。本文提出了一种双栈与ISATAP隧道技术结合的过渡方案,并给出了具体的工作过程。
  • Linux ISATAP配置

    2012-09-30 07:48:00
    (2)查看内核版本命令 uname -a (3)查看支持隧道类型命令 ip tunnel help 中 mode里是否有sit或isatap 方法1:使用sit类型隧道 #(1) 如果没有装载ipv6模块则装载IPv6模块 #sudo modprobe ipv6...
  • 一、基本原理 基本概念 ① 在一个IPv4网络中主机与路由器之间创建一条ISATAP隧道,以便让该主机可以访问IPv6网络中的资源。...③ 当IPv4中的PC主机需要访问IPv6资源时,需要先与ISATAP路由器建立ISATAP隧...
  • Win10系统下 实验室不能直接获取ipv6地址,需要通过isatap隧道链接,参考内容如下: ISATAPISATAP全名是 Intra-Site Automatic Tunnel Addressing Protocol,是一种IPv6隧道技术,使用户可以在IPv4网络上访问IPv6...
  • ISATAP隧道技术及实践

    千次阅读 2015-11-17 22:31:12
    (原文最初我在Sina博客中看到,SIna博客中的图片需要登录才能看到,为了免去大家登录的麻烦,我转载到我的博客,原文地址http://blog.sina.com.cn/s/blog_5ec353710101e513.html) ... ISATAP
  • windows: 管理员权限cmd: netsh interface ipv6 isatap set router isatap....netsh interface ipv6 isatap set state enabled 要恢复原样的话只要 netsh interface ipv6 isatap set router default ne...
  • 一、基本概念 ...在一个IPv4网络中,我们可以非常轻松的进行ISATAP的部署,首先你的PC需是V4/V6双栈PC,然后,需要有一台支持ISATAP的路由器,ISATAP路由器可以在网络中的任何位置,只要PC能够...
  • 实验需求 部署ISATAP实现WIN7(Cloud)与R2身后IPv6网段通信 实验解法 1.底层IPV4地址与路由配置(略) ......
  • ISATAP协议通过将IPv4地址嵌入到IPv6地址当中,并将IPv6封包封装在IPv4中传送,在两台ISATAP主机相互通信过程中使用各自IPv4地址建立tunnel,无需透过其它特殊网络设备。ISATAP过渡技术不要求隧道端节点必须具有全球...
  • ISATAP隧道 ISATAP ( Intra-Site Automatic Tunnel Addressing Protocol,站间自动隧道寻址协议)是一种地址分配和主机到主机、主机到路由器和路由器到主机的自动隧道技术,它为IPv6主机之间提供了跨越IPv4内部网络...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,283
精华内容 513
关键字:

isatap