RHEL/CentOS 5 下 NAT 转发不工作的问题解决办法

TL;DR 如果你发现 RHEL/CentOS 5 下用 iptables 做的 NAT 转发规则不管用,请用 iptables -L -nv 检查一下 FORWARD 链里的内容,如果里面有一条直接转到 RH-Firewall-1-INPUT 的规则,那么你很有可能跟我们一样被坑了。尝试在 RH-Firewall-1-INPUT 链里把目标端口打开,那些规则应该就可以工作了。
公司的服务器上因为种种原因做了不少 iptables NAT 规则,用于做端口映射。我们发现有的规则可以工作,有的则不然。但这些规则基本都长一个样,除了端口和转发的目标 IP 各有不同以外。
我们的规则很简单:
 

 代码如下 复制代码
-A PREROUTING -p tcp --dport 443 -j DNAT --to 192.168.1.2:8443
-A POSTROUTING -d 192.168.1.2 -p tcp --dport 8443 -j SNAT --to 192.168.1.1

就是把一台服务器(192.168.1.1)上的 443 端口转发到另一台(192.168.1.2)的 8443 上而已。但我们发现它死活不工作。但别的端口(比如 80 转到 8080)的类似规则又是可以的:
 

 代码如下 复制代码
-A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.3:8080
-A POSTROUTING -d 192.168.1.3 -p tcp --dport 8080 -j SNAT --to 192.168.1.1

各种 Google 搜索都没找到答案,无奈只能仔细检查下 iptables 的规则,结果发现了一个线索:我们的 8443 端口没有打开,而 8080 是打开的!果断尝试把 8443 也给打开,果然可以了。
不过问题是,为什么 INPUT 规则会对 NAT 转发造成影响呢?按照 iptables 的工作方式,只有目的地址是本机的包才会经过 INPUT 链,而转发的包只会经过 FORWARD 链。好吧,答案其实很简单,怪我们没看仔细。RHEL/CentOS 5 的 iptables 会建立一个名叫 RH-Firewall-1-INPUT 的链,并且把 INPUT 和 FORWARD 都转到这条链上。
 

 代码如下 复制代码
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [9418420:35897535679]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT #FORWARD 直接挂到 RH-Firewall-1-INPUT 上了
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
#......省略若干规则
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

这种做法个人觉得很坑爹,转发的包管那么多干嘛,让目标去判断要不要 ACCEPT 就好,你就老老实实 FORWARD 嘛。果然在 RHEL/CentOS 6 以后的版本里,这个 RH-Firewall-1-INPUT 被干掉了。

时间: 2024-10-24 22:14:22

RHEL/CentOS 5 下 NAT 转发不工作的问题解决办法的相关文章

Android ScrollView 下嵌套 ListView 或 GridView出现问题解决办法

Android ScrollView 下嵌套 ListView 或 GridView出现问题解决办法 ScrollView 下嵌套 ListView 或 GridView 会发列表现数据只能显示一行.因为他们都是滚动结构,两个滚动条放到一起就会引起冲突. 解决此问题可以通过计算 ListView 高度或重写 ListView 的 onMeasure 方法来解决.下面介绍通过重写 onMeasure 方法来解决问题. 重写 onMeasure 方法如下: public class ScrollLi

RHEL/Centos/Fedora/下搭建vpn pptp 服务器步骤

  用vpn已经有很多年,然而一直因为懒惰原因,所以一直都没有写关于如何搭建vpn服务器的文章,今年兴致所致,分享一下个人搭建vpn server的过程,写的简陋,请勿拍砖.vpn的使用非常广泛,可谓大多网虫和技术股都需要用到的东西,不过看下文之前请先看看自己的服务器是否支持pptp方式的vpn服务器,具体请执行命令 modprobe ppp-compress-18 && echo ok 假如输出ok请继续, 假如不ok,说明服务器不支持.下面的文章可能对你没啥用. 第一步:安装pptpd

RHEL\CentOS 7 下 MySQL 连接数被限制为214个

问题 项目中,由于连接数过多,提示"Too many connections",需要增加连接数.我在 /etc/my.cnf中修改了 max_connections = 2000 但是, 实际连接数一直被限制在 214 mysql> show variables like "max_connections"; +-----------------+-------+ | Variable_name | Value | +-----------------+---

CentOS 6下Webmin无法启动proftpd的解决办法

ProFTPd是一套可配置性强的开放源代码的FTP伺服器软件,名称最後的d字是因为在Linux中是用daemon来称呼.ProFTPd与Apache的配置方式类似,因此十分容易配置和管理,下面小编在使用proftpd碰到无法启动问题了,下面我们一起来看解决办法. 在CentOS 6 32bit系统的Xen VPS中安装Webmin后,发现proftpd服务未启动. 使用Putty输入 service proftpd restart 屏幕提示 Shutting down proftpd: [FAI

CentOS下wget操作无法resolve(解析)问题解决办法

  在某个VPS上执行wget操作结果超时,信息如下:   •wget http://down.45it.com/   •--2012-09-15 09:13:14--   •Resolving blog.is36.com... failed: Temporary failure in name resolution.   •wget: unable to resolve host address `aa.com'   返回的错误很明显,就是无法解析,出现这个问题与nameserver有关,修改

centos 6.3自带的R8169驱动问题解决办法

最近用PC主板安装了一台centos服务器,但总是不定时死机,死机前的各种负载均很低,多次测试找不出具体问题.后来google搜索到一遍文章http://www.linuxidc.com/Linux/2010-05/25880.htm,发现原来系统真的是把R8168安装了R8169的驱动,虽然能用,但问题多多. ethtool -i eth0 driver: r8169 哦,集成的r8169芯片啊,不过听说这个网卡在Linux下会出一些问题,从网上搜了下,果然好多人都说这个网卡CentOS自带的

在RHEL/CentOS 5/6下停用按下Ctrl-Alt-Del 重启系统的功能

在RHEL/CentOS 5/6下停用按下Ctrl-Alt-Del 重启系统的功能 在Linux里,由于对安全的考虑,我们允许任何人按下Ctrl-Alt-Del来重启系统.但是在生产环境中,应该停用按下Ctrl-Alt-Del 重启系统的功能. 在这篇文章里,我们将要介绍如何在RHEL和CentOS下停用该热键. 在RHEL 5.X和CentOS 5.X下 ### 保护init进程免于Ctrl-Alt-Del,像下面一样编辑'/etc/inittab'里由'ca::ctrlaltdel:'开头的

RHEL/CentOS 7 中配置 PXE 网络启动服务器

RHEL/CentOS 7 中配置 PXE 网络启动服务器 PXE服务器--预启动执行环境--指示客户端计算机直接从网络接口启动.运行或安装操作系统,而不需要烧录CD/DVD或使用某个物理介质,它可以减轻你网络中多台机器同时安装Linux发行版的工作. 在RHEL/CentOS 7中设置PXE网络启动 前置阅读 CentOS 7最小化安装步骤 RHEL 7最小化安装步骤 在RHEL/CentOS 7中配置静态IP地址 移除RHEL/CentOS 7中不要的服务 安装NTP服务器以设置RHEL/C

安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(五)

安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(五) 25. 安装 Linux Malware Detect (LMD) Linux Malware Detect (LMD) 是 GNU GPLv2 协议下发布的开源 Linux 恶意程序扫描器,它是特别为面临威胁的主机环境所设计的.LMD 完整的安装.配置以及使用方法可以查看: 安装 LMD 并和 ClamAV 一起使用作为反病毒引擎 26. 用 Speedtest-cli 测试服务器带宽 speedtest-cli 是用