ryanfen 发表于 2023-2-22 16:40

爱快主路由下 IPV6 防火墙的最优解(可能)

本帖最后由 ryanfen 于 2024-3-13 09:36 编辑

2023.5.4 更新:
2023-03-21,爱快官方iKuai8_3.7.0以上版本已更新ipv6 ACL支持,使用官方ACL成为最优解。


-----------
前言
在 ipv6 网络环境下,内网设备也获取到公网的 ipv6 地址,可直接被外部网络访问,形同裸奔,所以使用 ipv6 防火墙是很有必要的。

爱快的流控、人性化的界面与配置,是我使用爱快作为主路由的主要原因,但是不支持 ipv6 防火墙,内网设备在 ipv6 下裸奔,也是爱快受人诟病的一大缺陷。在家庭网络中,如何在爱快作为主路由的环境下,增加 ipv6 防火墙的问题,我想了很久,搜索了大量的资料,中间考虑过很多方案。其实要做到增加防火墙的方法很多,比如使用 openwrt 作为主路由自带防火墙、opensense,或是使用内网主机自带的防火墙。考虑过使用 openwrt 作为主路由,但是 openwrt 在折腾中诡异的问题实在太多,而且流控、界面展示、客户端控制、人性化的操作等多方面都不符合我的个人审美与需求。m0n0wall、opnsense 之类的防火墙固件的话因为想到为了一个防火墙功能而额外消耗比较多的硬件自营且接入上去对网络结构有比较大的改动所以放弃了。最终,想到了一个相对优雅且对现有网络结构影响较小的方案。

本教程不太适合小白,小白也不太能理解 ipv6 防火墙的重要性。
防杠声明:本文仅基于本人的实际需求与狭隘的知识面编写,欢迎大佬提出建议与交流,但请勿质疑楼主需求与嘲讽,本文旨在帮助与博主有同样问题的朋友。ps:本人网络工程专业,网络安全行业从业5年,持有H3CNE及CISP-PTS证书。

方案
我们知道,openwrt 自带了 ipv6 的防火墙,那么使用爱快作为 ipv4 网关,openwrt 作为 ipv6 网关,就可以实现需求。
下面来揭晓我的方案:

    在爱快创建一个 vlan 接口,并在该接口启用 ipv6,同时停用爱快 lan 口的 ipv6 服务
    通过 vlan,复用内网 LAN 线路作为 openwrt 与爱快间的 ipv6 桥梁
    openwrt 充当内网 lan ipv6 网关
    openwrt 配置 ipv6 防火墙
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-12-38-56.png

最终流量走向示例如下:
ipv4: client1(192.168.5.101) -> ikuai lan(192.168.5.1) -> ikuai wan(Internet)
ipv6: client1(2400:xxxx:a1::101) -> openwrt lan(2400:xxxx:a1::1) -> openwrt wan(dhcpv6 client) -> ikuai lan(dhcpv6 server) -> ikuan wan(Internet ipv6)

可以看到,ipv6 流量先经过 openwrt 再经过 ipv6,然后我们在 openwrt 上面配置 ipv6 防火墙就可以了。

爱快配置
首先是爱快主路由的配置,lan1 是内网网口:
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-13-19-46.png
在 vlan 设置中,添加一个 vlan,这里使用 vlan 号 101,线路选择 lan1,不要设置 ipv4 地址,因为是纯 ipv6 网络:
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-13-23-11.png
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-13-24-08.png
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-13-25-30.png

然后配置 vlan101 口的 ipv6 服务。需要确保在 ipv6 设置中外网接口能获取到公网 v6 地址,且获取到 ipv6 前缀,正常桥接光猫并正确拨号后会自动获取到:
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-13-35-41.png
前缀这里需要小于 64,否则在 openwrt 就无法下发 ipv6 地址:
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-13-36-42.png

