MENU

设置openwrt软路由,通过ipv6外网访问家中电脑nas等设备系列教程

• March 12, 2021 • Read: 21654 • 记录

教程开始之前,先思考两个问题:

  • 没有公网怎么办?

解答:目前移动、联通、电信这三家运营商,以云南地区为例,三家都已经实现 百分之百 IPV6 公网,电信有 ipv4 公网,联通部分有 ipv4 公网,移动没有 ipv4 公网。

如何查看自己有没有公网请自行百度。

  • 确定有公网,但是只能内网访问。

解答:把光猫改成桥接模式,进行路由器拨号,修改方式记住自己光猫相关参数,按照下图进行修改(记得替换相关值)。

image.png

教程正式开始

路由器拨号上网

  • 准备一个已经刷好 openwrt 的软路由,以 K3 为例,按照下图方式连接光猫的 LAN 与路由器的 WAN 即可,如果有多级可继续以相同方式进行串联。

image.png

  • 启动路由器,输入 192.168.2.1(一级路由)登陆管理界面,依次网络——接口——WAN——修改(如图所示)

image.png

  • 协议选择 PPPOE ,之后填入宽带账号密码,其他默认不用修改即可完成设置上网。

image.png

路由器开启 IPV6

如果有 IPV4 公网那直接申请域名做动态域名解析和端口转发即可。

openwort 设置 ipv6 比较繁琐 需要先按照下图配置方式完成设置。

  • 在接口处根据需求选择已有接口或者新建接口,删除 IPV6 前缀 保存。

image.pngimage.png

  • 选择需要设置的 IPV6 接口——高级设置——地址选择自动。

image.png

  • 网络——DHCP/DNS——高级设置静止解析去掉——保存应用。

image.png

  • 网络 ——防火墙如图 2345 设置保存应用。

image.png

  • 最后一步网络——负载均衡——策略——改成默认保存即可。

image.png

image.png

  • 此时路由器下的所有设备已经获取获取到 IPV6 真实地址,通过电脑指令 ping 已经能够正常联通。

image.png

外网设置 IPV6

这是最后一步也是最难设置的一步,开始之前需要详细了解 IPV6 的构成和原理。

  • 使用无状态的 eui64 地址, 它的后缀是不变的。
  • 内网设备的 ipv6 地址,前半部分是 ipv6 前缀,是运营商分配的。重拨后会变化。后半部分,如果不是 eui64,就是随机生成的,也会变。如果是 eui64,则与 mac 地址相关,不会变化,除非换网卡。
  • 如果整个 ipv6 都会变,防火墙规则就没办法写了。除非全网放行(内网目标地址掩码填 ::/0any)。或关闭防火墙。(本次教程是 eui64)
  • 所以配置内网设备的 ipv6 地址为 eui64,防火墙的内网目标地址掩码填 ::xxxx:xxxx:xxxx:xxxx/::FFFF:FFFF:FFFF:FFFF, 这样就比较安全了。
    (ipv6 地址掩码比 v4 灵活,v6 可以掩前面,也可以掩后面。v4 就只能掩前面)
  • 还有一个 ipv6 地址可以使用(有状态地址),即 dhcpdv6 分配的地址。每台客户机都会自己提供一个 DUID,且不会变,分配的 ipv6 后缀也就不变,相对固定。
    (结论:不能指定。) 在 openwrt 中 Network->DHCP and DNS->Static Leases(静态地址) 中,(openwrt 不支持直接指定新的 ipv6 后缀/或指定 DUID。除非客户机自己没有提供 DUID)

    添加一条记录,指定 MAC-Address,指定 IPv6-Suffix(格式为四个 hex 数,如 AABB),这个办法不能指定 ipv6 后缀。

    添加一条记录,指定 MAC-Address,指定 DUID,重启客户机。看看拿到什么 IP。这个办法也不能指定 DUID,不能得到新 ipv6 后缀。

    修改客户机的 DUID ,看 [Linux ipv6 无状态 设置为 eui64] 中 “有状态 ipv6”部分。指定新的 DUID,就有一个新的固定的 IPv6 后缀。

  • 确定客户机的 ipv6 后缀之后。比如 2408:ebcd:ebcd:ebcd::789, 那么防火墙规则中的目标地址写 ::789/::ffff:ffff:ffff:ffff
比如: 你的 ipv6 地址为,2408:ebcd:ebcd:ebcd:5678:5678:5678:5678
则目标地址掩码填, 0:0:0:0:5678:5678:5678:5678/0:0:0:0:FFFF:FFFF:FFFF:FFFF
连续的 0 简写为两个冒号,即,::5678:5678:5678:5678/::FFFF:FFFF:FFFF:FFFF

在接口——防火墙——流量规则——新增 forward 规则

