Перенаправление http траффика на другой шлюз
Модераторы: SLEDopit, Модераторы разделов
-
varjo
- Сообщения: 43
- ОС: ArchLinux, FreeBSD
Перенаправление http траффика на другой шлюз
Здравствуйте.
Есть два шлюза, один на Linux, другой на Win2k3. Соответственно два провайдера.
Шлюзы видят друг друга через локалку.
Шлюз по умолчанию - Linux.
Вопрос в том, как сделать перенаправление только http траффика с Linux-шлюза на Win2k3-шлюз, а все остальное чтобы оставалось на Linux-шлюзе
Пока непойму нужно ли заворачивать хттп-запросы на Squid и им уже передавать на Win2k3, или же можно обойтись без прокси..
Есть два шлюза, один на Linux, другой на Win2k3. Соответственно два провайдера.
Шлюзы видят друг друга через локалку.
Шлюз по умолчанию - Linux.
Вопрос в том, как сделать перенаправление только http траффика с Linux-шлюза на Win2k3-шлюз, а все остальное чтобы оставалось на Linux-шлюзе
Пока непойму нужно ли заворачивать хттп-запросы на Squid и им уже передавать на Win2k3, или же можно обойтись без прокси..
-
Ленивая Бестолочь
- Бывший модератор
- Сообщения: 2760
- ОС: Debian; gentoo
Re: Перенаправление http траффика на другой шлюз
почитайте про iptables forward.
это сделать очень просто.
это сделать очень просто.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
-
varjo
- Сообщения: 43
- ОС: ArchLinux, FreeBSD
Re: Перенаправление http траффика на другой шлюз
Спасибо, почитываю =)
Как я понимаю нужно сделать что-то вроде
IPTABLES +A FORWARD -s локальные_адреса -i внутренний_интерфейс_линукса -o внутренний интерфейс линукса -p TCP -d адрес_виндовс --dport 80 -j ACCEPT
но не будет ли таким образом перекидываться <весь> исходящий траффик на 80 порт винды? =)
Как я понимаю нужно сделать что-то вроде
IPTABLES +A FORWARD -s локальные_адреса -i внутренний_интерфейс_линукса -o внутренний интерфейс линукса -p TCP -d адрес_виндовс --dport 80 -j ACCEPT
но не будет ли таким образом перекидываться <весь> исходящий траффик на 80 порт винды? =)
-
varjo
- Сообщения: 43
- ОС: ArchLinux, FreeBSD
Re: Перенаправление http траффика на другой шлюз
Сделал так, но ничего не перенаправилось... 
Ага, вроде врубился почему так - потому что пытаюсь перенаправить пакеты назначенные виндовс шлюзу =)
Ага, вроде врубился почему так - потому что пытаюсь перенаправить пакеты назначенные виндовс шлюзу =)
-
landgraf
- Сообщения: 2143
- Статус: *бунту ненавистник
- ОС: linux
Re: Перенаправление http траффика на другой шлюз
так?
iptables -t nat -A PREROUTING -p tcp -d '!' localnet --dport 80 -j DNAT --to-destination windows_ip:8080 ?
iptables -t nat -A PREROUTING -p tcp -d '!' localnet --dport 80 -j DNAT --to-destination windows_ip:8080 ?
-
varjo
- Сообщения: 43
- ОС: ArchLinux, FreeBSD
-
landgraf
- Сообщения: 2143
- Статус: *бунту ненавистник
- ОС: linux
Re: Перенаправление http траффика на другой шлюз
varjo
ну дальше уже проблема Win сервера вроде...
ну дальше уже проблема Win сервера вроде...
-
xtty
- Сообщения: 182
- Статус: Развожу чертенков и пингвинов
- ОС: Linux
Re: Перенаправление http траффика на другой шлюз
В принцепи тоже самое
IPTABLES -t nat -A PREROUTING -p TCP -m tcp -d $INET_IP --dport 80 -j DNAT --to-destination $WEB_IP
Он тебе перебросить на твой виндовый www сервер !
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 траффика на другой шлюз
дальше и моя проблема тоже, могу и проксю там поднять на виндовом, но хотелось как-то элегантнее сделать
а у меня нету виндового www-сервера, у меня есть виндовый шлюз, с которого эти пакеты должны бежать дальше
-
ford1813
- Сообщения: 383
- ОС: Slackware
Re: Перенаправление http траффика на другой шлюз
Элегантнее , воткнуть второго провайдера в linux и все нормально настроить.
-
varjo
- Сообщения: 43
- ОС: ArchLinux, FreeBSD
-
varjo
- Сообщения: 43
- ОС: ArchLinux, FreeBSD
Re: Перенаправление http траффика на другой шлюз
Ну ладно. Перенаправление вроде сделал.
Запросы уходят на виндовую проксю (поставил winsquid), обрабатываются ей, что видно из store.log, но обратно приходит нечто невразумительное:
Если поставить использование прокси напрямую (в браузере), то все отображается верно.
И еще, на самом линуксе крутиться локальный апач, можно ли как-то исключить перенаправление запросов для него, не меняя порта, на котором он висит?
Код: Выделить всё
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 траффика на другой шлюз
Вопрос с невозможностью получить url решил указанием в squid.conf
http_port 3128 transparent
http_port 3128 transparent
-
varjo
- Сообщения: 43
- ОС: ArchLinux, FreeBSD
Re: Перенаправление http траффика на другой шлюз
Задача решилась так:
Теперь вопросы:
1. Как сделать исключения, чтобы не перенаправлялись запросы НА определенные внешние IP
2. Как сделать исключение, чтобы не перенаправлялись запросы С определенных локальных IP
Код: Выделить всё
# локальная сеть
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 траффика на другой шлюз
iptables -t mangle -A PREROUTING -s $определенный_ip_которому_можно -d $определенный_ip_на_который_можно -p TCP --dport 80 -j MARK --set-mark 11varjo писал(а): ↑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
и так для каждого ip
Спасибо сказали:
-
varjo
- Сообщения: 43
- ОС: ArchLinux, FreeBSD
Re: Перенаправление http траффика на другой шлюз
Хм. Спасибо за совет
Получаеться нечто вида:
Для разрешения _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 траффика на другой шлюз
Вставь правило ПЕРЕД -j MARK, которое будет выглядеть так:
iptables -t mangle -A PREROUTING -p tcp --dport 80 -d $ip1 -j DROP
iptables -t mangle -A PREROUTING -p tcp --dport 80 -d $ip1 -j DROP
Спасибо сказали:
-
varjo
- Сообщения: 43
- ОС: ArchLinux, FreeBSD
Re: Перенаправление http траффика на другой шлюз
Хорошо. Завтра попробую =) В любом случае Больше Спасибо 
-
varjo
- Сообщения: 43
- ОС: ArchLinux, FreeBSD