学习笔记0604----Linux集群架构(一)

2020-11-24 10:24:42 浏览数 (1)

Linux集群架构一

  • 预习内容
    • 1. 集群介绍
    • 2. keepalived介绍
    • 3. 用keepalived配置高可用集群
      • 3.1 两台服务器分别安装keepalived
      • 3.2 master端进行设置
        • 3.2.1 修改 keepalived 配置文件
        • 3.2.2 定义监控nginx的脚本
        • 3.2.3 启动keepalived服务
        • 3.2.4 修改nginx启动页面
      • 3.3 backup端设置
        • 3.3.1 修改 keepalived 配置文件
        • 3.3.2 定义监控nginx的脚本
        • 3.3.3 启动keepalived服务
        • 3.3.4 修改nginx默认虚拟主机
      • 3.4 测试页面
        • 3.4.1 master使用ens33 ip访问
        • 3.4.2 master使用虚拟vip测试访问
        • 3.4.3 backup端访问页面
      • 3.5 master 停止keepalived
      • 3.6 出问题的点
    • 4. 负载均衡集群介绍
      • 4.1 网络七层图
    • 5. lVS介绍
      • 5.1 LVS NAT模式
      • 5.2 LVS IP Tunnel模式
      • 5.3 LVS DR模式
    • 6. LVS调度算法
    • 7. LVS NAT模式搭建
      • 7.1 准备工作
      • 7.2 dir 端安装ipvsadm
      • 7.3 编写脚本
      • 7.4 测试结果
  • 课后总结
    • 1. 集群以及分类
    • 2 高可用架构的意义
    • 3 Keepalived的实现原理
    • 4 LVS 三种模式图解

预习内容

18.1 集群介绍 18.2 keepalived介绍 18.3/18.4/18.5 用keepalived配置高可用集群 18.6 负载均衡集群介绍 18.7 LVS介绍 18.8 LVS调度算法 18.9/18.10 LVS NAT模式搭建

1. 集群介绍

高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务。集群的特点:高性能(Performance)、价格有效(Cost-effectiveness)、可伸缩性(Scalability)、高可用性(Availability)、透明性(Traansparency)、可管理性(Manageability)、可编程性(Programmability)

根据功能划分为两大类:高可用和负载均衡

  • 实现高可用的开源软件有:heartbeat、keepalived
  • 负载均衡集群,需要有一台服务器作为分发器,它负责把用户的请求分发给后端的服务器处理,在这个集群里,除了分发器外,就是给用户提供服务的服务器了,这些服务器数量至少为2,实现负载均衡的开源软件有LVS、keepalived、haproxy、nginx,商业的有F5、Netscaler

2. keepalived介绍

在这里我们使用keepalived来实现高可用集群,因为heartbeat在centos6上有一些问题,影响实验效果。

  • keepalived通过VRRP(VirtualRouterRedundancyProtocl)来实现高可用。在这个协议里会将多台功能相同的路由器组成一个小组,这个小组里会有1个master角色N(N>=1)个backup角色。
  • master会通过组播的形式向各个backup发送VRRP协议的数据包,当backup收不master发来的VRRP数据包时,就会认为master宕机了。此时就需要根据各个backup的优先级来决定谁成为新的mater。
  • Keepalived要有三个模块,分别是core、check和vrrp。其中core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析,check模块负责健康检查,vrrp模块是来实现VRRP协议的。

3. 用keepalived配置高可用集群

  • 实验环境:
  • 两台机器, 一台IP为:192.168.141.128 用作master ,另一台IP为:192.168.141.129 用作backup。
  • 两台服务器都已经安装过nginx。

3.1 两台服务器分别安装keepalived

代码语言:javascript复制
[root@linux-001 ~]# yum instll -y keepalived
已加载插件:fastestmirror
没有该命令:instll。请使用 /usr/bin/yum --help
[root@linux-001 ~]# yum install -y keepalived
已加载插件:fastestmirror
Repository base is listed more than once in the configuration
Repository updates is listed more than once in the configuration
Repository extras is listed more than once in the configuration
Repository centosplus is listed more than once in the configuration
Determining fastest mirrors
epel/x86_64/metalink                                                                                          | 7.1 kB  00:00:00     
 * base: mirrors.cn99.com
 * epel: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.cn99.com
 * updates: mirrors.zju.edu.cn