如图所示填写

  • 协议族选择 ipv6 only
  • 协议按需 TCP, UDP, TCP/UDP ...
  • Source zone 选 WAN(包含 wan6)
  • Destination Zone(目标区域),选择 Any zone(forward) 或者 lan
  • 目标端口,按需填写。多个端口用空格隔开。

image.png

  • 这个图片中的设置,本质上就是添加了多条 forward 规则(tcp/udp/一个端口,各一条)(openwrt-18.06)。

    • 如果选 Any zone(forward)
      ip6tables -A FORWARD -i pppoe-wan -d ::5678:5678:5678/::ffff:ffff:ffff:ffff -p tcp -m tcp --dport 443 -j ACCEPT
      ip6tables -A FORWARD -i pppoe-wan -d ::5678:5678:5678/::ffff:ffff:ffff:ffff -p udp -m udp --dport 443 -j ACCEPT
    • 如果选 lan
      ip6tables -A FORWARD -i pppoe-wan -o br-lan -d ::5678:5678:5678/::ffff:ffff:ffff:ffff -p tcp -m tcp --dport 443 -j ACCEPT
    • Device (input) 不是用来开放内网机器访问的。是用来开放路由器本身的端口访问, 这时候 Destination address(目标地址)要留空,或写路由器自己的 IP。
      ip6tables -A INPUT -i pppoe-wan -p tcp -m tcp --dport 443 -j ACCEPT
  • 另外,现在的运营商已经封禁 80,443 两个端口(ipv4 和 ipv6)。所以这两个端口开放了也用不了。其他端口可以用。

防火墙中的默认规则 drop/reject

Network -> Firewall -> General Settings 中:* General Settings 的 Forward 默认规则改为 drop, 影响从外网访问内网 lan,不开放的 ipv6 地址和端口。
修改的是 iptables/ip6tables 的 filter->FORWARD 的最后一条
-A FORWARD -j DROP

  • Zones 的 WAN => [--] 的 Input 默认规则改为 drop,影响从外网访问路由器本身的 wan(ipv4/6),lan(ipv6)地址,不开放的端口。不影响端口映射。
    修改的是 iptables/ip6tables 的 filter->INPUT 的最后一条
    -A INPUT -i pppoe-wan -j DROP,
    -A INPUT -i vwan1 -j DROP
  • Zones 的 WAN => [--] 的 Forward 默认规则改为 drop,影响从外网访问非 lan(包括 wan,未设置为 lan 的其他接口),不开放的地址和端口。
    修改的是 iptables/ip6tables 的 filter->FORWARD 的倒数第二条
    -A FORWARD -i pppoe-wan -j zone_wan_dest_DROP,
    -A FORWARD -i vwan1 -j zone_wan_dest_DROP,
    -A zone_wan_dest_DROP -o pppoe-wan -j DROP,
    -A zone_wan_dest_DROP -o vwan1 -j DROP

具体参考图片

image.png

点击保存应用。

现在设备已经整个暴露在互联网状态下,通过设置域名解析即可通过网址访问访问此设置。

ipv6 已经是公网地址,无需 nat 转换/端口映射,只需转发即可。

教程到此结束,因为 IPV6 和 IPV4 一样,地址每天都会重置,且不一样,为了省去手动解析的不必要麻烦,以路由器下的 NAS 威联通为例,通过阿里云的 DDNS 自动解析设备地址到域名方便快捷,教程请点击这里 → 《威联通设置阿里云动态解析进行外网 IPV6 访问家中 NAS》

Archives Tip
QR Code for this page
Tipping QR Code
Leave a Comment

12 Comments
  1. 老王 老王

    好像还是不行哦

    1. @老王推倒从来屡试不爽

  2. 小二哥 小二哥

    不行@(黑线)

  3. xhqpp xhqpp

    能不能把ipv6的80端口映射成非80端口?80被运营商封了

    1. VK VK

      @xhqppSocat Port Forword

  4. VK VK

    一直用的老思路主路由ipv6 socat forword 到 Nas ipv4。
    看了自己试了下,还是直接透到公网更好, ipv6真香。

  5. 作者你好,我的OpenWRT 21.02.2的防火墙里,可以直接在advanced->Source MAC address这里指定MAC地址,这样就不用操作IPv6地址了,你要不再看看?

    1. @没有字的回音那也可以,只要达到穿透目的就可以了

    2. @和强君我发现这个规则并不可以,因为不是destination MAC address,也不知道当初怎么缺心眼就以为可以了(捂脸

    3. @没有字的回音最好直接动态公网IP,就不用瞎折腾了

  6. kiddytop kiddytop

    博主:
    IPV6如果只开放特定端口到设备,意思是有两步对吧,比如开放5000端口:
    1、开放5000端口到路由器,就是INPUT项;
    2、添加转发规则,5000端口由WAN转发到设备,就是forward项

    1. @kiddytop已脱坑