Linux服务器建立ISATAP实现客户端IPv6上网

  这段时间回不了学校了,没有IPv6了连IPTV都看不了,所以就想着借助实验室的CentOS 7服务器搭建一个IPv6 over IPv4的隧道来访问公网上的IPv6资源。网上查了一下了解到ISATAP可以实现这个需求,于是准备在自己的服务器上建立个ISATAP来用。

3月18日追记 其实通过VPN比如OpenVPN可以直接实现IPv6子网,也即实现IPv6 over IPv4,参见IPv6 – OpenVPN Community,关于OpenVPN的搭建也可以参考本博客另一篇文章『Linux下OpenVPN服务器搭建

4月7日追记 SoftEther也可以实现IPv6 over IPv4,关于SoftEther的搭建同样可参考本博客的文章『Linux下SoftEther服务器搭建

0x01 服务端配置

1. 安装radvd

  radvd(Router Advertisement Daemon)用来为客户端分配IPv6地址,它的作用类似于IPv4中的DHCP,不过不同之处在于它是无状态自动配置地址,由于IPv6地址充足,因此客户端不需要从DHCP服务器获取空闲的IP地址,只需要接收一个包含地址前缀的路由器通告(RA,Router Advertisement)数据包,再根据客户端自身的信息计算出一个单播地址,不过要注意这种方式不能自动获取DNS。输入命令yum -y install radvd即可完成安装,安装后需进行接口配置,将/etc/radvd.conf配置为以下内容

interface is0
{
        AdvSendAdvert on;
        UnicastOnly on;
        AdvHomeAgentFlag off;
        prefix fc01:250:5405:1::/64
        {
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr off;
        };
};

  这里因为之后要进行NAT,所以使用了唯一本地地址(ULA)前缀fc01:250:5405:1::/64,可以在fc00::/7范围内任意设置一个64位前缀。如果不需要NAT的话可根据自己的网络情况设置。

2. 建立ISATAP隧道接口

  上一步在radvd中配置了接口is0,这里通过下面几个命令把这个接口配置成ISATAP隧道,为了重启后生效建议同时把这几个命令写进/etc/rc.local

ip tunnel add is0 mode isatap local 1.2.3.4 ttl 64
ip link set is0 up
ip addr add 2001:250:5405:1::5efe:1.2.3.4/64 dev is0

  这里1.2.3.4是服务器的IPv4地址,要注意IPv6地址的前缀要和之前radvd设置的一致。

3. 开启IPv6转发及NAT

  使用以下命令开启IPv6转发,并且立刻生效

echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
sysctl -p
echo "IPV6FORWARDING=yes" >> /etc/sysconfig/network
systemctl restart network

  之后利用ip6table工具设置IPv6的NAT,这里需要NAT的原因是我们的服务器并不是路由器,如果不NAT的话IPv6数据包无法被正确的路由。为了重启后生效可把命令写到/etc/rc.local

ip6tables --table nat --append POSTROUTING --out-interface ens192 --jump MASQUERADE

5. 重启radvd并设置自启动

systemctl restart radvd
systemctl enable radvd

0x02 客户端配置

1. Windows环境(Windows 7及以上系统适用)

  以管理员身份运行cmd命令,进入命令行模式,输入如下命令

netsh int ipv6 isatap set router 1.2.3.4
netsh int ipv6 isatap set state enable

  以上两条命令分别为设定ISATAP路由器和启用ISATAP隧道。之后通过ipconfig应该可以看到一个2001:250:5405:1:0:5efe:x.x.x.x的IPv6地址,其中x.x.x.x为客户端的IPv4地址,此时即可访问IPv6资源。

  如果要禁用ISATAP只需输入

netsh int ipv6 isatap set state disable

参考列表

发表评论

电子邮件地址不会被公开。 必填项已用*标注