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

Перенаправление HTTP-запросов на другой веб-сервер

у меня есть Сервер Ubuntu 12.04 соединен с две подсети.

Eth0 - это 20.20.20.1, он размещает веб-сервер Apache на порту 80. Eth1 - динамический IP-адрес в 10.10.10.0 подсеть.

Этот сервер не является шлюзом, т.е. никакие рабочие станции не указывают на этот сервер.

Там есть другой веб-сервер находится во второй подсети в 10.10.10.1.

Я бы хотел пользователей из первой подсети увидеть этот второй сервер, расположенный во второй подсети. Например, если пользователь вводит http: //20.20.20.1 (порт 80) он видит 1-й веб-сервер находится в собственной подсети, если пользователь вводит https: //20.20.20.1 (порт 443) он получает отправлено во вторую подсеть и видит 2-й веб-сервер в 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, к сожалению.

Вам не нужен NAT или что-то еще. Это основная задача маршрутизации. Пользователи подсети 20.x должны использовать ваш сервер ubuntu в качестве шлюза в подсеть 10.x. Автоматическое распространение настроек может быть достигнуто несколькими способами.

Я думаю, у вас есть две сетевые карты на 10.10.10.1 машина и проблема в исходном IP.

Например клиент 20.20.20.15 пытается получить доступ https: //20.20.20.1. Вы DNAT этот трафик на 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

Или добавить SNAT правило на 20.20.20.1:

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

Но в этом случае в журналах веб-сервера вы увидите MASQUERADEd IP-адрес вашего первого (в данном случае 20.20.20.1) сервера в REMOTE_ADDR и, может быть, это тебе не подходит. Так что лучше добавить статический маршрут к подсети, как я упоминал ранее.