LinuxForum.Fans
Тема

Настройка шлюза с 2 провайдерами на 1 сетевом интерфейсе

Автор: klboris 11 сообщений 3115 просмотров
#195793

День добрый! Уважаемые гуру объясните неграмотному как настроить шлюз с 2 провайдерами (два инет подключения от 1 провайдера) на 1 сетевой карте, вторая соответственно смотрит в локалку.

Имеем:
eth0 - смотрит в инет
ppp1, ppp2 - два активных инет подключения
eth1 - смотрит в локальную сеть
Сервер на Debian 6 (скажем 192.168.1.1)

Нужно, закрыть весь траффик и открыть несколько портов, некоторые из них должны работать только на определенное инет подключение а некоторые на оба.

к примеру 3389 на ppp2 и редиректить на машину из сети (скажем 192.168.1.2)
81 на оба подключения ppp1 и ppp2 и на машину из сети (скажем 192.168.1.3) и т.п.

подскажите уважаемые гуру как осуществить данную задумку или ходябы подскажите ресурс с описанием такой ситуации (сколько ниискал находил только 2 провайдера 3 сетевых интерфейса, 2 внешних 1 внутренний)

#195807

цепочка PREROUTING и курим iproute2 на элемент собственных таблиц.

#195837

Так, хорошо, создал я 2 таблици прописал iptables но, по моему таблу у меня запрос приходящий с 1 ip уходит на 1 сервер по 2 ip на 2 и соответственно также распределны правилы ответа

text
echo "[+] Flushing existing iptables rules..."
$IPTABLES -F
$IPTABLES -F -t nat
$IPTABLES -F -t raw
$IPTABLES -F -t mangle
$IPTABLES -X
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

$MODPROBE ip_conntrack $MODPROBE iptable_nat

echo "[+] Setting up INPUT chain..."

$IPTABLES -A INPUT -m state --state INVALID -j DROP $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A INPUT -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT$IPTABLES -A INPUT -i $LOCAL_ETH -s $LOCAL_NET -j ACCEPT $IPTABLES -A INPUT -i lo -j ACCEPT

echo "[+] Setting up OUTPUT chain..."

$IPTABLES -A OUTPUT -m state --state INVALID -j DROP $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A OUTPUT -o $GLOBAL_ETH_PRIM -p udp --dport 53 -j ACCEPT $IPTABLES -A OUTPUT -o $GLOBAL_ETH_PRIM -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -o $LOCAL_ETH -d $LOCAL_NET -m state --state NEW -j ACCEPT

echo "[+] Setting up FORWARD chain..."

$IPTABLES -A FORWARD -m state --state INVALID -j DROP $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -i $GLOBAL_ETH_P1 -d $SRV11 -p tcp --dport 25 --syn -m state --state NEW -j ACCEPT $IPTABLES -A FORWARD -i $GLOBAL_ETH_P2 -d $SRV12 -p tcp --dport 25 --syn -m state --state NEW -j ACCEPT $IPTABLES -A FORWARD -i $GLOBAL_ETH_P1 -d $SRV11 -p tcp --dport 3389 --syn -m state --state NEW -j ACCEPT $IPTABLES -A FORWARD -i $GLOBAL_ETH_P2 -d $SRV12 -p tcp --dport 3389 --syn -m state --state NEW -j ACCEPT $IPTABLES -A FORWARD -i $GLOBAL_ETH_P1 -d $SRV11 -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT $IPTABLES -A FORWARD -i $GLOBAL_ETH_P2 -d $SRV12 -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT $IPTABLES -A FORWARD -i $GLOBAL_ETH_P1 -d $SRV11 -p tcp --dport 81 --syn -m state --state NEW -j ACCEPT $IPTABLES -A FORWARD -i $GLOBAL_ETH_P2 -d $SRV12 -p tcp --dport 81 --syn -m state --state NEW -j ACCEPT $IPTABLES -A FORWARD -i $GLOBAL_ETH_P1 -d $SRV11 -p tcp --dport 30583 --syn -m state --state NEW -j ACCEPT $IPTABLES -A FORWARD -i $GLOBAL_ETH_P2 -d $SRV12 -p tcp --dport 30583 --syn -m state --state NEW -j ACCEPT $IPTABLES -A FORWARD -i $GLOBAL_ETH_P1 -d $SRV11 -p tcp --dport 3050 --syn -m state --state NEW -j ACCEPT $IPTABLES -A FORWARD -i $GLOBAL_ETH_P2 -d $SRV12 -p tcp --dport 3050 --syn -m state --state NEW -j ACCEPT $IPTABLES -A FORWARD -i $LOCAL_ETH -s $SRV11 -j ACCEPT $IPTABLES -A FORWARD -i $LOCAL_ETH -s $SRV12 -j ACCEPT

$IPTABLES -t nat -A POSTROUTING -s $SRV11 -p tcp --dport 25 -j SNAT --to-source $GLOBAL_IP_PRIM $IPTABLES -t nat -A POSTROUTING -s $SRV12 -p tcp --dport 25 -j SNAT --to-source $GLOBAL_IP_PRIM

$IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV11 -p tcp --dport 25 -j MARK --set-mark $MARK_PRIM $IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV12 -p tcp --dport 25 -j MARK --set-mark $MARK_PRIM

$IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P1 -d $GLOBAL_IP_P1 -p tcp --dport 25 -j DNAT --to-destination $SRV11 $IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P1 -d $GLOBAL_IP_P1 -p tcp --dport 3389 -j DNAT --to-destination $SRV11 $IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P2 -d $GLOBAL_IP_P2 -p tcp --dport 25 -j DNAT --to-destination $SRV12 $IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P2 -d $GLOBAL_IP_P2 -p tcp --dport 3389 -j DNAT --to-destination $SRV12 $IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P1 -d $GLOBAL_IP_P1 -p tcp --dport 80 -j DNAT --to-destination $SRV11 $IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P1 -d $GLOBAL_IP_P1 -p tcp --dport 81 -j DNAT --to-destination $SRV11 $IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P2 -d $GLOBAL_IP_P2 -p tcp --dport 80 -j DNAT --to-destination $SRV12 $IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P2 -d $GLOBAL_IP_P2 -p tcp --dport 81 -j DNAT --to-destination $SRV12 $IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P1 -d $GLOBAL_IP_P1 -p tcp --dport 30583 -j DNAT --to-destination $SRV11 $IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P1 -d $GLOBAL_IP_P1 -p tcp --dport 3050 -j DNAT --to-destination $SRV11 $IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P2 -d $GLOBAL_IP_P2 -p tcp --dport 30583 -j DNAT --to-destination $SRV12 $IPTABLES -t nat -A PREROUTING -i $GLOBAL_ETH_P2 -d $GLOBAL_IP_P2 -p tcp --dport 3050 -j DNAT --to-destination $SRV12

$IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV11 -p tcp --sport 25 -j MARK --set-mark $MARK_PRIM $IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV11 -p tcp --sport 3389 -j MARK --set-mark $MARK_PRIM $IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV12 -p tcp --sport 25 -j MARK --set-mark $MARK_SEC $IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV12 -p tcp --sport 3389 -j MARK --set-mark $MARK_SEC $IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV11 -p tcp --sport 80 -j MARK --set-mark $MARK_PRIM $IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV11 -p tcp --sport 81 -j MARK --set-mark $MARK_PRIM $IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV12 -p tcp --sport 80 -j MARK --set-mark $MARK_SEC $IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV12 -p tcp --sport 81 -j MARK --set-mark $MARK_SEC $IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV11 -p tcp --sport 30583 -j MARK --set-mark $MARK_PRIM $IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV11 -p tcp --sport 3050 -j MARK --set-mark $MARK_PRIM $IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV12 -p tcp --sport 30583 -j MARK --set-mark $MARK_SEC $IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -s $SRV12 -p tcp --sport 3050 -j MARK --set-mark $MARK_SEC

но мне нужно чтобы запрос приходящий по портам 30583, 81, 3050 не в зависимости от внешнего ip ($GLOBAL_ETH_P1, $GLOBAL_ETH_P2) уходил на 2 машину ($SRV12) и соответственно возращался на этотже IP.

схема примерно такая:

$GLOBAL_ETH_P1:81 -> $SRV12 -> $GLOBAL_ETH_P1:81
и
$GLOBAL_ETH_P2:81 -> $SRV12 -> $GLOBAL_ETH_P2:81

и я думаю если я это пропишу в правилах то шлюз начнет путать IP на который слать ответ (путать таблици в IPроутре)

#195838

Да еще поправте меня плизз. Таким запросом я смогу выдернуть IP шлюза провайдера из поднятого коннекта?

text
"`ip addr show $IF2 | grep inet | awk '{print $3}'`"
#195852

$GLOBAL_ETH_P1:81 -> $SRV12 -> $GLOBAL_ETH_P1:81
и
$GLOBAL_ETH_P2:81 -> $SRV12 -> $GLOBAL_ETH_P2:81

Для этого connmark в некоторых дистрах надо пере собирать ядро для поддержки.

#195853
klboris написал:
Да еще поправте меня плизз. Таким запросом я смогу выдернуть IP шлюза провайдера из поднятого коннекта?
text
"`ip addr show $IF2 | grep inet | awk '{print $3}'`"

Поидее нет ток посмотреть

#196067
klboris написал:
Таким запросом я смогу выдернуть IP шлюза провайдера из поднятого коннекта?

Нет. ip addr show показывает локальные интерфейсы. Так ты узнаешь только свой IP адрес (точнее и свой не узнаешь, свой в $2, а не в $3). А IP провайдеского шлюза надо искать в таблицах маршрутизации. Грепать, например, слово default и разбирать полученную строку.

#196071
text
ip addr show $IF2 | grep -e "inet" | awk '{print $4}'

единственное что IP шлюза отображается с маской 1.1.1.1/32 Как бы теперь её отрезать :-(

#196076

route -n вывод
подчеркни какой маршрут надо отрезать.

#196121
text
route -n | grep -e "ppp1" | awk '{print $1}'

выводит зараза и IP шлюза и еще следующий парамерт

1.1.1.1
0.0.0.0

:(

#196129

route del 1.1.1.1 dev ppp1

Войдите или зарегистрируйтесь, чтобы ответить.