Перенаправление http траффика на другой шлюз

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

varjo
Сообщения: 43
ОС: ArchLinux, FreeBSD

Перенаправление http траффика на другой шлюз

Сообщение varjo »

Здравствуйте.

Есть два шлюза, один на Linux, другой на Win2k3. Соответственно два провайдера.
Шлюзы видят друг друга через локалку.
Шлюз по умолчанию - Linux.

Вопрос в том, как сделать перенаправление только http траффика с Linux-шлюза на Win2k3-шлюз, а все остальное чтобы оставалось на Linux-шлюзе

Пока непойму нужно ли заворачивать хттп-запросы на Squid и им уже передавать на Win2k3, или же можно обойтись без прокси..
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Перенаправление http траффика на другой шлюз

Сообщение Ленивая Бестолочь »

почитайте про iptables forward.
это сделать очень просто.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
varjo
Сообщения: 43
ОС: ArchLinux, FreeBSD

Re: Перенаправление http траффика на другой шлюз

Сообщение varjo »

Спасибо, почитываю =)

Как я понимаю нужно сделать что-то вроде
IPTABLES +A FORWARD -s локальные_адреса -i внутренний_интерфейс_линукса -o внутренний интерфейс линукса -p TCP -d адрес_виндовс --dport 80 -j ACCEPT

но не будет ли таким образом перекидываться <весь> исходящий траффик на 80 порт винды? =)
Спасибо сказали:
varjo
Сообщения: 43
ОС: ArchLinux, FreeBSD

Re: Перенаправление http траффика на другой шлюз

Сообщение varjo »

Сделал так, но ничего не перенаправилось... :(


Ага, вроде врубился почему так - потому что пытаюсь перенаправить пакеты назначенные виндовс шлюзу =)
Спасибо сказали:
Аватара пользователя
landgraf
Сообщения: 2143
Статус: *бунту ненавистник
ОС: linux

Re: Перенаправление http траффика на другой шлюз

Сообщение landgraf »

так?
iptables -t nat -A PREROUTING -p tcp -d '!' localnet --dport 80 -j DNAT --to-destination windows_ip:8080 ?
Спасибо сказали:
varjo
Сообщения: 43
ОС: ArchLinux, FreeBSD

Re: Перенаправление http траффика на другой шлюз

Сообщение varjo »

landgraf писал(а):
13.02.2009 13:57
--to-destination windows_ip:8080 ?

и там должна висеть прокся?
так то оно можно вроде, но хотелось бы без прокси
Спасибо сказали:
Аватара пользователя
landgraf
Сообщения: 2143
Статус: *бунту ненавистник
ОС: linux

Re: Перенаправление http траффика на другой шлюз

Сообщение landgraf »

varjo
ну дальше уже проблема Win сервера вроде...
Спасибо сказали:
Аватара пользователя
xtty
Сообщения: 182
Статус: Развожу чертенков и пингвинов
ОС: Linux

Re: Перенаправление http траффика на другой шлюз

Сообщение xtty »

В принцепи тоже самое
IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $INET_IP --dport 80 -j DNAT --to-destination $WEB_IP

Он тебе перебросить на твой виндовый www сервер !
Gentoo 2014

Спасибо сказали:
varjo
Сообщения: 43
ОС: ArchLinux, FreeBSD

Re: Перенаправление http траффика на другой шлюз

Сообщение varjo »

landgraf писал(а):
13.02.2009 14:36
varjo
ну дальше уже проблема Win сервера вроде...

дальше и моя проблема тоже, могу и проксю там поднять на виндовом, но хотелось как-то элегантнее сделать :)


N0kloS писал(а):
13.02.2009 15:30
В принцепи тоже самое
IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $INET_IP --dport 80 -j DNAT --to-destination $WEB_IP
Он тебе перебросить на твой виндовый www сервер !

а у меня нету виндового www-сервера, у меня есть виндовый шлюз, с которого эти пакеты должны бежать дальше
Спасибо сказали:
ford1813
Сообщения: 383
ОС: Slackware

Re: Перенаправление http траффика на другой шлюз

Сообщение ford1813 »

varjo писал(а):
13.02.2009 15:42
landgraf писал(а):
13.02.2009 14:36
varjo
ну дальше уже проблема Win сервера вроде...

дальше и моя проблема тоже, могу и проксю там поднять на виндовом, но хотелось как-то элегантнее сделать :)


N0kloS писал(а):
13.02.2009 15:30
В принцепи тоже самое
IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $INET_IP --dport 80 -j DNAT --to-destination $WEB_IP
Он тебе перебросить на твой виндовый www сервер !

а у меня нету виндового www-сервера, у меня есть виндовый шлюз, с которого эти пакеты должны бежать дальше

Элегантнее , воткнуть второго провайдера в linux и все нормально настроить.
Контакты для связи:

E-mail: ford1813@gmail.com

Telegram: @ford1813
Спасибо сказали:
varjo
Сообщения: 43
ОС: ArchLinux, FreeBSD

Re: Перенаправление http траффика на другой шлюз

Сообщение varjo »

wertik писал(а):
13.02.2009 15:46
Элегантнее , воткнуть второго провайдера в linux и все нормально настроить.

