为服务器配置 IPv6 隧道(6in4)

IPv6,互联网协议第6版(Internet Protocol version 6),皆在解决 IPv4 地址枯竭的问题。

IPv6 Tunnel

IPv4 和 IPv6 是什么?

简单的说,IPv4 和 IPv6 都是 IP 地址的一种形式,IP 地址相当于互联网设备的地址,我们知道对方的地址后,就可以找到他。

平常我们见到和使用的 IP 地址大多是这样的:121.42.200.12,这种被称为 IPv4 地址,IPv4 使用32位(4字节)地址,因此只有 4,294,967,296 个,但随着联网设备的增加,这些地址显然是不够用的,所以需要新的协议和更多的地址。IPv6 便是这个新的协议。IPv6 的目的皆在解决 IPv4 枯竭的问题。

IPv6 大家可能有点陌生,但它在1998年就已经被定义出台,之所以很少见到他是因为之前 IPv4 地址还不存在枯竭的情况,近几年 IPv6 才被大家提起。IPv6 的地址形式是 2408:8033:8f3e:86c0:49e7:50b7:ec4d:2bf6 这样的,很长,可以分配 340,282,366,920,938,463,463,374,607,431,768,211,456  个(小山都不知道怎么读了),就算给全世界每粒沙子分配一个 IPv6 地址,都不一定用得完。

IPv6 的优点不止是数量多,还有很多优点,不过运营商和用户很难感受到这个优势,导致目前 IPv6 普及率极低,

IPv6 隧道又是什么?准确的说 IPv6 隧道并不是真正的 IPv6,可以理解为“工作在 IPv4 网络下的 IPv6 代理”。隧道服务器有一个 IPv4 和 IPv6 地址,它可以给用户分配 IPv6 地址。用户配置好隧道后,就可以访问 IPv6 网络,不过是通过 IPv4 连接到隧道服务器,然后隧道服务器访问 IPv6 网络,再通过 IPv4 返回给用户,所以还是离不开 IPv4。

IPv6 隧道用途并不是很大,普通用户没必要配置,体验并不友好。

那么为什么要给服务器配置 IPv6 隧道?

给服务器配置 IPv6 隧道并不是为了让服务器可以通过 IPv6 访问,而是为了一些特殊需求。IPv6 可以顺畅的访问 Google 等网站,所以,如果你使用的是国内服务器,要使用 Google 的一些资源做开发,就可以使用 IPv6 隧道来访问 Google。

比如这几天米V米的后台登陆加入了 Google reCaptcha,但服务器是阿里云国内机房,无法访问 Google,就给服务器配置了 IPv6 隧道,完美可用。

说了这么多,下面就教大家如何在 Linux 和 Windows 服务器配置 IPv6 隧道(不保证适用于所有 Linux 发行版)。

准备工作

首先我们需要申请一个 IPv6 隧道提供机构的账号,目前比较常用的是:Hurricane Electric。

官网:https://tunnelbroker.net/

进入官网 → 点击左上角登陆框的 [Register] → 依次填写账户名称、密码、电子邮箱、名字、姓氏等信息 → 填写完成后记得勾选同意服务条款 → 点击 [Register]

等待几分钟,你的电子邮箱会收到一封邮件,点击邮件内的链接激活账户后即可登陆使用。

登陆账户后,点击左侧的 [Create Regular Tunnel] 创建一个隧道,在输入框内填写你服务器的 IPv4 地址,填写之前请确保你的服务器可以 Ping(安全组设置为接受 IGMP 请求)。下面可以选择隧道服务器,国内用户一般选择香港就好,虽然延迟都不怎么滴,然后点击 [Create Tunnel] 创建隧道。

点击 [Main Page] 即可查看申请的隧道,点击隧道即可查看详细信息。

Server IPv4 Address 和 Server IPv6 Address 为隧道服务器的 IP 地址。

Client IPv4 Address 和 Client IPv6 Address 为你服务器的 IP 地址。

Linux 配置

以阿里云经典网络的CentOS 7为例,同样适用于 Debian 和 Ubuntu。

输入ip -6 address show查看是否已启用 IPv6

