前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IPv6 实用教程

IPv6 实用教程

作者头像
为为为什么
发布2022-08-06 14:57:33
5.1K0
发布2022-08-06 14:57:33
举报
文章被收录于专栏:又见苍岚

IPv6 已经推广多年,但实用比例仍不算高,但是事实上IPv6在解决IPv4数量不足的问题上功不可没,之前介绍了 IPv6 理论知识, 本文介绍 IPv6 接地气的实用知识。

背景

就我个人而言,相比 IPv4,IPv6最大的优势是每台终端理论上都可以获得世界唯一的公网地址,终于配得上拥有了姓名; 那些只有拥有了公网IP才能做的事情,在运营商不提供 IPv4 地址时,IPv6 可以帮你做

需求场景
  • 大多数情况下,当前的IPv4 使用策略能满足绝大部分需求,诸如访问网络资源、访问网络服务器、访问游戏服务器 …… 当前的情况下我们访问别人的场景都没有问题,拿着子网的 IPv4 地址通过端口映射技术不耽误使用;
  • 问题就出在我们只能访问别人的资源,一旦出现需要在公网上提供网络服务的需求时,内网IPv4地址便捉襟见肘
  • 此时我们的需求是仅有内网IPv4的地址的主机,需要为外网提供服务
IPv4 内网穿透
  • 内网穿透技术为拿着内网IP地址的主机提供了被外网访问的可能性,通过与拥有公网IP的中继服务器建立通信来解决“没有姓名”的问题
  • 但内网穿透技术的中继服务器往往价格不菲,而且很容易成为带宽的瓶颈 家中带宽200M的宽带可能几十块一个月,云服务器100M带宽的一个月怎么也得千八百的吧
IPv6
  • 由于国家高瞻远瞩,早早地布局了IPv6地址的普及,同时也是破局美国自己占有大部分IPv4地址的伟大规划,各大运营商基本上都为家庭宽带分配了公网IPv6地址,为我们解决个人没有公网IP的问题提供了理论支撑
  • 需要公网IP做的事情可以交由 IPv6 代替 IPv4 完成
适用人群

总结来说,如果有如下情况,建议使用IPv6地址:

  1. 有家用主机为公网提供服务的需求
  2. 无法获取公网 IPv4 地址
  3. 厌倦了内网穿透的繁琐和性能受限
  4. 家庭宽带配置好了公网 IPv6 地址

最典型的需求就是个人 nas 了

IPv6 实用常识

通信前提
  • 只有同时拥有 IPv6 地址的主机之间可以通过 IPv6 通信
地址头
  • 国内三大运营商分配的公网 IPv6地址为 2409, 2408, 240e 开头的

全国三大运营商IPv6地址分配情况(以北京部分区域为例),格式如下

区县名称

移动宽带

移动基站

联通宽带

联通基站

电信宽带

电信基站

110101-中国北京市东城区

2409:8a00::-2409:8a00:bff::

2409:8900::-2409:8900:bff::

2408:8206::-2408:8206:bff::

2408:8406::-2408:8406:bff::

240e:304::-240e:304:bff::

240e:404::-240e:404:bff::

110102-中国北京市西城区

2409:8a00:c00::-2409:8a00:17ff::

2409:8900:c00::-2409:8900:17ff::

2408:8206:c00::-2408:8206:17ff::

2408:8406:c00::-2408:8406:17ff::

240e:304:c00::-240e:304:17ff::

240e:404:c00::-240e:404:17ff::

110105-中国北京市朝阳区

2409:8a00:1800::-2409:8a00:23ff::

2409:8900:1800::-2409:8900:23ff::

2408:8206:1800::-2408:8206:23ff::

2408:8406:1800::-2408:8406:23ff::

240e:304:1800::-240e:304:23ff::

240e:404:1800::-240e:404:23ff::

  • fe80 开头的是内网 IPv6 地址
常用获取IPv6地址方式
  • 移动设备的移动网络只要设备支持都是会自动分配 IPv6 地址的
  • 在Wifi 下,需要使用支持 IPv6 地址的路由器理论上设备才能获得 IPv6 地址
  • 可以将支持 IPv6 的路由器设置为桥接模式来直接获得 IPv6 地址
临时 IPv6 地址
  • 我们可以在查看IPv6 地址时发现临时 IPv6 地址等字样
  • 这个地址是自动随机生成的对外通讯地址,会时常变化,初衷是保护计算机安全的,打一枪换一个地方,保护本地mac地址不暴露在公网之下
  • 当本地 IPv6 地址和临时地址同时存在时,对外通信用的都是临时地址,但是本地IPv6地址也是同时生效的

IPv6 实用操作

