教程开始之前,先思考两个问题:
- 没有公网怎么办?
解答:目前移动、联通、电信这三家运营商,以云南地区为例,三家都已经实现 百分之百 IPV6 公网,电信有 ipv4 公网,联通部分有 ipv4 公网,移动没有 ipv4 公网。
如何查看自己有没有公网请自行百度。
- 确定有公网,但是只能内网访问。
解答:把光猫改成桥接模式,进行路由器拨号,修改方式记住自己光猫相关参数,按照下图进行修改(记得替换相关值)。
教程正式开始
路由器拨号上网
- 准备一个已经刷好 openwrt 的软路由,以 K3 为例,按照下图方式连接光猫的 LAN 与路由器的 WAN 即可,如果有多级可继续以相同方式进行串联。
- 启动路由器,输入 192.168.2.1(一级路由)登陆管理界面,依次网络——接口——WAN——修改(如图所示)
- 协议选择 PPPOE ,之后填入宽带账号密码,其他默认不用修改即可完成设置上网。
路由器开启 IPV6
如果有 IPV4 公网那直接申请域名做动态域名解析和端口转发即可。
openwort 设置 ipv6 比较繁琐 需要先按照下图配置方式完成设置。
- 在接口处根据需求选择已有接口或者新建接口,删除 IPV6 前缀 保存。
- 选择需要设置的 IPV6 接口——高级设置——地址选择自动。
- 网络——DHCP/DNS——高级设置静止解析去掉——保存应用。
- 网络 ——防火墙如图 2345 设置保存应用。
- 最后一步网络——负载均衡——策略——改成默认保存即可。
- 打开网站 http://www.test-ipv6.com/如图所示显示说明已经正确获取到公网 IPV6。
- 此时路由器下的所有设备已经获取获取到 IPV6 真实地址,通过电脑指令 ping 已经能够正常联通。
外网设置 IPV6
这是最后一步也是最难设置的一步,开始之前需要详细了解 IPV6 的构成和原理。
- 使用无状态的 eui64 地址, 它的后缀是不变的。
- 内网设备的 ipv6 地址,前半部分是 ipv6 前缀,是运营商分配的。重拨后会变化。后半部分,如果不是 eui64,就是随机生成的,也会变。如果是 eui64,则与 mac 地址相关,不会变化,除非换网卡。
- 如果整个 ipv6 都会变,防火墙规则就没办法写了。除非全网放行(内网目标地址掩码填
::/0
或any
)。或关闭防火墙。(本次教程是 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
- 目标端口,按需填写。多个端口用空格隔开。
这个图片中的设置,本质上就是添加了多条 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
具体参考图片
点击保存应用。
现在设备已经整个暴露在互联网状态下,通过设置域名解析即可通过网址访问访问此设置。
ipv6 已经是公网地址,无需 nat 转换/端口映射,只需转发即可。
教程到此结束,因为 IPV6 和 IPV4 一样,地址每天都会重置,且不一样,为了省去手动解析的不必要麻烦,以路由器下的 NAS 威联通为例,通过阿里云的 DDNS 自动解析设备地址到域名方便快捷,教程请点击这里 → 《威联通设置阿里云动态解析进行外网 IPV6 访问家中 NAS》
好像还是不行哦
推倒从来屡试不爽
不行@(黑线)
能不能把ipv6的80端口映射成非80端口?80被运营商封了
Socat Port Forword
一直用的老思路主路由ipv6 socat forword 到 Nas ipv4。
看了自己试了下,还是直接透到公网更好, ipv6真香。
作者你好,我的OpenWRT 21.02.2的防火墙里,可以直接在advanced->Source MAC address这里指定MAC地址,这样就不用操作IPv6地址了,你要不再看看?
那也可以,只要达到穿透目的就可以了
我发现这个规则并不可以,因为不是destination MAC address,也不知道当初怎么缺心眼就以为可以了(捂脸
最好直接动态公网IP,就不用瞎折腾了
博主:
IPV6如果只开放特定端口到设备,意思是有两步对吧,比如开放5000端口:
1、开放5000端口到路由器,就是INPUT项;
2、添加转发规则,5000端口由WAN转发到设备,就是forward项
已脱坑