如何在Linux上配置高可用的端口转发

来源:Python编程网作者:卡拉米头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何在Linux上配置高可用的端口转发》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在Linux上配置高可用的端口转发》有用,将其分享出去将是对创作者最好的鼓励。

高可用端口转发的核心原理

端口转发本质是网络流量从源端口到目标地址的映射转发,而高可用设计则通过主备节点冗余、健康检测、故障自动切换实现服务持续可用。常见的实现方案是结合iptables做端口转发规则配置,用Keepalived实现主备节点状态同步与虚拟IP漂移,当主节点出现故障时,备节点自动接管虚拟IP并生效转发规则,保障转发服务不中断。

如何在Linux上配置高可用的端口转发

环境准备与前置条件

我们需要准备两台Linux服务器作为主备节点,系统版本建议为CentOS 7及以上或者Ubuntu 18.04及以上,同时需要预留一个未被占用的虚拟IP用于对外提供服务。两台节点都需要满足以下条件:

  • 内核支持IP转发功能,可通过sysctl net.ipv4.ip_forward查看,返回值为1表示已开启
  • 已安装iptables服务,用于配置端口转发规则
  • 已安装Keepalived服务,用于实现高可用切换逻辑
  • 两台节点之间网络互通,且防火墙开放对应端口与VRRP协议通信端口

开启IP转发功能

如果内核IP转发未开启,需要执行以下命令临时开启,若需要永久生效可修改/etc/sysctl.conf文件添加对应配置:

# 临时开启IP转发
sysctl -w net.ipv4.ip_forward=1
# 永久生效配置,编辑sysctl.conf文件
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

配置iptables端口转发规则

假设我们需要将虚拟IP的80端口转发到后端真实服务节点192.168.0.100的8080端口,首先在主节点配置iptables规则,备节点后续同步相同配置即可。

添加转发规则

执行以下命令配置端口转发相关规则:

# 设置转发规则,将目标端口80的流量转发到192.168.0.100的8080端口
iptables -t nat -A PREROUTING -d 虚拟IP地址 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.100:8080
# 配置POSTROUTING规则,保证回包正常
iptables -t nat -A POSTROUTING -d 192.168.0.100 -p tcp --dport 8080 -j SNAT --to-source 主节点IP地址
# 允许转发流量通过
iptables -A FORWARD -p tcp -d 192.168.0.100 --dport 8080 -j ACCEPT
# 保存iptables规则,避免重启后丢失,不同系统保存命令有差异
# CentOS系统
service iptables save
# Ubuntu系统
iptables-save > /etc/iptables/rules.v4

规则验证

配置完成后可以通过以下命令查看规则是否生效:

iptables -t nat -L PREROUTING -n --line-numbers
iptables -L FORWARD -n --line-numbers

配置Keepalived实现高可用

Keepalived通过VRRP协议实现主备节点选举,当主节点故障时自动将虚拟IP漂移到备节点,同时可以配合健康检查脚本确保转发服务异常时主动切换。

主节点Keepalived配置

编辑Keepalived配置文件/etc/keepalived/keepalived.conf,添加以下配置:

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

vrrp_instance VI_1 {
    state MASTER # 主节点角色为MASTER
    interface eth0 # 绑定的网卡名称,根据实际网卡调整
    virtual_router_id 51 # 虚拟路由ID,主备节点需要一致
    priority 100 # 优先级,主节点高于备节点
    advert_int 1 # VRRP通告间隔,单位秒
    authentication {
        auth_type PASS
        auth_pass 123456 # 认证密码,主备节点需要一致
    }
    virtual_ipaddress {
        虚拟IP地址/24 # 配置的虚拟IP,根据实际网段调整
    }
}

# 健康检查配置,检测iptables转发服务是否正常
vrrp_script check_port_forward {
    script "/etc/keepalived/check_port_forward.sh" # 健康检查脚本路径
    interval 2 # 检查间隔,单位秒
    weight -20 # 检查失败时优先级降低值
}

track_script {
    check_port_forward
}

备节点Keepalived配置

备节点配置文件只需要调整router_idstatepriority三个参数,其余配置与主节点保持一致:

global_defs {
   router_id port_forward_backup # 备节点标识
}

vrrp_instance VI_1 {
    state BACKUP # 备节点角色为BACKUP
    interface eth0
    virtual_router_id 51
    priority 90 # 优先级低于主节点
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        虚拟IP地址/24
    }
}

vrrp_script check_port_forward {
    script "/etc/keepalived/check_port_forward.sh"
    interval 2
    weight -20
}

track_script {
    check_port_forward
}

健康检查脚本编写

创建/etc/keepalived/check_port_forward.sh脚本,用于检测端口转发对应的后端服务是否正常,脚本内容如下:

#!/bin/bash
# 检测后端服务8080端口是否可访问
curl -s --connect-timeout 2 http://192.168.0.100:8080 > /dev/null
if [ $? -ne 0 ]; then
    # 服务不可访问时返回失败,触发优先级降低
    exit 1
else
    exit 0
fi

给脚本添加执行权限:

chmod +x /etc/keepalived/check_port_forward.sh

启动服务与功能验证

先启动两台节点的iptables服务,确保转发规则生效,再启动Keepalived服务:

# 启动iptables
systemctl start iptables
systemctl enable iptables
# 启动Keepalived
systemctl start keepalived
systemctl enable keepalived

验证主备切换

可以通过以下方式验证高可用功能是否正常:

  • 在主节点执行ip addr show eth0,可以看到虚拟IP已经绑定到主节点网卡
  • 从客户端访问虚拟IP的80端口,能够正常返回后端8080端口的服务内容
  • 手动停止主节点的Keepalived服务,观察备节点的网卡是否自动绑定虚拟IP,再次访问虚拟IP服务是否正常
  • 恢复主节点服务后,由于主节点优先级更高,虚拟IP会自动漂移回主节点

常见问题排查

如果配置完成后转发服务不正常,可以按照以下思路排查:

  • 检查内核IP转发是否开启,执行sysctl net.ipv4.ip_forward确认返回值为1
  • 检查iptables规则是否正确,包括nat表规则与filter表FORWARD规则,同时确认规则已保存
  • 检查Keepalived状态,执行systemctl status keepalived查看是否有报错,确认主备节点VRRP通信正常
  • 检查防火墙是否放通了对应端口与VRRP协议(协议号112),避免通信被拦截
  • 检查健康检查脚本是否正常执行,手动运行脚本确认返回结果符合预期

Linux端口转发高可用Keepalivediptables修改时间:2026-06-20 09:24:40

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