用 OpenVPN 提供 IPv6 服务
有时,会有需要接入远程的 IPv6 网络。例如,办公或网吧等环境可能不提供 IPv6 接入的条件,或者需要接入更高安全级别的网络等等。
使用 OpenVPN 提供 IPv6 服务需要的条件包括:
- 使用支持 IPv6 的操作系统,如 FreeBSD;
- 提供服务的机器以某种方式接入 IPv6 网络,并拥有一定尺寸的地址块;接入方式可以是 native 的,也可以是通过 tunnel 获得;
- 提供服务的机器加载了以太网隧道协议模块(if_tap);
- 提供服务的机器启用了 IPv6 路由功能(/etc/rc.conf中配置了ipv6_gateway_enable=“YES”);
- 提供服务的机器启用了某种 IPv6 自动配置机制,例如启动了 rtadv;
- 接入的机器支持IPv6。
一些关键的配置
在 tap0 上配置一个固定的 IPv6 地址。例如,你的 IPv6前缀::1/64。
在 /etc/rtadvd.conf 中配置:
tap0:\
:addr="你的IPv6前缀::":prefixlen#64:
此处64为用于VPN的前缀长度。
OpenVPN配置为使用tap设备。
OpenVPN需要有一个 up 脚本,类似这样:
#!/bin/sh
/sbin/ifconfig tap0 内网IPv4地址/掩码
/sbin/ifconfig tap0 inet6 IPv6地址 prefixlen 64
这个配置主要是为了避免在重启OpenVPN时丢掉网卡的IPv6配置。
客户端的连接后脚本大致如此:
#!/bin/sh
/sbin/ifconfig tap0 inet6 accept_rtadv auto_linklocal
/usr/sbin/rtsold tap0
安全考虑
需要适当配置防火墙以防止来自IPv6的攻击。许多系统的防火墙并没有针对 IPv6 进行必要的配置。