Не для одного компьютера, а для всей локальной сети.
Другими словами, как перенаправить все исходящие HTTP запросы локальной сети на один сайт.
Задача
Есть локальная сеть организации.
Общий доступ к интернету организован с помощью шлюза на Debian, iptables на котором настроен с помощью пакета arno-iptables-firewall.
Нужно сделать так, чтобы при вводе любого http-адреса в любом браузере любой клиентской машины, человек попадал на один и тот же сайт. При этом все остальные сетевые службы, такие как аська, скайп, почта и т.д., должны работать без ограничений.
Да, сайт, на который должны попадать клиенты, находится на виртуальном хостинге, то есть у него нет внешнего ip-адреса. Вернее, сам адрес есть, но к нему привязаны ещё десятки различных доменных имён, поэтому доступ по http://[ip] невозможен.
Время ограничено, сделать всё надо за 15 минут.
Решение
Если бы целевой сайт находился на нормальном хостинге, то есть если бы ему был сопоставлен конкретный адрес интернета - всё решение ограничилось бы вводом единственной инструкции в iptables, а именно:
где $EXT_WEB - внешний ip-адрес сайта.
Но, как уже говорилось, это невозможно.
Поэтому пойдём другим путём, но в этом же направлении.
Устанавливаем на шлюз веб-сервер:
Настраиваем его - разрешаем обрабатывать инструкции .htaccess:
/etc/apache2/sites-enabled/000-default
В самом .htaccess делаем перенаправление на внешний веб-сервер по имени сайта:
/var/www/.htaccess
sitename.dom - наш целевой сайт.
Теперь при попытке зайти на шлюз по http, то есть по 80 порту - попадаем на sitename.dom.
Через iptables загибаем все http-запросы на веб-сервер шлюза. Все, кроме тех, что ведут на целевой сайт:
Здесь $GW_IP - адрес шлюза в локальной сети.
Чтобы правило действовало и после перезагрузки шлюза - добавляем его в автозагрузку:
/etc/rc.local
...
iptables -t nat -A PREROUTING -i eth0 -d ! $EXT_WEB -p tcp -m tcp --dport 80 -j DNAT --to-destination $GW_IP
...
Комментарии и критика - приветствуются.
Если кто скажет как можно было сделать проще - буду благодарен.
Комментарии
Владимир
#cid6384
Ответить
rinetd?
http://www.boutell.com/rinetd
socat?
http://www.dest-unreach.org/socat
#cid6385
Ответить
Краткость — сестра таланта?
Посмотрю, спасибо.
#cid6432
Ответить
rinetd — простой форвардер. При наличии iptables использовать его нецелесообразно.
socat — крут! Но использовать его для поставленной цели тоже нельзя.
Веб-сервер действительно поднимается только ради редиректа на виртуальный хостинг.
Как сделать иначе — не знаю. Есть ещё предложения?