cike0415 发表于 2019-1-2 13:32:13

LNMP+SSL+ LVS

  LNMP+SSL+LVS-DR+ipvsadm+LVS Persistence实现同一种服务的不同端口定向到同一台realserver
说明:本实验是在VMware虚拟机中实现:
共需三个虚拟linux主机,三台虚拟linux主机的网卡模式都为桥接,
本文以web服务的http与https为例
三台虚拟主机分别为:director,RS1,RS2,其中RS1和RS2为realserver
director:   dip   eth0      172.16.22.1
vip   eth0:1   172.16.22.2
RS1         rip   eth0      172.16.22.10   网关:172.16.0.1
vip   lo:0      172.16.22.2       子网掩码:255.255.255.255
RS2         rip   eth0   172.16.22.11   网关:172.16.0.1
vip   lo:0      172.16.22.2       255.255.255.255
确保windows的防火墙以及虚拟机里的linux防火墙完全关闭
图示如下:
http://blog.运维网.com/attachment/201204/190039956.png
前提:RS1和RS2已经搭建好LNMP平台,具体实施细节请看:
http://lihuan.blog.运维网.com/4391550/809395
这里不再赘述。
实现过程:
1.在director上安装ipvsadm,开启转发功能并配置好ip地址


[*]# grep –i“vs” /boot/config-2.8.18-164.e15
[*]# yum install ipvsadm –y
[*]# rpm –ql ipvsadm
[*]# sysctl –w net.ipv4.ip_forward=1
[*]# setenforce=0
[*]# ifconfig eth0 172.16.22.1 255.255.0.0
[*]# ifconfig eth0:1 172.16.22.2 broadcast 172.16.22.2 netmask 255.255.255.255 up
[*]# route –add –host 172.16.22.2 dev eth0:1


2.在RS1上配置IP与arp规则:


[*]# ifconfig eth0 172.16.22.10 255.255.0.0
[*]# ifconfig lo down
[*]# ifconfig lo up
[*]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[*]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[*]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[*]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[*]# ifconfig lo:0 172.16.22.2 broadcast 172.16.22.2 netmask 255.255.255.255 up
[*]# route add –host 172.16.22.2 dev lo:0
[*]#echo
[*]“rs1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111” > /var/www/html/index.html
[*]# setenforce=0
[*]# service httpd restart
[*]# elinks -dump http://172.16.22.10

http://blog.运维网.com/attachment/201204/190102453.jpg
此时说明本机可以正常访问web服务了。
3.在RS2上配置IP与arp规则:


[*]# ifconfig eth0 172.16.22.11 255.255.0.0
[*]# ifconfig lo down
[*]# ifconfig lo up
[*]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[*]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[*]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[*]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[*]# ifconfig lo:0 172.16.22.2 broadcast 172.16.22.2 netmask 255.255.255.255 up
[*]# route add –host 172.16.22.2 dev lo:0
[*]#echo
[*]“rs2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222” > /var/www/html/index.html
[*]# setenforce=0
[*]# service httpd restart
[*]# elinks -dump http://172.16.22.11

http://blog.运维网.com/attachment/201204/190119914.jpg
此时说明本机可以正常访问web服务了。
4.为RS1和RS2准备证书文件与私钥文件
(1).在RS1上:
# cd /etc/pki/tls
# vim openssl.cnf
[ CA_default ]
dir         = ../../CA            # Where everything is kept
把上面”=../../CA”改为”=/etc/pki/CA”


[*]# cd ..
[*]# cd CA
[*]# mkdir certs crl newcerts
[*]# touch index.txt
[*]# echo 01 > serial
[*]# echo 01 > crlnumber
[*]# (umask 077;openssl genrsa 2048 > private/cakey.pem)   #生成CA自己的私钥
[*]# openssl req –new –x509 –key private/cakey.pem –out cacert.pem –days 3650

依次输入”CN、Henan、ZZ、M、Tech 、、 ” 这是CA为自己签发证书


[*]# mkdir /etc/nginx/ssl
[*]# cd /etc/nginx/ssl
[*]# (umask 077;openssl genrsa 1024 > nginx.key)   #生成nginx自己的私钥
[*]# openssl req –new –key nginx.key –out nginx.csr

依次输入”CN、Henan、ZZ、M、Tech 、、 ”,这是生成nginx的证书签发请求
# openssl ca –in nginx.csr –out nginx.crt#CA为nginx颁发证书
(2).在RS2上:


[*]# mkdir /etc/nginx/ssl
[*]# cd /etc/nginx/ssl
[*]# (umask 077;openssl genrsa 1024 > nginx.key)   #生成nginx自己的私钥
[*]# openssl req –new –key nginx.key –out nginx.csr

依次输入”CN、Henan、ZZ、M、Tech 、、 ”,这是生成nginx的证书签发请求
# scp nginx.csr root@172.16.22.10:/root#此时需要输入RS1的root用户的密码
把RS2上nginx的证书签发请求拷贝到RS1上,由RS1的CA签发证书
在RS1上:
# cd
# openssl ca –in nginx.csr –out nginx.crt#CA为nginx颁发证书
# scp nginx.crt root@172.16.22.11:/etc/nginx/ssl#此时需要输入RS2的root用户的密码
5.更改RS1和RS2的nginx配置文件,以支持https协议
在RS1上:
# vim /etc/nginx/nginx.conf
修改:
# HTTPS server
    #
    #server {
    #    listen       443;
    #    server_namelocalhost;

    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_keycert.key;

    #    ssl_session_timeout5m;

    #    ssl_protocolsSSLv2 SSLv3 TLSv1;
    #    ssl_ciphersHIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers   on;

    #    location / {
    #      root   html;
    #      indexindex.html index.htm;
    #    }
#}为:
# HTTPS server
    #
    server {
      listen       443;
      server_namewww.lihuan.com;

      ssl                  on;
      ssl_certificate      cert.pem;
      ssl_certificate_keycert.key;

      ssl_session_timeout5m;

      ssl_protocolsSSLv2 SSLv3 TLSv1;
    #    ssl_ciphersHIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers   on;

      location / {
            root   html;
            indexindex.html index.htm;
      }
    }
说明:RS2上修改配置文件支持https协议的方法同RS1,这里不再赘述。

6.在director上定义ipvsadm规则与持久防火墙标记,以实现同一个服务的不同端口定向到同一台realserver中
# iptables –t mangle –A PREROUTING –i eth0 –p tcp –d 172.16.22.2 –dport 80 –j MARK –set-mark 20
# iptables –t mangle –A PREROUTING –i eth0 –p tcp –d 172.16.22.2 –dport 443 –j MARK –set-mark 20
# ipvsadm –A –f 20 –s wlc –p 2000
# ipvsadm –a –f 20 –r 172.16.22.10 –g –w 5
# ipvsadm –a –f 20 –r 172.16.22.11 –g –w 4
说明:上面几条语句中绿色的字体的范围可以是0-99的任意整数,此处选为20,一旦选为20,这几条语句必须都是用20才能保证同一服务的不同端口定向到同一台realserver中

7.测试
前提:把RS1上的CA证书导入到windows物理机的浏览器中。
在浏览器输入:
http://172.16.22.2,出现:
http://blog.运维网.com/attachment/201204/190203148.jpg然后再输入https://172.16.22.2,出现:
此时发现http和https的结果是一样的,说明同一服务的的不同端口定向到
同一台realserver中(有可能是RS1或者RS2,这个是不确定的)



页: [1]
查看完整版本: LNMP+SSL+ LVS