OpenWRT/LEDE 内网下发 IPv6
浏览 2487 | 评论 0 | 字数 3726
NiNya
2019年07月17日
  •   文章最后更新于:.
      受某些因素影响,本文章可能具有一定的时效性,请以实际情况为准!另外,欢迎留言~

    ZL6K6f.jpg

    全文转载自:https://i-meto.com/openwrt-ipv6/

    2018 年 4 月,工业和信息化部发布了关于贯彻落实《推进互联网协议第六版 (IPv6) 规模部署行动计划》的通知,大力推广下一代互联网技术 IPv6。
    时至今日,高校教育网以及各大运营商已经基本支持了 IPv6 地址的分配。然而绝大多数家庭的路由器还不能支持自动下发,因此并没有享受到下一代互联网的快感。
    这里主要介绍使用 OpenWrt/LEDE 来解决内网设备分配 IPv6 的问题。

    想要让路由器下的设备获得 IPv6 地址通常有三种方式:relay(中继)、NAT(地址转换)、Passthrough(穿透)。下面分三个部分谈谈具体的配置方案。

    中继模式(relay)

    OpenWrt 早在 15.05 就内置了 relay 协议,具体是通过 odhcpd 来实现的。

    这种方案可以让子网设备分到公网 IPv6 的地址,是最为科学的,然而 odhcpd 的实现有很多 bug,在实际使用中有时候会掉线,需要重启服务才能解决,因此在部分设备上体验不佳。

    具体操作如下

    进入路由器终端

    ssh root@192.168.1.1

    编辑 dhcp 配置文件,修改如下:

    vi /etc/config/dhcp
    
    config dhcp 'lan'
        option interface 'lan'
        option start '100'
        option limit '150'
        option leasetime '12h'
        option ra 'relay'
        option ndp 'relay'
        option dhcpv6 'relay'
        option ra_management '1'
    
    config dhcp 'wan'
        option interface 'wan'
        option ignore '1'
    
    config dhcp 'wan6'
        option interface 'wan'
        option ra 'relay'
        option ndp 'relay'
        option dhcpv6 'relay'
        option master '1'

    编辑 network 文件,将地址第一个字母 f 修改为 d

    vi /etc/config/network
    
    config globals 'globals'
        option ula_prefix 'dd53:abcd:abcd::/48'

    穿透模式(Passthrough)

    Passthrough 的原理是将内外网进行桥接,然后对 IPv4 流量采用 NAT 方式进行转发,稳定性相当好,唯一的缺点就是路由器自身会失去 IPv6 的访问,因此如果想在路由器上做离线下载等功能就会非常麻烦。

    配置如下

    安装 ebtableskmod-ebtables-ipv6 模块

    opkg update 
    opkg install ebtables kmod-ebtables-ipv6

    设置 IPv4 转发

    interface=`ip -6 route | grep "default from" | awk '{print $7}'` 
    ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i $interface 

    内外网桥接

    brctl addif br-lan $interface

    杀死 odhcpd

    /etc/init.d/odhcpd stop 
    /etc/init.d/odhcpd disable 

    点击 LAN 接口的 edit 按钮进入设置,在 IPv6 Settings 选项卡中勾上 Always announce default router

    做完这些步骤,稍等一会儿子网设备就会分到相应的公网 IPv6 地址了。

    地址转换(NAT)

    IPv6 的设计之初是没有 NAT(网络地址转换)这种东西的, 但 Linux 内核从 3.7 版本开始实现了 IPv6 的 NAT。因此这种方案实际上是「歪门邪道」,更要命的是路由器下的设备将会无法获得公网端口,BT/PT 的上传速度受到了很大影响。

    Padavan 的 Linux 内核原生不支持 NAT6,不到万不得已,尽量选用其它两种方案

    具体操作如下

    1. 进入软件(soft)配置界面安装 ip6tableskmod-ipt-nat6 模块
    2. 打开网络(Network)菜单下的接口(Interfaces),把最下面的 IPv6 ULA-Prefix 改为 2fff::/64
    3. 点击 LAN 接口的 edit 按钮进入设置,在 IPv6 Settings 选项卡中勾上 Always announce default router.
    4. 进入启动项管理 ,把以下命令添加入启动配置(在 exit 0 前),实现开机启动,最后重启即可。
    res=`ip -6 route | grep "default from"`
    gateway=`echo $res | awk '{print $5}'`
    interface=`echo $res | awk '{print $7}'`
    
    if [ "$ACTION" = ifup ]; then
        ip -6 r add default via $gateway dev $interface
        if !(ip6tables-save -t nat | grep -q "v6NAT"); then
            ip6tables -t nat -A POSTROUTING -o $interface -m comment --comment "v6NAT" -j MASQUERADE
        fi
    else
        ip6tables -t nat -D POSTROUTING -o $interface -m comment --comment "v6NAT" -j MASQUERADE
        ip -6 r del default via $gateway dev $interface
    fi

    端口映射

    以上方案除了 NAT 方案外,可以开启 UPnP 进行高位端口映射,优化 BT/PT 体验。

    方案如下

    安装 miniupnpdluci-app-upnp 两个软件包
    services 下的upnp面板中开启即可

    ZLy6Qf.jpg

    测试机型

    方案测试通过机型,不保证其它版本可用,欢迎反馈。

    ModelVersion
    NETGEAR WNDR4300OpenWrt 18.06.2
    NETGEAR WNDR4300LEDE 17.01.4
    Phicomm k3OpenWrt snapshots
    psg1218(K2)OpenWrt 18.06.2
    psg1218(K2)LEDE 17.01.3
    Hiwifi HC5661ALEDE snapshots
    Newifi mini Y1LEDE 17.01.3

    参考资料

    本文作者:NiNya
    本文链接:https://lilynas.com/archives/622/
    最后修改时间:2019-08-08 16:06:48
    本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!
    评论
    与本文无关评论请发留言板。请不要水评论,谢谢。
    textsms
    支持 Markdown 语法
    email
    link
    评论列表
    暂无评论