开启与关闭
Linux
代码语言:javascript
复制
# 检查ipv6是否开启
sysctl -a | grep ipv6 | grep disable # 如果输出的值是一堆0则表示ipv6是开启的
ip -6 addr | grep inet6,如果有看到fe80则表示ipv6是开启的

# 临时禁用ipv6
sysctl -w net.ipv6.conf.all.disable_ipv6=1

# 临时开启ipv6
sysctl -w net.ipv6.conf.all.disable_ipv6=0

# 彻底禁用ipv6
在grub里添加ipv6.disable=1,然后重启操作系统
Windows
  • 进入 控制面板\网络和 Internet\网络连接
  • 在当前的网络连接上右键查看属性:

此种情况下表明本机开启 IPv6

  • 进入属性,控制是否勾选来开启/关闭 IPv6
配置DNS
获取地址
Windows
  • ipconfig 可以查看地址
代码语言:javascript
复制
ipconfig 
->
无线局域网适配器 WLAN:

   连接特定的 DNS 后缀 . . . . . . . :
   IPv6 地址 . . . . . . . . . . . . : 2409:8a1e:8fbb:1e40:d40:e8eb:783f:fd34
   临时 IPv6 地址. . . . . . . . . . : 2409:8a1e:8fbb:1e40:8096:86b9:7ddf:b6e9
   本地链接 IPv6 地址. . . . . . . . : fe80::d70:e1eb:753f:fd54%3
   IPv4 地址 . . . . . . . . . . . . : 192.168.1.5
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : fe80::1%3
                                       192.168.1.1

若此处看到 24 开头的IPv6地址基本可以判定当前获取到了公网 IP

Linux
  • ifconfig
