• 运维特工,战胜心魔!!
  • 有些事情其实没有那么难,只是我们感觉难,走出第一步!
  • 你所浪费的今天,是昨天死去的人奢望的明天!!!
  • 欢迎访问 unixfbi.com 运维特工社区http://unixfbi.com/
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧
  • 运维特工:http://www.unixfbi.com
  • 人生没有白走的路,每一步都算数!!
  • 空杯心态,沉淀自己!

LVS使用防火墙标记实现多端口绑定服务

LVS unixfbi 1年前 (2018-04-09) 14931次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

LVS 使用防火墙标记实现多端口绑定服务

[TOC]

一、防火墙标记介绍

我们使用 LVS/DR 模式搭建 web 服务器的负载均衡,如果 web 服务器需要同时支持 http 和 https 的话,需要配置两套服务了,一套基于 http 的 80 端口,另一套基于 https 的 443 端口。配置两套有没有感觉维护起来比较麻烦。有没有其他的解决方案呢?答案是有的。下面我们来看看防火墙标记与 LVS 结合实现这一功能。

防火墙标记和 lvs 结合,可以让两个服务 指向同一个集群,例如我们这里把 80 和 443 端口的服务 都指向同一个集群。 功能:将共享一组 RS 的集群服务统一进行定义。
通过 FWM 定义集群的方式步骤:
(1)在 director 上 netfilter 的 mangle 表的 PREROUTING 定义用于“打标”的规则

# iptables  -t  mangle  -A  PREROUTING   -d  $vip -p $protocol  --dports $dport  -j  MARK  --set-mark   $num

$vip 是 LVS 的 VIP 地址,$dport 是要访问本地的端口,$num 是防火墙标记位。如果想让 2 个不同的端口当做同一个集群服务的话,这里的$num 的值要一样.
(2)基于 FWM 定义集群服务:

# ipvsadm  -A  -f $num -s  scheduler

我们这个实验是根据 DR 模式来做的。具体 DR 模式的环境以及抑制 ARP 信息,请参考 LVS-DR 模式介绍与搭建 基础环境 我是使用的这篇文章来搞的。

二、配置 https 证书

1.CA 创建

# cd /etc/pki/CA
# (umask 077; openssl genrsa  -out private/cakey.pem 2048) #此步骤会生成 cakey.pem 文件
# ll private/
总用量 4
-rw------- 1 root root 1679 4 月   8 17:54 cakey.pem  

