xml地图|网站地图|网站标签 [设为首页] [加入收藏]
来自 新濠国际登录平台 2019-12-13 07:57 的文章
当前位置: 新濠国际登录平台 > 新濠国际登录平台 > 正文

新濠国际登录平台:注在后面生成服务端ca证书时

在使用OpenVPN搭建VPN服务中介绍了如何使用 OpenVPN 搭建最基本的VPN服务, 可以实现单个客户端与服务端的网络互通, 但是客户端之间, 以及服务端和客户端所在的局域网还不能互联. 本文介绍如何在前文的基础上, 实现客户端之间, 以及服务端和客户端所在的局域网的互联.

OpenVPN安装、配置教程

1. 安装epel源

yum -y install epel-release

Openvpn在linux上的完美实现

注意 绝大部分的配置变更都需要重启 OpenVPN 服务, 会导致所有的客户端连接断开.

openvpn的server端配置文件详细说明

2. 安装opensvn

 yum install openvpn easy-rsa -y

 

一,OpenVPN的工作原理**

客户端互联

默认配置下, 多个客户端之间是不能相互联通的. 如果需要实现客户端互联, 需要修改服务端的配置文件, 如 /etc/openvpn/server/myvpn.conf . 在配置文件中, 找到 client-to-client 配置项. 如果配置项前有 # 或者 ; , 将其删除. 如果没有这个配置项, 在一个空行中添加上. 修改后, 配置项如下:

# Uncomment this directive to allow different
# clients to be able to "see" each other.
# By default, clients will only see the server.
# To force clients to only see the server, you
# will also need to appropriately firewall the
# server's TUN/TAP interface.
client-to-client

保存配置后, 需要重启 OpenVPN 服务. 当客户端重新连接到服务后, 应当就可以互通了. 比如有两个客户端, VIP地址分别为10.8.0.6和10.8.0.10:

# ping -c 5  10.8.0.10
PING 10.123.0.10 (10.8.0.10): 56 data bytes
64 bytes from 10.8.0.10: icmp_seq=0 ttl=64 time=14.443 ms
64 bytes from 10.8.0.10: icmp_seq=1 ttl=64 time=14.490 ms
64 bytes from 10.8.0.10: icmp_seq=2 ttl=64 time=14.519 ms
64 bytes from 10.8.0.10: icmp_seq=3 ttl=64 time=14.841 ms
64 bytes from 10.8.0.10: icmp_seq=4 ttl=64 time=14.371 ms

--- 10.8.0.10 ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 14.371/14.533/14.841/0.162 ms    

注意 在客户端可能会在TUN设备上看到两个地址, 其中一个是客户端面的VIP, 另外一个是网关. 比如下例中

utun3: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
    inet 10.8.0.6 --> 10.8.0.5/32 utun3

10.8.0.6是VIP, 而10.8.0.5是网关. 在互联时, 需要使用VIP而不是网关地址.

OpenVPN中TAP-win32d的net30问题

3. 配置服务器进行初始化

cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf  /etc/openvpn/