接下来配置 openwrt,为了方便,我的 openwrt 配置了 2 个网口,都是绑定了内网 lan 口:
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-13-26-51.png
openwrt 作为 ipv4 旁路由,相信大家都会,不细说了,配置好之后可开始配置 v6,不配置也行。
然后修改 wan6 配置:
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-13-28-45.png
把协议切换为 dhcpv6 客户端,如何没有的,请自行查询安装 ipv6(主要是 ipv6-helper)方法或更换固件:
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-13-30-34.png
不要勾选” 使用内置的 IPv6 管理”:
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-13-32-53.png
配置为桥接接口,并连接到 vlan101:
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-13-33-27.png
防火墙区域设置为 wan:
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-13-34-02.png
保存后会自动重启接口,此时 wan6 应该能获取到 ipv6 地址及 pd 前缀,正常的话 lan 口也应该获取到 ipv6 地址:
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-16-01-18.png
然后配置 lan 口的 dhcpv6 服务,内网设备即可获取到 ipv6 地址:
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-23-20-51-01.png

然而博主的 lan 口经过多方配置,也无法获取到 ipv6 地址,内网设备也无法获取到公网的 ipv6 地址,网上很多教程是改成中继模式的并不符合本人的需求。

最终,通过把 wan6 获取到的 pd 前缀,写入 lan 口的 ipv6 地址,才解决了问题,内网设备、lan 口都有公网的 ipv6 地址,也能正常访问 ipv6 网络。
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-16-09-54.png
但这样有个问题,运营商给的 ipv6 pd 前缀是会变的,会导致后面内网设备无法上网,所以需要想个办法把最新的 pd 前缀应用到 lan 接口去,这里使用 crontab:
* * * * * newpd=`ifstatus wan6|jq '.["ipv6-prefix"]' | jq -r   '"\(.address)\/\(.mask)"'`;lan_v6=`ifstatus lan|jq '.["ipv6-address"]' | jq -r   '"\(.address)\/\(.mask)"'`;if [ "$newpd" != "$lan_v6" ];then uci set network.lan.ip6addr=$newpd;uci commit network;service network restart;fi
把上面的命令直接写入计划任务即可,如果 lan 口本身就能获取到 ipv6 地址的则不需要这个步骤。
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-16-15-54.png

openwrt 防火墙配置
如果需要开放某些 ipv6 端口允许公网访问,可配置防火墙策略。
以 bt 下载(16881 端口)为例:
打开防火墙 -> 通信规则 -> 新建转发规则,输入规则名,点击添加并编辑:
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-16-19-51.png
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-16-21-39.png
然后保存并应用即可:
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-22-16-23-16.png

防火墙效果如下,关闭策略时可访问内网设备的3389端口,启用策略后3389端口禁止访问:
https://r0yanx.com/2023/02/22/%E7%88%B1%E5%BF%AB%E4%B8%BB%E8%B7%AF%E7%94%B1%E4%B8%8BIPV6%E9%98%B2%E7%81%AB%E5%A2%99%E7%9A%84%E6%9C%80%E4%BC%98%E8%A7%A3/2023-02-23-20-56-01.png

最后
ipv6 防火墙实现的方法很多种,本文只是介绍一种相对简单的方式,希望能帮助到遇到相同难题的人。










768952693 发表于 2023-2-23 01:53

这个帖子,居然没人支持下,这特么是内圈王,折腾界的精英啊,先顶再说。

ryanfen 发表于 2023-2-23 12:28

768952693 发表于 2023-2-23 01:53
这个帖子,居然没人支持下,这特么是内圈王,折腾界的精英啊,先顶再说。

感谢支持:victory:

housecall 发表于 2023-2-23 13:42

技术贴,支持一下,感谢分享

768952693 发表于 2023-2-23 15:01

ryanfen 发表于 2023-2-23 12:28
感谢支持

虽然有了防火墙,但是这么配置,有2个疑问。

疑问1
既然openwrt使用了2lan桥接的方式,那么为啥还要用vlan,不如直开爱快添加个桥启用2lan对2lan的方式呢?还是说这么配置有啥优势。