如果没有输出任何结果,编辑文件/etc/sysctl.conf,加入以下文本,保存,输入sysctl -p使其生效。

net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0

再次输入ip -6 address show查看是否已启用 IPv6

如果有 IPv6 地址,则说明 IPv6 启用成功,如果没有,可以尝试重启系统。

然后打开 IPv6 隧道详情页面,点击 [Example Configurations] 选项卡,在下拉框中选择 [Linux-route2],下面的文本框会显示配置命令。

新建一个文件,文件名后缀命名为 sh,文件开头写上#!/bin/sh,然后下面写上显示的配置命令,需要注意,如果你的服务器是专有网络,或者是通过内网路由转发的网络,则需要把命令里的IP地址改为你的内网地址,保存文件,输入chmod +x 文件名赋予执行权限。

#!/bin/sh
modprobe ipv6
ip tunnel add he-ipv6 mode sit remote 216.218.221.6 local 121.42.200.12 ttl 255
ip link set he-ipv6 up
ip addr add 2001:470:18:353::2/64 dev he-ipv6
ip route add ::/0 dev he-ipv6
ip -f inet6 addr
# 脚本示例

为了让每次开机或网络重新配置后,脚本可以自动执行,将脚本添加到 network 启动脚本里。

修改文件/etc/init.d/network,大约在 157 行,touch /var/lock/subsys/network上面加入脚本的完整路径,比如:/root/HE-IPv6.sh,保存。不同的系统 network 文件皆有不同,将脚本路径加入到 start 操作的最后面即可。

输入systemctl daemon-reload重新加载启动文件

输入service network restart重启网络

输入ip -6 address show dev he-ipv6查看 IPv6 隧道是否配置成功

如果显示 IPv6 隧道地址,则可以访问一下 IPv6 网络测试,输入curl -I -6 ipv6.google.com,如果访问正常,则说明 IPv6 隧道配置成功,否则请检查脚本是否正确。

如果你本地有 IPv6 网络,则可以 ping 一下隧道地址检查是否通畅,或者在下方留言给我,我可以帮你测试。

如果 ping 不通,将安全组或防火墙规则设置为允许所有 IPv4 流量即可。

Windows 配置

以 AWS 的 Windows Server 2008 为例

打开 cmd

输入ipconfig /all查看是否有 IPv6 地址

Windows IPv6

正常情况下都是会有的,如果没有,检查 IPv6 协议是否启用。

跟 Linux 配置步骤一样,先在下拉框选择对应的 Windows 系统,获取配置命令。

将命令保存为批处理脚本,新建一个文件,文件名后缀命名为 bat,将命令粘贴保存即可。注意,由于 AWS 用的是内网路由转发,所以需要将命令的地址改为内网地址。

双击执行,输入ipconfig /all查看 [隧道适配器 IP6Tunnel] 是否存在 IPv6 隧道地址,如果存在,则说明 IPv6 隧道配置成功,可以使用浏览器访问 https://ipv6.google.com 测试。如果不存在,检查脚本是否正确,

Windows 不需要配置开机启动等,会一直生效,即使系统重启。

附加配置

为了更好的使用 IPv6 访问 Google 等网站,需要避免DNS污染,我推荐使用 Hosts 来指定 IPv6 地址,不推荐修改 DNS。

解析 www.google.com 正确的 IPv6 地址,推荐使用 IPv6 版 Google DNS 解析。

输入dig @2001:4860:4860::8888 aaaa +noall +answer www.google.com解析地址

如果提示 dig 命令不存在,输入yum install bind-utilsapt-get install dnsutils安装

测试解析出的地址是否可以 Ping 通,注意需要使用ping6命令,如果可以 Ping 通,则可以添加到/etc/hosts,如果不可以,可以尝试更换DNS。比如:2620:0:ccc::2

可以使用命令快速添加到 Hosts:echo "2404:6800:4005:805::2004 www.google.com" >> /etc/hosts,也可以手动编辑 Hosts。

Windows 用户输入nslookup www.google.com 2001:4860:4860::8888解析,Hosts 路径:C:\Windows\System32\drivers\etc\hosts