cp -r /usr/share/easy-rsa/2.0/* /etc/openvpn/

 

VPN技术通过密钥交换、封装、认证、加密手段在公共网络上建立起私密的隧道,保障传输数据的完整性、私密性和有效性。OpenVPN是近年来新出现的开放源码项目,实现了SSLVPN的一种解决方案。

开放服务端所在局域网

比如我们希望从外部 访问公司办公局域网的资源时, 可以在办公网里搭建一个VPN服务器, 然后作为网关将整个局域网开放给VPN客户端.

比如办公局域网的IP地址段为192.168.0.0/24, 我们需要在服务端的配置文件中添加需要推送给客户端的路由信息. 比如在本例中, 将以下配置添加到 /etc/openvpn/server/myvpn.conf :

push "route 192.168.0.0 255.255.255.0"

当客户端连接到服务端时, 服务端会将这条路由信息推送给客户端. 客户端接收到这条路由信息后, 会在本地路由表中添加一条新的路由规则, 将目标地址为192.168.0.0/24网段的数据包, 通过VPN的TUN设备发送到VPN服务端.

配置修改完成后, 重启VPN Server

# systemctl restart openvpn-server@myvpn

最后, 需要注意的是, 如果VPN服务端所在的节点不是其所在局域网的网关, 那么需要在局域网的网关上添加路由转发规则, 将目标地址为VPN VIP网段的数据包, 转发到VPN服务端所在节点.

4. 配置vars文件

 在/etc/openvpn中修改vars

# vim vars

示例如下:

export KEY_COUNTRY="CN"

export KEY_PROVINCE="HB"

export KEY_CITY="WuHan"

export KEY_ORG="CloudHua"

export KEY_EMAIL="1186189695@qq.com"

export KEY_OU="ProjectDepartment"

 

注在后面生成服务端ca证书时这里的配置会作为缺省配置

 

传统SSLVPN通过端口代理的方法实现,代理服务器根据应用协议的类型(如http,telnet等)做相应的端口代理,客户端与代理服务器之间建立SSL安全连接,客户端与应用服务器之间的所有数据传输通过代理服务器转发。这种实现方式烦琐,应用范围也比较窄:仅适用于用TCP固定端口进行通信的应用系统,且对每个需要代理的端口进行单独配置;对于每个需要用到动态端口的协议都必须重新开发,且在代理中解析应用协议才能实现代理,如FTP协议;不能对TCP以外的其它网络通信协议进行代理;代理服务器前端的防火墙也要根据代理端口的配置变化进行相应调整。

多个客户端所在的局域网联通

比如当有两个不同地点的办公室, 各自有一个办公局域网, 我们希望这两个局域能够通过一个单独的VPN服务器互联.

两个局域网的IP地址段不能重合, 比如分别是192.168.100.0/24和192.168.200.0/24, 在两个局域网分别挑一个节点作为VPN网关, 分别命名为office-gateway100和office-gateway200.

首先, 需要在这两个VPN网关上开启IP转发功能. 具体方法参考使用OpenVPN搭建VPN服务中VPN服务端IP转发的开启方法. 然后就可以开始修改服务端配置了.

  1. 在VPN Server的配置文件里添加客户端配置文件目录:

    /ect/openvpn/server/myvpn.conf 文件里, 添加开启配置项 client-config-dir , 例如:

     client-config-dir ccd
    

    OpenVPN 会在工作目录下的子目录 ccd 里, 读取需要为单个客户端所做的处理.

  2. 配置局域网VPN网关转发:

    在 _/etc/openvpn/server/ccd__ 目录下, 为两个局域网的VPN网关, 分别创建配置文件. 配置文件的文件名要和客户名相同.

    1. 创建文件 office-gateway100 , 并在文件里添加路由信息:

      iroute 192.168.100.0 255.255.255.0

    2. 创建文件 office-gateway200 , 并在文件里添加路由信息:

      iroute 192.168.200.0 255.255.255.0

    OpenVPN 会将收到的数据根据这两个配置文件的路由信息, 转发到对应的客户端.

  3. 配置内核转发规则

    回到VPN Server配置文件 myvpn.conf, 添加两个局域网的转发规则:

     route 192.168.100.0 255.255.255.0
     route 192.168.200.0 255.255.255.0
    

    这两项配置生效后, VPN Server所在系统内核会添加相应的路由规则, 将目标地址为这两个子网的数据, 转发到VPN Server的TUN设备上.

  4. 配置客户端推送规则

    在VPN Server配置文件 myvpn.conf 中, 添加如下两条推送规则:

     push "route 192.169.100.0 255.255.255.0"
     push "route 192.168.200.0 255.255.255.0"
    

    VPN Server会将这两条路由规则推送给客户端, 这样客户端向这两个局域网的地址发送的数据, 都会被转发到VPN Server上来.

配置修改完成后, 重启VPN Server

# systemctl restart openvpn-server@myvpn

最后, 如果局域网内的VPN网关并不是局域网的实际网关时, 需要在实际网关上配置路由转发, 将目标地址为对方局域网的数据包, 转发到VPN网关上.


5. 修改vars文件可执行并调用

chmod +x vars

OpenVPN以一种全新的方式实现了SSLVPN的功能,克服了传统SSLVPN的一些缺陷,扩展了应用领域,并且防火墙上只需开放TCP或UDP协议的一个端口。

客户端能访问服务端网段中的其他计算机

参考

英文原文:

openvpn的连接方式有两种

  • dev tap 基于桥接模式
  • dev tun 基于路由模式

6. 产生ca证书

# source ./vars

1,虚拟网卡

包含基于路由模式的VPN服务器端的多台计算机(dev tun)

VPN既然能够让服务器和客户端之间具备点对点的通信能力,那么扩展VPN的作用范围,从而使客户端能够访问服务器所在网络的其他计算机,而不仅仅是服务器自己。

我们来做这样一个假设,服务器端所在局域网的网段为10.66.0.0/24,VPN IP地址池使用10.8.0.0/24作为OpenVPN服务器配置文件中server指令的传递参数。

首先,你必须声明,对于VPN客户端而言,10.66.0.0/24网段是可以通过VPN进行访问的。你可以通过在服务器端配置文件中简单地配置如下指令来实现该目的:

push "route 10.66.0.0 255.255.255.0"

下一步,你必须在服务器端的局域网网关创建一个路由,从而将VPN的客户端网段(10.8.0.0/24)路由到OpenVPN服务器(只有OpenVPN服务器和局域网网关不在同一计算机才需要这样做)。

另外,请确保你已经在OpenVPN服务器所在计算机上启用了IP和TUN/TAP转发。

增加此条路由转发

iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -j SNAT --to-source  10.66.0.xx

开始配置证书

在Linux2.4版本以上,操作系统支持一个名为tun的设备,tun设备的驱动程序中包含两个部分,一部分是字符设备驱动,一部分是网卡驱动。网卡的驱动把从TCP/IP协议栈收到的数据包结构skb放于tun设备的读取队列,用户进程通过调用字符设备接口read获得完整的IP数据包,字符驱动read函数的功能是从设备的读取队列读取数据,将核心态的skb传递给用户;反过来字符驱动write函数给用户提供了把用户态的数据写入核心态的接口,write函数把用户数据写入核心空间并穿入TCP/IP协议栈。该设备既能以字符设备的方式被读写,作为系统的虚拟网卡,也具有和物理网卡相同的特点:能够配置IP地址和路由。对虚拟网卡的使用是OpenVPN实现其SSLVPN功能的关键。

包含基于桥接模式的VPN服务器端的多台计算机(dev tap)

使用以太网桥接的好处之一就是你无需进行任何额外的配置就可以实现该目的。


7. 清空原有证书

# ./clean-all

注:如果执行./clean-all就会清空/etc/openvpn/keys下所有文件,这个命令在第一次安装时可以使用,以后在添加完整客户端后谨慎使用

 

2,地址池以及路由

让客户端所在网段中的服务器都添加进网络,与服务端网络互通信

8. 生成服务器端和存档客户端ca证书

OpenVPN服务器一般需要配置一个虚拟IP地址池和一个自用的静态虚拟IP地址(静态地址和地址池必须在同一个子网中),然后为每一个成功建立SSL连接的客户端动态分配一个虚拟IP地址池中未分配的地址。这样,物理网络中的客户端和OpenVPN服务器就连接成一个虚拟网络上的星型结构局域网,OpenVPN服务器成为每个客户端在虚拟网络上的网关。OpenVPN服务器同时提供对客户端虚拟网卡的路由管理。当客户端对OpenVPN服务器后端的应用服务器的任何访问时,数据包都会经过路由流经虚拟网卡,OpenVPN程序在虚拟网卡上截获数据IP报文,然后使用SSL协议将这些IP报文封装起来,再经过物理网卡发送出去。OpenVPN的服务器和客户端在虚拟网卡之上建立起一个虚拟的局域网络,这个虚拟的局域网对系统的用户来说是透明的。

包含基于路由模式的VPN客户端的多台计算机(dev tun)

在典型的远程访问方案中,客户端都是作为单一的计算机连接到VPN。但是,假设客户端计算机是本地局域网的网关(例如一个家庭办公室),并且你想要让客户端局域网中的每台计算机都能够通过VPN。

举这样一个例子,我们假设你的客户端局域网网段为192.168.4.0/24,VPN客户端使用的证书的Common Name为client2。我们的目标是建立一个客户端局域网的计算机和服务器局域网的计算机都能够通过VPN进行相互通讯。

在创建之前,下面是一些基本的前提条件:

  • 客户端局域网网段(在我们的例子中是192.168.4.0/24)不能和VPN的服务器或任意客户端使用相同的网段。每一个以路由方式加入到VPN的子网网段都必须是唯一的。
  • 该客户端的证书的Common Name必须是唯一的(在我们的例子中是"client2"),并且OpenVPN服务器配置文件不能使用duplicate-cn标记。

首先,请确保该客户端所在计算机已经启用了IP和TUN/TAP转发。

下一步,我们需要在服务器端做一些必要的配置更改。如果当前的服务器配置文件没有引用一个客户端配置目录,请添加一个:

client-config-dir ccd

在上面的指令中,ccd是一个已经在OpenVPN服务器运行的默认目录中预先创建好的文件夹的名称。在Linux中,运行的默认目录往往是/etc/openvpn;在Windows中,其通常是OpenVPN安装路径/config。当一个新的客户端连接到OpenVPN服务器,后台进程将会检查配置目录(这里是ccd)中是否存在一个与连接的客户端的Common Name匹配的文件(这里是"client2")。如果找到了匹配的文件,OpenVPN将会读取该文件,作为附加的配置文件指令来处理,并应用于该名称的客户端。

下一步就是在ccd目录中创建一个名为client2的文件。该文件应该包含如下内容:

iroute 192.168.4.0 255.255.255.0

这将告诉OpenVPN服务器:子网网段192.168.4.0/24应该被路由到client2。
接着,在OpenVPN服务器配置文件(不是ccd/client2文件)中添加如下指令:

route 192.168.4.0 255.255.255.0

你可能会问,为什么需要多余的route和iroute语句?原因是,route语句控制从系统内核到OpenVPN服务器的路由,iroute控制从OpenVPN服务器到远程客户端的路由。它们都是必要的。[详见最后附录]

下一步,请考虑是否允许client2所在的子网(192.168.4.0/24)与OpenVPN服务器的其他客户端进行相互通讯。如果允许,请在服务器配置文件中添加如下语句:

client-to-client
push "route 192.168.4.0 255.255.255.0"

这将导致OpenVPN服务器向其他正在连接的客户端宣告client2子网的存在。

最后一步,这也是经常被忘记的一步:在服务器的局域网网关处添加一个路由,用以将192.168.4.0/24定向到OpenVPN服务器(如果OpenVPN服务器和局域网网关在同一计算机上,则无需这么做)。假设缺少了这一步,当你从192.168.4.8向服务器局域网的某台计算机发送ping命令时,这个外部ping命令很可能能够到达目标计算机,但是却不知道如何路由一个ping回复,因为它不知道如何达到192.168.4.0/24。主要的使用规则是:当全部的局域网都通过VPN时(并且OpenVPN服务器和局域网网关不在同一计算机),请确保在局域网网关处将所有的VPN子网都路由到VPN服务器所在计算机。

类似地,如果OpenVPN客户端和客户端局域网网关不在同一计算机上,请在客户端局域网网关处创建路由,以确保通过VPN的所有子网都能转向OpenVPN客户端所在计算机。

8.1.生成ca证书

# ./build-ca

注:由于之前做过缺省配置这里一路回车即可 

3,客户端与服务端安全连接的建立

包含基于桥接模式的VPN客户端的多台计算机(dev tap)

这需要更加复杂的设置(实际操作可能并不复杂,但详细解释就比较麻烦):

  • 你必须将客户端的TAP接口与连接局域网的网卡进行桥接。
  • 你必须手动设置客户端TAP接口的IP/子网掩码。
  • 你必须配置客户端计算机使用桥接子网中的IP/子网掩码,这可能要通过查询OpenVPN服务器的DHCP服务器来完成。

原创作者:软件指南针(http://www.softown.cn)

关于iroute:

解释起来就是internal route,其实就是独立于系统路由之外的OpenVPN的路由,该路由起到了访问控制的作用,特别是是在多对一即server模式的OpenVPN拓扑中,该机制可以在防止地址欺骗的同时更加灵活的针对每一个接入的客户端进行单独配置。在多对一的情况下,必须要有机制检查访问内网资源的用户就是开始接入的那个用户,由于OpenVPN是第三层的VPN,而且基于独立于OpenVPN进程之外的虚拟网卡,那么一定要防止单独的客户端盗用其它接入客户端的地址的情况。在特定客户端的上下文中配置iroute选项,它是一个ip子网,默认是客户端虚拟ip地址掩码是32位,你可以在保证路由以及IP地址不混乱的前提下任意配置它,OpenVPN仅仅让载荷数据包的源IP地址在iroute选项中配置的子网内的主机通过检查,其它数据载荷一律drop。比如客户端虚拟IP地址是172.16.0.2,而OpenVPN服务器针对该客户端的iroute参数是10.0.0.0/24,那么只要载荷数据包的源IP地址在10.0.0.0/24这个子网中,一律可以通过检查。iroute是OpenVPN内部维护的一个路由,它主要用于维护和定位多个客户端所在的子网以及所挂接的子网,鉴于此,OpenVPN对所谓的网对网拓扑的支持其实超级灵活,它能做到这个虚拟专用网到哪里终止以及从哪里开始。

附录实现多(3)网段互通

8.2.生成服务端证书

# ./build-key-server server    

 

注:生成服务器端密钥证书, 名字可以随便起但要记住后面可能要用到

OpenVPN的服务器和客户端支持tcp和udp两种连接方式,只需在服务端和客户端预先定义好使用的连接方式(tcp或udp)和端口号,客户端和服务端在这个连接的基础上进行SSL握手。连接过程包括SSL的握手以及虚拟网络上的管理信息,OpenVPN将虚拟网上的网段、地址、路由发送给客户端。连接成功后,客户端和服务端建立起SSL安全连接,客户端和服务端的数据都流入虚拟网卡做SSL的处理,再在tcp或udp的连接上从物理网卡发送出去。

8.3.生成客户端证书

# ./build-key client

注:前面按照缺省提示一路回车即,生成客户端证书名字任意建议写成你要发给的人的姓名方便管理这里与生成服务端证书配置类似中间一步提示输入服务端密码也可以不设置密码,如果想生成客户端使用密码方式证书登陆请使用。.

 

4,数据包的处理过程

8.4.生成生Diffie-Hellman 文件验证文件

# ./build-dh

 

注:生成diffie hellman参数用于增强openvpn安全性生成需要漫长等待让服务器飞一会。

 

 8.5.生成ta.key
   
到keys目录下执行:

 

# openvpn --genkey --secret ta.key  

 

 注: ta.key使用OpenVPN生成:openvpn --genkey --secret keys/ta.key。是为了防止恶意攻击(如DoS、UDP port flooding)而生成的一个"HMAC firewall") 如果对安全性要求不高可以不用

4.1发送数据流程

9. openvpn自定义配置文件server.conf,可根据个人需求进行更改,本人这修改以下几个参数(可参考后面的服务端配置文件说明进行配置)

proto tcp //设置用TCP协议

ca     ./keys/ca.crt

cert    ./keys/server.crt

key    ./keys/server.key

dh     ./keys/dh2048.pem

tls-auth ./keys/ta.key 0          //服务端的值为 0

server 10.8.0.0 255.255.255.0    //vpn网段根据需要设置

push "route 192.168.1.0 255.255.255.0"  //允许客户端访问VPN服务器自身所在的其他局域网

 

/*缺省日志会记录在系统日志中但也可以导向到其他地方,建议调试的使用先不要设置,调试完成后再定义*/

log             /var/log/openvpn/openvpn.log

log-append  /var/log/openvpn/openvpn.log

 

应用层的外出数据,经过系统调用接口传入核心TCP/IP层做处理,在TCP/IP经过路由到虚拟网卡,虚拟网卡的网卡驱动发送处理程序hard_start_xmit()将数据包加入skb表并完成数据包从核心区到用户区的复制,OpenVPN调用虚拟网卡的字符处理程序tun_read(),读取到设备上的数据包,对读取的数据包使用SSL协议做封装处理后,通过socket系统调用发送出去。

10. 创建openvpn日志目录

mkdir -p /var/log/openvpn/

4.2接收数据流程
物理网卡接收数据包,经过核心TCP/IP上传到OpenVPN,OpenVPN通过link_socket_read()接收数据包,使用SSL协议进行解包处理,经过处理的数据包OpenVPN调用虚拟网卡的字符处理程序tun_write()写入虚拟网卡的字符设备,设备驱动程序完成数据从用户区到核心区的复制,并将数据写入skb链表,然后调用网卡netif_rx()接收程序,数据包再次进入系统TCP/IP协议栈,传到上层应用程序。

11. 启动openvpn服务

openvpn server.conf(推荐)

或使用systemctl start openvpn@server.service

 

新濠国际登录平台 1

