教程开始之前,先思考两个问题:
- 没有公网怎么办?
解答:目前移动、联通、电信这三家运营商,以云南地区为例,三家都已经实现 百分之百 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 转换 / 端口映射,只需转发即可。