如何在Linux上配置高可用的NAT网关

来源:站长联盟作者:盲改大师头衔:程序员
导读:本期聚焦于小伙伴创作的《如何在Linux上配置高可用的NAT网关》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在Linux上配置高可用的NAT网关》有用,将其分享出去将是对创作者最好的鼓励。

在Linux系统上搭建NAT网关时,单节点部署很容易出现单点故障风险,一旦网关服务器出现问题,内网所有依赖该网关的设备都会失去外网访问能力。配置高可用的NAT网关可以通过主备节点自动切换的方式,有效避免这类问题,保障网络通信的稳定性。

如何在Linux上配置高可用的NAT网关

高可用NAT网关的核心架构

高可用NAT网关通常采用双节点部署模式,两个节点都具备NAT转发能力,其中一个作为主节点处理流量,另一个作为备节点处于待命状态。当主节点出现故障时,备节点会自动接管服务,整个过程对内部用户无感知。核心组件包含以下几个部分:

  • keepalived:负责主备节点的健康检测和VIP(虚拟IP)漂移,实现故障自动切换
  • iptables:配置NAT转发规则,将内网流量转换为外网IP发出
  • ipvs:可选组件,用于实现多节点的流量负载均衡,提升网关整体吞吐量

前置准备

开始配置前需要准备以下环境:

  • 两台配置相同的Linux服务器,系统版本建议为CentOS 7及以上或者Ubuntu 18.04及以上
  • 两台服务器都具备至少两张网卡,一张连接内网,一张连接外网
  • 一个可用的VIP地址,该地址需要和内外网网段不冲突,且未被其他设备占用
  • 两台服务器之间网络互通,能够互相访问

基础环境配置

开启内核转发功能

首先需要在两台节点上都开启Linux内核的IP转发功能,这是NAT转发的基础条件。执行以下命令修改内核参数:

# 临时开启IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward

# 永久开启IP转发,避免重启后失效
cat >> /etc/sysctl.conf << EOF
net.ipv4.ip_forward = 1
EOF

# 加载配置使其生效
sysctl -p

配置iptables的NAT规则

在两台节点上都需要配置相同的NAT转发规则,假设内网网卡为eth0,外网网卡为eth1,内网网段为192.168.10.0/24,外网出口IP为节点的eth1 IP。执行以下命令配置规则:

# 清除现有规则,避免冲突
iptables -F
iptables -t nat -F

# 配置SNAT规则,将内网流量转换为外网IP
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j SNAT --to-source 外网网卡IP

# 允许内网到外网的转发
iptables -A FORWARD -s 192.168.10.0/24 -j ACCEPT
iptables -A FORWARD -d 192.168.10.0/24 -j ACCEPT

# 保存iptables规则,避免重启后丢失
# CentOS系统执行
service iptables save
# Ubuntu系统执行
iptables-save > /etc/iptables.rules

注意将命令中的外网网卡IP替换为节点实际的外网网卡IP地址,内网网段和网卡名称也需要根据实际环境调整。

配置keepalived实现高可用

安装keepalived

在两台节点上分别安装keepalived组件:

# CentOS系统安装
yum install -y keepalived

# Ubuntu系统安装
apt-get install -y keepalived

主节点keepalived配置

编辑主节点的keepalived配置文件,通常路径为/etc/keepalived/keepalived.conf,内容如下:

global_defs {
   router_id NAT_GW_01  # 节点标识,主备节点需要不同
}

vrrp_instance VI_1 {
    state MASTER        # 主节点角色为MASTER
    interface eth0      # 用于发送VRRP报文的网卡,建议用内网网卡
    virtual_router_id 51 # 虚拟路由ID,主备节点必须一致
    priority 100        # 优先级,主节点高于备节点
    advert_int 1        # VRRP通告间隔,单位秒

    authentication {
        auth_type PASS  # 认证类型
        auth_pass 1111  # 认证密码,主备节点必须一致
    }

    virtual_ipaddress {
        192.168.10.254  # VIP地址,即内网设备配置的网关地址
    }
}

# 可选配置:如果需要对NAT网关做健康检查
virtual_server 192.168.10.254 0 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    # 健康检查脚本,检查iptables和转发功能是否正常
    real_server 127.0.0.1 0 {
        weight 1
        MISC_CHECK {
            misc_path "/etc/keepalived/check_nat.sh"
            misc_timeout 5
        }
    }
}

备节点keepalived配置

备节点的配置和主节点大部分一致,仅需要调整角色、优先级和节点标识:

global_defs {
   router_id NAT_GW_02  # 备节点标识,和主节点不同
}

vrrp_instance VI_1 {
    state BACKUP        # 备节点角色为BACKUP
    interface eth0      # 和主节点一致的网卡
    virtual_router_id 51 # 和主节点一致的虚拟路由ID
    priority 90         # 优先级低于主节点
    advert_int 1        # 和主节点一致的通告间隔

    authentication {
        auth_type PASS
        auth_pass 1111  # 和主节点一致的认证密码
    }

    virtual_ipaddress {
        192.168.10.254  # 和主节点一致的VIP地址
    }
}

virtual_server 192.168.10.254 0 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 127.0.0.1 0 {
        weight 1
        MISC_CHECK {
            misc_path "/etc/keepalived/check_nat.sh"
            misc_timeout 5
        }
    }
}

健康检查脚本配置

在主备节点上都创建健康检查脚本/etc/keepalived/check_nat.sh,用于检测NAT转发功能是否正常:

#!/bin/bash
# 检查IP转发是否开启
forward_status=$(cat /proc/sys/net/ipv4/ip_forward)
if [ "$forward_status" != "1" ]; then
    exit 1
fi

# 检查iptables NAT规则是否存在
nat_rule=$(iptables -t nat -L POSTROUTING | grep "192.168.10.0/24")
if [ -z "$nat_rule" ]; then
    exit 1
fi

exit 0

给脚本添加执行权限:

chmod +x /etc/keepalived/check_nat.sh

启动keepalived服务

分别在主备节点上启动keepalived并设置开机自启:

# 启动服务
systemctl start keepalived

# 设置开机自启
systemctl enable keepalived

# 查看服务状态
systemctl status keepalived

验证配置效果

完成所有配置后,可以通过以下方式验证高可用效果:

  • 在主节点上执行ip addr show eth0,可以看到VIP地址已经绑定到主节点的内网网卡上
  • 将内网设备的网关配置为VIP地址192.168.10.254,测试内网设备能否正常访问外网
  • 手动关闭主节点的keepalived服务或者断开主节点网络,观察备节点是否自动接管VIP,内网设备访问外网是否中断
  • 恢复主节点后,观察VIP是否自动回到主节点,备节点恢复待命状态

常见问题排查

如果配置完成后无法正常工作,可以按照以下步骤排查:

  • 检查两台节点的iptables规则是否配置正确,转发功能是否开启
  • 检查keepalived配置文件中的虚拟路由ID、认证密码、VIP是否主备一致
  • 检查防火墙是否放通了VRRP协议(协议号112)的流量,避免主备节点无法通信
  • 查看keepalived的日志/var/log/messages,排查切换失败的原因
注意:如果环境中使用了firewalld防火墙,需要先关闭firewalld再使用iptables,或者将VRRP和NAT相关规则添加到firewalld中,避免规则冲突。

NAT网关keepalivedipvsLinux高可用iptables修改时间:2026-06-28 01:33:49

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。