LINUX.ORG.RU
ФорумAdmin

Реализовать перенаправление

 ,


0

2

Добрый день.

Есть squid на сервере с убунтой (14.04.5), который работает как обычный прокси с авторизацией по IP на порту 8888, и как прозрачный прокси для HTTP на порту 3198, а так де delay_pools и т. п.

На днях собрался и на отдельной машине скомпилировал сквид с возможностью прозрачного проксирования и блокировки HTTPS трафика. На тестовой машине обкатал, все прекрасно, все работает.

Теперь стоит задача, не останавливая работу интернетов для пользователей, грохнуть работающий на данный момент сквид, установить и сконфигурировать новый.

Теоретически можно было бы временно поднять на отдельной машине сквид без авторизации и дать этой машине IP работающего на данный момент сервера (на работающей сейчас убунте включен форвардинг и для пользователей в сети он является «шлюзом по умолчанию», запросы на 80 порт перенаправляются на прозрачный порт сквида), но проблема в том, что на сервере не только сквид, но и почтовый сервер (postfix + dovecot) и еще всякая мелочевка вроде файлопомойки на самбе и принтсервера на капсе.

Есть идея поднять таки прокси на отдельной машине и приходящие запросы на 80 и 8888 порт перенаправлять на эту машину IP:port.

2 дня курил man iptables, но так и не нашел для себя решения. Насколько я понимаю из мана, действие REDIRECT у iptables может только в --to-ports на этой же (локальной) машине, а бросить пакет на другую машину по IP:port не может. Возможно, нужна цепочка правил, я не догоняю как реализовать.

Вопрос: как временно заставить пакеты из сети 192.168.0.0/24 следующие через «шлюз по умолчанию» с адресом 192.168.0.1 на порт 80 и 8888 идти на 192.168.0.2:80 и 192.168.0.2:8888 соответственно?

Возможно, у кого-то есть другие предложения по решению такой задачи.

Перепиши адрес сквида у клиентов на _отдельное_ имя вместо ip, и меняй сколько хочешь.

psv1967 ★★★★★ ()
ip add default 19.168.0.2 table 120
ip rule add from 192.168.0.0/24 table 120
nefton ()
Ответ на: комментарий от psv1967

Перепиши адрес сквида у клиентов на _отдельное_ имя вместо ip, и меняй сколько хочешь

Клиентов-то дофига, бегать по ним

ip add default 19.168.0.2 table 120
ip rule add from 192.168.0.0/24 table 120

Не понял, что имеется в виду. Добавить еще один адрес машине? Что за table 120?

stiflerwen ()

Перепиши адрес сквида у клиентов на _отдельное_ имя вместо ip, и меняй сколько хочешь.

Так имя сервера имеет вид ubunturoute.network.local, соответственно, у тех, у кого прописан прокси в системе, написано ubunturoute.network.local:8888, у тех, у кого почта есть, в качестве POP/IMAP оно же прописано, только порты, соответственно, другие, у кого принтер расшаренный, там http://ubunturoute.network.local:631, для виндовых юзеров там базы антивирусные генерятся, на вебморде nextcloud и т. д. так вот, надо чтобы это все не отвалилось, так что, мне кажется, нельзя просто так взять и сменить имя в DNS (тем более на нем же и DNS bind и DHCP isc-dhcp-server)

Я так понимаю, проще будет не заморачиваться и в выходные себя заставить

stiflerwen ()
Ответ на: комментарий от nefton

А вот это, кажется, то, что нужно, спасибо, не знал.

То есть, сначала отлавливаем и маркируем нужные пакеты в iptables:

iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 8888 -j MARK --set-mark 0x2
Затем создаем таблицу маршрутизации:
ip route add default via 192.168.0.2 dev eth0 table 102
И правило для заворачивания пакетов с отметкой 0x2 (а это у нас теперь все пакеты, идущие на порт 8888) на машину с адресом 192.168.0.2 (условный временный сквид):
ip rule add fwmark 0x2/0x2 lookup 102
Как-то так, только вот пока не разобрался в синтаксисе ip route, например, мне не понятно, почему 102 и что это 102 означает? Имя новой таблицы? А как быть уверенным, что такой таблицы на данный момент нет нет? Далее не понятно, как сохранять созданные правила после перезагрузки? Прописывать те же команды в конец /etc/network/interfaces ?

stiflerwen ()
Ответ на: комментарий от stiflerwen

например, мне не понятно, почему 102 и что это 102 означает? Имя новой таблицы?

Да, таблиц всего может быть 255. Крайние заняты. 120 - просто таблица где-то всередине. Так же как и 100 или 28. Ей можно даже присвоить человеческое имя тут

 /etc/iproute2/rt_tables 

nefton ()
Ответ на: комментарий от nefton

Видимо, чет делаю не так.

Есть: основной сервер 192.168.0.1, на нем непрозрачный сквид на порту 8888

Есть: временный сервер 192.168.0.2, на нем так же непрозрачный сквид на порту 8888

Задача: настроить маршрутизацию на сервере 1 таким образом, чтобы пакеты не принимались сквидом на сервере 1, а пересылались на сквид сервера 2

Решение:

iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 8888 -j MARK --set-mark 0x2
ip route add default via 192.168.0.2 dev eth0 table 102
ip rule add fwmark 0x2/0x2 lookup 102
Не работает, браузер просто выдает сообщение о том, что прокси-сервер отказывается принимать соединения.

stiflerwen ()
Ответ на: комментарий от stiflerwen

fix:

Если сквид на сервере 1 работает, то все норм, и перенаправление, видимо, идет, поскольку internet.yandex.ru начинает показывать внешний (белый) IP сервера 2.

Но стоит остановить сквид на сервере 1 (как если бы я его удалил для установки нового), начинает выдавать сообщение о том, что «прокси-сервер отказывается принимать соединения»

stiflerwen ()
Ответ на: комментарий от stiflerwen

А зачем отдельно роутинг прописывать.Может просто DNAT на новый сквид.

$IPTABLES -t nat -A PREROUTING -p tcp -d $INET_IP -m multiport --dport 8888,80 -j DNAT --to-destination 192.168.0.2:8888

Ну по аналогии.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.