CentOS 端口映射
一个合作单位给我创建了十几台虚拟服务器做支撑。但是只给负载均衡绑定了公网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 端口映射的更多相关文章
- CentOS下Apache配置多域名或者多端口映射
CentOS下Apache默认网站根目录为/var/www/html,假如我默认存了一个CI项目在html文件夹里,同时服务器的外网IP为ExampleIp,因为使用的是MVC框架,Apache需开启 ...
- CentOS 下做端口映射/端口转发
CentOS 下做端口映射/端口转发==[实现目标]==================[服务器A]有2块网卡,一块接内网,一块接外网,[服务器B]只有一块内网网卡:访问[服务器A]的7890端口跳转 ...
- Docker 生成Node.js web app(含端口映射)
1.新建目录src,并进入src目录 [xiejdm@localhost Documents]$ mkdir src [xiejdm@localhost Documents]$ cd src/ 2.创 ...
- VMware NAT端口映射外网访问虚拟机linux
本文目的: 一. SSH连接 二. 访问HTTP VMware Workstation提供了两种虚拟机上网方式,一种bridge,一种NAT,bridge可以获得公网地址,而NAT只能是内网地址了. ...
- VMware NAT端口映射 外网可以访问内网虚拟机
我想尝试的是利用本机的ip+port来访问虚拟机上的web服务器,因为这样的话,我就能够将我的web服务器部署成为一个能让外网访问的服务器了,首先说下我的环境: 主机:系统win7,ip地址172.1 ...
- 8天入门docker系列 —— 第四天 使用aspnetcore小案例熟悉端口映射和挂载目录
到目前为止大家应该对镜像和容器有了一个大概认知,而且也用了docker进行了一个简单化的部署,但仔细一看问题还有很多,所以这篇我们继续完善. 一:如何让外网访问到容器内应用 我们知道容器内拥有自己的子 ...
- Linux或Windows上实现端口映射
通常服务器会有许多块网卡,因此也可能会连接到不同的网络,在隔离的网络中,某些服务可能会需要进行通信,此时服务器经过配置就可以承担起了转发数据包的功能. 一.Windows下实现端口映射 1. 查询端口 ...
- Docker容器内部端口映射到外部宿主机端口的方法小结
转自:https://www.cnblogs.com/kevingrace/p/9453987.html Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务.容器启动之后,容器中可以 ...
- VM 端口映射问题
环境: 宿主机:WIN 10 --192.168.9.87 虚拟机:CentOS ---192.168.255.129 联通模式:NAT模式 一.VM做端口映射 1.为了方便管理,设置虚拟机为静态IP ...
随机推荐
- 1. 在config.ini文件中加入dm.park.time=1,会使uap中的tomcat启动加快
在config.ini文件中加入dm.park.time=1,会使uap中的tomcat启动加快
- 10. js截取最后一个斜杠后面的字符串
var startIndex = filePath.lastIndexOf("\\"); endIndex = filePath.lastIndexOf("." ...
- scrapy中deferred的回调
def _next_request_from_scheduler(self, spider):#在引擎中处理一个请求 slot = self.slot request = slot.scheduler ...
- SQL Server MSSQLSERVER 服务无法启动解决方案
打开sql配置工具下的sql server configuration manager,然后将VIA协议禁用.
- [转]使用Ubuntu Live CD修复Grub引导教程
这个教程的方法我用过了,能够解决了我的问题. 这篇文章主要介绍了使用Ubuntu Live CD修复Grub引导教程,本文以 Ubuntu Live CD 修复 Grub 引导为例,需要的朋友可以参考 ...
- FDQuery 怎么能插入NULL参数
[FireDAC][Phys][MSSQL]-335. Parameter [fieldAA] data type is unknown. Hint: specify TFDParam.DataTyp ...
- UI5-学习篇-12-Eclipse同步ABAP服务器UI5应用
如何在ABAP服务器上部署和运行SAPUI5应用程序 https://blogs.sap.com/2013/06/15/how-to-deploy-and-run-sapui5-application ...
- 尚硅谷redis学习3-redis启动以后的杂项
redis速度很快,运行benchmark可以看出,各项运行速度可达100000次每秒 redis默认有16个数据库,分别是0, 1 ... 15,默认在0号库,可以通过select num转到其它库 ...
- Java中String的intern方法,javap&cfr.jar反编译,javap反编译后二进制指令代码详解,Java8常量池的位置
一个例子 public class TestString{ public static void main(String[] args){ String a = "a"; Stri ...
- 使用javap进行反编译Java枚举
这是一个枚举类Day.java public enum Day { MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY(" ...