LINUX.ORG.RU
ФорумAdmin

Два шлюза


0

0

Добрый день. У меня следующая ситуация. Есть 2 шлюза в интернет. Я хочу чтобы трафик портов 0-30000 шел на один шлюз, а 30000-65535 на другой. Как это можно сделать?


Я так понимаю, что оба шлюза у тебя уже настроены и работают. Тогда выбор маршрута пакета основывается на том, какой ты ему выставишь source address => надо что-то вроде iptables -A POSTROUTING -p tcp --sport 30000-65525 -o interface2 MASQUERADE. Или dport вместо sport, я не сильно понял, про какие ты порты.

Заранее прошу прощения, если не так понял вопрос ляпнул глупость или посоветовал не то.

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

Я хочу чтобы на компьютерах из локалки (для которых даный комп будет шлюзом) был интернет. Но только чтобы уже на роутере торренты шли через один шлюз, а все остальное через другой. Это возможно?

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

Да. И какой шлюз прописывать дефолтным если их два? Я прописал для каждой таблицы iproute2 свой шлюз, но дефолтный не устанавливал, то трафик вообще не шел. Если надо, дам исходники скриптов

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

Делаешь обычный NAT в iptables на первый интерфейс, делаешь его шлюз дефолтным. Ура, весь трафик и роутера, и компов за ним идет через него.

Теперь дописываешь более приоритетное правило типа того, что я сказал - и трафик идущий из локалки с/на портов/порты > 30000 начинает идти через другой интерфейс.

Еще раз про iproute - в твоем случае один просто должен быть по умолчанию, а второй - не по умолчанию.

Ну и опять же - если где прогнал, то не серчай, жди экспертов.

t184256 ★★★★★
()
Ответ на: комментарий от xwrs

дефолтный нужен. а распихать пакеты предлагаю так

iptables -A PREROUTING -t mangle -p tcp --sport 1-30000 -j MARK --set-mark 1 iptables -A PREROUTING -t mangle -p tcp --sport 30000-65525 -j MARK --set-mark 2

ip rule add fwmark 1 table <твоя таблица для первого прова> ip rule add fwmark 2 table <твоя таблица для второго прова>

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

Спасибо ща попробую. Только как сделать правило, которое я добавлю более приоритетным? iptables ... -I 0...?

xwrs
() автор топика
Ответ на: комментарий от anonymous

Парсер мудак.

iptables -A PREROUTING -t mangle -p tcp --sport 1-30000 -j MARK -set-mark 1

iptables -A PREROUTING -t mangle -p tcp --sport 30000-65525 -j MARK --set-mark 2

ip rule add fwmark 1 table <твоя таблица для первого прова>

ip rule add fwmark 2 table <твоя таблица для второго прова>

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

Я так делаю (только dports). Тогда трафик первых портов идет на шлюз 1го прова если он указан дефолтным, а остальной трафик не идет и наоборот

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

«Более выше» его прописать или более рано его выполнять.

t184256 ★★★★★
()
Ответ на: комментарий от xwrs

если не сработает покажи таблицы.

/sbin/ip route add default via <шлюз1> dev <девайс1> table <таблица1>

/sbin/ip route add default via <шлюз2> dev <девайс2> table <таблица2>

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

>default via 192.168.xxx.1 dev eth1 default via 192.168.yyy.1 dev eth2

Для разных таблиц можно наделать разных дефалтных роутов слово «table не надо пропускать

/sbin/ip route add default via <шлюз1> dev <девайс1> table <таблица1>

/sbin/ip route add default via <шлюз2> dev <девайс2> table <таблица2>

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

Кажется, просто не указывать таблицу в строке с add default, т. е. :

Дефолт:

(post-up of interface ethX) ip route add default via xxx.xxx.xxx.xxx dev ethX

Недефолт:

(post-up of interface ethY) ip route add default via yyy.yyy.yyy.yyy dev ethY table tableY

t184256 ★★★★★
()
Ответ на: комментарий от xwrs

