Linux自学笔记——模拟搭建openvpn

          VPN直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,openvpn无疑是linux开源vpn的先锋,提供了良好的性能和友好的用户GUI。

OpenVPN是一个基于OpenSSL库的应用层VPN实现。传统vpn相比,它的优点是简单易用。OpenVPN允许参与建立VPN的单点使用共享金钥,电子证书,或者用户名/密码来进行身份认证。

原理:

       OpenVPN的技术核心是虚拟网卡,其次是SSL协议实现,由于SSL协议在其他的词条中介绍的比较清楚了,这里重点对虚拟网卡及其在OpenVpn中的工作原理进行介绍:

       虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如IE)向虚拟网卡发送数据,则服务程序可以读取到该数据,如果服务程序写合适的数据到虚拟网卡,应用软件也可以接受得到。虚拟网卡在很多操作系统下都有相应的实现,这也是OpenVPN能够跨平台一个很重要的理由。

       在OpenVPN中,如果访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包TUN模式或数据帧(TAP模式)发送到虚拟网卡上,服务程序接受该数据并进行相应的处理后,通过socket从外网上发送出去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后,发送给虚拟网卡

演示环境:

      三台主机:node1: eth0 :172.16.23.2(模拟内网地址,网关指向172.16.23.1)

                      Node2:eth0:192.168.162.131(模拟外网地址)

                            eth1:172.16.23.1(模拟内网地址)

                      node3:eth0:192.168.162.130(模拟外网地址)

       本次实验想实现的功能:把node2比作公司的公网地址,node1比作公司的内网。Node3比较家庭的地址。使员工在家能访问公司的内网,使node3能访问node1.

1.      基础环境配置

1)      开启node2核心转发功能;

    image.png                                               

2)      为了便于测试,清空三个节点的防火墙规则关闭selinux;

    image.png

3)      配置各个节点ip地址

2.      安装程序包;

1)      配置epel源仓库;

2)      安装openvpn

#yum install openvpn –y

3)      安装easy-rsa,用来制作ca证书,服务端证书,客户端证书;

#wget https://github.com/OpenVPN/easy-rsa/archive/master.zip

#unzip master.zip

#mv easy-rsa-mater/  easy-rsa/      (将解压后的文件夹重命名)

#cp  -R easy-rsa/   /etc/openvpn/       (将重命名的文件夹复制到/etc/openvpn目录下)

4)      编辑服务器端vars文件

# cd /etc/openvpn/easy-rsa/easyrsa3/

# cp vars.example vars

# vim vars

image.png

5)      创建根证书

# ./easyrsa  init-pki           (初始化)

# ./easyrsa  build-ca               (创建根证书)

Note:这一步会需要输入PEM密码,输入两次,请记住此密码,否则后面不能为证书签名。还需要输入common name通用名,随便起一个便可;

6)      创建服务器端证书

        # ./easyrsa  gen-req  server  nopass         (创建服务器端证书,note:在此过程中也要输入common name,不跟之前的根证书的common name一样即可)

       # ./easyrsa sign server server          (签约服务端证书,此过程需要你确认yes,还需要你创建ca时的密码。)

7)      创建Diffie-Hellman

       # ./easyrsa gen-dh            (创建Diffie-Hellman,确保key穿越不安全网络的命令)

8)      创建ta秘钥文件

       # openvpn --genkey --secret  ta.key  (创建ta秘钥文件)

9)      创建客户端证书;

       # mkdir /root/client  && cd  /root/client

       # cp –R  /root/easy-rsa/   ./

       # cd easy-rsa/easyrsa3/

       # ./easyrsa  init-pki  (初始化)

       # ./easyrsa gen-req yourname   (生成证书,yourname为自定的名字)

       # cd /etc/openvpn/easy-rsa/easyrsa3/

       # ./easyrsa  import-req  /root/client/easy-rsa/easyrsa3/pki/reqs/yourname.req   yourname   (导入证书)

       # ./easyrsa  sign  client  yourname   (签约证书,note:这里生成client所以必须为client,qingliu要与之前导入名字一致)

10)  拷贝文件到相应位置;

拷贝服务器端所需文件;

]# cp pki/ca.crt /etc/openvpn/

]# cp pki/private/server.key /etc/openvpn/

]# cp pki/issued/server.crt /etc/openvpn/

]# cp pki/dh.pem /etc/openvpn/

]# cp /etc/openvpn/easy-rsa/ta.key /etc/openvpn/

 

拷贝客户端所需文件;

]# cp pki/ca.crt /root/client/

]# cp pki/issued/yourname.crt /root/client/

]# cp /root/client/pki/private/yourname.key /root/client/

]# cp /etc/openvpn/easy-rsa/ta.key  /root/client/

11)  修改openvpn的配置文件;

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

    image.png

启动服务:

    image.png

而且多了一个虚拟网卡;

    image.png

3.      安装linux客户端连接;

1)      安装openvpn,与服务器端一样;

2)      将服务器端的ca.crt,yourname.crt,yourname.key, ta.key文件转到/etc/openvpn目录下;

    image.png

3)      创建client.conf;

    image.png

4)      远程拨入vpn,测试;

    image.png

观察客户端也多了张虚拟网卡;

    image.png

测试ping内网地址;

    image.png

以上表明,本次实验已经成功,以下我们将配置mysql方式认证登录vpn连接;

4.      配置mysql认证登录vpn;

1)      安装mysql;

2)      登录mysql,创建表及字段等;

    image.png

3)      创建登录表;

    image.png

4)      插入用户数据

    image.png

5)      配置pam_mysql模块;

    image.png

使用testsaslauthd验证登录情况;

    image.png

6)      安装openvpn服务器的auth-pam插件;

Node2上安装的openvpn有自带的模块openvpn-auth-pam.so,但是好像2.1版本以上的openvpn自带的openvpn-auth-pam.so验证会出现验证失败的问题,这里需要重新编译安装;

下载源码包http://pkgs.fedoraproject.org/repo/pkgs/openvpn/openvpn-2.0.7.tar.gz,注意不要使用wget,可能解压会出现问题;

    image.png

# cp ./openvpn-auth-pam.so /etc/openvpn/

7)      配置vpn配置文件server.conf,添加三行配置;

    image.png

8)      编辑客户端配置文件client.conf;

    image.png

9)      启动openvpn服务端服务,并从客户端连接,从客户端连接输入username和password。跟上一样测试;


猜你喜欢

转载自blog.51cto.com/claude666/2108170