场景:

本地部署tomcat到8080端口,并期望本地访问80端口来访问本地tomcat。

结论:

使用linux下的iptables工具实现端口转发功能。

具体为

  1. 现取得root权限
  2. 执行iptables -t nat -I OUTPUT -p tcp  -d 127.0.0.1 --dport 80 -j REDIRECT --to-port 8080
  3. 目前在重启前均生效。要想永久生效,需要继续执行(ubuntu环境):iptables-save > /etc/iptables.rules
  4. 新建一个bash脚本
    #!/bin/bash
    iptables-restore < /etc/iptables.rules
  5. 保存到/etc/network/if-pre-up.d/目录下
  6. 结束!
  7. BTW:如果是配置外部服务器,则把第2步换为执行iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

实验过程:

实验过程主要集中在上述第2步中该添加何种iptables规则。

取得root权限后,单独执行各个操作:

  1. iptables -t nat -I OUTPUT -p tcp  --dport 80 -j REDIRECT --to-port 8080  
    结果:访问本地localhost正常转发,访问外部网络全部被重定向到本地localhost:8080
    原因: 本机访问请求时,本地进程产生的报文将进入OUTPUT链,因为当前请求包的端口是80,于是重定向道8080,注意是所有数据包。
  2. iptables -t nat -I OUTPUT -p tcp -s 127.0.0.1 --dport 80 -j REDIRECT --to-port 8080
    结果:访问本地localhost正常转发,访问外部网络正常没特殊处理
    原因:类似上例,但多了一个规则:需匹配数据包源地址-s 127.0.0.1。但实际上,访问外部网络时实际数据包在经过这个链时的源地址是本机ip,而不是回路ip(127.0.0.1),所以相当于本规则对访问外部网络时无效。
  3. iptables -t nat -I OUTPUT -p tcp -s 非回路网卡ip --dport 80 -j REDIRECT --to-port 8080
    结果:访问本地localhost无法转发,访问外部网络全部被重定向到本地localhost:8080
    原因:和上例类似,规则匹配了对外访问的数据包,从而被重定向。
  4. iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-port 8080 
    结果:访问本地localhost正常转发,访问外部网络正常没特殊处理
    原因:本地应用的ip被匹配上,所以访问本地应用时,数据包将被重定向道8080
  5. iptables -t nat -I OUTPUT -p tcp -s 127.0.0.1 -d 127.0.0.1 --dport 80 -j REDIRECT --to-port 8080
    结果:访问本地localhost正常转发,访问外部网络正常没特殊处理
    原因:2,4操作的原因结合。
  6. iptables -t nat -I PREROUTING -p tcp -s 127.0.0.1 -d 127.0.0.1 --dport 80 -j REDIRECT --to-port 8080
    结果:访问本地localhost无法转发,访问外部网络正常没特殊处理
    原因:本地连接指的是在本机上,用 127.0.0.1 或者本机 IP 来访问本机的端口。本地连接的数据包不会通过网卡,而是由内核处理后直接发给本地进程。这种数据包在 iptables 中只经过 OUTPUT 链,而不会经过 PREROUTING 链(原文点此)。即:PREROUTING isn't used by the loopback interface(讨论贴)。

知识点:

iptables基本介绍:http://wiki.centos.org/HowTos/Network/IPTables(是centos版)

iptables全面介绍:

http://lesca.me/archives/iptables-tutorial-structures-configuratios-examples.html

http://blog.chinaunix.net/uid-307943-id-3559357.html

iptables原理:http://my.oschina.net/javagg/blog/3239

iptables数据包流向 :

以本地为目的的包 数据包 ----> mangle prerouting -------> nat prerouting -------> mangle input -------> filter input
以本地为源的包 数据包 -------> mangle output -------> nat output -------> filter output -------> mangle postrouting -------> nat postrouting 
经过本地转发的包 数据包 -------> mangle prerouting -------> nat prerouting -------> mangle forward -------> filter forward -------> mangle postrouting -------> nat postrouting

linux配置本地tomcat应用80端口转发的更多相关文章

  1. Linux配置防火墙,开启80端口、3306端口

    Linux配置防火墙,开启80端口.3306端口   起因是因为想使用Navicat连接一下数据库,发现连接不上 通过查阅许多资料和多次测试发现是因为防火墙没有配置3306端口 话不多说,开整,同理, ...

  2. Linux配置防火墙,开启80端口、3306端口(转)

    vi /etc/sysconfig/iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(允许80端口通过防火 ...

  3. 【nginx配置】nginx做非80端口转发

    一个场景 最近在使用PHP重写一个使用JAVA写的项目,因为需要查看之前的项目,所以要在本地搭建一个Tomcat来跑JAVA的项目.搭建成功后,因为Tomcat监听的端口是8080,因此,访问的URL ...

  4. Ubuntu16.04配置Tomcat的80端口访问

    [问题描述] 在阿里云 ECS 服务器 Ubuntu16.04 下部署 Java Web 应用时,发现配置的 Tomcat 服务启动后 80 端口无法被监听. [问题原因] 出现该问题的主要原因是:非 ...

  5. IIS Tomcat共享80端口

    为什么有这种需求, 原因是这样的, 公司有一个Java的web项目,在另一台服务器A上,最近老板一时兴起,想把他合并到这台稳定点的服务器B上,服务器B上使用IIS来寄宿asp.net 网站, 怎么办呢 ...

  6. 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则

    负载均衡-Nginx中文文档 http://www.nginx.cn/doc/example/loadbanlance.html 负载均衡 一个简单的负载均衡的示例,把www.domain.com均衡 ...

  7. 端口被占用通过域名的处理 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则

    负载均衡-Nginx中文文档 http://www.nginx.cn/doc/example/loadbanlance.html 负载均衡 一个简单的负载均衡的示例,把www.domain.com均衡 ...

  8. IIS和tomcat共用80端口

    IIS和tomcat共用80端口 很多机器都需要同时使用tomcat和iis两个服务器以部署不同的网站,而解决共用80端口的问题也经常遇到,今天实际操作了一回,以下是具体步骤: 实现tomcat和ii ...

  9. IIS7和Tomcat7整合,即IIS7和Tomcat共用80端口

    IIS7和Tomcat7整合,即IIS7和Tomcat共用80端口 背景: 最近公司有一个项目要上线,需要用到iis和tomcat整合,共用80端口.由于公司的数据都非常重要,只通过端口映射到外网的8 ...

随机推荐

  1. Ural 1086 - Cryptography

    While preparing this problem set the jury has run into the following problem: it was necessary to se ...

  2. 常用位操作,写8位 12864串口模式 I2C 1302 18B20

    /*以1302为例*/ void DS1302InputByte(unsigned char d)  //实时时钟写入一字节(内部函数) {     unsigned char i;     ACC ...

  3. 非确定有限状态自动机的构建(二)——将CharVal转换为NFA

    保留版权,转载注明出处:潘军彪的个人博客(http://blog.csdn.net/panjunbiao/article/details/9378933) 将上下文无关文法读入内存之后,可以将它转换成 ...

  4. Android SurfaceView实战 带你玩转flabby bird (上)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/42965779 ,本文出自:[张鸿洋的博客] 1.概述 哈,记得以前写过Andro ...

  5. 动画api说明

    1.Animation的API参考文档:http://blog.csdn.net/harvic880925/article/details/40117115 2.动画插值器的参考: http://bl ...

  6. PB数据管道

    数据管道提供了一种不同数据库之间传递数据和(或)表结构的方法. 数据管道对象 要完毕数据管道的功能须要提供例如以下内容: 须要数据源和目标数据库,并可以和这两个数据库正常联接 须要源数据库中的哪些表: ...

  7. JS图片上传后base64转码

    代码: // 获取文件流 var fileObj = document.getElementById('inputId').files; // 实例化一个FileReader对象 var reader ...

  8. Eclipse用法和技巧二十一:工程的展示途径

    用eclipse阅读代码的时候,有时候代码会变成如图一所示的样子,有时候可能是图二的样子.为什么有时候是图一有时候是图二,笔者也不是很清楚.不过怎么手动设置成图一图二,就是接下来要讲的东西. 1    ...

  9. javascript笔记整理(对象基础)

    一.名词解释 1.基于对象(一切皆对象,以对象的概念来编程) 2.面向对象编程(Object Oriented Programming,OOP) A.对象(JavaScript 中的所有事物都是对象) ...

  10. Core 中文文档

    ASP.NET Core 中文文档 第二章 指南(1)用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序   原文:Your First ASP. ...