在 ubuntu 18.04 上使用规则进行端口转发

在 ubuntu 18.04 上使用规则进行端口转发

我有一台虚拟机,其中端口 80 被 apache tomcat(host.nvoids.com)占用。

并且我在端口 8020 上运行 apache2 php,这是一个 wordpress 博客(host.nvoids.com:8020)

我希望当有人访问我的 blog.nvoids.com 服务器时,它应该被转发到 8020。

请告诉我是否可以使用任何基于规则的端口转发程序来做些什么?

类似下面的内容

iptables -t nat -A PREROUTING -d blog.nvoids.com -p tcp -m multiport --dports 80,443 -j DNAT --to-destination blog.nvoids.com:8020

我没有尝试这个,因为我不知道如何关闭上述命令。

是否有可以分配给 iptables 规则的规则名称或编号?我可以打开/关闭它吗?

问候

答案1

撤消的规范方法

iptables -t nat -A PREROUTING -d blog.nvoids.com -p tcp -m multiport --dports 80,443 -j DNAT --to-destination blog.nvoids.com:8020

只需替换-A-D(将添加替换为删除):

iptables -t nat -D PREROUTING -d blog.nvoids.com -p tcp -m multiport --dports 80,443 -j DNAT --to-destination blog.nvoids.com:8020

感谢您对“我如何破坏事物然后清理”感兴趣并提供实际的域名。

另外,您说的是 host.nvoids.com:8020,但您的命令却说的是 blog.nvoids.com:8020,这可能是一个错误。

我认为 iptables/DNAT 不会对你有用。原因是:使用 IP 路由表时,要注意的主要事项是不仅数据包应该单向传输,而且生成的数据包应该(大致)返回相同的路由。host.nvoids.com 中没有任何内容会导致它将数据包返回到“iptables 机器”。客户端不希望将数据包发送到一个 IP 并收到来自不同 IP 的回复 - 这是行不通的。

也许在 blog.nvoids.com 上使用 haproxy,或者类似的简单的反向代理?

答案2

您无法使用 iptables 来执行此操作;您需要一个反向代理。

iptables 在网络堆栈的第 2/3/4 层工作,但是 HTTPHost标头在这些层不可用,因此 iptables 无法区分端口 80 上的数据包foo.example.com和另一个数据包bar.example.com(假设两个站点解析为同一个 IP 地址)。iptables 看到的只是发往端口 80(或端口 443)上的 IP 地址的数据包。

要使用反向代理,您需要将 tomcat 移动到另一个端口(例如,8080),然后将反向代理配置为接受端口 80 和 443 上的连接。反向代理将检查Host传入连接的 HTTP 标头,并将流量代理到适当的上游服务器(在您的情况下为 Tomcat 或 Apache2)。

nginx 通常用作反向代理,但其他一些选项包括 apache、haproxy 和 squid。

答案3

编辑/etc/apache2/sites-available/000-default.conf

# Redirect all requests to the local Apache server to port 8080 
RewriteRule ^.*$ http://%{HTTP_HOST}:8020%{REQUEST_URI}

apachectl restart 此外,这个端口重定向是使用 Apache 模块 mod_proxy 设置的。为此,我们应该在服务器上启用 mod_proxy。 忘掉那些 iptables 规则

相关内容