将 Web 请求转发到另一台计算机

将 Web 请求转发到另一台计算机

我有一台笔记本和两台服务器:

  • ip = 172.17.0.2(我这里安装了nginx)
  • ip = 172.17.0.3(这里什么都没有,但我可以从这里 ping 172.17.0.2)

我在笔记本上打开浏览器,打开

http://172.17.0.2 

并从 Nginx 获取网页。

现在我想做点什么,如果我能打开

http://172.17.0.3 

在浏览器中,该服务器将我的请求转发到 172.17.0.2 并返回相同的页面。

我已经连接到 172.17.0.3 并做出以下更改:

root@6d2de436eef0:/# sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
root@6d2de436eef0:/# iptables -t nat -F PREROUTING
root@6d2de436eef0:/# iptables -t nat -A PREROUTING -d 172.17.0.3 -j DNAT --to-destination 172.17.0.2 
root@6d2de436eef0:/# iptables -F FORWARD
root@6d2de436eef0:/# iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
root@6d2de436eef0:/# iptables -A FORWARD -m conntrack --ctstate NEW -d 172.17.0.2 -j ACCEPT
root@6d2de436eef0:/# iptables -P FORWARD DROP

现在我打开

http://172.17.0.3, 

但什么也没得到。为什么?我该如何解决?

更新

以下是 172.17.0.3 上的 tcpdump 的结果 -http://pastebin.com/47MRWqXy

更新 2

抱歉,我给您的信息不完整。服务器 172.17.0.3 和 172.17.0.2 都是 docker 容器。这是主机上的 ifconfig:

$ ifconfig
docker0   Link encap:Ethernet  HWaddr fe:69:ac:53:70:53  
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::f0ee:53ff:feae:aa6c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:162525 errors:0 dropped:0 overruns:0 frame:0
          TX packets:278054 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:10471915 (10.4 MB)  TX bytes:436185034 (436.1 MB)

eth0      Link encap:Ethernet  HWaddr f0:de:f1:27:7a:e6  
          inet addr:172.20.0.136  Bcast:172.20.0.255  Mask:255.255.255.0
          inet6 addr: fe80::f2de:f1ff:fe27:7ae6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:16023892 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4007904 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:8557520703 (8.5 GB)  TX bytes:484890281 (484.8 MB)
          Interrupt:20 Память:f8500000-f8520000 

eth1      Link encap:Ethernet  HWaddr 82:ea:96:9d:48:88  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

答案1

一种“转发”的方法172.17.0.3:80可能172.17.0.2:80是使用inetd服务器。

然后,您将能够重定向http://172.17.0.3http://172.17.0.2

在服务器上172.17.0.3

apt-get install xinetd

编辑/etc/xinetd.conf并添加如下内容:

service my_redirector
{
 type = UNLISTED
 disable = no
 socket_type = stream
 protocol = tcp
 user = root
 wait = no
 port = 80
 redirect = 172.17.0.2 80
 log_type = FILE /tmp/somefile.log
}

重新开始xinetdservice xinetd restart

现在http://172.17.0.3应该将您重定向至http://172.17.0.2

iptables这里不再需要了。

答案2

如果两台服务器位于同一网络中,则无法使用 DNAT。

DNAT 用于地址转换(又名防火墙),在这种情况下 FORWARD 是无用的,因为这个数据包不会经过 server2。

您需要一个 http 代理或负载均衡器。

另一个选择是在 apache 中将简单的 index.html 设置到 server2 中并使用重定向元标记。

相关内容