base                                                                                                          | 3.6 kB  00:00:00     
epel                                                                                                          | 5.3 kB  00:00:00     
extras                                                                                                        | 3.4 kB  00:00:00     
updates                                                                                                       | 3.4 kB  00:00:00     
(1/3): epel/x86_64/updateinfo                                                                                 | 977 kB  00:00:00     
(2/3): updates/7/x86_64/primary_db                                                                            | 5.0 MB  00:00:01     
(3/3): epel/x86_64/primary_db                                                                                 | 6.7 MB  00:00:05     
正在解决依赖关系
--> 正在检查事务
---> 软件包 keepalived.x86_64.0.1.3.5-8.el7_6 将被 安装
--> 正在处理依赖关系 libnetsnmpmibs.so.31()(64bit),它被软件包 keepalived-1.3.5-8.el7_6.x86_64 需要
--> 正在处理依赖关系 libnetsnmpagent.so.31()(64bit),它被软件包 keepalived-1.3.5-8.el7_6.x86_64 需要
--> 正在处理依赖关系 libnetsnmp.so.31()(64bit),它被软件包 keepalived-1.3.5-8.el7_6.x86_64 需要
--> 正在检查事务
---> 软件包 net-snmp-agent-libs.x86_64.1.5.7.2-37.el7 将被 安装
---> 软件包 net-snmp-libs.x86_64.1.5.7.2-37.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

=====================================================================================================================================
 Package                                架构                      版本                              源                          大小
=====================================================================================================================================
正在安装:
 keepalived                             x86_64                    1.3.5-8.el7_6                     updates                    329 k
为依赖而安装:
 net-snmp-agent-libs                    x86_64                    1:5.7.2-37.el7                    base                       705 k
 net-snmp-libs                          x86_64                    1:5.7.2-37.el7                    base                       749 k

事务概要
=====================================================================================================================================
安装  1 软件包 ( 2 依赖软件包)

总下载量:1.7 M
安装大小:6.0 M
Downloading packages:
(1/3): net-snmp-agent-libs-5.7.2-37.el7.x86_64.rpm                                                            | 705 kB  00:00:00     
(2/3): net-snmp-libs-5.7.2-37.el7.x86_64.rpm                                                                  | 749 kB  00:00:00     
(3/3): keepalived-1.3.5-8.el7_6.x86_64.rpm                                                                    | 329 kB  00:00:00     
-------------------------------------------------------------------------------------------------------------------------------------
总计                                                                                                 1.8 MB/s | 1.7 MB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : 1:net-snmp-libs-5.7.2-37.el7.x86_64                                                                              1/3 
  正在安装    : 1:net-snmp-agent-libs-5.7.2-37.el7.x86_64                                                                        2/3 
  正在安装    : keepalived-1.3.5-8.el7_6.x86_64                                                                                  3/3 
  验证中      : 1:net-snmp-libs-5.7.2-37.el7.x86_64                                                                              1/3 
  验证中      : keepalived-1.3.5-8.el7_6.x86_64                                                                                  2/3 
  验证中      : 1:net-snmp-agent-libs-5.7.2-37.el7.x86_64                                                                        3/3 

已安装:
  keepalived.x86_64 0:1.3.5-8.el7_6                                                                                                  

作为依赖被安装:
  net-snmp-agent-libs.x86_64 1:5.7.2-37.el7                            net-snmp-libs.x86_64 1:5.7.2-37.el7                           

完毕!
[root@linux-001 ~]# 

3.2 master端进行设置

3.2.1 修改 keepalived 配置文件
代码语言:javascript复制
[root@linux-001 ~]# mv /etc/keepalived/keepalived.conf    /etc/keepalived/keepalived.conf.bak
[root@linux-001 ~]# vim /etc/keepalived/keepalived.conf

