[原创] Configure OpenVPN on Ubuntu

Web、Mail、Ftp、DNS、Proxy、VPN、Samba、LDAP 等基础网络服务
zzsu
帖子: 36
注册时间: 2006-01-24 13:15

[原创] Configure OpenVPN on Ubuntu

#1

帖子 zzsu » 2007-10-24 10:52

我理解,OpenVPN的配置根据实现分三种方式:
  • 单机 - - 站点
    站点 - - 站点
    单机 - - 单机
本文的描述适合单机 - - 站点实现方式,也可以理解为移动用户连回公司网络。

目录
  • 1. 安装
    2. 设置认真机构,产生证书
    3. 配置Server端
    4. 配置Client端
1. 安装
Ubuntu中安装OpenVPN极其简单:

代码: 全选

sudo apt-get install openvpn
在Windows中安装则建议使用 OpenVPN GUI for Windows的Installation Package,其中包括了OpenVPN本身以及在Windows中使用方便的图形界面。

2. 设置认真机构,产生证书
参考OpenVPN的Howto进行操作,一般不会有什么问题。
在Ubuntu中大致这样操作,将目录 /usr/share/doc/openvpn/examples/easy-rsa/2.0 复制的你的家目录,修改vars使其符合你的实际情况(国家、省份、城市、公司、机构、邮件地址),然后运行

代码: 全选

./vars
./clean-all
./build-ca
./build-key-server <servername>
./build-key <clientname>
./build-dh
注意:这只是第一次产生证书的正确操作,其中 build-ca 创建根证书,若你没有清除全部VPN Server/Client的打算,你不应该再次运行此命令;创建的全部证书及私钥都在当前目录的 keys 下面,而命令 clean-all 将清除 keys 下面全部内容,因此 cliean-all 只在 build-ca 前运行一次。
随后添加 Server 证书或 Client 证书只需运行

代码: 全选

./vars
./build-key-server <servername>
or
./build-key <clientname>
3. 配置Server端
从示例中解压 server.conf

代码: 全选

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz  /etc/openvpn/
sudo gzip -d /etc/openvpn/server.conf.gz
将相关证书、私匙拷贝的 /etc/openvpn
  • ca.crt
    server.crt
    server.key
    dh1024.pem
修改 server.conf
关键一:取消注释 push "route a.b.c.d 255.255.255.0",并将地址和掩码替换为办公网络的地址和掩码
目的是为客户端加一条路由,这样客户端才有可能访问到办公网络中出VPN Server之外的其它主机(有很多VPN客户端直接添加默认路由,这样客户端的所有连接请求都被路由到 VPN 通道内,结果是客户端此时不能访问VPN,而此项添加指定地址的路由不会导致这一问题)
关键二:取消注释 push "dhcp-option DNS a.b.c.d" 和 push "dhcp-option WINS a.b.c.d", 并将地址替换为实际的 DNS 和 WINS 服务器的地址,最好 DNS 服务器能将外部域名的解析要求转发的外部 DNS 服务器
目的是客户端连接VPN后仍能访问Internet,(若推过来的DNS不能解析外部域名,则即使客户端的路由配置正确,想通过域名访问Internet也不可能)
Server端其它设置
配置服务器,运行包转发:

代码: 全选

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
关键三:若VPN Server不是办公网络的默认网关,则想办法在默认网关上添加到 10.8.0.0/24 的路由项目,网关为服务器的内部 IP 地址。
关键一中的操作只是能够让客户端知道去往公司网络的包如何路由,而关键三的操作是为了让公司网络里的主机知道去往VPN Client的包如何路由。
对于Netscreen 25(screenos 5.3.0r3.0),Network - Routing - Destination - [trust-vr]New - IP/mask [10.8.0.0]/[24] - 选 [Gateway], Interface [ethernet1], Gateway IP Address [Internal IP of VPN Server]

4. 配置Client端
在Ubuntu中,
4.1.1 从示例中拷贝client.conf

代码: 全选

sudo cp //usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
4.1.2 将相关证书、私钥拷贝到/etc/openvpn:
  • ca.crt
    client.crt
    client.key
4.1.3 修改/etc/openvpn/client.conf:
在 remote my-server-1 1194 这一行,将 my-server-1 换成 VPN Server 的外部IP
关键四:在结尾添加两行

代码: 全选

up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
目的是根据Server推过来的 dhcp-option 更新域名解析设置

4.1.4 其它设置:
关键五:安装resolvconf软件包

代码: 全选

sudo apt-get install resolvconf
关键四中设置的脚本需要使用此软件。

在Windows中,
4.2.1 将client.ovpn拷贝的config目录
4.2.2 将证书和相关私匙拷贝到config目录
  • ca.crt
    client.crt
    client.key
4.2.3 将client.ovpn中的my-server-1改为VPN Server的外部IP

欢迎指正!
愿意共同探讨你遇到的问题。
头像
leozhang2002
帖子: 87
注册时间: 2005-08-17 23:44
来自: 武汉

#2

帖子 leozhang2002 » 2007-11-23 16:26

写的不错,详细说明了每一个操作步骤的原因,大家配置下来会学习到不少东西。

顶一下!
为折腾而用Linux;为不折腾而用Windows

To be, or not to be: that is the question:
头像
leozhang2002
帖子: 87
注册时间: 2005-08-17 23:44
来自: 武汉

#3

帖子 leozhang2002 » 2007-12-19 19:36

我找到一个更加详尽的配置说明,分享一下!

OpenVPN 配置和使用

日期:2006-08-22 作者:lgx 来自:dream4ever
简介 OpenVPN

OpenVPN 是一个基于 OpenSSL 库的应用层 VPN 实现。和传统 VPN 相比,它的优点是简单易用。详细信息可以参考 http://www.openvpn.net



这里简单介绍一下基于 CA ,采用数字证书认证,可以划分多个网段的 OpenVPN 配置方法。



Note 1: VNN 和 OpenVPN 很像。

Note 2: 这个东西对于突破国内网络封锁,保护通信自由很有意义,值得大力推广。

安装 OpenVPN

Linux 下的安装

首先,Kernel 必须支持 TUN/TAP 设备。在 2.6.x 内核中,对应的 Kernel 选项是 “Universal TUN/TAP device driver support”。

确认 Kernel 支持 TUN/TAP 后,可以下载 OpenVPN 编译并安装。这一步很 easy,不多说了。

Windows 下的安装

http://www.openvpn.se 下载安装包安装,这里的安装包带一个 Client GUI 工具,很好用。

配置 OpenVPN

配置 OpenVPN Server

只说明在 Linux 下的配置。Windows 类似。创建 /etc/vpn/server.conf,内容如下:
port 1494
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem

server 10.1.0.0 255.255.255.0

push "route 10.1.0.0 255.255.255.0"
push "route 10.1.1.0 255.255.255.0"

client-config-dir /etc/vpn/ccd
route 10.1.1.0 255.255.255.0

client-to-client

keepalive 10 120

user nobody
group nobody

persist-key
persist-tun

log-append openvpn.log
verb 3



其中 ca.crt, server.key,server.crt 可以用以前贴出的 ca 工具创建,dh1024.pem 用 OpenVPN 自带的工具创建。



这个配置文件创建了两个网段:10.1.0.* 和 10.1.1.*,VPN 服务器将从这两个网段中给 Client 分配 IP 地址。VPN Server 自身 IP 将是 10.0.0.1。

“client-config-dir”指明 Client 的专有配置文件目录。在这个目录下可以针对特定用户建立配置文件。例如,要为用户 abc 指定一个 IP 地址(如10.1.1.5)而不是让 VPN Server 自动分配,可以在配置目录/etc/vpn/ccd下建立一个 abc 文件,内容如下:

ifconfig-push 10.1.1.5 10.1.1.6



那么 VPN Server 就会自动给 abc 用户分配 10.1.1.5 这个地址。注意第一个IP地址 的最后一个数字(这里是 5)必须是 4*n + 1 的数。


问题是,VPN Server 怎么知道哪个用户是 abc 呢?它是 Client 数字证书中的 Common Name 域来判断的。就是说,在连接协商时如果 Client 端数字证书的 Common Name 是 abc,那么 VPN Server 就找配置目录下 abc 这个文件。


配置 OpenVPN Client

在 Client 机器上 OpenVPN 安装目录的 config 目录下建立如下 client.ovpn 文件:


client
dev tun
proto udp
remote vpn_server_ip 1494

ca ca.crt
cryptoapicert "SUBJ: abc"

nobind
persist-key
persist-tun
verb 2




修改 remote 一行填上对应 VPN Server 的 IP 和 端口。ca.crt 和服务端 ca.crt 一样,必须把这个 ca.crt 也放在 config 目录下。



关键是 cryptoapicert "SUBJ: abc" 这行。这一行指定客户端的数字证书从 Windows 证书 Store 里取。在 IE 的“选项 -> 内容 -> 证书”页面能看到你的个人数字证书。SUBJ:abc 指明选择证书主题中含有 abc 的证书。客户端数字证书也可以用以前贴的 ca 工具生成,如果要给用户 abc 签发数字证书,只用指明 Common Name 是 abc 即可,然后把生成的 abc.p12 传给 abc 用户并告诉导入口令。abc 导入这个数字证书后,VPN Client 就可以工作了。



启动 OpenVPN

服务端启动

在 /etc/vpn 目录下,执行:

openvpn --daemon --config server.conf



客户端启动

OpenVPN 带一个 GUI 小工具,会装在系统托盘里。点菜单里的 connect 即可。

常见问题

无法得到 IP 地址

通常是因为 DHCP Client 服务没有启动。在服务管理里启动即可。
原文链接:https://dream4ever.org/showthread.php?t=35086
为折腾而用Linux;为不折腾而用Windows

To be, or not to be: that is the question:
nomove
帖子: 58
注册时间: 2008-04-13 13:13

#4

帖子 nomove » 2008-05-13 10:05

希望能说说 VPN服务器的设置,不然openVPN还不如ubuntu自己的client容易用
头像
百草谷居士
帖子: 3920
注册时间: 2006-02-10 16:36
系统: Mint21.1/Deepin20.8

Re: [原创] Configure OpenVPN on Ubuntu

#5

帖子 百草谷居士 » 2008-11-21 20:56

我运行./vars脚本,但是并没有生成系统变量,所以后续的脚本并不能运行。
可是为什么脚本里面的export指令不能生成系统变量呢?真的是好奇怪!我直接运行export命令就可以生成系统变量,为什么脚本里面的不起作用呢?
debian 12 / 深度系统 20.9 / Mint 21.3

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
psukk
帖子: 13
注册时间: 2007-01-12 13:23

Re: [原创] Configure OpenVPN on Ubuntu

#6

帖子 psukk » 2008-12-26 9:29

按照楼主的说明,执行到 ./vars时,出现:
NOTE: if you run ./clean-all,I will be doing a rm -rf on /home/ss/keys
这条信息,我的主目录是/home/ss,以后的./clean-all,./build-ca都没法执行,和5楼所说的情况类似

不知大家有无解决方法?
psukk
帖子: 13
注册时间: 2007-01-12 13:23

Re: [原创] Configure OpenVPN on Ubuntu

#7

帖子 psukk » 2008-12-26 11:27

行了,用sh . vars,这样就可以了
头像
seabee
帖子: 243
注册时间: 2006-11-08 13:02

Re: [原创] Configure OpenVPN on Ubuntu

#8

帖子 seabee » 2009-01-04 12:59

生成VPN CLIENT 证书的命令已经更换为: ./pkitool client
最好参考wiki 里面的吧 :em01 希望下次有写明版本号。
简简单单的生活,自自然然的我~www.3gcomet.com
头像
apn
帖子: 362
注册时间: 2007-05-06 21:17

Re: [原创] Configure OpenVPN on Ubuntu

#9

帖子 apn » 2009-02-09 15:04

mark :em06
9981
帖子: 200
注册时间: 2007-05-19 16:24

Re: [原创] Configure OpenVPN on Ubuntu

#10

帖子 9981 » 2009-02-10 17:59

收藏!
9981 学习的过程
http://abcde.blog.ubuntu.org.cn/
blog上的都是原来学习时的记录,现在来看,还需重新整理
ubuntu-server-8.04-lts
我想在日常的工作和生活中应该更多的使用linux
绝对新手
学以致用
头像
百草谷居士
帖子: 3920
注册时间: 2006-02-10 16:36
系统: Mint21.1/Deepin20.8

Re: [原创] Configure OpenVPN on Ubuntu

#11

帖子 百草谷居士 » 2009-04-08 15:43

还是不太清楚,举这样一个例子,哪位给说明一下。
一、现状
一个办公网络,ip地址从192.168.0.1~~192.168.0.12。通过一个网关连接到互联网,网关内部IP地址为192.168.0.99,外部IP地址为123.8.7.14,网关上安装的ubuntu server版。目前办公网络内部计算机都可以相互访问,并且都可以访问互联网。
二、目的
想在外地的两个计算机可以连接到这个办公网络,与目前的计算机可以相互访问,不影响目前办公网络的使用。

请具体讲述一下究竟应该修改配置文件中的哪些内容?
server端如何修改,client端如何修改?
使用dev tun设备是不是还要安装什么软件包?
debian 12 / 深度系统 20.9 / Mint 21.3

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
头像
百草谷居士
帖子: 3920
注册时间: 2006-02-10 16:36
系统: Mint21.1/Deepin20.8

Re: [原创] Configure OpenVPN on Ubuntu

#12

帖子 百草谷居士 » 2009-04-09 8:05

顶,求解
debian 12 / 深度系统 20.9 / Mint 21.3

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
KeithLv
帖子: 10
注册时间: 2007-08-01 20:56

Re: [原创] Configure OpenVPN on Ubuntu

#13

帖子 KeithLv » 2009-04-09 14:06

psukk 写了:按照楼主的说明,执行到 ./vars时,出现:
NOTE: if you run ./clean-all,I will be doing a rm -rf on /home/ss/keys
这条信息,我的主目录是/home/ss,以后的./clean-all,./build-ca都没法执行,和5楼所说的情况类似

不知大家有无解决方法?
执行

代码: 全选

source vars
头像
百草谷居士
帖子: 3920
注册时间: 2006-02-10 16:36
系统: Mint21.1/Deepin20.8

Re: [原创] Configure OpenVPN on Ubuntu

#14

帖子 百草谷居士 » 2009-04-10 9:34

百草谷居士 写了:还是不太清楚,举这样一个例子,哪位给说明一下。
一、现状
一个办公网络,ip地址从192.168.0.1~~192.168.0.12。通过一个网关连接到互联网,网关内部IP地址为192.168.0.99,外部IP地址为123.8.7.14,网关上安装的ubuntu server版。目前办公网络内部计算机都可以相互访问,并且都可以访问互联网。
二、目的
想在外地的两个计算机可以连接到这个办公网络,与目前的计算机可以相互访问,不影响目前办公网络的使用。

请具体讲述一下究竟应该修改配置文件中的哪些内容?
server端如何修改,client端如何修改?
使用dev tun设备是不是还要安装什么软件包?
顶,求解。
debian 12 / 深度系统 20.9 / Mint 21.3

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
ufoqhmdt
帖子: 67
注册时间: 2009-02-16 15:24

Re: [原创] Configure OpenVPN on Ubuntu

#15

帖子 ufoqhmdt » 2009-07-17 22:42

狂顶!虽然我的好像没有成功!
回复