插件窝 干货文章 如何在Linux上设置高可用的网络访问控制

如何在Linux上设置高可用的网络访问控制

节点 iptables 同步 sudo 130    来源:    2025-04-15

Linux高可用网络访问控制设置指南

一、高可用网络访问控制概述

高可用网络访问控制(HA-NAC)确保即使在单点故障情况下,网络访问控制策略仍能持续生效。在Linux环境中,这通常通过以下技术组合实现:

  1. 冗余网络接口绑定
  2. 集群化的防火墙/路由配置
  3. 状态同步机制
  4. 故障自动检测与切换

二、核心组件选择

1. 网络接口绑定 (Bonding/Teaming)

  • 模式选择:推荐使用mode=1(active-backup)或mode=4(802.3ad LACP)
  • 工具iproute2 + ifenslavenmcli(NetworkManager)

2. 高可用集群

  • Keepalived:提供VRRP协议实现,实现VIP漂移
  • Corosync+Pacemaker:更全面的集群管理方案

3. 防火墙同步

  • iptables/nftables:基础防火墙
  • Conntrackd:连接跟踪状态同步
  • FirewalldUFW:更高级管理界面(可选)

三、详细配置步骤

1. 网络接口绑定配置

# 安装必要工具
sudo apt install ifenslave -y  # Debian/Ubuntu
sudo yum install teamd -y      # RHEL/CentOS

# 创建绑定接口(以mode=1为例)
sudo nmcli con add type bond con-name bond0 ifname bond0 mode active-backup
sudo nmcli con add type bond-slave ifname eth0 master bond0
sudo nmcli con add type bond-slave ifname eth1 master bond0
sudo nmcli con up bond0

2. Keepalived配置(主节点)

# /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state MASTER
    interface bond0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass yourpassword
    }
    virtual_ipaddress {
        192.168.1.100/24 dev bond0
    }
}

3. 防火墙状态同步(使用Conntrackd)

# /etc/conntrackd/conntrackd.conf
Sync {
    Mode FTFW {
        DisableExternalCache Off
    }

    UDP {
        IPv4_address 192.168.1.101
        IPv4_Destination_Address 192.168.1.102
        Port 3780
        Interface bond0
        SndSocketBuffer 1249280
        RcvSocketBuffer 1249280
        Checksum on
    }
}

General {
    Nice -20
    HashSize 32768
    HashLimit 131072
    LogFile on
    Syslog on
    LockFile /var/lock/conntrack.lock
    UNIX {
        Path /var/run/conntrackd.ctl
        Backlog 20
    }
    NetlinkBufferSize 2097152
    NetlinkBufferSizeMaxGrowth 8388608
}

4. Pacemaker集群配置(可选高级方案)

# 安装集群软件
sudo apt install pacemaker corosync pcs -y

# 配置基础集群
sudo pcs cluster setup --name ha_cluster node1 node2
sudo pcs cluster start --all
sudo pcs property set stonith-enabled=false  # 测试环境可禁用STONITH

# 创建VIP资源
sudo pcs resource create ClusterVIP ocf:heartbeat:IPaddr2 ip=192.168.1.100 cidr_netmask=24 op monitor interval=30s

5. 防火墙规则同步方案

方案A: 使用rsync定期同步

# 在主节点上设置crontab
*/5 * * * * root rsync -az /etc/iptables.rules backup-node:/etc/iptables.rules && ssh backup-node "iptables-restore < /etc/iptables.rules"

方案B: 使用etcd分布式存储

# 安装etcd并配置
sudo apt install etcd -y

# 使用confd动态更新防火墙规则
template {
  source = "/etc/confd/templates/iptables.tmpl"
  destination = "/etc/iptables.rules"
  command = "/sbin/iptables-restore < /etc/iptables.rules"
}

四、测试与验证

  1. 故障转移测试

    # 在主节点上模拟故障
    sudo ifdown eth0
    # 验证VIP是否转移到备用节点
    ping 192.168.1.100
    
  2. 防火墙规则同步测试

    # 在主节点上添加规则
    sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
    # 在备用节点验证规则是否存在
    sudo iptables -L -n | grep 8080
    
  3. 连接状态同步测试

    # 在主节点建立连接
    curl http://example.com
    # 在主节点查看连接跟踪
    conntrack -L
    # 在备用节点验证连接状态是否同步
    

五、维护与监控

  1. 监控工具

    • ip addr show 检查VIP状态
    • crm_mon -1 检查集群状态
    • conntrackd -s 检查同步状态
  2. 日志配置

    # Keepalived日志
    local0.* /var/log/keepalived.log
    
    # Conntrackd日志
    local1.* /var/log/conntrackd.log
    
  3. 定期维护

    • 每月测试故障转移
    • 定期检查规则同步延迟
    • 监控系统日志中的警告信息

六、高级优化建议

  1. 考虑使用DPDK加速网络处理
  2. 对于超大规模部署,可考虑使用BGP+ECMP替代VRRP
  3. 实施配置版本控制,使用Git管理防火墙规则变更
  4. 考虑使用Kubernetes或Docker Swarm的CNI插件实现更现代的方案

通过以上配置,您可以建立一个高可用的Linux网络访问控制系统,确保在网络组件故障时仍能维持访问控制策略的有效性。