global_defs {
   notification_email {
     whdong007@163.com
   }
   notification_email_from
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_nginx {
    script "/usr/local/sbin/check_nginx.sh"
    interval 3
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.141.100
    }
    track_script {
        chk_nginx
    }
}
3.2.2 定义监控nginx的脚本
代码语言:javascript复制
[root@linux-001 ~]# vim /usr/local/sbin/check_nginx.sh

#!/bin/bash
#时间变量,用于记录日志
d=`date --date today  %Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
        /etc/init.d/nginx start
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi

[root@linux-001 ~]# chmod 755 /usr/local/sbin/check_ng.sh 
3.2.3 启动keepalived服务

为了做实验,启动keepalived服务的时候,关闭防火墙firewalld,iptables规则清空,selinux也关闭。

代码语言:javascript复制
[root@linux-001 ~]# getenforce 
Disabled
[root@linux-001 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 3866   15M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    1    84 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    1    52 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
   26  4211 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 3102 packets, 234K bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@linux-001 ~]# iptables -F
[root@linux-001 ~]# systemctl stop firewalld


[root@linux-001 ~]# /etc/init.d/nginx start
Reloading systemd:                                         [  确定  ]
Starting nginx (via systemctl):                            [  确定  ]
[root@linux-001 ~]# !ps
ps aux | grep nginx
root       8150  0.0  0.0  20544   600 ?        Ss   03:33   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody     8154  0.0  0.0  20984  1060 ?        S    03:33   0:00 nginx: worker process
root       8160  0.0  0.0 112724   988 pts/0    R    03:33   0:00 grep --color=auto nginx
[root@linux-001 ~]# systemctl start keepalived
[root@linux-001 ~]# ps aux |grep kee
root       7948  0.0  0.0 122980  1412 ?        Ss   03:31   0:00 /usr/sbin/keepalived -D
root       7949  0.0  0.1 133940  3328 ?        S    03:31   0:00 /usr/sbin/keepalived -D
root       7950  0.0  0.1 133812  2604 ?        S    03:31   0:00 /usr/sbin/keepalived -D
root       8269  0.0  0.0 112724   984 pts/0    S    03:34   0:00 grep --color=auto kee
3.2.4 修改nginx启动页面

由于nginx没有配置虚拟主机,使用的默认配置文件,网页在nginx根目录下的html目录下。

代码语言:javascript复制
[root@linux-001 ~]# cd /usr/local/nginx/html/
[root@linux-001 html]# mv index.html  index.html.bak
[root@linux-001 html]# vim index.html

THIS IS MASTER KEEPALVED!

3.3 backup端设置

3.3.1 修改 keepalived 配置文件
代码语言:javascript复制
[root@linux-02 ~]# vim /etc/keepalived/keepalived.conf

global_defs {
   notification_email {
     whdong007@163.com
   }
   notification_email_from
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_nginx {
    script "/usr/local/sbin/check_nginx.sh"
    interval 3
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 55  //在同一网段内virtual_router_id 值不能相同,如果相同会在messages中收到VRRP错误包 所以需要更改
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.141.100
    }
    track_script {
        chk_nginx
    }
}
3.3.2 定义监控nginx的脚本
代码语言:javascript复制
[root@linux-02 ~]# !vim
vim /usr/local/sbin/check_nginx.sh

#!/bin/bash
#时间变量,用于记录日志
d=`date --date today  %Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
        /etc/init.d/nginx start
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi


[root@linux-02 ~]# chmod 755 /usr/local/sbin/check_ng.sh
3.3.3 启动keepalived服务
代码语言:javascript复制
[root@linux-02 ~]# systemctl stop firewalld
[root@linux-02 ~]# iptables -F
[root@linux-02 ~]# 
[root@linux-02 ~]# getenforce 
Disabled

[root@linux-02 ~]# systemctl start keepalived
[root@linux-02 ~]# ps aux |grep keep
root       7596  0.0  0.0 122980  1412 ?        Ss   03:55   0:00 /usr/sbin/keepalived -D
root       7597  0.0  0.1 133940  3316 ?        S    03:55   0:00 /usr/sbin/keepalived -D
root       7598  0.0  0.1 133812  2600 ?        S    03:55   0:00 /usr/sbin/keepalived -D
root       7644  0.0  0.0 112724   984 pts/0    R    03:57   0:00 grep --color=auto keep
3.3.4 修改nginx默认虚拟主机
代码语言:javascript复制
[root@linux-02 vhost]# vim /data/wwwroot/test.com/index.html 

