Имеется сервер ASPLinux 10, с установленным postfix и 3-я сетевыми интерфейсами.Задача: корректная работа почты через один из интерфейсов, при этом в качестве default gw указан другой.
Реализация:
1) в /etc/iproute2/rt_tables добавляем:
201 T1
202 T22) создаём скрипт и даём права на запуск, предварительно исправив нужные параметры
IP - адреса сетевых интерфейсов
P - адреса шлюзов#!/bin/sh
IP1=192.168.4.1
IP2=217.1.1.2
P1=192.168.4.2
P2=217.1.1.1
ip route add default via $P1 table T1
ip route add default via $P2 table T2
ip route add default via $P1
ip rule add from $IP1 table T1
ip rule add from $IP2 table T2В результате получим, что если пакет пришёл на P2, то он не пойдёт через default gw P1,
а уйдёт через тот же интерфейс с IP1
URL:
Обсуждается: http://www.opennet.me/tips/info/1179.shtml
эм, а как сделать слияние двух каналов?
рой в стороноу bonding, http://ru.gentoo-wiki.com/HOWTO_%D0%9D%D0...ибо Gentoo
>эм, а как сделать слияние двух каналов?вот так вот:
========================
ip route add default scope global nexthop via $P1 dev $IF1 weight 1 \
nexthop via $P2 dev $IF2 weight 1
========================
Только вот кеш нужно периодически очищасть а то к загруженным ресурсам будут ходить по одному и тому же маршруту, который закешировался. Делаеться это так:
ip route flush cache
Надо сюда мой гипер конфиг с NATом засунуть - есть 2 провайдера, 2 комплекта внешних адресов, внутри стоят тачки за NATом, нужно чтобы всё работало
Фактически нужно чтобы ответные пакеты шли через тот же интерфейс что и пришли, а это сделать не совсем тривиально, поскольку обратная сторона дната срабатывает после маршрутизацииОднако нет ничего невозможного, я сделал через connmark. Попозже запощу.
> Фактически нужно чтобы ответные пакеты шли через тот же интерфейс что и пришли
У меня такая же проблема.> Попозже запощу.
Ждем.
А на какой платформе все реализовывал?
(((( Надо сюда мой гипер конфиг с NATом засунуть - есть 2 провайдера, 2 комплекта внешних адресов, внутри стоят тачки за NATом, нужно чтобы всё работало
Фактически нужно чтобы ответные пакеты шли через тот же интерфейс что и пришли, а это сделать не совсем тривиально, поскольку обратная сторона дната срабатывает после маршрутизацииОднако нет ничего невозможного, я сделал через connmark. Попозже запощу. ))))
я сделал маршрутизацию!! через маркера по приоритетам!! но есть маленькая проблема из 10-20 пакетов есть два потерянных!! да и ты обешял свои конфы скинуть!! скинь гляну!!
сделал как в посте - почта (sendmail) все равно уходит в канал по умолчанию, а не во второй канал.
вот посмотрите мож поможет
http://www.osp.ru/text/302/136078/
Уважаемый Олл возможно ли все это организовать средствами iptables?
Можно.Для почты
iptables -t nat -A POSTROUTING -p tcp --dport 25 -j SNAT --to-source $IP2,
где $IP2 - адрес второй карточки, при этом default gateway - $IP1
По умолчанию роутинг происходит так, что если адрес отправителя в пакете (который здесь и меняется) совпадает с адресом интерфейса, через другой он уже не пойдет, если не принимать дополнительных телодвижений.
Для пробы:
iptables -t nat -A POSTROUTING -p tcp -d www.myipaddress.com --dport 80 -j SNAT --to-source $IP2, и смотреть, от кого пришло с включенным правилом и без.
Что делать если внешний ip определяется автоматически на стороне провайдера? И каждый раз - разный
Заказать у провайдера человеческий real-ip. Не так уж дорого, а пользы много.
использовать релей провайдера
Смотри http://wiki.opennet.ru/Linux_ppp-oe_%28ADSL%29_Bal...
Возможно поможет
>Смотри http://wiki.opennet.ru/Linux_ppp-oe_%28ADSL%29_Bal...
>Возможно поможетхорошая статья но не то!
после выполнения скрипта выдаёт
RTNETLINK answers: No such device
RTNETLINK answers: No such device
. т.е. он не понимает таблицы... хотя первый пункт выполнил (прописал 2 таблицы)
(система Debian Etch) почему он не видит таблицы маршрутизации не пойму...
и ещё такая прабла...
1 провайдер - реальный ИП настроен на сетевой карте...
2ой - настроен на циске а на линухе gw - ИП адрес циски (192.168.0.254), как быть в таком случае?
(есть ещё неск сетевых карт которые смотрят в сетки 192,168,1,ххх/24 192,168,150,ххх/24 10,3,0,0/20)
как правильно прописать вссе маршруты?
и ещё 1 вопрос до кучи... как сделать так чтоб если 1 гейт не отвечает по автоматом переключаться на 2ой?(но при поднятии первого чтоб он опять включался в основную работу) , т.е. резервный канал чтоб коректно работал...
первый вопрос - отпал... (апечатался в скрипте..)
(и ещё 1 вопрос до кучи... как сделать так чтоб если 1 гейт не отвечает по автоматом переключаться на 2ой?(но при поднятии первого чтоб он опять включался в основную работу) , т.е. резервный канал чтоб коректно работал...) nтоже интересно)
Кто нить может отписаться по данному вопросу?
(и ещё 1 вопрос до кучи... как сделать так чтоб если 1 гейт не отвечает по автоматом переключаться на 2ой?(но при поднятии первого чтоб он опять включался в основную работу) , т.е. резервный канал чтоб коректно работал...)
Кури в сторону RIP и протоколов динамической маршрутизации
если не отвечает то хз (ospf наверно), если просто отключился то достаточно сделать ещё один default gw с метрикой поболее, при отключении интерфейса правила маршрутизации на него тоже отключаются и соответственно уберётся его default gw и начнёт работать вторая запись что с метрикой поболее, а когда вернётся первый интерфес и снова пропишет себя с меньшей метрикой то снова через него пойдут пакеты. как то так в общем
Как прописать, если по умолчанию интернет ppp0
Можно грабить нужный данные с ifconfig например echo `ifconfig ppp2|grep "inet addr"|awk '{print $3}'cut -d ':' -f 2`
сделал, как написано.делаю ping google.com -I eth0
пинг идет через P1а когда делаю ping google.com -I eth1
пинг пытается пройти через P1, но сеть там другая и соответственно пинг не идет
Народ помогите.
Есть 2 провайдера:
1 - для выхода в инет. ppp0 который строится на eth2
2 - для подключения emule, eth1
И локалка eth0.
Необходимо компу из локальной сети разрешить доступ в инет и к emule.
Как сделать такое разделение трафика?
только что осилил. есть 2 провайдера г.Пенза это ПНЗ(МТС-Комстар)(на eth1) и Дом.ру(Эр телеком)(на ppp0)
у пнз 8 мбит у дома 20. сделано доступность по обоим интерфейсам сервисов из интернета и динамическое распределение (!)соединений по каналам при соединении из внутренней сети (eth0) с одинаковой вероятностью на мегабит. к тому же все соединения во внутренние сети каждого провайдера уходят через родной интерфейс (в пнз через линк с пнз в домру через домру). Прововские подсети выбирал ручками с прововских ASок через сайт http://bgp.he.net (если интересно например http://bgp.he.net/AS41754#_asinfo). ipv6 шлюз (от he.net) привязан к пнз.
5 дней копал инет... много чего перепробовал пока не разобрался как должно работать потом только и получилось :). рад до .опы.
все скрипты:
sysctl:
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
10 pnz
20 domruip route:
default via 82.209.x.1 dev eth1 metric 100
default via 91.144.144.88 dev ppp0 metric 110
82.209.x.0/24 dev eth1 proto kernel scope link src 82.209.x.x
91.144.144.88 dev ppp0 proto kernel scope link src 94.181.x.x
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.1cat /etc/ppp/ip-up.d/routing
#!/bin/sh -eLOCAL_IP=$4
GATE_IP=$5#local
ip route flush table domru
ip route add $GATE_IP dev ppp0 src $LOCAL_IP table domru
ip route add default via $GATE_IP table domru
ip route add 192.168.0.0/24 dev eth0 table domru
ip route add 127.0.0.0/8 dev lo table domru
ip rule del table domru priority 15
ip rule add fwmark 2 table domru priority 15
ip route replace default via $GATE_IP dev ppp0 metric 110exit 0
cat /etc/network/interfaces (тут только часть что относится к прову pnz на eth1)
auto eth1
iface eth1 inet static
address 82.209.х.х
netmask 255.255.255.0
network 82.209.х.0
broadcast 82.209.х.255
gateway 82.209.х.1
post-up /etc/network/config/v4rules (это скрипт фаера, сам скрипт ниже)
post-up ip route replace 192.168.0.0/24 dev eth0 table pnz
post-up ip route replace 127.0.0.0/8 dev lo table pnz
post-up ip route add 82.209.х.1 dev eth1 src 82.209.х.х table pnz
post-up ip route add default via 82.209.х.1 table pnz
post-down ip rule delete fwmark 1 lookup pnz priority 10
post-up ip rule add fwmark 1 lookup pnz priority 10cat /etc/network/config/v4rules (часть что относится к маршрутизации)
iptables -t mangle -F MARK_CONN
iptables -t mangle -X MARK_CONN#routing
iptables -t mangle -N MARK_CONNiptables -t mangle -A MARK_CONN -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A MARK_CONN -d 10.0.0.0/8 -j RETURNiptables -t mangle -A MARK_CONN -m connmark ! --mark 0 -j RETURN
#povolzhe AS41754
iptables -t mangle -A MARK_CONN -d 91.144.144.0/22 -j CONNMARK --set-mark 2
iptables -t mangle -A MARK_CONN -d 91.144.176.0/22 -j CONNMARK --set-mark 2
iptables -t mangle -A MARK_CONN -d 94.181.128.0/18 -j CONNMARK --set-mark 2
iptables -t mangle -A MARK_CONN -d 109.194.128.0/19 -j CONNMARK --set-mark 2
iptables -t mangle -A MARK_CONN -d 188.187.250.0/24 -j CONNMARK --set-mark 2
#perm AS12768
iptables -t mangle -A MARK_CONN -d 46.146.0.0/16 -j CONNMARK --set-mark 2
iptables -t mangle -A MARK_CONN -d 46.147.0.0/18 -j CONNMARK --set-mark 2
iptables -t mangle -A MARK_CONN -d 79.141.48.0/20 -j CONNMARK --set-mark 2
iptables -t mangle -A MARK_CONN -d 92.255.128.0/19 -j CONNMARK --set-mark 2
iptables -t mangle -A MARK_CONN -d 92.255.241.0/24 -j CONNMARK --set-mark 2
iptables -t mangle -A MARK_CONN -d 188.187.222.0/24 -j CONNMARK --set-mark 2
iptables -t mangle -A MARK_CONN -d 188.187.255.0/24 -j CONNMARK --set-mark 2
iptables -t mangle -A MARK_CONN -d 212.33.224.0/19 -j CONNMARK --set-mark 2
#pnz
iptables -t mangle -A MARK_CONN -d 77.108.192.0/18 -j CONNMARK --set-mark 1
iptables -t mangle -A MARK_CONN -d 82.209.64.0/18 -j CONNMARK --set-mark 1
iptables -t mangle -A MARK_CONN -d 85.234.32.0/19 -j CONNMARK --set-mark 1
iptables -t mangle -A MARK_CONN -d 92.246.160.0/19 -j CONNMARK --set-mark 1
iptables -t mangle -A MARK_CONN -d 95.83.64.0/18 -j CONNMARK --set-mark 1
#ipv6
iptables -t mangle -A MARK_CONN -d 216.66.84.46/32 -j CONNMARK --set-mark 1iptables -t mangle -A MARK_CONN -m connmark ! --mark 0 -j RETURN
iptables -t mangle -A MARK_CONN -j CONNMARK --set-mark 1
iptables -t mangle -A MARK_CONN -m statistic --mode random --probability 0.28 -j RETURN
iptables -t mangle -A MARK_CONN -j CONNMARK --set-mark 2iptables -t mangle -A PREROUTING -i eth1 -m state --state NEW,RELATED -j CONNMARK --set-mark 1
iptables -t mangle -A PREROUTING -i ppp0 -m state --state NEW,RELATED -j CONNMARK --set-mark 2
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
iptables -t mangle -A OUTPUT -m state --state NEW,RELATED -j MARK_CONN
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark
iptables -t mangle -A FORWARD -m state --state NEW,RELATED -j MARK_CONN
iptables -t mangle -A FORWARD -j CONNMARK --restore-mark
Попробовал ваш метод настройки, у меня тоже дом.ру и еще один пров на статике, так вот все ходит через 2 прова, не могу заставить ходить через дом?!
> Попробовал ваш метод настройки, у меня тоже дом.ру и еще один пров
> на статике, так вот все ходит через 2 прова, не могу
> заставить ходить через дом?!возможно, он менялся... сейчас уже не помню что, да и переехал я... пока только дом ру. потом допилю. а вообще ошибка может быть в том что в prerouting надо указать маркировку (на входе) а не в forward
>> Попробовал ваш метод настройки, у меня тоже дом.ру и еще один пров
>> на статике, так вот все ходит через 2 прова, не могу
>> заставить ходить через дом?!
> возможно, он менялся... сейчас уже не помню что, да и переехал я...
> пока только дом ру. потом допилю. а вообще ошибка может быть
> в том что в prerouting надо указать маркировку (на входе) а
> не в forward