1.Openvpn简介
1)什么是Open×××
×××直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,Open×××无疑是Linux下开源×××的先锋,提供了良好的性能和友好的用户GUI。该软件最早由James Yonan编写。Open×××允许参与建立×××的单点使用预设的私钥,第三方证书,或者用户名/密码来进行身份验证。它大量使用了OpenSSL加密库,以及SSLv3/TLSv1协议。Open×××能在Linux、xBSD、Mac OS X与Windows2000/XP上运行。它并不是一个基于Web的×××软件,也不与IPsec及其他×××软件包兼容
2)Openvpn原理
OpenVpn的技术核心是虚拟网卡,其次是SSL协议实现,由于SSL协议在其它的词条中介绍的比较清楚了,这里重点对虚拟网卡及其在OpenVpn的中的工作机理进行介绍:虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如IE)向虚拟网卡发送数据,则服务程序可以读取到该数据,如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多的操作系统下都有相应的实现,这也是OpenVpn能够跨平台一个很重要的理由。
在OpenVpn中,如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,通过SOCKET从外网上发送出去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后,发送给虚拟网卡,则应用软件可以接收到,完成了一个单向传输的过程,反之亦然。
2.部署拓扑
1.安装Openvpn
安装之前
先确定×××的时候和本地的时间是否一致
yum -y install *gcc* openssl-devel make
关闭防火墙和selinux
安装lzo
tar -zxvf lzo-2.06.tar.gz -C /usr/src/
cd /usr/src/lzo-2.06/
./configure --prefix=/usr/local/lzo
make && make install
安装openvpn
tar -zxvf openvpn-2.1.4.tar.gz -C /usr/src/
cd /usr/src/openvpn-2.1.4/
[root@localhost openvpn-2.1.4]# ./configure --prefix=/usr/local/openvpn \
> --with-lzo-headers=/usr/local/lzo/include/ \
> --with-lzo-lib=/usr/local/lzo/lib/ \
> --with-ssl-headers=/usr/include/openssl/ \
> --with-ssl-lib=/usr/lib
make && make install
echo “export PATH=/usr/local/openvpn/sbin/:$PATH” >>/etc/profile
source /etc/profile
配置Server端
1)创建证书
cp -rfp /usr/src/openvpn-2.1.4/easy-rsa/ /usr/local/openvpn/
cd /usr/local/openvpn/easy-rsa/2.0/
vim vars在最后行修改
export KEY_COUNTRY="ZN"
定义国家最多两个字符
export KEY_PROVINCE="TJ"
定义省份
export KEY_CITY="tianjin"
定义城市
export KEY_ORG="openvpn-nscc"
定义组织
export KEY_OU="nscc-tj"
定义单位
export KEY_EMAIL=sunfx@nscc-tj.gov.cn
定义邮箱
source vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/local/openvpn/easy-rsa/2.0/keys
./clean-all
./build-ca 创建CA证书用于签发server和client证书一路回车既可以
Generating a 1024 bit RSA private key
..........++++++
.++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [ZN]:
State or Province Name (full name) [TJ]:
Locality Name (eg, city) [tianjin]:
Organization Name (eg, company) [openvpn-nscc]:
Organizational Unit Name (eg, section) [nscc-tj]:
Common Name (eg, your name or your server's hostname) [openvpn-nscc CA]:
Name []:openserver
Email Address [sunfx@nscc-tj.gov.cn]:
./build-dh为服务器生成Diffie-Hellman文件后面配置openvpn用到这个文件
./build-key-server server为服务器生成证书和密钥
./build-key client1 为客户端申请密钥
2)配置openvpn
cp -rfp /usr/src/openvpn-2.1.4/sample-config-files/server.conf /usr/local/openvpn/
cd /usr/local/openvpn/
mv server.conf server.conf.bak
grep -v ^# server.conf.bak | sed '/^[[ :space: ]]* $/d' | sed /^$/d > server.conf
port 1194
proto tcp
dev tap
ca /usr/local/openvpn/easy-rsa/2.0/keys/ca.crt
cert /usr/local/openvpn/easy-rsa/2.0/keys/server.crt
key /usr/local/openvpn/easy-rsa/2.0/keys/server.key # This file should be kept secret
dh /usr/local/openvpn/easy-rsa/2.0/keys/dh1024.pem
server 172.16.0.0 255.255.0.0
ifconfig-pool-persist /usr/local/openvpn/ipp.txt
push "route 172.16.0.0 255.255.0.0"
client-to-client
keepalive 10 120
comp-lzo
max-clients 100
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log /var/log/openvpn.log
log-append /var/log/openvpn.log
verb 5
;mute 20
启动服务
/usr/local/openvpn/sbin/openvpn --config /usr/local/openvpn/server.conf &
echo “/usr/local/openvpn/sbin/openvpn --config /usr/local/openvpn/server.conf &
” >> /etc/rc.local
写到rc.local里面让他开机自动启动