THIS IS BACKUP DEEPALIVED !

3.4 测试页面

3.4.1 master使用ens33 ip访问
3.4.2 master使用虚拟vip测试访问
3.4.3 backup端访问页面

3.5 master 停止keepalived

master端停止keepalived的服务,访问vip地址测试,如下,我们可以查看到访问192.168.141.100地址已经跳转到backup机器上了。

查看/var/log/message日志

3.6 出问题的点

如果日志中有以下的日志说明在keepalived的配置文件中virtual_router_id的值设置有问题。在同一网段内virtual_router_id 值不能相同,如果相同会在messages中收到VRRP错误包,所以需要更改。

4. 负载均衡集群介绍

  • 主流的负载均衡开源软件:LVS、keepalived、haproxy、nginx等
  • keepalived的负载均衡功能其实就是lvs。
  • LVS属于4层(网络OSI7层模型),nginx属于7层,haproxy即可以是4层,也可以是7层。LVS属于4层(网络OSI7层模型),nginx属于7层,haproxy即可以是4层,也可以是7层。
  • lvs这种4层的负载均衡是可以分发除80外的其他端口通信,比如mysql,而nginx仅仅支持http、https、mail。
  • 4层和7层负载比较:
    • LVS4层的更稳定,能承受更多的请求
    • nginx 7层的更加灵活,能实现更多的个性化需要

4.1 网络七层图

5. lVS介绍

LVS:Linux Virtuer Server,即Linux虚拟服务器,是一个虚拟的服务器集群系统,基于TCP/IP做的路由和转发,稳定性和效率很高。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的开源软件项目之一。

LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。

一般来说,LVS集群采用三层结构 A、负载调度器(load balancer)或者叫分发器(Load Runner),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。 B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。 C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

5.1 LVS NAT模式

  • 这种模式借助iptables的nat表来实现
  • 用户的请求到分发器后,通过预设的iptables规则,把请求的数据包转发到后端的rs上去
  • rs需要设定网关为分发器的内网ip
  • 用户请求的数据包和返回给用户的数据包全部经过分发器,所以分发器成为瓶颈
  • 在nat模式中,只需要分发器有公网ip即可,所以比较节省公网ip资源

5.2 LVS IP Tunnel模式

  • 这种模式,需要有一个公共的IP配置在分发器和所有rs上,我们把它叫做vip
  • 客户端请求的目标IP为vip,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为rs的IP,这样数据包就到了rs上
  • rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己

5.3 LVS DR模式

  • 这种模式,也需要有一个公共的IP配置在分发器和所有rs上,也就是vip
  • 和IP Tunnel不同的是,它会把数据包的MAC地址修改为rs的MAC地址
  • rs接收数据包后,会还原原始数据包,这样目标IP为vip,因为所有rs上配置了这个vip,所以它会认为是它自己

6. LVS调度算法

lvs支持的算法有: 轮询:Round-Robin,简称:rr 加权轮询:Weight Round-Robin,简称:wrr 最小连接:Least-Connection,简称:lc 加权最小连接:Weight Least-Connection,简称:wlc 基于局部性的最小连接:Locality-Based Least Connections,简称:lblc 带复制的基于局部性最小连接:Locality-Based Least Connections with Replication,简称:lblcr 目标地址散列调度:Destination Hashing,简称:dh 源地址散列调度:Source Hashing,简称:sh

7. LVS NAT模式搭建

7.1 准备工作

  • 准备三台虚拟机
  • 三台机器上都执行关闭防火墙firewalld,开启iptables
    • systemctl stop firewalld; systemc disable firewalld
    • systemctl start iptables-services; iptables -F; service iptables save
  • 设置虚拟机的ip和网关
    • 分发器,也叫调度器(简写为dir)内网:192.168.141.128,外网:192.168.23.88(vmware仅主机模式)
    • rs1 内网:192.168.141.129,设置网关为 192.168.141.128
    • rs2 内网:192.168.141.130,设置网关为 192.168.141.128

