温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。
介绍过 Kerio Control,在 IPv4 环境下是蛮强大的一款集路由、交换、行为管理等为一体的防火墙系统,为什么要特别指明 IPv4 环境呢,这是因为在 IPv6 环境下还是不太完善,当然也可能是我配置的问题,欢迎指正!
相关文章
开启 IPv6 分配
在《潘多拉(PandoraBox | OpenWRT)二级路由旁路由 IPv6 PD 分发设置》中,已经成功启用了 IPv6 PD 分发,所以这里的开启 IPv6 分配是指在旁路由(本文是 Kerio Control)中实施。
Kerio Control 中,IPv6 工作模式只支持无状态。
首先在界面的可信 / 本地接口启用 IPv6,配置为自动即可:
然后启用 IPv6 路由公告就可以了:
如果只有一条 IPv6 PD 的 WAN 线路,到此就算配置完成。
多个 IPv6 配置问题
当有多条具有 IPv6 PD 的 WAN 线路,内网分配 IPv6 时,每一条线路都会为内网分配一个 IPv6,比如我有三条就给我分配了三个 IPv6:
root@222-cu:~# ifconfig |grep inet6
inet6 2408:* prefixlen 64 scopeid 0x0<global>
inet6 2409:* prefixlen 64 scopeid 0x0<global>
inet6 240e:* prefixlen 64 scopeid 0x0<global>
inet6 fe80::* prefixlen 64 scopeid 0x20<link>
inet6 ::1 prefixlen 128 scopeid 0x10<host>
如果只打算用一条而不用负载均衡,那么实际生效的是在流量规则中指定的线路,如果要用负载均衡,那么首先要在 流量规则 指定出口接口(新建规则):
PS:好在三大运营商 IPv6 的前缀是固定的,如果不是确定的规则设置估计工作量也不小~
到此,对于 Kerio Control 配置完成。
客户端配置
前面讲到,Kerio 给客户端分配了三个 IPv6,对于客户端来说,三个 IPv6 并没有区别,因此如果要负载均衡,也需要在客户端指定出口 IPv6。
Linux
以 Ubuntu 为例,利用 ip6tables
新增 NAT 规则:
root@222-cu:~# ip6tables -t nat -I POSTROUTING -o ens33 -d ::/0 -j SNAT --to-source 2408:*
参数说明:
- -o:指定出口接口
- -d:指定目标
- --to-source:指定出口 IP
然后就可以测试一下看看生效的 IPv6 了:
root@222-cu:~# curl http://ipv6.lookup.test-ipv6.com -6
{"ip":"2408:*","type":"ipv6","subtype":"","via":"","padding":"","asn":"4837","asnlist":"4837","asn_name":"CHINA169-BACKBONE CHINA UNICOM China169 Backbone","country":"CN","protocol":"HTTP/1.0"}
如果安装了 jq
(Shell 下的 Json 处理命令),还可以加上条件使结果更直观:
root@222-cu:~# curl http://ipv6.lookup.test-ipv6.com -6 -sS | jq -r '"\nIP地址:\(.ip)\n运营商:\(.asn_name)\n"'
IP地址:2408:*
运营商:CHINA169-BACKBONE CHINA UNICOM China169 Backbone
同样的,也可以查询 IPv4 地址:
root@222-cu:~# curl http://ipv4.lookup.test-ipv6.com -4 -sS | jq -r '"\nIP地址:\(.ip)\n运营商:\(.asn_name)\n"'
IP地址:*
运营商:CHINA169-BACKBONE CHINA UNICOM China169 Backbone
Windows
方法与 Linux 类似,主要思路就是利用命令行工具删除临时 IPv6 和不需要的 IPv6 地址。
首先删除临时 IPv6 地址,不删除的话分配到的 IPv6 地址翻倍,而实际上并不可用,所以建议删除:
C:\Users\Administrator> netsh interface ipv6 set privacy state=disable
然后查询网卡接口名称:
C:\Users\Administrator> netsh interface ip show interfaces
Idx Met MTU 状态 名称
--- ---------- ---------- ------------ ---------------------------
3 25 1500 connected 10.2.0.139
查询分配到的 IPv6 地址,并删除不需要的 IPv6 地址来实现指定 IPv6 地址:
C:\Users\Administrator>netsh interface ipv6 show addresses
接口 3: 10.2.0.139
地址类型 DAD 状态 有效寿命 首选寿命 地址
--------- ----------- ---------- ---------- ------------------------
公用 首选项 29d23h52m1s 6d23h52m1s 2408:*
公用 首选项 29d23h52m1s 6d23h52m1s 2409:*
公用 首选项 29d23h52m1s 6d23h52m1s 240e:*
C:\Users\Administrator> netsh interface ipv6 delete address interface="10.2.0.139" address="2409:*" store="persistent"
C:\Users\Administrator> netsh interface ipv6 delete address interface="10.2.0.139" address="240e:*" store="persistent"
操作过程中若提示参数错误,说明命令打错了,确认一下重新打即可。
同样也可以用 curl
命令来看看生效的 IPv6 地址,或者跑一下路由跟踪:
C:\Users\Administrator>tracert ipv6.lookup.test-ipv6.com
通过最多 30 个跃点跟踪
到 ipv6.lookup.test-ipv6.com [2001:470:1:18::223:250] 的路由:
1 1 ms <1 毫秒 <1 毫秒 2408:*
2 5 ms 4 ms 4 ms 2408:*
3 5 ms 5 ms 5 ms 2408:*
4 * 10 ms 9 ms 2408:*
5 41 ms 46 ms 40 ms 2408:*
6 * * * 请求超时。
7 * * * 请求超时。
8 193 ms * * 2408:*
9 * * * 请求超时。
10 * * * 请求超时。
11 178 ms 178 ms 178 ms 2001:470:0:30::1
12 171 ms 171 ms 171 ms nagios4.gigo.com [2001:470:1:18::223:250]
跟踪完成。
可以看到前面几跳就是我们指定的运营商。
这里需要注意的是,实际生效的 IPv6 是我们指定的,但是在系统设置里,仍然可以看到被删除的其他 IPv6 地址,不影响使用。
其它系统
后续有空再来补充。
这里存在一个问题点,也不能叫问题点,就是当 IPv6 地址重新获取之后,会变,然后需要重新配置出口。
其实还有一个思路,就是类似 IPv4 内网 IP 方案,IPv6 应该也是可以的,只是不知道对于 Kerio Control 要怎么配置~
附录:ip6tables 简要用法
- 查看生效的 NAT 规则:
root@222-cu:~# ip6tables -t nat -vnL POSTROUTING --line-number
注:IPv4 命令则是 iptables
。
- 添加 NAT 规则:
root@222-cu:~# ip6tables -t nat -I POSTROUTING -o ens33 -d ::/0 -j SNAT --to-source 2408:*
- 查看生效的 filter 表:
root@222-cu:~# ip6tables -L -n --line-number
- 添加 filter 规则:
root@222-cu:~# ip6tables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
注:其实在新版操作系统中,比如 Ubuntu 使用的是 ufw
,CentOS 使用的是 firewall
,iptables
作为补充使用。
- 删除 iptables 规则
root@222-cu:~# ip6tables -D INPUT 3 //删除 filter 表 INPUT 的第 3 条规则
root@222-cu:~# ip6tables -t nat -D POSTROUTING 1 //删除 nat 表中 postrouting 的第一条规则
root@222-cu:~# ip6tables -F INPUT //清空 filter 表 INPUT 所有规则
root@222-cu:~# ip6tables -t nat -F POSTROUTING //清空 nat 表 POSTROUTING 所有规则
root@222-cu:~# ip6tables -F //清空所有规则
- 保存规则
root@222-cu:~# ip6tables-save