V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yjzll
V2EX  ›  宽带症候群

上海电信 IPV6 光猫拨号下设置软路由 Slaac 透传

  •  2
     
  •   yjzll · 29 天前 · 688 次点击
    上海电信 IPV6 光猫拨号下设置软路由 Slaac 透传
    概况:软路由使用 iStore ,22.03.6 版,一进一出两个网口。光猫拨号,下接软路由 wan 口,软路由 lan 口下,接交换机,交换机下接 AP (华为 AX3pro ,AP 模式,主要手机上网)和 Nas (一个很老的 Nas ,仅支持 ipv4 ),2 台电脑( win10 )。
    软路由 istore 主要功能实现:
    1 、ipv4 使用普通的 NAT 方式,无公网 IP ,XX 上网使用。
    2 、ipv6 ,slaac 方式,实现 BT 软件使用 ipv6 公网端口(比如 qBittorrent 的 19433 端口,一般 DHT 数值在 300 多)
    3 、下载服务,安装软件商店自带的迅雷 docker 版、qBittorrent 。迅雷快一点
    4 、内部 lan 网可以共享硬盘,包括下载的电影。
    5 、开 webdav ,通过 ipv6 ,外网可以访问,能简单的上传下载。有 DDNS 更方便。
    6 、内部 PC 如果使用到端口,只需要在软路由防火墙上添加规则即可。软路由有防火墙,内部 PC 都是要经过软路由防火墙的,安全。

    上海电信 ipv6 ,ipv6 前缀是 64 位的! slaac 和 nat 方式都可以实现,nat 方式之前已经发过贴,下面都是关于 slaac 方式的配置,需要非常仔细,有点小地方稍不注意,设置错了,就是各种并发症,会让你抓狂。以下涉及的 wan6 、wan 、lan 等都是安装后自动配好的,不需要额外修改名称,大致步骤如下:

    第一步,先搞定 wan6 口(获得 ipv6 的 wan 口地址,正确的网关)
    1 、网络--接口--wan6--编辑
    1.1 、常规设置
    协议:DHCPv6 客户端
    设备:eth0
    开机自动运行:选择
    请求 IPv6 地址:try
    请求指定长度的 IPv6 前缀:自动
    1.2 、高级设置
    强制链路:不选
    请求 DHCP 时发送的客户端 ID:空
    使用默认网关:选择
    自动获取 DNS 服务器:选择
    DNS 权重:空
    使用网关跃点:空
    覆盖 IPv4 路由表:未指定
    覆盖 IPv6 路由表:未指定
    IPv6 源路由:选择
    委托 IPv6 前缀:选择
    IPv6 分配长度:已禁用
    IPv6 前缀过滤器:-- 请选择 --
    IPv6 后缀:::1
    IPv6 优先级:空
    1.3 、防火墙设置
    创建和分配防火墙区域:wan 和 wan6
    1.4 、DHCP 服务器--常规设置
    忽略此接口:不选
    1.5 、DHCP 服务器--IPv6 设置
    指定的主接口:选择
    RA 服务:中继模式
    DHCPv6 服务:中继模式
    NDP 代理:中继模式
    学习路由:选择
    1.6 、保存,软路由重启(系统--重启)
    1.7 、首页--终端
    输入 root 和密码
    1.8 、查询软路由的默认 IPv6 网关
    输入:
    ip -6 route | grep default
    看得到几个行,如果仅有一行,可直接跳到下一步(跳过 1.9 ,去第二步),如果是两行,比如下面这样:
    default from 240e:xxx:xxx:xxx::/64 via fe80::34xx:xxx:xxx dev eth0 proto static metric 512 pref medium
    default from 240e:xxx:xxx:xxx::/64 via fe80::1 dev eth0 proto static metric 640 pref medium
    此时,默认网关有 2 个,需要手动指定使用哪个网关,否则会无法上网,完全不通外网。
    1.9 、手动指定使用哪个网关
    编辑文件,命令:vim /etc/hotplug.d/iface/90-ipv6
    输入如下内容:
    #!/bin/sh
    [ "$ACTION" = ifup ] || exit 0
    GWaddr=`ifconfig | ip -6 route show default | head -n1 | awk '{print $5}'`
    route -A inet6 add default gw $GWaddr dev eth0
    Insert 切换编辑功能,ESC 退出编辑,:wq 保存退出
    赋予执行权限,输入命令
    chmod +x /etc/hotplug.d/iface/90-ipv6
    1.10 、软路由重启(系统--重启)
    首页右上角的 IP 地址( wan ),出现 ipv4 ipv6 地址。

    第二步,搞定 lan 口
    2 、网络--接口--lan--编辑
    2.1 、常规设置
    协议:静态地址
    设备:br-lan
    开机自动运行:选择
    IPv4 地址:192.168.100.1
    IPv4 子网掩码:255.255.255.0
    IPv4 网关:灰色无法更改
    IPv4 广播地址:灰色无法更改
    IPv6 地址:空
    IPv6 网关:空
    IPv6 路由前缀:空
    2.2 、高级设置
    强制链路:选择
    使用默认网关:选择
    使用自定义的 DNS 服务器:空
    DNS 搜索域名:空
    DNS 权重:空
    使用网关跃点:空
    覆盖 IPv4 路由表:未指定
    覆盖 IPv6 路由表:未指定
    委托 IPv6 前缀:选择
    IPv6 分配长度:已禁用
    IPv6 前缀过滤器:-- 请选择 --
    IPv6 后缀:::1
    IPv6 优先级:空
    2.3 、防火墙设置
    创建和分配防火墙区域:lan
    2.4 、DHCP 服务器--常规设置
    忽略此接口:不选
    启动:100
    客户数:150
    租期:12h
    2.5 、DHCP 服务器--高级设置
    动态 DHCP:选择
    强制:不选
    IPv4 子网掩码:灰色无法更改
    DHCP 选项:空
    2.6 、DHCP 服务器--IPv6 设置
    指定的主接口:不选
    RA 服务:中继模式
    DHCPv6 服务:中继模式
    NDP 代理:中继模式
    学习路由:选择
    NDP 代理从属设备:不选
    2.7 、保存,软路由重启(系统--重启)

    第三步,网络--接口--全局网络选项
    IPv6 ULA 前缀:空
    数据包引导:选择

    第四步,网络--DHCP/DNS--高级设置
    过滤 IPv6 AAAA 记录:不选
    过滤 IPv4 A 记录:不选

    第五步,强制 RA 消息转发
    5 、首页--终端
    5.1 、首页--终端
    输入 root 和密码
    5.2 、编辑文件,命令:vim /etc/sysctl.conf
    输入如下内容:
    net.ipv6.conf.default.accept_ra=2
    net.ipv6.conf.all.accept_ra=2
    net.ipv6.conf.default.forwarding=2
    net.ipv6.conf.all.forwarding=2
    net.ipv6.conf.default.accept_ra=2
    net.ipv6.conf.all.accept_ra=2
    net.ipv6.conf.default.dad_transmits=2
    net.ipv6.conf.all.dad_transmits=2
    Insert 切换编辑功能,ESC 退出编辑,:wq 保存退出
    5.3 、软路由重启(系统--重启)

    IPV6 联网测试
    https://testipv6.cn/
    ping -6 www.baidu.com

    第六步,其他问题
    如果获得了 ipv6 地址,缺无法 ping 通,大概率是以下三个地方
    网络--接口--全局网络选项,IPv6 ULA 前缀:空
    网络--接口--wan6 ,IPv6 分配长度:已禁用
    网络--接口--lan ,IPv6 分配长度:已禁用
    原因是纯 relay 模式下客户端不会获取到“IPv6 ULA 前缀”下的地址/路由/邻居信息,当客户端尝试回复从路由器发出的 ULA-prefix 下地址的 neighbor solicitation 时,匹配不到这个 ULA 地址的路由只好放弃。
    4 条回复    2024-04-08 10:37:11 +08:00
    yyzh
        1
    yyzh  
       29 天前
    上海电信原来这么恶心的么?
    txydhr
        2
    txydhr  
       29 天前 via iPhone   ❤️ 1
    省流:换个支持分配 pd 的光猫/路由器
    yjzll
        3
    yjzll  
    OP
       26 天前
    删除 1.8 步骤
    网络--防火墙--自定义规则

    ip6tables -I INPUT -p ipv6-nonxt -m length --length 40 -j ACCEPT
    ip6tables -I INPUT -p udp --sport 547 --dport 546 -j ACCEPT
    ip6tables -I INPUT -p udp --sport 500 --dport 500 -j ACCEPT
    ip6tables -I INPUT -p udp --sport 4500 --dport 4500 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 1 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 2 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 3 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 4 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 128 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 129 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 130 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 131 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 132 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 133 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 134 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 135 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 136 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 141 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 142 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 143 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 148 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 149 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 151 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 152 -j ACCEPT
    ip6tables -A input_rule -p ipv6-icmp --icmpv6-type 153 -j ACCEPT

    ip6tables -I FORWARD -p ipv6-nonxt -m length --length 40 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 1 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 2 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 3 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 4 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 128 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 129 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 130 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 131 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 132 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 133 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 134 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 135 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 136 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 141 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 142 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 143 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 148 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 149 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 151 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 152 -j ACCEPT
    ip6tables -A forwarding_rule -p ipv6-icmp --icmpv6-type 153 -j ACCEPT
    yjzll
        4
    yjzll  
    OP
       23 天前
    方法 1 - 重设路由表

    注意,该方法依赖 owipcalc 包来计算子网地址:opkg install owipcalc 。
    我们可以手动在 WAN 口获得 IPv6 地址后添加一条路由表,让整个子网重定向到 LAN 口,这个操作可以通过 OpenWrt 的 hotplug 机制来进行,保存以下脚本放在 /etc/hotplug.d/iface/80-reset-route6 并重启 WAN 接口即可:

    #!/bin/sh

    wan_dev="wan6"

    [ "$HOTPLUG_TYPE" = "iface" ] || exit 0
    [ "$INTERFACE" = "$wan_dev" ] || exit 0

    RTMETRIC=127

    . /lib/functions/network.sh

    network_get_physdev lan_dev lan || exit 0

    ifup_cb() {
    local _lan_dev="$1"
    local _metric="$2"

    local wan_subnet
    network_get_subnet6 wan_subnet "$wan_dev" || return
    _wan_network=$(owipcalc "${wan_subnet}" network)

    ip -6 route replace "$_wan_network" dev "$_lan_dev" metric "$_metric"
    }

    ifdown_cb() {
    local _lan_dev="$1"
    local _metric="$2"

    ip -6 route flush dev "$_lan_dev" metric "$_metric"
    }

    case "$ACTION" in
    ifup)
    ifup_cb "$lan_dev" "$RTMETRIC"
    ;;
    ifdown)
    ifdown_cb "$lan_dev" "$RTMETRIC"
    ;;
    ifupdate)
    ifdown_cb "$lan_dev" "$RTMETRIC"
    sleep 1
    ifup_cb "$lan_dev" "$RTMETRIC"
    ;;
    *)
    ;;
    esac

    exit 0
    有效。


    第零步,安装软件包
    0.1 系统--软件包--更新列表
    过滤器输入:owipcalc
    安装
    0.2 编辑 80-reset-route6 文件,,内容见上面,拷贝到 /etc/hotplug.d/iface/80-reset-route6
    0.3 赋予执行权限 777
    chmod +X /etc/hotplug.d/iface/80-reset-route6

    第一步,先搞定 wan6 口
    1 、网络--接口--wan6--编辑
    1.1 、常规设置
    协议:DHCPv6 客户端
    设备:eth0
    开机自动运行:选择
    请求 IPv6 地址:try
    请求指定长度的 IPv6 前缀:自动

    1.2 、高级设置
    强制链路:不选
    请求 DHCP 时发送的客户端 ID:空
    使用默认网关:选择
    自动获取 DNS 服务器:选择
    DNS 权重:空
    使用网关跃点:空
    覆盖 IPv4 路由表:未指定
    覆盖 IPv6 路由表:未指定
    IPv6 源路由:选择
    委托 IPv6 前缀:选择
    IPv6 分配长度:已禁用
    IPv6 前缀过滤器:-- 请选择 --
    IPv6 后缀:::1
    IPv6 优先级:空


    1.3 、防火墙设置
    创建和分配防火墙区域:wan 和 wan6

    1.4 、DHCP 服务器--常规设置
    忽略此接口:不选

    1.5 、DHCP 服务器--IPv6 设置
    指定的主接口:选择
    RA 服务:中继模式
    DHCPv6 服务:中继模式
    NDP 代理:中继模式
    学习路由:选择


    第二步,搞定 lan 口
    2 、网络--接口--lan--编辑
    2.1 、常规设置
    协议:静态地址
    设备:br-lan
    开机自动运行:选择
    IPv4 地址:192.168.100.1
    IPv4 子网掩码:255.255.255.0
    IPv4 网关:灰色无法更改
    IPv4 广播地址:灰色无法更改
    IPv6 地址:空
    IPv6 网关:空
    IPv6 路由前缀:空

    2.2 、高级设置
    强制链路:选择
    使用默认网关:不选择
    使用自定义的 DNS 服务器:空
    DNS 搜索域名:空
    DNS 权重:空
    使用网关跃点:空
    覆盖 IPv4 路由表:未指定
    覆盖 IPv6 路由表:未指定
    委托 IPv6 前缀:选择
    IPv6 分配长度:禁用
    IPv6 前缀过滤器:-- 请选择 --
    IPv6 后缀:::1
    IPv6 优先级:空


    2.3 、防火墙设置
    创建和分配防火墙区域:lan

    2.4 、DHCP 服务器--常规设置
    忽略此接口:不选
    启动:100
    客户数:150
    租期:infinite

    2.5 、DHCP 服务器--高级设置
    动态 DHCP:选择
    强制:不选
    IPv4 子网掩码:灰色无法更改
    DHCP 选项:空

    2.6 、DHCP 服务器--IPv6 设置
    指定的主接口:不选
    RA 服务:中继模式
    DHCPv6 服务:中继模式
    NDP 代理:中继模式
    学习路由:选择
    NDP 代理从属设备:不选


    第三步,网络--接口--全局网络选项
    IPv6 ULA 前缀:空
    数据包引导:选择


    第四步,网络--DHCP/DNS--高级设置
    过滤 IPv6 AAAA 记录:不选
    过滤 IPv4 A 记录:不选


    -----------------------------------------------

    软路由重启(系统--重启)

    IPV6 联网测试
    https://testipv6.cn/
    ping -6 www.baidu.com

    第六步,其他问题
    6.1 、如果获得了 ipv6 地址,缺无法 ping 通,大概率是以下三个地方
    网络--接口--全局网络选项,IPv6 ULA 前缀:空
    网络--接口--wan6 ,IPv6 分配长度:已禁用
    网络--接口--lan ,IPv6 分配长度:已禁用
    原因是纯 relay 模式下客户端不会获取到“IPv6 ULA 前缀”下的地址/路由/邻居信息,当客户端尝试回复从路由器发出的 ULA-prefix 下地址的 neighbor solicitation 时,匹配不到这个 ULA 地址的路由只好放弃。

    6.2 、软路由 iStore ,22.03.6 版的防火墙配置,是一个通用配置,不适合国内的 IPv6 环境,icmpv6 的消息被防火墙阻挡,需要根据情况打开。待查
    6.3 、网络拓扑:电信光猫拨号-->OpenWrt X86 电脑( iStore )-->AP 。
    软件是 iStoreOS 22.03.6 2024012613 。3150 主板,两个网口,日常 CPU 负载 20%以下,8G 内存剩下 7G 以上空闲。
    6.4 、iStoreOS 页面设置在网络防火墙一节似乎没有很完美,明明页面设置了,后台文件没变化,经查,zone 域规则不能自行修改,要加在用户规则内
    6.5 、两个网关问题
    iStore 首页--终端--输入 root 和密码,查询路由器的默认 IPv6 网关
    ip -6 route | grep default 得到:
    default from 240e:38a:xxx:xxx::/64 via fe80::133:7cc9:xxx dev eth0 proto static metric 512 pref medium #外网到光猫 lan 侧
    default from 240e:38a:xxx:xxx::/64 via fe80::1 dev eth0 proto static metric 640 pref medium
    出现此情况,在本模式(中继 SLAAC )下忽略,在 IPV6 NAT 模式下需要修改若干内容
    6.5 、openwrt 需要的 ipv6 包:
    odhcp6c 2022-08-05-7d21e8d8-18 ,DHCPv6 客户端
    odhcpd-ipv6only 2023-01-02-4a673e1c-2 ,ipv6 版本
    luci-proto-ipv6 git-21.148.48881-79947af git-23.355.78888-e047387 ,从 luci Web 界面配置 IPv6
    ip6tables-mod-nat 1.8.7-7
    ip6tables-zz-legacy 1.8.7-7
    kmod-ip6tables 5.10.201-1 并非必须,提供 IPv6 防火墙
    kmod-nf-ipt6 5.10.201-1
    kmod-ipt-nat6 提供 IPv6 的 NAT 支持
    netifd OpenWrt Network Interface Configuration Daemon
    owipcalc 计算子网地址
    6.6 、文件 /etc/config/dhcp 如下
    config dhcp 'lan'
    option interface 'lan' #端口名称
    option start '100' #端口号起始--结束
    option limit '150'
    option dhcpv4 'server'
    option leasetime '12h' # infinite 租期,v4v6 均有效
    option ra 'relay'
    option ndp 'relay' #中继运行模式
    option dhcpv6 'relay'

    config dhcp 'wan'
    option interface 'wan'
    option ignore '1'

    config dhcp 'wan6'
    option interface 'wan6'
    option master '1'
    option ra 'relay'
    option ndp 'relay'
    option dhcpv6 'relay'

    ------------------------------------------------------

    6.7 、passwall 插件,DNS 设置,过滤代理域名 IPv6 ,要勾选,不对 IPV6 解析,使得 IPV6 直接连通,不经过 passwall 。

    6.8 、常用命令

    网络邻居
    ping ff02::1

    路由器
    ping ff02::2

    DHCP 服务器
    ping ff02::1:2

    查询路由器的默认 IPv6 网关
    ip -6 route | grep default
    ip -6 route show

    查看 icmp6 协议信息
    tcpdump -nn -i eth0 icmp6
    tcpdump -nn -i eth0 icmp6 -v
    tcpdump -nn -i eth0 icmp6 -vv

    查看邻居 mac 地址
    ip -6 neighbor show

    检查哪些端口和应用在运行,如过滤 19422 相关内容
    netstat -anp -p udp
    netstat -anp -p udp | grep 19422

    ipv6 DNS 服务器
    2001:4860:4860::8888
    2001:4860:4860::8844
    240e:4c:4008::1
    240e:4c:4808::1
    2001:dc7:1000::1
    240C::6666
    240C::6644
    2400:3200::1
    2402:4e00::
    2400:da00::6666

    重启网络服务
    /etc/init.d/firewall restart
    /etc/init.d/network restart
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2294 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:01 · PVG 17:01 · LAX 02:01 · JFK 05:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.