>как прописать второй шлюз «не по-умолчанию»?

Я тогда не понимаю что нужно, второй шлюз должен быть по умолчанию иначе в интернет со второй половины портов не попадешь.

ip rule ls покажи наконец.

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

трафик был завернут командой

ip rule add fwmark 2 table tableY

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

Какое-то у нас недопонимание возникло.

Трафик туда станет сам «заворачиваться», если в поле source у пакетов будет стоять адрес от интерфейса ethY. Поле source можно выставлять либо в настройках программы, если она запущена на роутере, либо средствами iptables.

Можно пробовать отправлять пакеты с разных интерфейсов при помощи удобной команды mtr -a sou.rce.add.ress google.com.

t184256 ★★★★★
()
Ответ на: комментарий от anonymous

from all fwmark 0x1 lookup T1 from all fwmark 0x2 lookup T2

xwrs
() автор топика
Ответ на: комментарий от t184256

Chain POSTROUTING (policy ACCEPT 3831 packets, 182K bytes) pkts bytes target prot opt in out source destination 425 19433 MASQUERADE tcp  — * eth2 0.0.0.0/0 0.0.0.0/0 multiport dports 30000:65535 120 12480 MASQUERADE udp  — * eth2 0.0.0.0/0 0.0.0.0/0 multiport dports 30000:65535 3754 338K MASQUERADE all  — * eth1 0.0.0.0/0 0.0.0.0/0

потом ip route add default via 192.168.xx.1 ip route add default via 192.168.yy.1 tableY

iptraf -g показывает, что eth2 отдыхает, а eth1 заполнен полностью.

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

iptables -t nat -A POSTROUTING -p tcp -m multiport --dports 0:30000 -o eth2 -j MASQUERADE iptables -t nat -A POSTROUTING -p udp -m multiport --dports 0:30000 -o eth2 -j MASQUERADE

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

ip route add default via 192.168.xx.1 ip route add default via 192.168.yy.1 tableY

все идет через eth1

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

Ты смешал в кучу способ от меня и от t184256.

Вот что предлагаю я, остальное вычисти, всякие маскарады там.

iptables -A PREROUTING -t mangle -p tcp --dport 1-30000 -j MARK -set-mark 1

iptables -A PREROUTING -t mangle -p tcp --dport 30000-65525 -j MARK --set-mark 2

ip rule add fwmark 1 table tableX

ip rule add fwmark 2 table tableY

/sbin/ip route add default via 192.168.xx.1 dev eth0 table tableX

/sbin/ip route add default via 192.168.yy.1 dev eth1 table tableY

Капча an advice намекает

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

:) я по очереди пробую разные методы. Только я так делал. Трафик идет через дефолтный шлюз

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

Добавь тогда еще такое к моему способу:

ip rule add from адресX table tableX
ip rule add from адресY table tableY

Вот так уже точно должно работать X)

t184256 ★★★★★
()
Ответ на: комментарий от xwrs

мой скрипт
#!/bin/bash
iptables -t nat -F
/etc/init.d/shorewall restart
iptables -t nat -A POSTROUTING -p tcp -m multiport --dports 30000:65535 -o eth2 -j MASQUERADE
iptables -t nat -A POSTROUTING -p udp -m multiport --dports 30000:65535 -o eth2 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

ip route add default via 192.168.140.1
ip route add default via 192.168.150.1 table T2
ip rule add from 192.168.140.251 table T1
ip rule add from 192.168.152.9 table T2

пишите пожалуйста замечания

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

На мой взгляд - похоже на то, что надо.

Если при этом не работает никакой NAT - возможно не хватает iptables -A FORWARD -j ACCEPT. Если при этом traceroute -s адресY kernel.org не ходит через eth2 - я очень огорчусь.

t184256 ★★★★★
()
Ответ на: комментарий от anonymous

Про порты слепой

ip route add default via 192.168.140.1 - это пойдет в таблицу main.

ip route add default via 192.168.140.1 table T1

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