# touch index.txt
# echo 01 > serial
# openssl req -new -x509 -key private/cakey.pem  -out  certs/cacert.pem  -days  365   # 此步骤会生成 cacert.pem 文件
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:Beijing UnixFBI Technology Co.,Ltd 
Organizational Unit Name (eg, section) []:CA
Common Name (eg, your name or your server's hostname) []:
Email Address []: 

2.申请证书操作

在 rs 上申请证书:

# mkdir /etc/nginx/ssl  && /etc/nginx/ssl

生成秘钥和签署请求:
此步骤会同时生成 www.unixfbi.com.keywww.unixfbi.com.csr 两个文件

# openssl req -new -nodes -sha256 -newkey rsa:2048 -keyout www.unixfbi.com.key -out www.unixfbi.com.csr
Generating a 2048 bit RSA private key
...........+++
...................................................+++
writing new private key to 'www.unixfbi.com.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:Beijing UnixFBI Technology Co.,Ltd
Organizational Unit Name (eg, section) []:IT Dept
Common Name (eg, your name or your server's hostname) []:www.unixfbi.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

# ll /etc/nginx/ssl/
总用量 8
-rw-r--r-- 1 root root 1054 2 月  16 23:21 www.unixfbi.com.csr
-rw-r--r-- 1 root root 1704 2 月  16 23:21 www.unixfbi.com.key

3.CA 签署证书

在 CA 服务器上操作
先把 rs 上的签署请求的 csr 文件 发送到 CA 机器上

# scp www.unixfbi.com.csr root@192.168.199.150:/tmp/

签署证书
此步骤生成了 www.unixfbi.com.crt 文件

# openssl ca -keyfile /etc/pki/CA/private/cakey.pem -cert /etc/pki/CA/certs/cacert.pem -days 3650 -extensions usr_cert -notext -md sha256 -in /tmp/www.unixfbi.com.csr -out /tmp/www.unixfbi.com.crt

查看生成的 crt 文件:

# ll /tmp/www.unixfbi.com.crt
-rw-r--r-- 1 root root 1395 4 月   8 18:29 /tmp/www.unixfbi.com.crt

把 www.unixfbi.com.crt 文件发到两台 RS 机器上

# scp /tmp/www.unixfbi.com.crt   root@192.168.199.151:/etc/nginx/ssl/
scp /tmp/www.unixfbi.com.crt   root@192.168.199.152:/etc/nginx/ssl/

4.测试

测试之前需要先配置好 nginx 关于 https 的配置,如果是 yum 安装的 nginx,只需要修改/etc/nginx/nginx.conf 中取消 https 的注释 并且正确填写 ssl 证书的目录,然后 reload 一下 nginx 即可。

LVS 使用防火墙标记实现多端口绑定服务

LVS 使用防火墙标记实现多端口绑定服务

到此 https 证书已经配置完成。

三、根据 DR 模式配置防火墙标记

1.创建防火墙标记

# iptables  -t  mangle  -A PREROUTING  -d 192.168.199.149 -p  tcp  --dport 80  -j MARK  --set-mark  20
# iptables  -t  mangle  -A PREROUTING  -d 192.168.199.149  -p  tcp  --dport 443 -j MARK  --set-mark 20
# iptables -L -n -t mangle
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
MARK       tcp  --  0.0.0.0/0            192.168.199.149      tcp dpt:80 MARK set 0x14
MARK       tcp  --  0.0.0.0/0            192.168.199.149      tcp dpt:443 MARK set 0x14

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

2.配置 LVS

我们这里使用的是 DR 模式,其实也可以使用 NAT 模式。可以根据 man ipvsadm 命令查看具体的举例信息。

# ipvsadm  -A  -f  20 -s rr  
# ipvsadm  -a  -f  20  -r 192.168.199.151  -g    
# ipvsadm  -a  -f  20  -r 192.168.199.152  -g 

# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  20 rr persistent 1
  -> 192.168.199.151:0            Route   1      0          0         
  -> 192.168.199.152:0            Route   1      0          0     

-f 选项就表明了这次的集群我们采用了防火墙标记的方式,后面的 20 就是我们上面 iptables 定义的 MARK 标记值。

为了显示良好的负载效果,我们设置一下 timeout 时间:

# ipvsadm --set 1 2 1

--timeout
Timeout output. The list command with this option will display the time‐out values (in seconds) for TCP sessions, TCP sessions after receiving a FIN packet, and UDP packets.

ipvsadm --set tcp tcpfin udp

--set tcp tcpfin udp
Change the timeout values used for IPVS connections. This command always takes 3 parameters, representing the timeout values (in seconds) for TCP sessions, TCP sessions after receiving a FIN packet, and UDP pack‐ ets, respectively. A timeout value 0 means that the current timeout valu of the corresponding entry is preserved.

3.测试

LVS 使用防火墙标记实现多端口绑定服务

LVS 使用防火墙标记实现多端口绑定服务

使用 curl 命令测试并查看状态


$ for i in `seq 1 10`; do curl http://192.168.199.149/ && curl -k https://192.168.199.149/ ;done RS-node2 RS-node1 RS-node2 RS-node1 RS-node2 RS-node1 RS-node2 RS-node1 RS-node2 RS-node1 RS-node2 RS-node1 RS-node2 RS-node1 RS-node2 RS-node1 RS-node2 RS-node1 RS-node2 RS-node1

查看状态:

# ipvsadm -Lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 00:00  FIN_WAIT    192.168.199.102:52538 192.168.199.149:443 192.168.199.151:443
TCP 00:00  FIN_WAIT    192.168.199.102:52535 192.168.199.149:80 192.168.199.152:80
TCP 00:00  FIN_WAIT    192.168.199.102:52531 192.168.199.149:80 192.168.199.152:80
TCP 00:00  FIN_WAIT    192.168.199.102:52532 192.168.199.149:443 192.168.199.151:443
TCP 00:00  FIN_WAIT    192.168.199.102:52537 192.168.199.149:80 192.168.199.152:80
TCP 00:00  FIN_WAIT    192.168.199.102:52540 192.168.199.149:443 192.168.199.151:443
TCP 00:00  FIN_WAIT    192.168.199.102:52543 192.168.199.149:80 192.168.199.152:80
TCP 00:00  FIN_WAIT    192.168.199.102:52534 192.168.199.149:443 192.168.199.151:443
TCP 00:00  FIN_WAIT    192.168.199.102:52545 192.168.199.149:80 192.168.199.152:80
TCP 00:00  FIN_WAIT    192.168.199.102:52548 192.168.199.149:443 192.168.199.151:443
TCP 00:00  FIN_WAIT    192.168.199.102:52539 192.168.199.149:80 192.168.199.152:80
TCP 00:00  FIN_WAIT    192.168.199.102:52541 192.168.199.149:80 192.168.199.152:80
TCP 00:00  FIN_WAIT    192.168.199.102:52542 192.168.199.149:443 192.168.199.151:443
TCP 00:00  FIN_WAIT    192.168.199.102:52546 192.168.199.149:443 192.168.199.151:443
TCP 00:00  FIN_WAIT    192.168.199.102:52533 192.168.199.149:80 192.168.199.152:80
TCP 00:00  FIN_WAIT    192.168.199.102:52536 192.168.199.149:443 192.168.199.151:443
TCP 00:01  FIN_WAIT    192.168.199.102:52549 192.168.199.149:80 192.168.199.152:80
TCP 00:00  FIN_WAIT    192.168.199.102:52547 192.168.199.149:80 192.168.199.152:80
TCP 00:01  FIN_WAIT    192.168.199.102:52550 192.168.199.149:443 192.168.199.151:443
TCP 00:00  FIN_WAIT    192.168.199.102:52544 192.168.199.149:443 192.168.199.151:443

参考文档

https://blog.csdn.net/z1547840014/article/details/25384697
https://blog.csdn.net/reblue520/article/details/50889235
https://blog.csdn.net/joeyon1985/article/details/43702825
http://blog.51cto.com/wuhf2015/1654648


UnixFBI 运维特工 , 版权所有丨如未注明 , 均为原创丨 转载请务必注明原文链接http://www.unixfbi.com/453.html
喜欢 (0)
[支付宝]
分享 (0)
unixfbi
关于作者:
运维工程师一枚,做有价值的事情!
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址