在pcDuino搭建openvpn服务器

酸酸苹果汁 发布于 2014/01/08 09:25
阅读 731
收藏 0

VPN直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,OpenVPN无疑是Linux下开源VPN的先锋,提供了良好的性能和友好的用户GUI。

openvpnlogo 

什么是OpenVPN

该软件最早由James Yonan编写。OpenVPN允许参与建立VPN的单点使用预设的私钥,第三方证书,或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库,以及SSLv3/TLSv1协议。

OpenVPN能在Linux、xBSD、Mac OS X与Windows2000/XP上运行。它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。

实现原理

OpenVpn的技术核心是虚拟网卡,其次是SSL协议实现,由于SSL协议在其它的词条中介绍的比较清楚了,这里重点对虚拟网卡及其在OpenVpn的中的工作机理进行介绍:

虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如IE)向虚拟网卡发送数据,则服务程序可以读取到该数据,如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多的操作系统下都有相应的实现,这也是OpenVpn能够跨平台一个很重要的理由。

在OpenVpn中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,通过SOCKET从外网上发送出去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后,发送给虚拟网卡,则应用软件可以接收到,完成了一个单向传输的过程,反之亦然。

准备

由于openvpn要用到NAT,但是pcDuino的内核是不支持的,首先要配置内核支持NAT,具体的配置如下:

[*] Networking support  —>

         Networking options  —>

                   [*] Network packet filtering framework (Netfilter)  —>

              IP: Netfilter Configuration  —>

                            <*> IPv4 connection tracking support (required for NAT)

                            <*>   Full NAT

                            <*>     MASQUERADE target support

                            <*>     NETMAP target support

                            <*>     REDIRECT target support  

Device Drivers  —>

[*] Network device support  —>

<M>     Universal TUN/TAP device driver support

配置完了重新编译内核,具体的编译和使用方法请参考。

http://cnlearn.linksprite.com/?p=1013

最后在系统里面添加开机自动加载

vim  /etc/modules

# /etc/modules: kernel modules to load at boot time.

#

# This file contains the names of kernel modules that should be loaded

# at boot time, one per line. Lines beginning with “#” are ignored.

 

lcd

hdmi

ump

disp

disp_ump

mali

mali_drm

8192cu

rt5370sta

tun

重启之后就执行ifconfig就可以看到

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 

          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255

          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:100

     RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

你也可以省略编译内核部分,用我们配置编译好的内核pcduino_a10_hwpack_20131226.tar

开始搭建服务器

1,  更新一下最新的软件源

sudo apt-get update

2,  安装OpenVPN and OpenSSL

sudo apt-get install openvpn openssl

3,  利用OpenVPN给的脚本

cd /etc/openvpn

sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 ./easy-rsa

vi  /easy-rsa/vars

export EASY_RSA=”`pwd`”

export EASY_RSA=”/etc/openvpn/easy-rsa”

4,  需要切换到root用户,执行配置

cd easy-rsa

sudo su

source vars

./clean-all

./pkitool –initca

ln -s openssl-1.0.0.cnf openssl.cnf

5,  现在利用它的一些脚本产生加密文件,这里注意了,第一个命令的时候,它会提示你的输入一些东西,可能在国家在上面缩写不是很难理解,这里说明一下(US = USA, DE – Germany, AT = Austria, CH – Switzerland)。

./build-ca OpenVPN

./build-key-server server

./build-key client1

./build-dh

exit

6,  回到openvpn目录,创建openvpn.conf文件。配置文件里面你可以修改你自己的DNS.

cd ..

sudo vi openvpn.conf

dev tun

proto udp

port 1194

ca /etc/openvpn/easy-rsa/keys/ca.crt

cert /etc/openvpn/easy-rsa/keys/server.crt

key /etc/openvpn/easy-rsa/keys/server.key

dh /etc/openvpn/easy-rsa/keys/dh1024.pem

user nobody

group nogroup

server 10.8.0.0 255.255.255.0

persist-key

persist-tun

status /var/log/openvpn-status.log

verb 3

client-to-client

push “redirect-gateway def1″

#set the dns servers

push “dhcp-option DNS 8.8.8.8″

push “dhcp-option DNS 8.8.4.4″

log-append /var/log/openvpn

comp-lzo

7,  打开IP转发,这里我用的是eth0,如果你用的是V2,上面自带网卡,你需要把接入点改成wlan*。

sudo sh -c ‘echo 1 > /proc/sys/net/ipv4/ip_forward’

sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/8 ! -d 10.0.0.0/8 -o eth0 -j MASQUERADE

8,  最后一步

vi  /etc/sysctl.conf

删除net.ipv4.ip_forward=1 #

9,  让ip转发开机启动

crontab -e

@reboot sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/8 ! -d 10.0.0.0/8 -o eth0 -j MASQUERADE

10,再一次切换到root

sudo su

cd /etc/openvpn/easy-rsa/keys

vi  pcDuino.ovpn

dev tun

client

proto udp

remote 你自己的IP  1194

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert client1.crt

key client1.key

comp-lzo

verb 3

11,打包秘钥文件

tar czf openvpn-keys.tgz ca.crt ca.key client1.crt client1.csr client1.key pcDuino.ovpn

mv openvpn-keys.tgz   /home/Ubuntu

12,重启OpenVPN server

sudo  /etc/init.d/openvpn start

windows客户端配置

1,  将刚才的openvpn-keys.tgz的秘钥文件拷贝出来

2,  到http://openvpn.se/上面下载最新的openvpn版本,这里用到的是

  • openvpn-2.0.9-gui-1.0.3-install.exe下载之后安装

3,  将openvpn-keys.tgz解压到C:\Program Files (x86)\OpenVPN\config下面

4,  连接,具体的连接方法见下图

connectconnect1.pngopenvpn

连接成功。

linksprite学习中心




加载中
返回顶部
顶部