好了,以上就是给服务器配置 IPv6 隧道的方法,你也可以应用于非服务器设备,但是不要指望 IPv6 隧道能给你带来非常好的网络体验,我的网络是有原生 IPv6 的,隧道跟原生相比,相差真的很大,特别是国内。

对了,如果你也想给自己的博客后台启用 Google reCaptcha,WordPress 用户可以搜索相关插件。不仅可以防止机器人登陆,如果对方没有使用代理,Google reCaptcha 无法加载,即使密码正确,也无法登陆。

微信公众号二维码

微信扫描二维码关注我们

点赞
  1. abilly说道:

    我使用的华为云,centos系统,he-ipv6 隧道能获取到ipv6地址,但是ping 不通ipv6.google.com
    能帮我看下,什么原因吗

    [root@1 ~]# ifconfig
    eth0: flags=4163 mtu 1500
    inet 192.168.0.204 netmask 255.255.255.0 broadcast 192.168.0.255
    inet6 fe80::f816:3eff:fe1e:469f prefixlen 64 scopeid 0x20
    ether fa:16:3e:1e:46:9f txqueuelen 1000 (Ethernet)
    RX packets 14959 bytes 1048315 (1023.7 KiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 13504 bytes 1061731 (1.0 MiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    he-ipv6: flags=209 mtu 1480
    inet6 2001:470:c:c8c::2 prefixlen 64 scopeid 0x0
    inet6 fe80::7273:b915 prefixlen 64 scopeid 0x20
    sit txqueuelen 1000 (IPv6-in-IPv4)
    RX packets 0 bytes 0 (0.0 B)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 0 bytes 0 (0.0 B)
    TX errors 24 dropped 0 overruns 0 carrier 24 collisions 0

    lo: flags=73 mtu 65536
    inet 127.0.0.1 netmask 255.0.0.0
    inet6 ::1 prefixlen 128 scopeid 0x10
    loop txqueuelen 1000 (Local Loopback)
    RX packets 74802 bytes 4711249 (4.4 MiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 74802 bytes 4711249 (4.4 MiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    [root@1 ~]# ping6 2001:470:c:c8c::2
    PING 2001:470:c:c8c::2(2001:470:c:c8c::2) 56 data bytes
    64 bytes from 2001:470:c:c8c::2: icmp_seq=1 ttl=64 time=0.021 ms
    64 bytes from 2001:470:c:c8c::2: icmp_seq=2 ttl=64 time=0.028 ms
    64 bytes from 2001:470:c:c8c::2: icmp_seq=3 ttl=64 time=0.030 ms
    ^C
    --- 2001:470:c:c8c::2 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2028ms
    rtt min/avg/max/mdev = 0.021/0.026/0.030/0.005 ms
    [root@1 ~]#
    [root@1 ~]# ping6 ipv6.google.com
    PING ipv6.google.com(hkg07s28-in-x0e.1e100.net (2404:6800:4005:80c::200e)) 56 data bytes
    From tunnel488519-pt.tunnel.tserv15.lax1.ipv6.he.net (2001:470:c:c8c::2) icmp_seq=1 Destination unreachable: Address unreachable
    From tunnel488519-pt.tunnel.tserv15.lax1.ipv6.he.net (2001:470:c:c8c::2) icmp_seq=2 Destination unreachable: Address unreachable
    From tunnel488519-pt.tunnel.tserv15.lax1.ipv6.he.net (2001:470:c:c8c::2) icmp_seq=3 Destination unreachable: Address unreachable
    ^C
    --- ipv6.google.com ping statistics ---
    3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2002ms

    [root@1 ~]#

    Sogou Explorer Sogou Explorer Windows 10 x64 Edition Windows 10 x64 Edition
    1. 小山说道:

      你试着开一下全部端口?

      Google Chrome 68.0.3440.75 Google Chrome 68.0.3440.75 Windows 10 x64 Edition Windows 10 x64 Edition
    2. Hiboyyyyyy说道:

      你好你的问题解决了吗

      Firefox 61.0 Firefox 61.0 Windows 7 x64 Edition Windows 7 x64 Edition

发表评论

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.