LINUX.ORG.RU
ФорумAdmin

Проблема с маршрутизацией


0

0

Debian. 3 сетевухи. eth0 и eth1 к провайдеру, eth2 - в локалку. Маршрутизация должна осуществляться следующим образом: Пакеты к заданным подсетям должны идти через eth0, все остальное через eth1. Причем через eth1 через NAT. ip-адреса eth1 и eth2 находятся в одной подсети.

Для наглядности адреса:
Локалка: 192.168.44.0/24
Провайдер: 192.168.1.0/24
Допустим, провайдер выдал адреса для:
eth0 192.168.1.119
eth1 192.168.1.111
gateway 192.168.1.1

Делаю следующее:

#!/bin/sh
#NAT для eth1-eth2
iptables -t nat -A POSTROUTING -s 192.168.44.0/24 -o eth1 -p tcp -j SNAT --to-source 192.168.1.111 
iptables -t nat -A POSTROUTING -s 192.168.44.0/24 -o eth1 -p udp -j SNAT --to-source 192.168.1.111
iptables -t nat -A POSTROUTING -s 192.168.44.0/24 -o eth1 -p icmp -j SNAT --to-source 192.168.1.111
#все, пускаем через eth1
route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.1.1 dev eth1
#Вот это должно идти через eth0
route add -host 193.158.134.8 gw 192.168.1.1 dev eth0
Через eth0 пакеты идут без проблем, а через eth1 с потерями 99%. Пробовал менять местами адреса у сетевух тоже самое. Менял и маршруты, т.е. заданные маршруты направлял через eth1, а все остальное через eth0. Результат тотже - через eth1 порери 99%.

Если адреса eth1 и eth0 будут находиться в разных подсетях, с разными шлюзами, то проблем нет, все работает как нужно. Подскажите, что не так?


Ответ на: комментарий от nnz

Иметь 2 интерфейса на одной машине в одной сети имеет смысл только если мы хотим сделать канал шире. Т.е. одного провода к провайдеру нам мало и мы тянем еще один. Но для этого железяка на стороне провайдера должна поддерживать разделение трафика.

2 адреса в одной сети, на одной машине - можно. Алиасом повесить второй IP на ту-же сетевушку, где и первый. Имеет смысл если нам не хватает сервисов на одном IP.

А про сеть 192.168.1.0 провайдера я уже не хочу голову ломать, если действительно IP серые - то и NAT провайдера. О какой еще NAT нам нужен?

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

Чтобы было понятно обрисовываю ситуацию. Может более разумный выход посоветуете.
Было 2 провайдера (поэтому и 2 интерфейса). Пользователям при определенных условиях нужно запрещать доступ к адресам через один интерфейс или другой (т.е. отключать то от одного, то от другого провайдера).
Было все просто - добавлялось правило, например для отключения от eth1:
iptables -I FORWARD -o eth1 -j DROP -s $IP

Теперь провайдер один.
Каким образом можно разделить адреса и иметь возможность запрета доступа?
p.s. адреса реальные. Это для примера я указал серые.

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

>Иметь 2 интерфейса на одной машине в одной сети имеет смысл только если мы хотим сделать канал шире. Т.е. одного провода к провайдеру нам мало и мы тянем еще один.

При этом интерфейсы объединяются в один мета-интерфейс (обычно bond0).

Ситуация с мостом противоположная - мы имеем два физически разделенных сегмента сети, которые логически объединяем в один IP-сегмент.

Но для этого железяка на стороне провайдера должна поддерживать разделение трафика.

Не обязательно, это требуется только для классического 802.3ad (mode=4). Подробнее о разных режимах можно почитать тут: http://www.howtoforge.com/nic-bonding-on-debian-lenny

anonymous ()

Покажите вывод команд «ip addr» и «ip route» и «ip rule», если не хотите светить реальные адреса, то прогоните вывод этих команд через «sed -e 's/ 129\./ XXX./g' -e 's/\.150\./.YYY./g' подставив вместо цифр первый и второй октет реальных адресов. Иначе с вашим выдумыванием адресов может получиться другая настройка, чем на самом деле.

Потом надо убедиться, что у провайдера вобще может быть несколько MAC-адресов на одном его порту, или физически к вам приходят 2 кабеля от провайдера?

Относительно же решаемой вами задачи, если у вас статическая маршрутизация, то просто добавьте отдельную цепочку в iptables, и для каждого маршрута через „второго“ провайдера делайте перенаправление в эту цепочку, а там уже делайте »-j DROP", как то так:

iptables -N prov2
iptables -I FORWARD -o eth0 -d 193.158.134.8 -j prov2
...

iptables -I prov2 -s $IP -j DROP
mky ★★★★★ ()
Ответ на: комментарий от anonymous

> мы имеем два физически разделенных сегмента сети, которые логически объединяем в один IP-сегмент. А имеем-ли мы физически разделенные сегменты?

Насколько я понял провод от провайдера все-же один, и два равноценных адреса в одной подсети, что тут еще объединять? Я понял так, мы поимели второй IP, и пытаемся городить огород, что-бы как-то его использовать. В принципе - оно надо? Доступ разделить можно и с одним.

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