7.2 dir 端安装ipvsadm

使用的源码安装,下载地址:http://www.linuxvirtualserver.org/software/ipvs.html

代码语言:javascript复制
[root@linux-001 ~]# yum -y install popt popt-devel libnl libnl-devel popt-static
安装省略

[root@linux-001 ~]# cd /usr/local/src/  
tar -zxvf ipvsadm-1.26.tar.gz

[root@linux-001 src]#  mv ipvsadm-1.26  /usr/local/ipvsadm

[root@linux-001 src]#  cd !$
cd /usr/local/ipvsadm

[root@linux-001 ipvsadm]#  make && make install
安装省略

ipvsadm工具常用的参数选项有: -A --add-service添加一条新的虚拟服务 -E --edit-service编辑虚拟服务 -D --delete-service删除虚拟服务 -C --clear清除所有的虚拟服务规则 -R --restore恢复虚拟服务规则 -a --add-server在一个虚拟服务中添加一个新的真实服务器 -e --edit-server编辑某个真实服务器 -d --delete-server删除某个真实服务器 -L | -l --list显示内核中的虚拟服务规则 -n --numeric以数字形式显示IP端口 -c --connection显示ipvs中目前存在的连接,也可以用于分析调度情况 -Z --zero将转发消息的统计清零 -p --persistent配置持久化时间 –set tcp tcpfin udp配置三个超时时间(tcp/tcpfin/udp) -t | -uTCP/UDP协议的虚拟服务 -g | -m | -iLVS模式为:DR | NAT | TUN -w 配置真实服务器的权重 -s 配置负载均衡算法,如:rr, wrr, lc等 –timeout 显示配置的tcp/tcpfin/udp超时时间 –stats 显示历史转发消息统计(累加值) –rate 显示转发速率信息(瞬时值)

7.3 编写脚本

代码语言:javascript复制
[root@linux-001 ipvsadm]# vim /usr/local/sbin/lvs_nat.sh
#! /bin/bash
# director 服务器上开启路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
# 关闭icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 注意区分网卡名字,两个网卡分别为ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
# director 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.141.0/24  -j MASQUERADE
# director设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.23.88:80 -s rr
$IPVSADM -a -t 192.168.23.88:80 -r 192.168.141.129:80 -m -w 1
$IPVSADM -a -t 192.168.23.88:80 -r 192.168.141.130:80 -m -w 1

7.4 测试结果

代码语言:javascript复制
[root@linux-001 ipvsadm]# sh  /usr/local/sbin/lvs_nat.sh 
[root@linux-001 ipvsadm]# curl 192.168.23.88
linux-003
[root@linux-001 ipvsadm]# curl 192.168.23.88
linux-002
[root@linux-001 ipvsadm]# curl 192.168.23.88
linux-003
[root@linux-001 ipvsadm]# curl 192.168.23.88
linux-002
[root@linux-001 ipvsadm]# curl 192.168.23.88
linux-003
[root@linux-001 ipvsadm]# 

课后总结

1. 集群以及分类

高可用(双机热备) 负载均衡 分布式集群

2 高可用架构的意义

高可用可以保证业务的稳定性

3 Keepalived的实现原理

VRRP协议 https://blog.csdn.net/u013920085/article/details/21184143

4 LVS 三种模式图解

  • nat模式适用于局域网,使用一台双网卡的服务器做iptables设置,其他局域网内的电脑通过iptables可以访问外网。
  • DR模式适用于局域网,只不过是通过mac地址寻址。分发服务期只需要接收到来源的数据传输给rs,rs处理好数据发送给源地址客户端
  • IP Tunnel模式是和dr类似,只不过是rs端设置一个vip地址

http://blog.51cto.com/jiekeyang/1839583

5 fullnat模式

  • fullnat模式使用与广域网,不限制与局域网,通过在分发器设置dnat和snat,发送给rs。

https://ieevee.com/tech/2015/12/08/fullnat.html

0 人点赞