在OpenWrt上配置原生IPv6 NAT

以前这篇文章是发在CSDN上面的,访问量已经9000多了,应该还是帮过不少人吧。。这次重新更新整理到hexo上面。

我的网络环境

  • 网络:教育网原生双栈,IPv4固定地址,IPv6地址自动获取
  • 固件版本:OpenWrt Chaos Calmer 15.05-rc2 r45918
  • 内核版本:3.18.14

准备工作

配置好路由使其能够连接网络,WAN口能够获取全球单播IPv6地址,在我的环境下WAN口是可以自动获取到IPv6地址的,因此如果你的环境不能自动获取到IPv6地址,请谷歌一下解决办法。

详细步骤

  1. 安装ip6tableskmod-ipt-nat6

    1
    2
    3
    opkg update
    opkg install ip6tables
    opkg install kmod-ipt-nat6

  2. 使用WinSCP更改/etc/config/network文件内容,在config interface 'lan'下添加一行:

    1
    option ip6addr 'fc00:100:100:1::1/64'

  3. 更改/etc/config/dhcp文件,将config dhcp 'lan'那一栏改为以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    config dhcp 'lan'
    option interface 'lan'
    option start '100'
    option limit '150'
    option leasetime '12h'
    option dhcpv6 'server'
    option ra 'server'
    option ra_management '1'
    option ra_default '1'

  4. 更改/etc/firewall.user,假设WAN对应的接口为eth0.2,则添加以下内容:

    1
    ip6tables -t nat -A POSTROUTING -o eth0.2 -j MASQUERADE

  5. 使用tracepath6 -b tv.byr.cn命令,获取目前网络的IPv6网关地址(找最上面的IPv6地址),假定是2001:1234:1234:1234::1

  6. 使用route -A inet6 add default gw 2001:1234:1234:1234::1命令,为路由器添加默认网关。这一步非常重要,不进行的话是上不了IPv6的。。。完成之后,连接到路由器的计算机应该可以访问IPv6网站了。

重启之后,需要重新添加网关,如果要做到路由器开机自动添加该网关,可以在/etc/hotplug.d/iface/下新建一个文件90-ipv6,给予可执行权限,内容为(注意替换为自己的网关地址)

1
2
3
#!/bin/sh
[ "$ACTION" = ifup ] || exit 0
route -A inet6 add default gw 2001:1234:1234:1234::1