-
OpenVPN
--------------
时间:
2014-7-7
-------------------
深圳运维组
如果你想要更多的不仅仅是
预共享密钥
的
OpenVPN
可以很容
易
地设置和使用公共密钥基础设施(
PKI
)来使用
SSL/TLS
证书进行身
份验证和
VPN
服务器和客户端之间的密钥交换。
OpenVPN
可以在路
由中使用或桥连的
VPN
模式,并且可以配置为使用
UDP
p>
或
TCP
,端
口号
可以配置为其他的,但官方默认端口是
1194
,而且它仅使用
了
单端口的所有通信。
OpenVP
N
的客户端可用于几乎所有的系统,包括所有的
Linux
p>
发行版,
Mac OS X
,
Windows
和
OpenWRT
< br>的基于无线局域网的路由
器。
实验网络拓扑图:
目录
OpenVPN
.
........
..................................................
..................................................
.............
1
1.
2.
服务器安装
......................
..................................................
.............................
3
公钥基础设施设置
...................
..................................................
......................
3
2.1
2.2
2.3
3.
4.
5.
证书颁发机构设置
...................
..................................................
...............
3
服务器证书
......................
..................................................
......................
4
客户端证书
......................
..................................................
......................
5
服务器配置
......................
..................................................
.............................
5
客户端配置
.
.................................................
..................................................
.....
7
故障排查
.
..................................................
..................................................
....
9
5.1
5.2
错误一:
.
..................................................
...............................................
9
错误二:
.
...........................
..................................................
..................
10
6.
客户端软件的实现
...................
..................................................
....................
10
6.1
6.2
6.3
Linux
< br>的网络管理器图形用户界面的
OpenVPN
...........................................
.
10
Linux
的文本界面的
OpenVPN
..........
..................................................
.......
11
OpenVP
N
的带有
GUI
为
Win 7
或
Win XP
..
..................................................
12
1.
服务器安装
要安装
< br>OpenVPN
的
,请在终端输入:
$$sudo
–
s
##
输
入密码切换到
root
,后面的操作均是在
root
用户下进行。
#apt-get install openvpn easy-rsa
2.
公钥基础设施设置
构建的
OpenVPN
配置的第一步是建立一个公钥基础设施(
< br>PKI
),公钥基础设施
包括:
1.
一个单独的证书(也称为公钥)和私钥的服务器和每个客户端,
2.
这是用来签署每个服务器和客户
端证书的大师证书颁发机构(
CA
)的证
书和密钥。
OpenVPN
的支持
基于证书的双向认证,这意味着客户端必须验证服务器证书在
互信建立之前,服务器也必
须验证客户端证书。
服务器和客户端将验证对方先核实该提供
的证书是由主证书颁发机构(
CA
)签
署,然后通过在现在验证的证书的头,如证书的通用名称或证书类型测试信息
(客户端或
服务器)。
2.1
证书颁发机构设置
要建立你自己的证
书颁发机构(
CA
)和产生的证书和密钥的
OpenVPN
服务器多
个客户端的
easy-rsa
目录先复制到
/etc/openvpn<
/p>
。这将确保任何更改脚本包时
更新也不会丢失。从终端的变化,以
root
用户:
mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/easy-rsa/*
/etc/openvpn/easy-rsa/
接下来,编辑的
/etc/openvpn/easy-
rsa/vars
调整到适合您的环境:
root@ubuntu:/etc/openvpn/easy-rsa# cat
vars |grep -v
##
主要修改红色部分内容,下
面是已经改好的例子
export
EASY_RSA=
export
OPENSSL=
export
PKCS11TOOL=
export
GREP=
export
KEY_CONFIG=`$$EASY_RSA/whichopensslcnf $$EASY_RSA`
export KEY_DIR=
echo NOTE: If
you run ./clean-all, I will be doing a rm -rf on
$$KEY_DIR
export
PKCS11_MODULE_PATH=
export
PKCS11_PIN=
export KEY_SIZE=2048
export CA_EXPIRE=3650
export
KEY_EXPIRE=3650
export KEY_
COUNTRY=
CN
国家
export KEY_PROVINCE=
S
Z
省份
export KEY_CITY=
ShenZhen
城市
export
KEY_ORG=
acttao
组织单
位
export KEY_EMAIL=
jiaxxx@
邮箱
export KEY_OU=
acttao
< br>
组织单元
export KE
Y_NAME=
acttao
证书名<
/p>
export KEY_CN=
act
tao
证书别名
输入以下命令以生成主证书颁发机构(
CA
)的证书和密钥:
cd
/etc/openvpn/easy-rsa/
chown -R
root.$$user . ##$$user
指的是当前管理系统的用户(非
root
)
chmod g+w .
source ./vars
./clean-all
./build-ca
(
可能会报错,详见下图
)
root@ubuntu:/etc/openvpn/easy-rsa#
./build-ca
error on line 198 of
/etc/openvpn/easy-rsa/
140:error:0E065068:configuration file
routines:STR_COPY:variable has no
value:conf_def.c:618:line 198
或者
root@ubuntu:/etc/openvpn/easy-rsa#
./build-ca
error on line 220 of
/etc/openvpn/easy-rsa/
148:error:0E065068:configuration file
routines:STR_COPY:variable has no
value:conf_def.c:618:line 220
经排错得知原因是
:/etc/openvpn/easy-
rsa/vars
配置文件中并没有涉及到该项,所以
会报无
效值,我们需要在
/etc/openvpn/easy-rsa/
把这两行给注
释掉。
#subjectAltName=$$ENV::KEY_ALTNAMES
##198
行
#
#subjectAltName=$$ENV::KEY_ALTNAMES
##220
行
#
再重新执行:
./build-ca
就不报错了
------
一直回车
2.2
服务器证书
接下来,我们会为服务器的证书和私钥:
./build-key-server acttao
一直回车,到
sign
,
Y 1out1
,
Y
正如
在上一步中,大部分参数都可以默认。其他两个查询需要积极的回应,
“注册证书?[Y
/ N]”和“1
出
1
证书请求认证,
提交?[Y / N]”
。
需要为的
OpenVPN
服务器生成的
Diffie Hellman
的参数:
./build-dh
所有证书
和密钥的子目录键已生成。通常的做法是将它们复制
/etc/openvpn/
:
cd keys/
cp /etc/openvpn/
2.3
客户端证书
VPN
客户端还需要一个证书来验证自己到服务器。通常你创建一个不同的证书
为每个客户端。创建证书,请输入以下的终端,而作为
root
用户:
cd
/etc/openvpn/easy-rsa/
source ./vars
./build-key client1
##
大部分都是回车
,
最后两
步是
”
y
”
使用安全的方法,把下列文件拷贝到客户端:
1.
/etc/openvpn/
2.
/etc/openvpn/easy-rsa/keys/
3.
/etc/openvpn/easy-rsa/keys/
由于客户端证书和密钥只需要在客户机上,
你应该从服务器上删除它们
< br>。
3.
服务器配置
随着你的
OpenVPN
安装你得到了这些示例配置文件(还有更多,如果你打
勾):
root@server:/# ls
-l /usr/share/doc/openvpn/examples/sample-
config-
files/
total 68
-rw-r--r-- 1 root root 3427 2011-07-04
15:09
-rw-r--r-- 1 root root 4141
2011-07-04 15:09
开始复制和拆包
p>
到
/etc/openvpn/
中。
sudo cp
/usr/share/doc/openvpn/examples/sample-
config-
files/ /etc/openvpn/
sudo gzip -d /etc/openvpn/
编辑
/etc/openvpn/
中确
保以下行指向您在上一节中创建的证书和
密钥。
root@ubuntu:/etc/openvpn# cat |grep -v
local 192.168.100.252
##OpenVPN Server
服务器的
IP
port 1194 ##
通信端口
proto udp ##
也可以使用
tcp
端口,但传输速度可能没有
udp
快,建议保持沉默
dev tun ##tun
模式一般用
DHCP
分发
IP
,另一种
tap
模式,一般是从
IP
段中指派
IP
ca /etc/openvpn/
##
强烈建议写绝对路径
cert
/etc/openvpn/ ##
强烈建议写绝对路径
key /etc/openvpn/ # This file should
be kept secret
dh /etc/openvpn/
##
强烈建议写绝对路径
server 10.8.0.0 255.255.255.0 ##
配置
VPN
使用的网段,
O
penVPN
会自动提供基
于该网段的
DHCP
服务,但不能和任何一方的局域网
IP
段重复,保证唯一性
ifconfig-pool-
persist ##
存储分发
IP
记录,确保下次登录还获得一样的
IP
push
##
若客户端希望所有的流量都通过
VPN
传输,则可以使用该语句,其会自动改变客户端的网关为
VPN
服务器(推荐关闭)
push
push
duplicate-
cn
#
此处设置一个证书可以多个用户同时登陆
client-to-client ##
默认
OpenVPN
客户端之间是不能互通的,注释掉就可以了。
keepalive 10 120
comp-
lzo ##
使用
lzo
压缩的通
讯,服务端与客户端都必须配置
max-clients
100 ##
最大连接数
user
nobody
group nogroup
persist-key
persist-tun
status ##
日志文件
verb 3e
这是起码的,你必
须通过配置来获得一个工作
OpenVPN
服务器。您也可以使
用
该样本
中的文件中的所有默认设置。
现在启动服务器。你会发现
日志和错误信息在您的系统日志(
/
var/log/syslog
)里面可以查看到。
root@server:/etc/openvpn# service
openvpn start
* Starting virtual
private network daemon(s)...
*
Autostarting VPN 'server' [ OK
]
现在,可以查看到
OpenVP
N
创建了一个
tun0
的接口:
root@server:/etc/openvpn#
ifconfig tun0
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
[...]
配置虚拟网卡
tun0
可以通过
eth0
网
卡进行
NAT
转发数据包
vim /etc/default/ufw
DEFAUL
T_FORWARD_POLICY=
修改成
DEFAULT_FORWARD_POLICY=
ACCEPT
vim /etc/
#_forward=1
修改成
_forward=1
sysctl -p
执行一下命令使修改生效
添加几条策略
ufw allow
22/tcp
iptables -A INPUT -p udp
–
-dport 1194 -j ACCEPT
或
(
ufw allow
1194/udp
)
iptables -A FORWARD -s 10.8.0.0/24 -o
eth0 -j MASQUERADE
iptables -t nat -A
POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
防止系统重启后
iptables<
/p>
不生效
iptables-save
-c >/etc/ufw/
echo
4.
客户端配置
有带和不带图形用户界面
的各种不同的
OpenVPN
客户端实现。你可以阅读更多
p>
有关在后面的部分客户。现在我们使用
OpenVPN
客户端的
Ubuntu
这是相同的可
执行文件服务器。所以,你必须在客户机上重新安装
OpenVPN
的包:
sudo
apt-get install openvpn
这一次
的
样本配置文件复制到
/etc/op
envpn/
。
sudo cp
/usr/share/doc/openvpn/examples/sample-
config-
files/ /etc/openvpn/
复制客户端密钥,你在上面的部分,例如要在
/etc/ope
nvpn /
然后编辑
/etc/openvpn/
创建,以确保以下行指向这些文件的
CA
证
书。
如果
在
/etc/openvpn
下的文件
/
可以省略路径。
ca
cert
key
p>
你必须至少指定
OpenVPN
服务器的名
称或地址,确保关键字的客户端是在
config
,这就是使得
客户端模式。
client
remote
14.127.233.98
1194
< br>##14.127.233.98
是
OpenVPN
Server
映射出去的公网
IP
(
192.168.100.252
的
1
194
端口在防火墙做了映射
)
p>
此外,
不在
/et
c/openvpn
目录下时,请确保您指定的服务器复制
的密
钥文件名
ca /etc/openvpn/
cert /etc/openvpn/
key
/etc/openvpn/
##
强烈建议用绝对路径,这样
不容易出错。
现在启动
OpenVP
N
客户端:
root@client:/etc/openvpn# service openvpn start
* Starting virtual private network
daemon(s)...
* Autostarting VPN
'client' [ OK ]
检查它是否创造了一个
tun0
的接口:
root@client:/etc/openvpn#
ifconfig tun0
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.6 P-t-P:10.8.0.5
Mask:255.255.255.255
UP
POINTOPOINT RUNNING NOARP MULTICAST MTU:1500
Metric:1
检查是否可以
ping
OpenVPN
服务器:
root@client:/etc/openvpn# ping 10.8.0.1
PING 10.8.0.1 (10.8.0.1) 56(84) bytes
of data.
64 bytes from 10.8.0.1:
icmp_req=1 ttl=64 time=0.920 ms
OpenVPN
服务器总是使用客户端网络中的第一个可用的
IP
地址,只有该
IP
可
侦测。
例如,如果你配置了一个
/ 24<
/p>
的客户端网络掩码,
.1
地址将被使
p>
用。
点对点解决您在
ifconfig
输出中看到上面通常不回答
ping
p>
请求。
检查你的路由表:
root@client:/etc/openvpn# netstat -rn
Kernel IP routing table
Destination Gateway Genmask
Flags MSS Window
irtt Iface
10.8.0.5 0.0.0.0
255.255.255.255 UH 0 0
0 tun0
10.8.0.1
10.8.0.5 255.255.255.255 UGH 0 0
0 tun0
192.168.42.0
0.0.0.0 255.255.255.0 U 0 0
0 eth0
0.0.0.0
192.168.42.1 0.0.0.0 UG 0 0
0 eth0
5.
故障排查
如果完成了上面操作的还启动不了服务或连接不了,检查:
1.
2.
3.
4.
5.
6.
检查您的系统日志,例如:
tail /
var/log/syslog
请检查您是否配置了正确的
<
/p>
和
中指定的密钥文件的名称
不可以在客户端连接到服务器的机器,也许是防火墙阻止访问
客户端和服务器必须使用相同的协议和端口,如
UDP
端口
1194
客户端和服务器必须使用相同的配置对于压缩,看比赛
-
LZO
配置选项
客户端和服务器必须
使用相同的方面配置桥接与路由模式,请参阅服务器与服务器桥
接配置选项
举例:
5.1
错误一: