OpenVPN 带证书服务器搭建配置

来源:互联网 发布:奇迹暖暖设计服装软件 编辑:程序博客网 时间:2024/06/07 06:36

一、服务器环境及目的

 服务器:ubuntu10.04server  

服务器两块网卡,一块连接外网,一块连接内网外网IP: 192.168.1.0办公内网IP:10.10.10.0/24

 

目 的: 

通过VPN在Internet环境下接入办公内网,可以访问内网指定段内的计算机,并且客户端能通过VPN通道访 问Internet

 

二、服务端安装过程

 

1.安装openvpn

 

sudo apt-get install openvpn

 

2. 设置认证机构,产生证书 

在Ubuntu中大致这样操作,将目录 /usr/share/doc/openvpn/examples/easy-rsa/2.0 复制的你的HOME目录(这个目录包含了一系列很方便的脚本),修改vars使其符合你的实际情况(国家、省份、城市、公司、机构、邮件地址),然后运行
代 码:

 cp /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa

cd /etc/openvpn/easy-rsa

source ./vars./clean-all./build-ca./build-key-server <servername>  //服务器证书./build-key <clientname>         //客户端key./build-dh

 

3. 注意: (一般新配置机器不用。./clean-all)

这只是第一次产生证书的正确操作,其中 build-ca 创建根证书,若你没有清除全部VPN Server/Client的打算,你不应该再次运行此命令;
创建的全部证书及私钥都在当前目录的 keys 下面,而命令 clean-all 将清除 keys 下面全部内容,因此 cliean-all 只在 build-ca 前运行一次。
随后添加 Server 证书或 Client 证书只需运行(建议单独的客户端配置单独的证书)
代码:

 

./vars./build-key-server <servername>or./build-key <clientname>

 

4. 配置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.crtserver.crtserver.keydh1024.pem

 

5. 修改 server.conf 

关键一:
 取消注释 push "route a.b.c.d 255.255.255.0",并将地址和掩码替换为办公网络的地址和掩码

目的是为客户端加一条路由,这样客户端才有可 能访问到办公网络中出VPN Server之外的其它主机

关键二: 取消注释 push "dhcp-option DNS a.b.c.d" 和 push "dhcp-option WINS a.b.c.d", 并将地址替换为实际的 DNS 和 WINS 服务器的地址

目的是客户端连接VPN后仍能访问 Internet,(若推过来的DNS不能解析外部域名,则即使客户端的路由配置正确,想通过域名访问Internet也不可能)

 

示 例server.conf

 

port 443proto udpdev tunca ca.crt       cert server.crt   //注意证书存储路径key server.key    dh dh1024.pemserver 192.168.42.0 255.255.255.0ifconfig-pool-persist ipp.txt

push "redirect-gateway def1 bypass-dhcp" #增加172.16.1.0 IP断的路由 使VPN客户端能访问这个地址段(真正能访问还需要后面的设置)push "route 172.16.1.0 255.255.255.0"push "dhcp-option DNS 202.205.6.4"

#vpn客户端能否相互访问;client-to-client#注释掉此参数表示同一个客户端证书只能有一个连接,如果两个客户端使用同一个证书连接的话,#先连接的会自动断开;duplicate-cnkeepalive 10 120

comp-lzopersist-keypersist-tunstatus openvpn-status.loglog /var/log/openvpn.logverb 3

 

6.Server 端其它设置 

配置服务器,允许包转发:
代码:

 

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

 

设 置iptable转发规则 使访问目标为10.10.10.0段的请求都转发到eth0网卡,这是vpn服务器连接办公内网的网卡,这里很重要,不然的话VPN客户端还是不能访问办 公内网

 

iptables -t nat -A POSTROUTING -d 10.10.10.0/24 -o eth0 -j MASQUERADE

 

设 置iptable转发规则 使来源为vpn客户端的请求都转发到eth1网卡,这是vpn服务器连接Internet的网卡,这里很重要,不然的话VPN客户端还是不能通过VPN访 问Internet

 

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE

 

通 过修改/etc/rc.local,加入以下代码,使服务器重启后自动设置转发规则

 

echo 1 |tee /proc/sys/net/ipv4/ip_forwardiptables -t nat -A POSTROUTING -d 10.10.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADEexit 0

 

三、 客户端配置过程

 

至此openvpn服务器端配置完毕, 客户端只需要将keys目录下生成的对应的ca.crt(公用) 专用client.crt和client.key, client.ovpn拷贝到客户端openvpn安装目录下的config目录,如果没有client.ovpn文件,直接新建一个,内容类似:

 

clientdev tunproto udp   remote <serverip> 443resolv-retry infinitenobindpersist-keypersist-tunca ca.crtcert client.crtkey client.key  comp-lzoverb 3

 

运 行客户端连接试一下吧:)

我这边用的是OpenVPN GUI,注意把证书拷贝到config下,同时改client.vpn中server地址!