12. 设置开机启动

systemctl enable openvpn@server.service

 

5,数据包的封装

13. 开启路由转发功能

# vim /etc/sysctl.conf

 

找到net.ipv4.ip_forward = 0

把0改成1

 

# sysctl -p /立即生效

 

OpenVPN提供tun和tap两种工作模式。在tun模式下,从虚拟网卡上收到的是不含物理帧头IP数据包,SSL处理模块对IP包进行SSL封装;在tap模式下,从虚拟网卡上收到的是包含物理帧头的数据包,SSL处理模块对整个物理帧进行SSL封装。Tap模式称为网桥模式,整个虚拟的网络就像网桥方式连接的物理网络。这种模式可以传输以太网帧、IPX、NETBIOS等数据包,应用范围更广。

14. 配置iptables nat转发虚拟ip到服务器所在内网(若想直接连接服务器所在局域网)

没有iptables 服务需要先安装iptables防火墙

#yum install iptables-services

#iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE  //智能选择

#  iptables -A INPUT -p TCP --dport 1194 -j ACCEPT

#  iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT //允许连接 

 

保存iptable设置

#service iptables save

 

重启服务

#Service iptables restart

 

//关闭、禁止firewalld避免冲突

#systemctl stop firewalld

#systemctl disable firewalld

