我有一台运行 XenServer 6.2 的租用服务器,我只有 1 个公网 IP,因此我进行了一些 NAT,将端口 22 和 80 重定向到我的 WebServer VM。我对端口 80 重定向有疑问。
当我使用此重定向时,我可以进入 Web 服务器的 Apache,但该服务器失去 Web 访问权限。
我遇到了这种错误:
W: Failed to fetch http://http.debian.net/debian/dists/wheezy/main/source/Sources 404 Not Found [IP: 46.4.205.44 80]
但我可以 ping 通任何地方。
XenserverIP:80 重定向到 10.0.0.2:80(WebServer)。
这是我的 XenServer iptables 的端口 80 重定向部分:
-A PREROUTING -i xenbr1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0
.2:80
-A INPUT -i xenbr1 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
COMMIT
我的配置有什么问题?XenServer 有问题吗?
感谢您的帮助 !
编辑:这是我的 iptables 完整内容:
*nat
:PREROUTING ACCEPT [51:4060]
:POSTROUTING ACCEPT [9:588]
:OUTPUT ACCEPT [9:588]
-A PREROUTING -p tcp -m tcp --dport 1234 -j DNAT --to-destination 10.0.0.2:22
-A PREROUTING -i xenbr1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0
.2:80
-A POSTROUTING -s 10.0.0.0/255.255.255.0 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [5434:4284996]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5014:6004729]
-A INPUT -i xenbr1 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
COMMIT
更新 :
我有第二台服务器,其 IP 为 10.0.0.3,它也存在与 10.0.0.2 相同的问题。
我想我找到了一点解释:
我有在 10.0.0.2:80 上监听的 apache,由于我的 Xenserver 上有 NAT 转发规则,所以来自外部网络的所有传入流量(网站请求、下载……)都被路由到 10.0.0.2:80,因为它使用端口 80。
这就是为什么我在第二台虚拟机上遇到同样的问题。如果我尝试执行 apt-get 更新,我会向返回端口 80 的网站发出请求,因此会被路由到 apache。
有人能帮我解决这个问题吗?(如果我的 Apache 服务器正在运行,我就无法访问内部 LAN 上的网站,这是一个问题 ^^)
答案1
您的 DNAT 规则应包含“-d your-public-external-ip”,否则 NAT 规则将匹配到端口 80 的所有数据包,包括传出数据包。您可能正在将传出的 HTTP 请求重定向到您自己的 Web 服务器。查看访问日志应该可以确认这一点。