Linux

將 Web 請求轉發到另一台電腦

  • February 19, 2014

我有一台筆記本和兩台伺服器:

  • 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)

“轉發”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了。

引用自:https://serverfault.com/questions/575580