当前位置: > Linux服务器 > VPN >

轻量级VPN解决方案--SigmaVPN

时间:2014-12-27 22:33来源:linux.it.net.cn 作者:IT

       SigmaVPN是一个轻量级的VPN解决方案,旨在提供UNIX系统下的,配置简单的,安全的VPN隧道。其官网http://code.google.com/p/sigmavpn/,

本文是按上面的文档操作后做的些许整理。

 

1.         SigmaVPN是模块化的。很容易创建新的接口和加密/编码方案。

2.         SigmaVPN是很小巧的。只有几百行的纯C代码。

3.         SigmaVPN易于配置,允许在一个配置文件中添加多个隧道

 

1.   引言

    SigmaVPN能够支持多路并发隧道并提供灵活的终端/协议设置方式。通常情况下配置项存储在一个名为sigmavpn.conf的文件里,配置文件是INI格式的。

1.1. Protocols

Protocols指定了分组收发之前的编/解码方式或加/解密方式。目前支持几种不同的protocols:

  • nacltai:基于curve25519xsalsa20poly1305的强健的加密方式,由NaCl 库提供加密接口
  • nacl0: 基于curve25519xsalsa20poly1305的较弱加密方式,由NaCl 库提供加密接口
  • raw: 不加密,原始数据包

1.2.        Interfaces

Interfaces 指定Sigma可执行文件的输入和输出接口。目前支持选项: 

  • udp: UDP 协议 
  • tuntap: TUN/TAP驱动接口,用于建立虚拟网卡

1.3.        本地和对端Interfaces

通常你需要两个interface:一个是本地的,一个是对端的。本地的interface是你的隧道入口,而一般对端interface就是隧道本身。因此,本地端通常是明文的,而对端是加密后的。

Sigma处理两个interface间的数据包传输和加密解密。

you <->local<-> protocol <-> remote <->......<-> remote <-> protocol <->local<-> peer

 

1.4.        Protocol和Interfaces

通常,一个配置里有两个interface(一个本地的和一个对端的),还有一个protocol。让我们看看一个典型的加密VPN设置:

  • local tuntap interface 
  • nacltai protocol 
  • remote udp interface 

这就配置了一个隧道,结果:

  • 源自本地TUN/TAP 设备的数据包将会用nacltai加密,然后通过UDP发送出去P 
  • 通过UDP接收的数据包,将用nacltai解密,然后发送到你的 TUN/TAP设备 

2. 编译安装

编译SigmaVPN,需要下载源码,然后执行源码包里提供的编译安装脚本

编译脚本用到了下面这些工具:

  • curl 或 wget 
  • bzip2 
  • gcc, binutils and friends 
  • bash (编译脚本是bash语法写的,也可以自己改成其它shell) 

2.1.        获取源码

稳定源码包一般经过测试后发布的,推荐使用。源码包发布在google code。 

#wget http://sigmavpn.googlecode.com/files/sigmavpn-0.2.tar.gz 
#tar zxf sigmavpn-0.2.tar.gz 
#cd sigmavpn-0.2

    开发者可以从GIT仓库获取最新的源码

#git clone https://code.google.com/p/sigmavpn/ 
#cd sigmavpn

 

2.2.        编译

2.2.1.    加密方案

如果需要NACL加密接口,执行编译脚本时,带上--with-nacl参数即可。编译NACL将提供nacl0和nacltai加密方式,用于提高隧道的安全性。编译NACL比较耗时。NaCl库编译后,还提供了一个naclkeypair可执行文件,它可以生成随机密钥,以便建立加密隧道。

#sh build.sh --with-nacl

2.2.2.       明文方案

不带--with-nacl参数编译,那将不会编译NACL相关的库,也不能使用加密方案。

#sh build.sh

 

2.3.        安装

执行下面命令,会编译将sigmavpn相关模块安装到系统目录中

#sudo sh install.sh

3. 配置项说明

Sigma配置文件是相当简单的INI格式。每一节表示一个会话,然后用一系列的键值对来描述相关的配置选项。

3.1.        常规选项

注意: SigmaVPN对配置文件(sigmavpn.conf)里的配置参数的顺序是敏感的。比如说:proto应该在其它proto_选项之前定义;local应该在其它local_选项之前定义;peer应该在其它peer_选项之前定义。

选项

可选值 

描述

proto 

raw, nacl0, nacltai 

设置加密/解密协议(Android 平台的SigmaVPN ,nacltai等价于TAI64)

local 

tuntap, udp 

设置本地使用的接口(通常是 tuntap). 

peer 

tuntap, udp 

设置对端所用的接口(通常是 udp). 

3.2.        nacl0/nacltai-特定选项

选项

可选值 

描述

proto_privatekey 

64-bit hex 

您的私钥 (可以用 naclkeypair 工具生成;把私钥配置在这里,并把公钥发布给您的伙伴). 

proto_publickey 

64-bit hex 

公钥(您的同伴生成并发布的公钥,配置在这里).

3.3.        udp-特定选项

选项

可选值 

描述

peer_remoteaddr 

IPv4/IPv6 地址 

对端的通信IP地址 (对应对端的peer_localaddr 配置)

peer_remoteport 

1到65535

对端的UDP端口(对应对端的peer_localport配置项). 

peer_remotefloat 

0 或1 

