温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。
需求
两台运行 Kerio Control 9.3.6 的主机 A 和 B,IPv6 互通卡在两点:
- Kerio VPN 本身不原生支持 IPv6 隧道(它只做 IPv4 的点对点 VPN,IPv6 要靠 VPN 里再封装 IPv6)。
- 系统里没有
ip6tables、tcpdump等工具(Kerio 是一个定制 Linux),所以调试和手动加隧道会受限。
结合补充的约束(只能改 A、B,不额外增加设备、不修改内网设备),一个可落地的双机方案如下:
方案
在 A、B 间手动加一条 IPv6-over-IPv4 隧道
原理:虽然 Kerio VPN 只传 IPv4,但我们可以用这个 IPv4 通道作为 IPv6 隧道的“底座”,手动在 A 和 B 上用 ip tunnel 建立一个 sit 隧道(协议号 41,比 GRE(协议号 47)更容易在受限环境中“直通”,很多设备/内核默认就支持),让 IPv6 包在 IPv4 里传输。
1. 确认 Kerio VPN IPv4
- A VPN 内网 IP:
10.10.30.2 - B VPN 内网 IP:
10.10.30.1
这对 IP 是 IPv6 隧道的端点,可通过ipconfig等命令确认。
2. 确认 Kerio 内网 IPv6
- A 内网 IPv6:
fd00:31::/64 - B 内网 IPv6:
fd00:20::/64
这对 IP 是 A、B 各自的内网 IPv6 范围。
3. 在 A 上添加隧道
登录 SSH 后(默认账号为 root 而非 admin,密码一致),在 Shell 中执行命令:
# 建立 IPv6-in-IPv4 隧道(SIT,协议 41)
ip tunnel add v6tun mode sit local 10.10.30.2 remote 10.10.30.1 ttl 255
# mtu 1436 是保守值(1500 - IPv4头20 - SIT头44 ≈ 1436),能减少 PMTU 黑洞导致的丢包
ip link set v6tun mtu 1436 upv6tun 是我们定义的接口名称。这时候进入 Kerio Control 网页管理(Kerio Control WebAdmin) - 界面(interfaces),可以看到在 其他接口 多了一个 v6tun,将其移动到 可信/本地接口,这样流量就不会受到限制。
回到 Shell 继续:
# 给隧道分配 IPv6(仅用于隧道对端互通)
ip addr add fd00:abcd::2/64 dev v6tun
# 把 B 的业务网段走隧道(用 dev 指定,避免邻居解析问题)
ip -6 route replace fd00:20::/64 dev v6tun4. 在 B 上添加隧道
类似 A 作如下配置(注意移动接口):
ip tunnel add v6tun mode sit local 10.10.30.1 remote 10.10.30.2 ttl 255
ip link set v6tun mtu 1436 upip addr add fd00:abcd::1/64 dev v6tun
ip -6 route replace fd00:31::/64 dev v6tun5. 添加 IPv6 路由
A 上:
ip -6 route add fd00:20::/64 dev v6tunB 上:
ip -6 route add fd00:31::/64 dev v6tun6. 测试
ping6 fd00:20::1
ping6 fd00:31::2这时候应该就能看到 IPv6 包走 VPN 内的隧道了。
关键点
- 这不需要额外设备,也不改子网设备,全部在 A、B 上做。
- Kerio 自带系统不保存这些
ip tunnel设置,重启失效。 - 如果 Kerio 内核禁用了
sit,就要先确认modprobe sit能用,否则得换用ip6-in-ip4的gre。
相关文章:
1、《Kerio Control 防火墙启用 IPv6 方法及相关问题》