тут не поспоришь, но - специфический спутниковый софт :(
Спасибо сказали:
varjo
Сообщения: 43
ОС: ArchLinux, FreeBSD

Re: Перенаправление http траффика на другой шлюз

Сообщение varjo »

Ну ладно. Перенаправление вроде сделал.

Код: Выделить всё

iptables -t nat -A PREROUTING -i eth0 -s ! винпроксик -p tcp --dport 80 -j DNAT --to винпроксик:3128
iptables -t nat -A POSTROUTING -o eth0 -s локалка -d проксик -j SNAT --to линукс
iptables -A FORWARD -s локалка -d проксик -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT


Запросы уходят на виндовую проксю (поставил winsquid), обрабатываются ей, что видно из store.log, но обратно приходит нечто невразумительное:
ERROR
The requested URL could not be retrieved
The following error was encountered while trying to retrieve the URL: /
Invalid URL
Some aspect of the requested URL is incorrect.
Some possible problems are:
* Missing or incorrect access protocol (should be "http://" or similar)
* Missing hostname
* Illegal double-escape in the URL-Path
* Illegal character in hostname; underscores are not allowed.

Если поставить использование прокси напрямую (в браузере), то все отображается верно.


И еще, на самом линуксе крутиться локальный апач, можно ли как-то исключить перенаправление запросов для него, не меняя порта, на котором он висит?
Спасибо сказали:
varjo
Сообщения: 43
ОС: ArchLinux, FreeBSD

Re: Перенаправление http траффика на другой шлюз

Сообщение varjo »

Вопрос с невозможностью получить url решил указанием в squid.conf
http_port 3128 transparent
Спасибо сказали:
varjo
Сообщения: 43
ОС: ArchLinux, FreeBSD

Re: Перенаправление http траффика на другой шлюз

Сообщение varjo »

Задача решилась так:

Код: Выделить всё

# локальная сеть
LAN="192.168.10.0/24"

# ip основного шлюза
MYIP="192.168.10.242"

# ip и порт шлюза со спутником
SATIP="192.168.10.241"
SATPORT="3128"

iptables -t mangle -A PREROUTING -s $LAN ! -d $LAN -p TCP --destination-port 80 -j MARK --set-mark 11
iptables -t nat -A PREROUTING -m mark --mark 11 -p TCP -j DNAT --to-destination ${SATIP}:${SATPORT}
iptables -t nat -A POSTROUTING -m mark --mark 11 -p TCP -j SNAT --to-source $MYIP



Теперь вопросы:
1. Как сделать исключения, чтобы не перенаправлялись запросы НА определенные внешние IP
2. Как сделать исключение, чтобы не перенаправлялись запросы С определенных локальных IP
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Перенаправление http траффика на другой шлюз

Сообщение pelmen »

varjo писал(а):
05.03.2009 09:31
Задача решилась так:

Код: Выделить всё

# локальная сеть
LAN="192.168.10.0/24"

# ip основного шлюза
MYIP="192.168.10.242"

# ip и порт шлюза со спутником
SATIP="192.168.10.241"
SATPORT="3128"

iptables -t mangle -A PREROUTING -s $LAN ! -d $LAN -p TCP --destination-port 80 -j MARK --set-mark 11
iptables -t nat -A PREROUTING -m mark --mark 11 -p TCP -j DNAT --to-destination ${SATIP}:${SATPORT}
iptables -t nat -A POSTROUTING -m mark --mark 11 -p TCP -j SNAT --to-source $MYIP



Теперь вопросы:
1. Как сделать исключения, чтобы не перенаправлялись запросы НА определенные внешние IP
2. Как сделать исключение, чтобы не перенаправлялись запросы С определенных локальных IP
iptables -t mangle -A PREROUTING -s $определенный_ip_которому_можно -d $определенный_ip_на_который_можно -p TCP --dport 80 -j MARK --set-mark 11
и так для каждого ip :)
Спасибо сказали:
varjo
Сообщения: 43
ОС: ArchLinux, FreeBSD

Re: Перенаправление http траффика на другой шлюз

Сообщение varjo »

pelmen писал(а):
05.03.2009 13:26
iptables -t mangle -A PREROUTING -s $определенный_ip_которому_можно -d $определенный_ip_на_который_можно -p TCP --dport 80 -j MARK --set-mark 11
и так для каждого ip :)

Хм. Спасибо за совет :)

Получаеться нечто вида:

Для разрешения _c определенных локальных IP_ перенаправлять траффик:

Код: Выделить всё

iptables -t mangle -A PREROUTING -s $ip_1 ! -d $LAN -p TCP --destination-port 80 -j MARK --set-mark 11
iptables -t mangle -A PREROUTING -s $ip_2 ! -d $LAN -p TCP --destination-port 80 -j MARK --set-mark 11
..
..
iptables -t mangle -A PREROUTING -s $ip_N ! -d $LAN -p TCP --destination-port 80 -j MARK --set-mark 11


Но как быть с запрещением перенаправлять траффик _на определенные внешние IP_ ?
Нужно чтобы перенаправлялось всё, кроме внешнийIP_1, внешнийIP_2, ..., внешнийIP_N
Указывать на какие ип можно перенаправлять - не вариант.

Есть какая-то возможность снять метку при совпадении требуемого критерия?
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Перенаправление http траффика на другой шлюз

Сообщение pelmen »

Вставь правило ПЕРЕД -j MARK, которое будет выглядеть так:
iptables -t mangle -A PREROUTING -p tcp --dport 80 -d $ip1 -j DROP
Спасибо сказали:
varjo
Сообщения: 43
ОС: ArchLinux, FreeBSD

Re: Перенаправление http траффика на другой шлюз

Сообщение varjo »

Хорошо. Завтра попробую =) В любом случае Больше Спасибо ;)
Спасибо сказали:
varjo
Сообщения: 43
ОС: ArchLinux, FreeBSD

Re: Перенаправление http траффика на другой шлюз

Сообщение varjo »

pelmen писал(а):
05.03.2009 21:12
Вставь правило ПЕРЕД -j MARK, которое будет выглядеть так:
iptables -t mangle -A PREROUTING -p tcp --dport 80 -d $ip1 -j DROP


Вот это не помогло.

А разрешать для определенных локальных IP - получилось.
Спасибо сказали: