共计 2508 个字符,预计需要花费 7 分钟才能阅读完成。
场景:
本地部署 Tomcat 到 8080 端口,并期望本地访问 80 端口来访问本地 Tomcat。
结论:
使用 Linux 下的 iptables 工具实现端口转发功能。
具体为
现取得 root 权限
执行 iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 –dport 80 -j REDIRECT –to-port 8080
目前在重启前均生效。要想永久生效,需要继续执行(Ubuntu 环境):iptables-save > /etc/iptables.rules
新建一个 bash 脚本
#!/bin/bash
iptables-restore < /etc/iptables.rules 保存到 /etc/network/if-pre-up.d/ 目录下
结束!
BTW:如果是配置外部服务器,则把第 2 步换为执行 iptables -t nat -I PREROUTING -p tcp –dport 80 -j REDIRECT –to-port 8080
实验过程:
实验过程主要集中在上述第 2 步中该添加何种 iptables 规则。
取得 root 权限后,单独执行各个操作:
iptables -t nat -I OUTPUT -p tcp –dport 80 -j REDIRECT –to-port 8080
结果:访问本地 localhost 正常转发,访问外部网络全部被重定向到本地 localhost:8080
原因:本机访问请求时,本地进程产生的报文将进入 OUTPUT 链,因为当前请求包的端口是 80,于是重定向道 8080,注意是所有数据包。
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),所以相当于本规则对访问外部网络时无效。
iptables -t nat -I OUTPUT -p tcp -s 非回路网卡 ip –dport 80 -j REDIRECT –to-port 8080
结果:访问本地 localhost 无法转发, 访问外部网络全部被重定向到本地 localhost:8080
原因:和上例类似,规则匹配了对外访问的数据包,从而被重定向。
iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 –dport 80 -j REDIRECT –to-port 8080
结果:访问本地 localhost 正常转发, 访问外部网络正常没特殊处理
原因:本地应用的 ip 被匹配上,所以访问本地应用时,数据包将被重定向道 8080
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 操作的原因结合。
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 链。
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
更多 Tomcat 相关教程见以下内容:
CentOS 6.6 下安装配置 Tomcat 环境 http://www.linuxidc.com/Linux/2015-08/122234.htm
RedHat Linux 5.5 安装 JDK+Tomcat 并部署 Java 项目 http://www.linuxidc.com/Linux/2015-02/113528.htm
Tomcat 权威指南(第二版)(中英高清 PDF 版 + 带书签) http://www.linuxidc.com/Linux/2015-02/113062.htm
Tomcat 安全配置与性能优化 http://www.linuxidc.com/Linux/2015-02/113060.htm
Linux 下使用 Xshell 查看 Tomcat 实时日志中文乱码解决方案 http://www.linuxidc.com/Linux/2015-01/112395.htm
CentOS 64-bit 下安装 JDK 和 Tomcat 并设置 Tomcat 开机启动操作步骤 http://www.linuxidc.com/Linux/2015-01/111485.htm
CentOS 6.5 下安装 Tomcat http://www.linuxidc.com/Linux/2015-01/111415.htm
Tomcat 的详细介绍:请点这里
Tomcat 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-07/133078.htm