接收正确加密的数据包时,自动更新远端的终端。这使得远端客户端在改变IP地址或端后,能够继续通过这个隧道通信。(如果您是在Android设备上用SigmaVPN 设置隧道,那么您可能需要用这个配置选项,而不是用peer_remoteaddr和peer_remoteport)。这个选项在0.2之后的版本可用,您可能需要获取最新的源码并重新编译才能启用这个配置项

peer_localaddr 

IPv4/IPv6 地址. 

本地监听的IP地址 (对应对端配置的peer_remoteaddr )

peer_localport 

1 到 65535 

本地的UDP端口(对应对端配置的peer_remoteport )

peer_ipv6 

0 或 1 

指定UDP连接是否使用IPv6。关联的本地和远端的地址都必须是IPV6格式的。如果没有指定,那么假定使用IPV4 (请注意,这个选项设置的是隧道能否承载于IPV6之上,而不是说隧道内的交互能否使用IPV6)

3.4.        tuntap-特定选项

选项

可选值 

描述

ocal_interface 

String 

取决于OS,是一个合法的网卡设备名称 (比如Linux 2.6+的 mytunnel), 或者是指向TUN或TAP设备的全路径(比如Mac OS X的 /dev/tun0).

local_tunmode 

0 or 1 

是否使用3层TUN适配器,而不使用2层的TAP适配器 (仅适用于Linux 2.6+)。TUN适配器携带IP分组,而不是以太网帧。如果对方是使用SigmaVPN的Android客户端,那么这是必须的。

local_protocolinfo 

0 or 1 

使用TUN模式时,是否包含协议信息头域 (仅适用于Linux 2.6+)。如果您想在3层TUN隧道上同时携带IPV4和IPV6数据,那么这个选项是可选的,甚至可能是不必要的。如果对方是使用SigmaVPN 的Android 客户端,那么不要使用这个选项,即便是IPV6隧道。

3.5.        配置文件实例

[peername]

proto = nacl0

proto_publickey = 1e22c6af59f23cd3c40464c29e307cbd616e3f6a743f17a33dd6bd0ae4c79e71

proto_privatekey = cf1d8756fdde0f73f0c06f7c3f4cf456c3d74596b9e559570cf27d8b34059121

local = tuntap

local_interface = tap0

peer = udp

peer_remoteaddr = 192.168.122.130

peer_remoteport = 4567

peer_localaddr = 192.168.122.180

peer_localport = 7654

Linux内核版本 2.6以后,local_interface 的配置值简化为一个直接的设备名称,比如 "tunnel",也就是说不必配置完整路径

4.   配置安全隧道的步骤

4.1.        编译nacltai

检查您的模块文件里是否有proto_nacltai.o 文件和一个名为naclkeypair 的可执行文件。如果没有,那么带--with-nacl参数重新编译安装。

4.2.        建立配置文件

安装脚本会建立一个空的配置文件:/usr/local/etc/sigmavpn.conf 。打开这个文件,并输入以下模板的内容:

[peername] 
proto = nacltai 
proto_publickey = 
proto_privatekey = 
local= tuntap 
local_interface =  
peer = udp 
peer_remoteaddr = 
peer_remoteport = 
peer_localaddr = 
peer_localport =

4.3.        生成并交换密钥

执行naclkeypair命令,就会生成两个密钥,一个私钥和一个公钥。把私钥写入配置文件里的proto_privatekey选项值,把公钥发布给您的伙伴。

同样,您的伙伴也需要生成一对密钥。您从伙伴那里获取他的公钥,并把它写入配置文件里的proto_publickey值。

4.4.        配置IP和端口

选择一个IP地址和端口,用于SigmaVPN 本地监听。配置项对应peer_localaddr 和 peer_localport,把地址和端口告知您的伙伴。

您的伙伴同样要告诉您,他的地址和端口,您需要把地址和商品配置为peer_remoteaddr 和 peer_remoteport的选项值。

4.5.        协商隧道类型

选定您的隧道类型。可以是 (2层/以太网) 或TUN (3层/IP): 

  • Linux: 如果使用TUN模式。需要把local_tunmode 选项值设为1,否则可以不设。如果希望使用多协议,比方说IPV6,那还需要设local_protocolinfo值为 1。
  • Mac OS X:如果使用 TUN模式,那么 local_interface的值要配置为tnx设备的全路径,否则就配置为tapx设备的全路径。

4.6.        其他配置

  • 用您选定的名字替换配置模版首行中的peername。这个名字不会影响会话建立,它纯粹是用于报告目的的。
  • Linux: 需要一个虚拟网卡的名称,作为local_interface 选项的值。Sigmavpn会在系统中创建一张具有您所指定名字的虚拟网卡

4.7.        保存配置并运行SigmaVPN

把配置文件保存到一个指定的地方,比方说/usr/local/etc/sigmavpn.conf。 (/usr/local/etc/sigmavpn.conf 是sigmavpn缺省的配置文件,配置文件不是它,那么运行时需要-c 参数指定配置文件)

启动SigmaVPN: 

#sigmavpn -c "path/to/sigmavpn.conf"

4.8.        检查网卡并分配IP

运行ifconfig 检查网卡

  • Linux: ifconfig interfacename 
  • Mac OS X: ifconfig tap0 or ifconfig tun0, etc.

如果看到虚拟网卡的信息,就可以为虚拟网卡分配IP了: 

#ifconfig interfacename 10.8.0.1/24

    激活网卡: 

#ifconfig interfacename up

    两边都配置好之后,就可以通过虚拟IP地址PING通隧道的对端了。




(责任编辑:IT)
------分隔线----------------------------