Linux 中iptables转发外网成功转发本地失败的解决办法

1、Nginx端口转发

因为nginx账号不能直接启动80端口,所以利用iptables做了80到8081端口的转发,这样外部应用可以直接访问80端口,然后通过iptables转发到真正的nginx服务的8081端口。

 

Iptables转发命令:

         iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8081                  

 

 

2、外网能通,但是本地不通

外网的网页页面能打通,如下:

[tomcat@dev_121_21 ~]$ wget http://bright.test.com/PLATFORM_AUTH_Service/1.html

--2016-11-22 12:43:01--  http://bright.test.com/PLATFORM_AUTH_Service/1.html

正在解析主机 bright.test.com... 192.168.121.21

正在连接 bright.test.com|192.168.121.21|:80... 已连接。

已发出 HTTP 请求,正在等待回应... 200 OK

长度:39 [text/html]

正在保存至: “1.html”

 

100%[=====================================================================================================================================================>] 39          --.-K/s   in 0s     

 

2016-11-22 12:43:01 (4.13 MB/s) - 已保存 “1.html” [39/39])

 

[tomcat@dev_121_21 ~]$

 

 

 

本地的service服务器打不通:

[tomcat@dev_121_21 ~]$ wget http://bright.test.com/PLATFORM_AUTH_Service/remoting/AuthenticationService

--2016-11-22 12:29:17--  http://bright.test.com/PLATFORM_AUTH_Service/remoting/AuthenticationService

正在解析主机 bright.test.com... 192.168.121.21

正在连接 bright.test.com|192.168.121.21|:80... 失败:拒绝连接。

[tomcat@dev_121_21 ~]$

 

问题在哪里呢?直接telnet端口80试试

# telnet域名的80端口不通

[tomcat@dev_121_21 ~]$ telnet bright.test.com 80

Trying 192.168.121.21...

telnet: connect to address 192.168.121.21: Connection refused

[tomcat@dev_121_21 ~]$

# telnet 域名所在ip地址的80端口,也不通

[tomcat@dev_121_21 ~]$ telnet 192.168.121.21 80

Trying 192.168.121.21...

telnet: connect to address 192.168.121.21: Connection refused

[tomcat@dev_121_21 ~]$

 

# 因为80只是iptables转发的端口,不是真正nginx服务的端口,nginx服务的8081端口是有效的,

[tomcat@dev_121_21 ~]$ telnet bright.test.com 8081

Trying 192.168.121.21...

Connected to bright.test.com.

Escape character is '^]'.

Connection closed by foreign host.

[tomcat@dev_121_21 ~]$

 

问题场景很明显了,就是本地本机telnet不通80端口,其它的外部过来的访问80端口都ok。

 

问题分析:
外网访问需要经过PREROUTING链,但是localhost以及192.168.121.21本机ip地址不经过该链,因此需要用OUTPUT。

 

 

3、设置OUTPUT

设置output限制:

#在本机telnet也可以做转发到本机端口,不过限制了ip地址为localhost的域名访问

[root@dev_121_21 ~]#iptables -t nat -A OUTPUT -d 192.168.121.21 -p tcp --dport 80 -j REDIRECT --to-ports 8081        

 

#不限制ip地址的访问

[root@dev_121_21 ~]#iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8081

 

PS:如果想外部内部都通过域名来走,而域名又绑定实际的ip地址的话,那么这里就需要采用第一种限制域名实际ip的方式来操作才能有效

 

# iptables永久生效,保存到系统配置中

[root@dev_121_21 ~]# service iptables save;

iptables:将防火墙规则保存到 /etc/sysconfig/iptables:     [确定]

[root@dev_121_21 ~]#      chkconfig --level 2345 iptables on;

[root@dev_121_21 ~]#      chkconfig --add iptables;

[root@dev_121_21 ~]# service iptables restart

iptables:清除防火墙规则:                                 [确定]

iptables:将链设置为政策 ACCEPT:nat                       [确定]

iptables:正在卸载模块:                                   [确定]

iptables:应用防火墙规则:                                 [确定]

[root@dev_121_21 ~]#

 

 

 

4、问题解决本地能通

 

再试下,本地就可以访问本地的service接口服务了:

[tomcat@dev_121_21 ~]$ wget http://bright.test.com/PLATFORM_AUTH_Service/remoting/AuthenticationService

--2016-11-22 12:51:14--  http://bright.test.com/PLATFORM_AUTH_Service/remoting/AuthenticationService

正在解析主机 bright.test.com... 192.168.121.21

正在连接 bright.test.com|192.168.121.21|:80... 已连接。

已发出 HTTP 请求,正在等待回应... 405 Method Not Allowed

2016-11-22 12:51:14 错误 405:Method Not Allowed。

 

[tomcat@dev_121_21 ~]$

 

 

参考文章:http://blog.csdn.net/zzhongcy/article/details/42738285

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统,可以使用iptables命令实现端口转发iptables是用于实现防火墙、数据转发等功能的工具。iptables具有不同的表(tables),每个表都包含多个链(chains),每条链都包含一个或多个规则(rules)。 要在Linux系统进行端口转发,可以使用以下命令: 1. 端口转发到本地其他端口: iptables -t nat -A PREROUTING -p tcp --dport [源端口号] -j REDIRECT --to-port [目标端口号] 例如,要将本机的2222端口转发到本机的22端口,可以使用以下命令: iptables -t nat -A PREROUTING -p tcp --dport 2222 -j REDIRECT --to-port 22 2. 端口转发到其他机器: iptables -t nat -A PREROUTING -d [本机IP地址] -p tcp --dport [源端口号] -j DNAT --to-destination [目标IP地址]:[目标端口号] iptables -t nat -A POSTROUTING -d [目标IP地址] -p tcp --dport [目标端口号] -j SNAT --to [本机IP地址] 例如,要将本机的192.168.172.130的8000端口转发到192.168.172.131的80端口,可以使用以下命令: iptables -t nat -A PREROUTING -d 192.168.172.130 -p tcp --dport 8000 -j DNAT --to-destination 192.168.172.131:80 iptables -t nat -A POSTROUTING -d 192.168.172.131 -p tcp --dport 80 -j SNAT --to 192.168.172.130 注意,以上命令只是示例,实际使用时需要根据实际情况进行相应的修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Linux端口转发的几种常用方法](https://blog.csdn.net/u010680373/article/details/124779749)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [iptables学习笔记:端口转发之“外网访问内网”](https://blog.csdn.net/subfate/article/details/52659446)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值