если адресY это адрес сетевухи eth2, то ОН ПОШЕЛ ЧЕРЕЗ ВТОРОЙ МАРШРУТ!!! УРА наверное... Это хорошо?

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

Хотя торрент продолжает качать через дефолтный шлюз

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

Да, это хорошо :)

Теперь из локалки проверь, как себя ведут порты >30000. Торрент перезапусти, или что у тебя там)

Еще раз, на всякий случай, что должно получиться:

все запущенное на сервере, но не «использующее» адресY «в явную» будет ходить через ethX, использующее адресY - через ethY.

Все соединения из-за NAT должны «прокладываться» через ethX, если порт назначения <30000, и через ethY, если порт >=30000.

t184256 ★★★★★
()
Ответ на: комментарий от anonymous

Вообще забавно смотреть, как какой-то левый анонимус думает, что я tracerout'ом с роутера предлагаю тестить NAT. Кыш.

t184256 ★★★★★
()
Ответ на: комментарий от xwrs

Как понимаю, торрент запускается из локалки и номер порта точно больше 30000.

Попробуй поменять местами строчки:

Цитируем xwrs

iptables -t nat -F /etc/init.d/shorewall restart

А вообще ты уже точно близок к цели, но что получилось не так - не знаю.

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

Я поставил вместо
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
это
iptables -t nat -A POSTROUTING -p tcp -m multiport --dports 0:30000 -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -p udp -m multiport --dports 0:30000 -o eth1 -j MASQUERADE

и все равно торрент качается через шлюз 1

xwrs
() автор топика
Ответ на: комментарий от t184256

когда скрипт принял вид
#!/bin/bash

/etc/init.d/shorewall restart
iptables -t nat -F
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
iptables -A FORWARD -j ACCEPT

ip rule add from 192.168.xx.251 table T1
ip rule add from 192.168.yy.9 table T2
ip route add default via 192.168.xx.1 table T1
ip route add default via 192.168.yy.1 table T2
ip route add default via 192.168.xx.1

ip route flush cache
то ниче вообще никуда ни шло пока я не сделал дефолтным шлюзом шлюз №2

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

кстати здесь все нормально?
test_gateway # sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.ip_dynaddr = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1

ато я здесь
http://nodeny.dp.ua/rozpodilennya-trafiku/nastrojka-marshrutyzaciji-za-dopomo...

нашел что трафик не будет попадать в iproute а будет напрямую форвардиться с интерфейса на интерфейс если net.ipv4.ip_forward = 1

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

Итак, мой скрипт:
#!/bin/bash

/etc/init.d/shorewall restart
iptables -t nat -F
iptables -t nat -A POSTROUTING -p tcp -m multiport --dports 30000:65535 -o eth2 -j MASQUERADE
iptables -t nat -A POSTROUTING -p udp -m multiport --dports 30000:65535 -o eth2 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A FORWARD -j ACCEPT

ip rule add from 192.168.140.251 table T1
ip rule add from 192.168.152.9 table T2
ip route add default via 192.168.140.1 table T1
ip route add default via 192.168.150.1 table T2
ip route add default via 192.168.140.1

ip route flush cache

Трафик ходит через 192.168.140.1 хотя туда должна ходить только его часть (портов <30000)
Если у кого есть идеи. Буду благодарен...

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

Вместо:

Цитируем xwrs

iptables -t nat -A POSTROUTING -p tcp -m multiport --dports 30000:65535 -o eth2 -j MASQUERADE 
iptables -t nat -A POSTROUTING -p udp -m multiport --dports 30000:65535 -o eth2 -j MASQUERADE

которое все-таки не должно работать (ох и наврал же я), попробуй

iptables -t nat -A POSTROUTING -p tcp -m multiport --dports 30000:65535 --to-source адресY -j SNAT
iptables -t nat -A POSTROUTING -p udp -m multiport --dports 30000:65535 --to-source адресY -j SNAT

И как еще не набежал народ и не ткнул меня носом в мою глупость?(

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