linux nat 端口转发,(亲测通过)Centos7服务器的端口映射/nat

一个合作单位给我创建了十几台虚拟服务器做支撑。但是只给负载均衡绑定了公网IP。

由于这个支撑的服务需要测试和调优,经常要往服务器上传class或者修改数据库。

为了方便操作,我打算在负载均衡服务器上做端口映射,把不同的服务器映射在端口上。

这样团队成员只要链接唯一公网IP的不同端口就可以在对应的不同服务器上进行操作了。

首先选定的工具是iptables,也没有什么特别理由,就是因为以前用过类似的功能。

首先肯定是执行:echo 1 >/proc/sys/net/ipv4/ip_forward 开启linux的转发功能。

然后就在网上查,别人是怎么实现的。看到有朋友是这样写的:

iptables -t nat -A PREROUTING -d 【公网地址】 -p tcp -m tcp --dport 【公网端口】 -j DNAT --to-destination 【内网IP】:【内网端口】

我尝试了几次,没有实现转发功能,原因不明。类似的方式找了很多,都没有成功。

最后只好找合作单位的网管问问,网管兄弟听了我描述的情况后,一句话就说清楚了。

原来他们虚拟的服务器全都没有绑定公网IP的网卡,所有通过公网的访问全都是由防火墙映射到绑定内网IP的网卡上的。我不了解IDC搭建,所以在这个过程中耽误了很多时间。

这下就明白了,填写公网IP肯定在转发时无法识别。赶紧改一下,不再指定公网IP了。

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 【公网端口】 -j DNAT --to-destination 【内网IP】

这样执行后仍然没有实现映射。继续在网上查,直到看了这篇文章:http://blog.csdn.net/yu_xiang/article/details/9212543

原来要用数据包发起方的IP地址(就是发起连接用户的IP)当作SNAT来使用,这样目标【内网IP】服务器回包的时候,才会路由到数据包发起方的IP上。

所以要先执行: iptables -t nat -A POSTROUTING -j MASQUERADE 设置SNAT(其中使用MASQUERADE是因为在我的这个需求中数据包发起方的IP是不确定的)。

然后再执行: iptables -t nat -A PREROUTING -p tcp -m tcp --dport 【公网端口】 -j DNAT --to-destination 【内网IP】 指定端口镜像策略。

本以为这样就ok了,试了一下没想到还是不能实现转发。继续查原因,

经过漫长的查找,终于发现原来iptables安装后,默认在INPUT表和FORWARD表中拒绝所有其他不符合配置文件中规则的数据包。

知道原因就好办了,打开/etc/sysconfig/iptables 在最下面果然有这么两句:

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

赶紧把 -A FORWARD -j REJECT --reject-with icmp-host-prohibited 注释掉,然后重启iptables

注意保留:-A INPUT -j REJECT --reject-with icmp-host-prohibited,否则会导致防火墙拦截功能失效!

再执行上面几项配置:

echo 1 >/proc/sys/net/ipv4/ip_forward

iptables -t nat -A POSTROUTING -j MASQUERADE

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8001 -j DNAT --to-destination 172.31.2.51:22

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8002 -j DNAT --to-destination 172.31.2.52:22

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8003 -j DNAT --to-destination 172.31.2.55:8161

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8004 -j DNAT --to-destination 172.31.2.56:8161

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8005 -j DNAT --to-destination 172.31.2.57:8161

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8006 -j DNAT --to-destination 172.31.2.58:22

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8007 -j DNAT --to-destination 172.31.2.53:22

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8008 -j DNAT --to-destination 172.31.2.59:1521

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8009 -j DNAT --to-destination 172.31.2.60:1521

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8010 -j DNAT --to-destination 172.31.2.61:22

大功告成。

如果想要把配置保存起来,可以执行 service iptables save

这样就不会每次重启 iptables 的时候配置就失效了。

这个一定要注意啊,如果不保存,重启iptables之后配置就失效了,要重新进行配置。

昨天就吃了这个亏,生效后重新修改了配置文件,重启后所有配置都失效了。我还以为是iptables出了问题,结果浪费了很多时间。

最后再说两句题外话,工程师的知识面广一些,真的很有好处,如果我懂点IDC搭建的知识,就不会在前面浪费那么多时间了。

所以说,工程师的肚是杂货铺,这话一点错都没有。

附件是大黄蜂使用的iptables网络转发配置文件。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值