疑问2
ipv6的DNS好像只能指定到外网了,这么配置op是没有内外IPV6地址,那么对于IPV6去广告效果是不是就大打折扣了。

ryanfen 发表于 2023-2-23 16:46

768952693 发表于 2023-2-23 15:01
虽然有了防火墙,但是这么配置,有2个疑问。

疑问1


1. vlan是用于复用lan口,你增加一个lan2固然是可以的,但是增加了网卡是不是得修改至少2个虚拟机配置,如果爱快和openwrt不在一个虚拟平台上而是经过交换机的话,是不是还得占用交换机的端口。所以,使用vlan无疑是更加“优雅”!
2. openwrt自身有ipv6地址,自身可访问v6网络,不存在这个问题

ryanfen 发表于 2023-2-23 16:55

ryanfen 发表于 2023-2-23 16:46
1. vlan是用于复用lan口,你增加一个lan2固然是可以的,但是增加了网卡是不是得修改至少2个虚拟机配置, ...

关于去广告的问题,最简单的方法是使用ipv4的dns,同样可解析v6地址的域名,是不会影响v6上网的。不过我并没用到这东西,了解不深

knelt3811 发表于 2023-2-23 18:57

公网ipv6 nat 公网ipv6 了解一下:),一般运营商下发/60的ipv6,你这样ikuai下发/62,op下发/64,很多设备并不支持这样的网络,会在op处进行公网nat,内网所有设备访问外网时用的都是nat后的op的公网ipv6。

ryanfen 发表于 2023-2-23 20:17

本帖最后由 ryanfen 于 2023-2-23 20:19 编辑

zfl-sfes 发表于 2023-2-23 18:57
公网ipv6 nat 公网ipv6 了解一下,一般运营商下发/60的ipv6,你这样ikuai下发/62,op下发/64,很多设备并 ...
首先,nat有性能损耗,其次,要nat你用v6干嘛?多设备不支持?没有这样的问题,起码我所有设备都支持的,包括lxc里面的容器、群晖。nat v6,完全是无奈之下才会选择的下下策。

768952693 发表于 2023-2-23 22:31

ryanfen 发表于 2023-2-23 16:46
1. vlan是用于复用lan口,你增加一个lan2固然是可以的,但是增加了网卡是不是得修改至少2个虚拟机配置, ...
我今天测试了下,直接爱快添加一个vlan,op添加一个lan,如:eth0是lan,然后添加个wan6 复用掉 eth0.101 vlan搞定,可以做到op一个lan口。

关于V6 DNS解析,由于没有内网iPV6地址,导致设备会默认使用op公网V6地址作为DNS地址,如果单独搭建了DNS以及单独的去广告,基本上没用。除非你用OP作为去广告和DNS等等全部功能哈。

ryanfen 发表于 2023-2-24 00:18

768952693 发表于 2023-2-23 22:31
我今天测试了下,直接爱快添加一个vlan,op添加一个lan,如:eth0是lan,然后添加个wan6 复用掉 eth0.101 ...

openwrt只用一个lan口当然是没有问题的,我是有其它考量才用2个lan。

不懂你的去广告方案如何,我使用openwrt上跑adguardhome + smartdns 下是没问题的。如果你单独搭建的dns,可以通过openwrt dns服务设置上游dns解决。

ryanfen 发表于 2023-2-24 00:23

条条大路通罗马,不必完全照抄,原理理解了,做起来自然水到渠成。

hywell 发表于 2023-3-10 22:56

本帖最后由 hywell 于 2023-3-11 00:37 编辑

wan6直接拿不到ipv6pd 这是啥原因

ryanfen 发表于 2023-3-16 12:53

hywell 发表于 2023-3-10 22:56
wan6直接拿不到ipv6pd 这是啥原因

可能跟固件有关,检查有无ipv6helper包

whysy 发表于 2023-3-16 13:12

markmark
页: [1] 2
查看完整版本: 爱快主路由下 IPV6 防火墙的最优解(可能)