delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

21 Dec 2010

用 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 进行必要的配置。