ar路由器 pppoe下发ipv6 dns_听说IPv4地址分配完了,试试IPv6吧

8d76b1bbe544f5520737efb5d765aba2.png

背景

去年11月底,欧洲信息网络中心宣布,他们最后一个/22段的IPv4地址也已经分配出去了,宣告了他们获取的IPv4地址段正式耗尽。

这意味着IPv6离我们越来越近了,那么我们要怎么先体验一下IPv6呢?

如果你的宽带运营商直接支持IPv6并且给了你一个双栈的路由器,那恭喜你,你的电脑开机就能拿到IPv6地址了。

但是如果只有IPv4地址要怎么体验IPv6网络呢?NAT64技术来帮你。

NAT64网关

NAT64技术就是把IPv6数据翻译成IPv4数据的技术,如果想知道更多可以翻我之前的文章。

今天主要是教教大家如何通过我的NAT64网关体验IPv6网络。网络拓扑如下图所示,需要一个nat64的路由,这里其实是一个虚拟机。它一端接路由器的IPv4网络,能够正常上网,另一段接一个vlan网络,这个vlan网络就是一个IPv6网络。在这个vlan网络的主机将能够自动获取IPv6地址和网关以及DNS,并且通过NAT64网关访问互联网!

fcb26835302a8a09a966e506e30a7d97.png

配置NAT64网关

我把我的NAT64网关程序打包成了一个docker镜像,所以运行只需要docker就可以。

下面是一个简单的配置文件:

$ cat config.yml
device: "tun0"
#mtu: 1500
buffer_size: 10000
nat_timeout: 30
post_cmd:
  - "ifconfig tun0 up"
  - "ip -6 addr add 2019::1/64 dev ens160"
  - "ip -6 route add 2017::/96 dev tun0"
  - "ip route add 10.0.0.0/24 dev tun0"
  - "iptables -t nat -F"
  - "iptables -t nat -A POSTROUTING -j MASQUERADE"
clat:
  enable: false
  src: "2018::/96"
  dst: "2019::/96"
plat:
  enable: true
  src:
    - "10.0.0.5-10.0.0.6"
  dst: "2017::/96"
ra:
  enable: true
  interface: "ens160"
  prefixes: ["2019::/64"]
  rdnss: "2019::1"
dns64:
  enable: true
  forwarders: ["114.114.114.114"]
  prefix: "2017::/96"
api:
  enable: true
dhcp6:
  enable: true
  interface: "ens160"
  dns:
  - "2019::1"

我来简单说一下相关的配置项:

  • plat: 是指有状态的NAT64翻译技术,会把目标地址是“2017::/96”这个网段的数据包,做一个源地址转换(NAT64),变成成“10.0.0.5-10.0.0.6”这个网段的IPv4地址。
  • ra:管理地址下发,需要指定下发的端口,这里是连接到IPv6 vlan网络的ens160。下发的IPv6地址段为“2019::/64",也就是连到IPv6网络的主机都会拿到一个2019开头的地址。rdnss是IPv6网络的dns服务器,也就是我的NAT64网关。
  • dhcp6:主要是给win7用的,win7不支持无状态IPv6获取,所以需要dhcp6来获取dns信息。
  • api: 这是debug用的,用来查看目前的映射情况。
  • clat:是指无状态的NAT64翻译技术,在这里没有用到。
  • post_cmd:是给相关的网卡加上路由,把需要翻译的数据包发往翻译程序管理的tun0设备。

启动NAT64网关

启动命令,这个命令会启动NAT64翻译程序,这个程序会创建一个tun0接口,发往tun0接口的IPv6数据包将会被转换成IPv4数据包。

$ docker run -d --name=nat64 --privileged=true --network=host -v /home/vagrant/config.yml:/etc/xlat/config.yml elynn/nat64:latest

启动完成之后我们看一下网卡信息,多了一块tun0设备。

$ ifconfig
ens33     Link encap:Ethernet  HWaddr 00:50:56:89:b5:86
          inet addr:172.22.0.158  Bcast:172.22.255.255  Mask:255.255.0.0
          inet6 addr: fe80::250:56ff:fe89:b586/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:118787 errors:0 dropped:0 overruns:0 frame:0
          TX packets:68624 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:169672800 (169.6 MB)  TX bytes:11710930 (11.7 MB)

ens160    Link encap:Ethernet  HWaddr 00:50:56:89:45:dc
          inet6 addr: 2019::1/64 Scope:Global
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

同时看到2017::/64地址段会被路由到tun0设备,这是因为这个网关的DNS64设备会把所有的IPv4域名都解析成2017开头的地址。

$ ip route
default via 172.22.0.1 dev ens33
10.0.0.0/24 dev tun0  scope link
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1 linkdown
172.22.0.0/16 dev ens33  proto kernel  scope link  src 172.22.0.158

$ ip -6 route
2017::/96 dev tun0  metric 1024  pref medium
2019::/64 dev ens160  proto kernel  metric 256 linkdown  pref medium
fe80::/64 dev ens33  proto kernel  metric 256  pref medium

Win10主机测试

启动之后能够自动拿到IPv6地址和DNS信息

c1eb15283a1d94f1781844a1e89de3b4.png

来ping一下bilibili

d5d9d716dda65889c66ae17abf5b860f.png

打开bilibili看个视频~

a40c87101b681097d289f5eee28560b8.png

Win7主机测试

启动之后直接能拿到IPv6地址和DNS

b684bb5d6e8ece69100f885a3be93499.png

来ping一下bilibili

bcf065b3b69fe2e52108263c08651cd4.png

Ubuntu主机测试

这一用了ubuntu16.04,虽然能够获得IPv6地址,但是没有办法拿到DNS信息。要获取DNS信息,还需要安装rdnssd这个软件。

$ apt install rdnssd

安装后之后就能正常连接网络了。

258276aed79987a27dadb05c30c87917.png

7147687a05ddc03804be83e3527d7a0d.png

API

只有一个API,主要是为了调试和性能测试用,下图显示了目前NAT64的翻译表。

4b2b82aff7f8a62c9d3a00ee8fd6b19a.png

源代码

写得很潦草,毕竟懒~

https://github.com/lynic/xlat

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值