代码语言:javascript
复制
ifconfig
->
bridge0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.222  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 2409:8a1e:8fbb:1e40:20dc:135f:b737:e9a7  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::ca56:b29b:a90f:338a  prefixlen 64  scopeid 0x20<link>
        ether 74:c2:f0:d7:d9:c3  txqueuelen 1000  (以太网)
        RX packets 89703  bytes 5291226 (5.2 MB)
        RX errors 0  dropped 56738  overruns 0  frame 0
        TX packets 6874  bytes 580124 (580.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

  • ip a
代码语言:javascript
复制
ip a
->
bridge0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 76:c6:f0:d7:d9:73 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.222/24 brd 192.168.1.255 scope global noprefixroute bridge0
       valid_lft forever preferred_lft forever
    inet6 2409:8a1e:8fbb:1e40:20dc:135f:b737:e9a7/64 scope global dynamic noprefixroute 
       valid_lft 229439sec preferred_lft 143039sec
    inet6 fe80::ca56:b29b:a90f:338a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

同样地,若此处看到 24 开头的IPv6地址基本可以判定当前获取到了公网 IP

基础命令
ping

在Windows 和Linux 下均可以使用 ping 命令直接接IPv6 地址(与IPv4相同)

  • Windows
代码语言:javascript
复制
C:\Users\Administrator>ping 2408:4002:110b:200:98c3:464:ef7d:7639

正在 Ping 2408:4002:110b:200:98c3:464:ef7d:7639 具有 32 字节的数据:
来自 2408:4002:110b:200:98c3:464:ef7d:7639 的回复: 时间=6ms
来自 2408:4002:110b:200:98c3:464:ef7d:7639 的回复: 时间=5ms

2408:4002:110b:200:98c3:464:ef7d:7639 的 Ping 统计信息:
    数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 5ms,最长 = 6ms,平均 = 5ms

  • Linux
代码语言:javascript
复制
$ ping 2408:4002:110b:200:98c3:464:ef7d:7639
PING 2408:4002:110b:200:98c3:464:ef7d:7639(2408:4002:110b:200:98c3:464:ef7d:7639) 56 data bytes
64 比特,来自 2408:4002:110b:200:98c3:464:ef7d:7639: icmp_seq=1 ttl=55 时间=6.01 毫秒
64 比特,来自 2408:4002:110b:200:98c3:464:ef7d:7639: icmp_seq=2 ttl=55 时间=5.53 毫秒
64 比特,来自 2408:4002:110b:200:98c3:464:ef7d:7639: icmp_seq=3 ttl=55 时间=5.79 毫秒
^C
--- 2408:4002:110b:200:98c3:464:ef7d:7639 ping 统计 ---
已发送 3 个包, 已接收 3 个包, 0% 包丢失, 耗时 2003 毫秒
rtt min/avg/max/mdev = 5.531/5.776/6.006/0.194 ms

在Linxu 下 也可以使用 ping6 命令专门ping IPv6地址

代码语言:javascript
复制
$ ping6 2408:4002:110b:200:98c3:464:ef7d:7639
PING 2408:4002:110b:200:98c3:464:ef7d:7639(2408:4002:110b:200:98c3:464:ef7d:7639) 56 data bytes
64 比特,来自 2408:4002:110b:200:98c3:464:ef7d:7639: icmp_seq=1 ttl=55 时间=6.35 毫秒
64 比特,来自 2408:4002:110b:200:98c3:464:ef7d:7639: icmp_seq=2 ttl=55 时间=5.47 毫秒
^C
--- 2408:4002:110b:200:98c3:464:ef7d:7639 ping 统计 ---
已发送 2 个包, 已接收 2 个包, 0% 包丢失, 耗时 1002 毫秒

  • Android

在Android终端中 Termux 可以创建 Android 控制台,其中需要使用 ping6 来接IPv6地址

代码语言:javascript
复制
~ $ ping 2408:4002:110b:200:98c3:464:ef7d:7639  
ping: unknown host 2408:4002:110b:200:98c3:464:ef7d:7639
~ $ ping6 2408:4002:110b:200:98c3:464:ef7d:7639
PING 2408:4002:110b:200:98c3:464:ef7d:7639(2408:4002:110b:200:98c3:464:ef7d:7639) 56 data bytes
64 bytes from 2408:4002:110b:200:98c3:464:ef7d:7639: icmp_seq=1 ttl=55 time=22.1 ms
64 bytes from 2408:4002:110b:200:98c3:464:ef7d:7639: icmp_seq=2 ttl=55 time=18.5 ms
^C
--- 2408:4002:110b:200:98c3:464:ef7d:7639 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 18.576/20.362/22.148/1.786 ms

ssh
代码语言:javascript
复制
ssh username@ipv6
代码语言:javascript
复制
C:\Users\Administrator>ssh vvd@2408:4002:110b:200:98c3:464:ef7d:7639
vvd@2408:4002:110b:200:98c3:464:ef7d:7639's password:
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-91-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

Welcome to Alibaba Cloud Elastic Compute Service !

Last login: Sat Dec 25 12:53:42 2021 from 2409:8a1e:8fbb:1e40:fcc6:9f4a:d491:90b6
vvd@iZuf6fnlkc96o99z1t5zc7Z:~$ 

Linux常用命令
代码语言:javascript
复制
# 查看ip
ip -6 addr

# 查看路由
ip -6 route

# 查看多播地址
ip -6 maddr
netstat -gn

# 查dns AAAA记录(走ipv4线路)
dig -t AAAA fzxiaomange.com
nslookup -query=AAAA fzxiaomange.com

# 查dns AAAA记录(走ipv6线路)
dig @2620:0:ccc::2 -6 -t AAAA fzxiaomange.com 
nslookup -query=AAAA fzxiaomange.com 2620:0:ccc::2

# 查dns AAAA记录(走ipv6线路的最纯粹、最完整、最靠谱方法)
dig @2620:0:ccc::2 -t AAAA -6 fzxiaomange.com +trace

# curl
curl -6 https://fzxiaomange.com

# ping
ping6 fzxiaomange.com

# trace route
mtr -6 fzxiaomange.com
traceroute6 fzxiaomange.com
tracert6 fzxiaomange.com
tracepath6 fzxiaomange.com

# 邻居地址解析,类似ipv4的arping
ndisc6 -n 2002::102 eth0

# iptables查看
ip6tables-save

# tcpdump
tcpdump -nnn -i eth0 ip6

国内知名公共 DNS 服务器

https://dns.icoa.cn/

腾讯 DNS (DNSPod)

由 DNSPod 提供的公共免费 DNS,后来 DNSPod 被腾讯(Tencent)收购,现在属于腾讯公司所有,稳定性和连通性也是不错的,经测试海外也可以使用。

DNSPod 除了 IPv4,现在同时支持 IPv6 DNS 和 DoT/DoH 服务。

项目

地址

IPv4

119.29.29.29

IPv6

2402:4e00::

DoH 地址

DoH (国密 SM2,基于腾讯云政企国密解决方案) 地址

DoT 地址

dot.pub

阿里 DNS (Alidns)

这组 DNS 是由阿里巴巴提供的,国内连通性还是不错的,海外部分地区连通性不是特别好,具体可以测试一下。

阿里 DNS 同时提供了 IPv4/IPv6 DNS 和 DoT/DoH 服务。

项目

地址

IPv4

223.5.5.5 / 223.6.6.6

IPv6

2400:3200::1 / 2400:3200:baba::1

DoH 地址

DoT 地址

dns.alidns.com

百度 DNS

中国最大的搜索引擎百度提供的公共 DNS,经测试海外连通性也是不错的,暂时百度只提供了一组 IPv4 和 IPv6 DNS 地址。

项目

地址

IPv4

180.76.76.76

IPv6

2400:da00::6666

360 安全 DNS

360 提供的 DNS 服务,只提供了 IPv4 和 DoT/DoH 服务。

项目

地址

针对中国电信/铁通/移动的 IPv4

101.226.4.6 / 218.30.118.6

针对中国联通的 IPv4

123.125.81.6 / 140.207.198.6

DoH 地址

DoT 地址

dot.360.cn

测试 IPv6
测试本机是否支持 IPv6
  1. 访问 :http://test-ipv6.com/ 如果通过了所有测试表明本机支持 IPv6
  1. https://ipw.cn/ipv6/ 如果显示自己 IPv6地址,并且 IPv6 访问优先,表明本机支持 IPv6
  1. https://ipv6.ipw.cn/ http://[2402:4e00:1013:e500:0:940e:29d7:3443]/ https://test.ipw.cn/ 如果访问后显示自己的 IPv6 地址表明IPv6配置成功
  1. https://ipw.cn/ipv6ping/ 访问该网站可以对自己的公网 IPv6 地址进行在线 Ping
测试网站是否支持 IPv6 访问

https://ready.chair6.net/

踩坑

都拥有 IPv6 地址,一方ping 一方通,反过来不通

两台拥有IPv6地址的主机AB,A 可以 ping 通B,B ping A 超时

  • A 主机设立了放ping 防火墙,常出现在云服务器上,可以查找云服务器防火墙设置,或提工单咨询运营商如何添加防火墙规则
  • 此处以阿里云和腾讯云为例,记录防火墙设置方法
阿里云
  • 手动添加规则
腾讯云
  • 进入自己的云实例
  • 网络信息 -> 防火墙 中配置规则

我的腾讯云服务器没有IPv6 地址因此没有设置相关规则,思路是一样的

可以ping通,但是ssh连接超时

ping的 ICMP协议被放行,但tcp 22端口被拒绝访问,总结问题就是 被墙了

  • 被防火墙挡住了 tcp 22 端口的 IPv6 访问
  • 首先排查本机是否设置了防火墙,然后放行 IPv6 访问
  • 如果本机防火墙都拆光了还是ssh访问不到,那就该怀疑入网光猫路由器的防火墙了
  • 以移动宽带第二代光猫为例,展示放行IPv6 的方法,不需要管理员账户,自己就可以弄了
移动宽带第二代光猫
  • 查看本地默认网关:
  • 访问地址,进入光猫管理界面,输入普通用户的账号密码:
  • 进入 安全 -> 防火墙 -> 攻击保护设置 -> 去掉Ipv6Spi
获取了IPv6地址,可以ssh可以ping,test-ipv6就是不通

考虑代理服务器的问题,关闭代理服务器

  • 科学上网工具经常会配置本地的代理地址,此代理地址会导致 test-ipv6 失败
  • 进入代理服务器设置,关闭相关代理

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年12月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
    • 需求场景
      • IPv4 内网穿透
        • IPv6
          • 适用人群
          • IPv6 实用常识
            • 通信前提
              • 地址头
                • 常用获取IPv6地址方式
                  • 临时 IPv6 地址
                  • IPv6 实用操作
                    • 开启与关闭
                      • Linux
                      • Windows
                    • 配置DNS
                      • 获取地址
                        • Windows
                        • Linux
                      • 基础命令
                        • ping
                        • ssh
                        • Linux常用命令
                      • 国内知名公共 DNS 服务器
                        • 腾讯 DNS (DNSPod)
                        • 阿里 DNS (Alidns)
                        • 百度 DNS
                        • 360 安全 DNS
                      • 测试 IPv6
                        • 测试本机是否支持 IPv6
                        • 测试网站是否支持 IPv6 访问
                    • 踩坑
                      • 都拥有 IPv6 地址,一方ping 一方通,反过来不通
                        • 阿里云
                        • 腾讯云
                      • 可以ping通,但是ssh连接超时
                        • 移动宽带第二代光猫
                      • 获取了IPv6地址,可以ssh可以ping,test-ipv6就是不通
                      • 参考资料
                      相关产品与服务
                      弹性公网 IP
                      弹性公网 IP(Elastic IP,EIP)是可以独立购买和持有,且在某个地域下固定不变的公网 IP 地址,可以与 CVM、NAT 网关、弹性网卡和高可用虚拟 IP 等云资源绑定,提供访问公网和被公网访问能力;还可与云资源的生命周期解耦合,单独进行操作;同时提供多种计费模式,您可以根据业务特点灵活选择,以降低公网成本。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档