LEDE 内网转发 IPv6

最近折腾 PT 发现了其他的转发方案,重新更新了文章

  • 2018.04.12 更新 Passthrough 方式
  • 2017.10.19 更新 NAT6 方式

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

relay

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

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

具体操作如下

  1. 进入路由器终端:$ ssh [email protected]

  2. 编辑 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'
    
  3. 编辑 network 文件:$ vi /etc/config/network,将地址第一个字母 f 修改为 d

    config globals 'globals'
        option ula_prefix 'dd53:abcd:abcd::/48'
    
  4. 重启即可

参考资料

Passthrough

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

配置如下

  1. 安装 ebtableskmod-ebtables-ipv6 模块

    $ opkg update
    $ opkg install ebtables kmod-ebtables-ipv6
    
  2. 设置 IPv4 转发

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

    $ brctl addif br-lan $interface
    
  4. 杀死 odhcpd

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

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

IPv6-Passthrough

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 体验。

方案如下

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

uTorrent


方案测试通过机型,不保证其它版本可用

Model Version
NETGEAR WNDR4300 LEDE 17.01.4
Hiwifi HC5661A LEDE snapshots
psg1218(K2) LEDE 17.01.3
Newifi mini Y1 LEDE 17.01.3

本文采用 CC BY-NC-SA 3.0 Unported 协议进行许可
本文链接:https://i-meto.com/lede-ipv6/