Iptables PREROUTING 通过 varnish 重定向端口 80 不起作用

Iptables PREROUTING 通过 varnish 重定向端口 80 不起作用

我尝试使用 iptables 将 Varnish 保持在端口 8080 上,将 Apache 保持在端口 80 上,并将从端口 80 进入的所有内容预先路由到端口 8080。但不起作用。当我在端口 8080 上调用网站时,所有内容都已缓存且正常,当我在端口 80 上调用网站时,我只得到正常的 Apache 响应。

我遵循本指南。

因此 Varnish 和 Apache 似乎配置正确,因为我在端口 8080 上收到了缓存版本。

在步骤 1 中我只是将规则添加到 iptables:

#iptables -t nat  -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080

当我打电话时

#iptables -L -t nat

为了查看它是否有效,我收到了以下输出:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
REDIRECT   tcp  --  anywhere             anywhere             tcp dpt:http redir ports 8080

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination     

iptables-save 的输出:

# Generated by iptables-save v1.4.12 on Mon Oct 27 23:24:03 2014
*raw
:PREROUTING ACCEPT [22819:7234594]
:OUTPUT ACCEPT [32677:42807068]
COMMIT
# Completed on Mon Oct 27 23:24:03 2014
# Generated by iptables-save v1.4.12 on Mon Oct 27 23:24:03 2014
*nat
:PREROUTING ACCEPT [40:2416]
:POSTROUTING ACCEPT [64:3751]
:OUTPUT ACCEPT [64:3751]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
COMMIT
# Completed on Mon Oct 27 23:24:03 2014
# Generated by iptables-save v1.4.12 on Mon Oct 27 23:24:03 2014
*mangle
:PREROUTING ACCEPT [22821:7234698]
:INPUT ACCEPT [22821:7234698]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [32696:42835416]
:POSTROUTING ACCEPT [32696:42835416]
COMMIT
# Completed on Mon Oct 27 23:24:03 2014
# Generated by iptables-save v1.4.12 on Mon Oct 27 23:24:03 2014
*filter
:INPUT ACCEPT [22821:7234698]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [32696:42835416]
COMMIT
# Completed on Mon Oct 27 23:24:03 2014

所以应该没问题。我遗漏了什么?谢谢!

答案1

你应该没事——我猜你正在测试运行 Varnish 的机器的重定向。

在运行 Apache 的服务器上,我可以将 8080 调用重定向到端口 80(与您尝试的操作相反)。

在服务器 10.3.1.10 上:

为了测试我的 apache 是否存在于端口 80 上,我使用 netcat 获取网页:

root@hp:/etc/apt# nc 10.3.1.10 80
get
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>501 Not Implemented</title>
</head><body>
<h1>Not Implemented</h1>
<p>get to /index.html not supported.<br />
</p>
<hr>
<address>Apache/2.4.7 (Ubuntu) Server at 127.0.1.1 Port 80</address>
</body></html>
root@hp:/etc/apt#

这很好——现在添加我的重定向:

iptables -t nat  -A PREROUTING -i eth0 -p tcp --dport 8080 -j REDIRECT --to-ports 80

这在 eth0 中指定,协议 tcp 目标 8080 重定向到 80。

并在端口 8080 上测试 netcat:

root@hp:/etc/apt# nc 10.3.1.10 8080
root@hp:/etc/apt#

没有输出 - 没有连接,但没有任何错误,并且 iptables 显示我的重定向上没有流量(规则的 pkts 和字节列):

root@hp:/etc/apt# iptables -L -t nat -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 REDIRECT   tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 redir ports 80

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

所以发生了什么,没有任何事情违反我的规则——但是我很好。

现在我转到另一台机器(10.3.1.5)并运行相同的 netcat 命令:

root@firewall:~# nc 10.3.1.10 8080
get
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>501 Not Implemented</title>
</head><body>
<h1>Not Implemented</h1>
<p>get to /index.html not supported.<br />
</p>
<hr>
<address>Apache/2.4.7 (Ubuntu) Server at 127.0.1.1 Port 80</address>
</body></html>

这似乎有效——使用 iptables 检查 .10 上的流量:

root@hp:/etc/apt# iptables -L -t nat -n -v
Chain PREROUTING (policy ACCEPT 4 packets, 898 bytes)
 pkts bytes target     prot opt in     out     source               destination
    2   120 REDIRECT   tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 redir ports 80

Chain INPUT (policy ACCEPT 6 packets, 1018 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

我看到 2 个数据包,120 字节(我运行了两次 netcat)。

由于您没有进入 eth0,因此重定向无法从机器重定向进行。

相关内容