[FrontPage] [TitleIndex] [WordIndex

This is a read-only archived version of wiki.centos.org

在 CentOS5 上安装 OpenVPN

1. 引言

1.1. Draft

This page is draft. Please send suggestions and/or corrections to EdHeron.

1.2. 关于

本文档尝试为 CentOS 5 安装 OpenVPN 提供提示。

1.3. 先决条件

推荐用最新版 CentOS 5。

1.4. 声明

这里不提供任何保证。要是你的系统损坏了,你要收拾残局。

2. 软件安装

OpenVPN 并非上游发行版本的一部份。有些志同道合的朋友把它编译好,创建 RPM 并存放在可供分享的地方。

2.1. 加入 RPMForge 软件库

有关软件库的信息可在可供 CentOS 使用的软件库页内找到。

安装 RPMForge 软件库的教学文档已收录在安装 RPMForge 页内。

2.2. 选择性推荐:停用软件库

第三方软件库内有很多组件。当中有些是官方组件的代替品。当你进行安装,安装第三方的组件也许并不理想。停用一个软件库能防止它被误用。

你可以这样停用 RPMForge 软件库

sed --in-place "s/\\(.*enabled.*=\\).*/\1 0/" /etc/yum.repos.d/rpmforge.repo

2.3. 安装 OpenVPN

新增 RPMForge 软件库后,你只须这样便能安装 OpenVPN

yum --enablerepo rpmforge install openvpn

3. 凭证

3.1. 设置目录

创建凭证用的目录只需位于一个地方。推荐的位置是一台拥有较严紧访问限制,甚至有实体访问限制的管理用机器。你必须制作备份。假如凭证机构的金钥档落在错的手中,他们便能创建金钥来访问你的 VPN。另外,要是你遗失了凭证机构的金钥档,你必须创建新的金钥档,继而要重建所有现存的凭证。

创建凭证的脚本都放置在 /usr/share/doc/openvpn-*/easy-rsa/。那悝有多个版本的脚本。我们采用的是第 2 版。请把该目录内的文件复制至某处,以免它们被更改,或因升级而消失。

mkdir ~/easy-rsa
cp -Rv /usr/share/doc/openvpn-*/easy-rsa/2.0/* ~/easy-rsa/

进入该目录内

cd ~/easy-rsa

按你的需要编辑vars。特别要修改包括 KEY_COUNTRYKEY_PROVINCEKEY_CITYKEY_ORGKEY_EMAIL

把脚本设成可执行的

chmod u+x clean-all build-ca whichopensslcnf build-dh build-key pkitool build-key-server

3.2. 设置环境

任何时候你要用 easy-rsa 脚本,请进入该目录并设置环境

cd ~/easy-rsa
. ./vars

3.3. 洗理金钥目录

创建一个清洁的金钥目录来收藏被创建的金钥。此步骤只须做一次,否则你将会遗失现有的凭证:

./clean-all

3.4. Diffie Hellman 档

Diffie Hellman 参数常被应用,让加密凭证在不安全的媒体上能较安全地被交换。

文件的创建方法是

./build-dh

所有服务器及客端都需要此文件。

3.5. 创建凭证机构

为要设立相互的信任,你必须创建一个主金钥来签署所有凭证。它会被用作签署其它凭证之用。

./build-ca

名为 ca.keyca.crt 的文件应该已被创建在 keys/ 内。ca.key 档是你的私钥,它不必在其它地方出现。ca.crt 档必须在所有创建或接收 OpenVPN 连接的计算机上。

4. 设置服务器

4.1. 创建凭证

在我们的 easy-rsa 目录里,按需要执行 vars 脚本后,连同服务器的公共名称执行创建服务器金钥的脚本,并且输入其它所需的信息。举个例说,我们可以称服务器为 main

./build-key-server main

main.key、main.csr 及 main.crt 档应该已被创建在 keys/ 内。key 档是私钥。csr 档是中转档,是签署凭证的要求。crt 档是凭证。

4.2. 配置文件

配置文件控制 OpenVPN 端点的每个细节。它位于 /etc/openvpn/ 内,也可随意命名,唯独必须以 .conf 结束文件名。由于每个端点都有独特之处,你可通过名称来简化它们的管理。承接上述例子,推荐的文件名是 main.conf。

4.2.1. Tun 相对 Tap

设置一台服务器的方法多不胜数。Tun 或 Tap 可能是最大的决择。

Tun 会为 VPN 的两端创建一个独特的子网络隧道。你必须指派一个网络给每台服务器。

Tap 会分接通现存的网络并配置一个本地的 IP 地址给远程。Tap 须要在配置本地位时(DHCP?)与 OpenVPN 服务器作出合作。一般来说,某系列 IP 地址会被预留给远程用户。采用 tap 的主要好处就是网络广播可达至远程的端点。

在这里我们选用 Tun,因为它不依赖于本地的网络设置,也不会重叠。

tun

4.2.2. 端口号

缺省的端口号是 1194。然而,某些 wi-fi 热点,甚至乎网络供应商会限制 1194 号端口。我当地的 Dunkin Donuts 就是一个例子。暂时我们先采用缺省值。

port 1194

4.2.3. UDP 相对 TCP

UDP 使用较少带宽,但 TCP 能在不可靠的连接上维系 VPN 的接线。除非遇上问题,我们会采用 UDP。

proto udp

4.2.4. 客端通讯

要让客端「看见」对方,请加入

client-to-client

4.2.5. 压缩封包

要减低带宽,选用压缩

comp-lzo

4.2.6. 指定 Diffie Hellman 档

加入

dh dh1024.pem

4.2.7. 加入持久连接

为协助检测被遗弃的连接,加入

keepalive 10 120

4.2.8. 把用户降级

为减低安全性风险,请把 OpenVPN 的用户改为 nobody。 要把用户降级,加入

user nobody
group nobody

4.2.9. 横跨重新引导

通过存储只有在开机时可访问的信息,尝试横跨重新引导。加入

persist-key
persist-tun

4.2.10. 状况日志

要设置状况档,加入

status openvpn-status.log

4.2.11. 设置日志级别

要设置日志级别,加入

verb 3

4.2.12. 维持客端 IP

创建一个文件来记录客端的 IP,好让它们在连接及服务器重新开机前后能一致。加入

ifconfig-pool-persist ipp.txt

4.2.13. 指定凭证档

服务器需要访问凭证机构的凭证,及自己的私钥和凭证档。加入

ca ca.crt
cert main.crt
key main.key

4.2.14. 本地 IP 地址

指定一个对外的 IP 位置。加入

local xxx.xxx.xxx.xxx

4.2.15. 设置 Tunnel 网络

此设置在每个服务器上都必须是独特的。每个端点/用户要被配置一个 2 位元的子网络(4 个位置),因此标准的 24 位元网络可容纳 64 个端点。要是你需要更多端点,请采用较大的网络。

若最多只需 64 个端点,我们可加入

server 192.168.5.0 255.255.255.0

若要容纳更多端点,我们可加入

server 10.5.0.0 255.255.0.0

4.2.16. 加入本地路线

要让远程端点知道有什么存在,加入本地网络及网络掩码

push "route 192.168.1.0 255.255.255.0"

4.2.17. 加入本地 DNS 服务器

要让远程端点知道关于内部 DNS 服务器,加入该台机器的 IP 地址

push "dhcp-option DNS 192.168.1.251"

4.2.18. 加入本地 WINS 服务器

要让远程端点知道关于本地的 WINS 服务器,好让 MS Windows 客端能浏覧资源,加入该台服务器的 IP 地址

push "dhcp-option WINS 192.168.1.201"

4.2.19. 总结

我们的样例配置文件,main.conf,或许会是这个样子

tun
port 1194
proto udp
client-to-client
comp-lzo
dh dh1024.pem
keepalive 10 120
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
ifconfig-pool-persist ipp.txt
ca ca.crt
cert main.crt
key main.key
local xxx.xxx.xxx.xxx
server 192.168.5.0 255.255.255.0
push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 192.168.1.251"
push "dhcp-option WINS 192.168.1.201"

4.3. 安装文件到服务器上

要设置一台 OpenVPN 服务器,

* 安装 RPMForge 软件库

* 安装 OpenVPN

* 复制 ca.crt、main.key、main.crt、dh1024.pem、main.conf 到 /etc/openvpn/

* 引导 OpenVPN

service openvpn start

* 在开机时启用 openvpn

chkconfig openvpn on

5. 客端设置

在这个样例里,我们会设置一台没有本地路由网络的客端。这对流动一族很有用。我们只会描述针对 CentOS 客端的程序。关于微软 Windows 客端的信息,请参阅 OpenVPN 的教学文档。此外,你亦可在一台已破解的 iPad 上设置 OpenVPN,但它已超越此文的范畴。

5.1. 创建凭证

在我们的 easy-rsa 目录里,按需要执行 vars 脚本后,连同客端的公共名称执行创建金钥的脚本,并且输入其它所需的信息。举个例说,我们的客端或许名为 ed

./build-key ed

ed.key、ed.csr 及 ed.crt 档应该已被创建在 keys/ 内。key 档是私钥。csr 档是中转档,是签署凭证的要求。crt 档是凭证。

5.2. 配置文件

配置文件必须仿效服务器的设置及加入客端专用的选项。由于它是用来与一台特定的服务器连接,你可采用客端及服务器的名称来为它命名,譬如:ed-main.conf。这容让该客端连接到多台服务器。

5.2.1. 仿效服务器的设置

在我们的样例中,必须相定的设置包括

dev tun
proto udp
comp-lzo

5.2.2. 指定为客端

利用 client 选项来表示我们是一台端。加入

client

5.2.3. 端口号

客端无须指定端口。事实上,这个决定背后有数个原因,但我不会在此详述。

nobind

5.2.4. 把用户降级

这与服务器相若,原因亦一样,纵使设置不须等同。加入

user nobody
group nobody

5.2.5. 横跨重新引导

通过存储只有在开机时可访问的信息,尝试横跨重新引导。加入

persist-key
persist-tun

5.2.6. 指定凭证档

客端需要访问凭证机构的凭证,及自己的私钥和凭证档。加入

ca ca.crt
cert ed.crt
key ed.key

5.2.7. 重试 DNS

如果服务器是以主机名称来指定,扩展解析的重试时限也许会有好处。加入

resolv-retry infinite

5.2.8. 服务器地址

服务器的地址可通过 IP 地址或主机名称来指定,但该名称必须能被解析。IP 地址也许也较快连接,但不适用于改变 IP 地址的服务器。请包括服务器的端口。

remote xxx.xxx.xxx.xxx 1194

5.2.9. 要求远程是服务器

要求远程的凭证拥有服务器的标志。加入

ns-cert-type server

5.2.10. 总结

我们的样例配置文件,ed.conf,或许会是这个样子

dev tun
proto udp
comp-lzo
client
nobind
user nobody
group nobody
persist-key
persist-tun
ca ca.crt
cert ed.crt
key ed.key
resolv-retry infinite
remote xxx.xxx.xxx.xxx 1194
ns-cert-type server

5.3. 安装文件到客端上

要设置一台 OpenVPN 客端,

* 安装 RPMForge 软件库

* 安装 OpenVPN

* 复制 ca.crt、ed.key、ed.crt、dh1024.pem、ed-main.conf 到 /etc/openvpn/

* 引导 OpenVPN

service openvpn start

* 在开机时启用 openvpn

chkconfig openvpn on

6. 额外信息

OpenVPN 教学程序 Diffie Hellman 是什么?

Translation of revision 14


2023-09-11 07:23