将 HTTP 请求转发到另一个 Web 服务器

将 HTTP 请求转发到另一个 Web 服务器

我有一个Ubuntu 12.04 服务器连接至两个子网

Eth0 是20.20.20.1,它在端口 80 上托管一个 Apache Web 服务器。10.10.10.0Eth1 是子网中的动态 IP 地址

该服务器不是网关,即没有工作站网关指向该服务器。

另一个 Web 服务器位于第二个子网10.10.10.1

我希望用户从第一个子网能够看到位于第二个子网中的第二台服务器。例如,如果用户输入http: //20.20.20.1(端口 80)他看到第一个 Web 服务器位于他自己的子网中,如果用户输入https: //20.20.20.1(端口 443)他得到了转发到第二个子网,看到第二台 Web 服务器10.10.10.1

这是我尝试过的:

echo "1" > /proc/sys/net/ipv4/ip_forward

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -d 10.10.10.1 -p tcp --dport 443 -m state \
    --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp  --dport 443 -j DNAT \
    --to-destination 10.10.10.1:443

然而不幸的是,来自第一个子网的请求不会被转发到10.10.10.1

答案1

我认为您的机器上有两个 NIC 10.10.10.1,问题出在源 IP 上。

例如客户端20.20.20.15尝试访问https: //20.20.20.1。您基因转移酶流量到10.10.10.1:443

因此现在10.10.10.1收到一个带有源 IP 的数据包20.20.20.15。子网没有具体规则,20.20.20.0/24因此回复是通过未连接到机器的默认网关发送的20.20.20.1。数据包将发送到其他地方并最终被丢弃。

您需要ip route 20.20.20.0/24 dev ...在服务器上添加10.10.10.1

或者添加源地址转换规则20.20.20.1

iptables -t nat -A POSTROUTING -p tcp --dport 443 -d 10.10.10.1 -o eth1 -j MASQUERADE

但在这种情况下,在 Web 服务器日志中,您会看到第一个服务器(在本例中为 20.20.20.1)的 MASQUERADEd IP 地址,REMOTE_ADDR这可能对您不利。因此,最好向子网添加静态路由,正如我之前提到的。

答案2

您不需要任何 NAT 或其他任何东西。这是一项基本的路由任务。20.x 子网上的用户应使用您的 ubuntu 服务器作为 10.x 子网的网关。可以通过多种方式实现设置的自动传播。

相关内容