Назад | Перейти на главную страницу

Перенаправить веб-запрос на другой компьютер

У меня один ноутбук и два сервера:

Я открываю браузер на своем блокноте, открываю

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, 

но ничего не получите. Почему и как это исправить?

Обновить

Вот результат tcpdump на 172.17.0.3 - http://pastebin.com/47MRWqXy

Обновление 2

Извините, я дал вам не полную информацию. Оба сервера 172.17.0.3 и 172.17.0.2 являются контейнерами докеров. Вот 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)

Вы не можете использовать DNAT, если оба сервера находятся в одной сети.

DNAT предназначен для трансляции адресов (он же брандмауэр), FORWARD в этом случае бесполезен, потому что эти пакеты не проходят через server2.

Вам нужен http-прокси или балансировщик нагрузки.

Другой вариант - установить простой index.html в apache на server2 и использовать метатег перенаправления.

Способ "вперед" 172.17.0.3:80 к 172.17.0.2:80 можно было бы использовать inetd сервер.

Тогда вы сможете перенаправить http://172.17.0.3 к http://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
}

Начать сначала xinetd : service xinetd restart

Сейчас, http://172.17.0.3 должен перенаправить вас на http://172.17.0.2

Нет необходимости iptables больше здесь.