一个合作单位给我创建了十几台虚拟服务器做支撑。但是只给负载均衡绑定了公网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
再执行上面几项配置:

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

转自-------------https://blog.csdn.net/ziele_008/article/details/52062237

CentOS 端口映射的更多相关文章

  1. CentOS下Apache配置多域名或者多端口映射

    CentOS下Apache默认网站根目录为/var/www/html,假如我默认存了一个CI项目在html文件夹里,同时服务器的外网IP为ExampleIp,因为使用的是MVC框架,Apache需开启 ...

  2. CentOS 下做端口映射/端口转发

    CentOS 下做端口映射/端口转发==[实现目标]==================[服务器A]有2块网卡,一块接内网,一块接外网,[服务器B]只有一块内网网卡:访问[服务器A]的7890端口跳转 ...

  3. Docker 生成Node.js web app(含端口映射)

    1.新建目录src,并进入src目录 [xiejdm@localhost Documents]$ mkdir src [xiejdm@localhost Documents]$ cd src/ 2.创 ...

  4. VMware NAT端口映射外网访问虚拟机linux

    本文目的: 一. SSH连接 二. 访问HTTP VMware Workstation提供了两种虚拟机上网方式,一种bridge,一种NAT,bridge可以获得公网地址,而NAT只能是内网地址了. ...

  5. VMware NAT端口映射 外网可以访问内网虚拟机

    我想尝试的是利用本机的ip+port来访问虚拟机上的web服务器,因为这样的话,我就能够将我的web服务器部署成为一个能让外网访问的服务器了,首先说下我的环境: 主机:系统win7,ip地址172.1 ...

  6. 8天入门docker系列 —— 第四天 使用aspnetcore小案例熟悉端口映射和挂载目录

    到目前为止大家应该对镜像和容器有了一个大概认知,而且也用了docker进行了一个简单化的部署,但仔细一看问题还有很多,所以这篇我们继续完善. 一:如何让外网访问到容器内应用 我们知道容器内拥有自己的子 ...

  7. Linux或Windows上实现端口映射

    通常服务器会有许多块网卡,因此也可能会连接到不同的网络,在隔离的网络中,某些服务可能会需要进行通信,此时服务器经过配置就可以承担起了转发数据包的功能. 一.Windows下实现端口映射 1. 查询端口 ...

  8. Docker容器内部端口映射到外部宿主机端口的方法小结

    转自:https://www.cnblogs.com/kevingrace/p/9453987.html Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务.容器启动之后,容器中可以 ...

  9. VM 端口映射问题

    环境: 宿主机:WIN 10 --192.168.9.87 虚拟机:CentOS ---192.168.255.129 联通模式:NAT模式 一.VM做端口映射 1.为了方便管理,设置虚拟机为静态IP ...

随机推荐

  1. Django笔记(2)Json字段处理

    1) Django里面让Model用于JSON字段,添加一个JSONField自动类型如下: [python] view plain copy class JSONField(models.TextF ...

  2. Java快速开发平台强大的代码生成器,JEECG 3.7.5 VUE+ElementUI SPA单页面应用版本发布

    JEECG 3.7.5 VUE+ElementUI SPA单页面应用版本发布 此版本为Vue+ElementUI SPA单页面应用版本,提供新一代风格代码生成器模板,采用Vue技术,提供两套精美模板E ...

  3. 大批量数据导出到Excel的实现

    在平时的项目中,将数据导出到Excel的需求是很常见的,在此对一些常见的方法做以总结,并提供一种大数据量导出的实现. OLEDB   使用OLEDB可以很方便导出Excel,思路很简单,处理时将Exc ...

  4. es6初级之箭头函数实现隔行变色

    无论是使用哪种方式实现隔行变色的效果,它的思路都是一样的: 1.定义很多个div 2.给div 加背景 3.鼠标移动到div上时,当前div 背景变色 4.鼠标移出div时,当前div背景恢复 以上4 ...

  5. ACM__队列

    今天学回顾bfs的时候遇到了,遂总结一下 队列是一种特殊的线性表,只允许在队列的前端(front)进行删除操作,在队尾进行插入操作,进行插入操作的端称作队尾,进行删除操作的端称作对头.(来自百度百科) ...

  6. 尚硅谷springboot学习16-slf4j的使用

    如何在系统中使用SLF4j 以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法: 给系统里面导入slf4j的jar和 logback的实现jar impor ...

  7. React/anu实现Touchable

    在RN中有一个叫Touchable 的组件,这里我们重演如何实现它. Touchable存在的意义是屏蔽click的问题.移动端与手机的click 在一些浏览器是有差异,比如说著名的300ms延迟. ...

  8. 知识点6: v-for列表循环

    效果图: 只手写了第一个dom: 剩下4个dom由v-for生成. html <div class="item" id="item"> <di ...

  9. 4.Java的流程控制.md

    目录 1. break语句 2.continue 3.foreach语句 4.可变参数: 1. break语句 Java的break语句,正常情况下,break和c++一样,但是Java可以设置一个标 ...

  10. highstock无图像

    如果你的x轴是时间又是世纪秒的话又按以下设置的话,把xAxis的设置去掉试试看, 因为highstock会对世纪秒自动转换的 // xAxis: {// // max: 23, // min: 0, ...