6,OpenVPNOpenssl**

15. windows客户端配置

OpenVPN软件包需要和openssl软件一起安装,因为OpenVPN调用了Openssl函数库,OpenVPN的客户端和服务端建立SSL链接的过程是通过调用Openssl来实现的。通过bio_write()/函数把数据写入Openssl的状态机通道,bio_read()从Openssl读取结果。OpenVPN还调用Openssl的加解密函数处理转发的数据包。

首先 将服务器端生成的key ca.crt  client.crt  client.key 下载到本地 ,进入客户端OpenVPN目录将sample-config下的client.ovpn文件复制到config/client目录,(client目录自己新建个方便识别即可 )    

二,OpenVPN的应用**

然后 对client.ovpn配置文件做相应的修改如下(可参考下面的client端配置文件进行配置)

remote 221.216.142.214 1194  //修改成vpn服务器对于的ip和server里面配置使用的端口

tls-auth ta.key 1              //这里客户端值使用值为1

 

/*指定证书的名称和路径*/

ca      ca.crt

cert     client.crt

key      server.key

dh      dh2048.pem

 

 

客户端下载地址 :https://pan.baidu.com/s/1gfGlAUZ   密码:2fje (本人的是2.4.4版本,若需要其他版本请到新濠国际登录平台,)

OpenVPN能够运行于大多常见的系统平台,是一个基于SSL/TLS的VPN解决方案。OpenVPN能够基于TAP/TUN虚拟设备驱动实现2层及3层的链接,提供基于SSL/TLS的工业级别加密功能,并且实现了大多数常见VPN解决方案的全部特性。但目前提供整合了OpenVPN的VPN硬件厂商还不太多。

本文由新濠国际登录平台发布于新濠国际登录平台,转载请注明出处:新濠国际登录平台:注在后面生成服务端ca证书时

关键词: