URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 90672
[ Назад ]

Исходное сообщение
"Не работает маршрутизация по дополнительным таблицам маршрутиза"

Отправлено kassy_k , 04-Янв-11 13:48 
Не работает маршрутизация по дополнительным таблицам маршрутизации.

Дело в следующем:

Есть шлюз:
  операционка Linux Fedora Core v.14 (v.13)
    (NetworkManager из системы удален; avahi daemon остановлен (на всякий случай));
  пять сетевых плат:
    eth0: (смотрит в сторону первого (GW: 80.254.7.193) провайдера)
      IP: 80.254.7.206
    eth1: (смотрит в сторону второго (GW: 192.168.64.128) провайдера)
      IP: 192.168.64.1/24
    eth2: (смотрит в сторону третьего (GW: 192.168.128.129) и четвертого (GW: 192.168.128.130) провайдеров)
      IP: 192.168.128.1/24
    eth3: (смотрит на малую локальную сеть 'net_a')
      IP: 192.168.192.128/24
    eth4: (смотрит на локальную сеть 'net_b')
      IP: 172.16.31.128/16

Задача:
  для малой локальной сети 'net_a':
    четные сетевые адреса (192.168.192.0/255.255.255.1) вывести через третьего провайдера (т.е. через 192.168.128.129);
    нечетные сетевые адреса (192.168.192.1/255.255.255.1) вывести в нет через четвертого провайдера (т.е. через 192.168.128.130);
  для локальной сети 'net_b':
    выборочные адреса (допустим 172.16.31.129 и 172.16.31.130) вывести через первого провайдера (т.е. через 80.254.7.193);
    остальных через второго провайдера (т.е. через 192.168.64.128).

Проблема:
  ...при пробросе I'netа для малой локальной сети.

==>

> cat /etc/iproute2/rt_tables

#
# reserved values
#
255    local
254    main
253    default
0    unspec
#
# local
#
#1    inr.ruhep
5    tbl_a
10    tbl_b
15    tbl_c
20    tbl_d

> ip rule list

0:    from all lookup local
32762:    from all fwmark 0xc lookup tbl_d
32763:    from all fwmark 0xd lookup tbl_c
32764:    from all fwmark 0xe lookup tbl_b
32765:    from all fwmark 0xf lookup tbl_a
32766:    from all lookup main
32767:    from all lookup default

> ip route list

80.254.7.192/26 dev eth0  proto kernel  scope link  src 80.254.7.206
192.168.192.0/24 dev eth3  proto kernel  scope link  src 192.168.192.128
192.168.128.0/24 dev eth2  proto kernel  scope link  src 192.168.128.1
192.168.64.0/24 dev eth1  proto kernel  scope link  src 192.168.64.1
172.16.0.0/16 dev eth4  proto kernel  scope link  src 172.16.31.128

> ip route list table tbl_c

192.168.192.0/24 dev eth3  scope link  src 192.168.192.128
192.168.128.0/24 dev eth2  scope link  src 192.168.128.1
127.0.0.0/8 dev lo  scope link
default via 192.168.128.129 dev eth2

> ip route list table tbl_d

192.168.192.0/24 dev eth3  scope link  src 192.168.192.128
192.168.128.0/24 dev eth2  scope link  src 192.168.128.1
127.0.0.0/8 dev lo  scope link
default via 192.168.128.130 dev eth2

<==

  На интерфейсе eth2 поднят NAT.

  В таком варианте правил маршрутизации компьютера малой локальной сети не получают ответ из I'netа.
  Если добавить команду:
> ip route add default via 192.168.129.130 dev eth2

  все работает.

Вопрос:
  в чем баг? Почему без правила добавленного в таблицу main не приходит ответ по правлам таблиц tbl_c и tbl_d?


Содержание

Сообщения в этом обсуждении
"Не работает маршрутизация по дополнительным таблицам маршрутиза"
Отправлено Aquarius , 04-Янв-11 13:52 
>[оверквотинг удален]
> <==
>   На интерфейсе eth2 поднят NAT.
>   В таком варианте правил маршрутизации компьютера малой локальной сети не
> получают ответ из I'netа.
>   Если добавить команду:
>> ip route add default via 192.168.129.130 dev eth2
>   все работает.
> Вопрос:
>   в чем баг? Почему без правила добавленного в таблицу main
> не приходит ответ по правлам таблиц tbl_c и tbl_d?

а где пакеты метятся?


"Не работает маршрутизация по дополнительным таблицам маршрутиза"
Отправлено kassy_k , 04-Янв-11 14:17 
> а где пакеты метятся?

iptables -t mangle -A PREROUTING -i eth3 -s 192.168.192.0/255.255.255.1 -j MARK --set-mark 12


"Не работает маршрутизация по дополнительным таблицам маршрутиза"
Отправлено Aquarius , 04-Янв-11 14:48 
>> а где пакеты метятся?
> iptables -t mangle -A PREROUTING -i eth3 -s 192.168.192.0/255.255.255.1 -j MARK --set-mark
> 12

а NAT как выглядит?


"Не работает маршрутизация по дополнительным таблицам маршрутиза"
Отправлено kassy_k , 05-Янв-11 10:36 
> а NAT как выглядит?

Сокращенно:

#!/bin/sh
FW="/sbin/iptables"
IF_LO="lo"
IF_0="eth0"
IF_1="eth1"
IF_2="eth2"
IF_3="eth3"
IF_4="eth4"
IP_0="80.254.7.206"
IP_1="192.168.64.1"
IP_2="192.168.128.1"
IP_3="192.168.192.1"
IP_4="172.16.31.128"
NETA="10.0.0.0/8"
NETB="172.16.0.0/12"
NETC="192.168.0.0/16"
NETL="172.16.0.0/16"

# Установка политики поведения по умолчанию
$FW -P INPUT DROP
$FW -P FORWARD DROP
$FW -P OUTPUT DROP
$FW -t nat -P PREROUTING ACCEPT
$FW -t nat -P OUTPUT ACCEPT
$FW -t nat -P POSTROUTING ACCEPT
$FW -t mangle -P PREROUTING ACCEPT
$FW -t mangle -P INPUT ACCEPT
$FW -t mangle -P FORWARD ACCEPT
$FW -t mangle -P OUTPUT ACCEPT
$FW -t mangle -P POSTROUTING ACCEPT
# Удаление всех правил
$FW -F
$FW -t nat -F
$FW -t mangle -F
# ...в том числе нестандартных
$FW -X
$FW -t nat -X
$FW -t mangle -X

# Прохождение пакетов по интерфейсу "петля"
$FW -A INPUT -p ALL -i $IF_LO -j ACCEPT
$FW -A OUTPUT -p ALL -o $IF_LO -j ACCEPT

# Для меня любимого открываю все!
$FW -A INPUT -p ALL -i $IF_2 -j ACCEPT
$FW -A OUTPUT -p ALL -o $IF_2 -j ACCEPT

# Разметка пакетов для маршрутизации
$FW -t mangle -A PREROUTING -i $IF_4 -s 192.168.192.0/255.255.0.1 ! -d 172.16.0.0/16 -j MARK --set-mark 12
$FW -t mangle -A PREROUTING -i $IF_4 -s 192.168.192.1/255.255.0.1 ! -d 172.16.0.0/16 -j MARK --set-mark 13

# NAT на интерфейсе eth2
$FW -t nat -A POSTROUTING -p ALL -o $IF_2 -j SNAT --to-source $IP_2

# Проход для малой подсети
$FW -A FORWARD -p ALL -i $IF_3 -j ACCEPT
$FW -A FORWARD -p ALL -o $IF_3 -j ACCEPT


"Не работает маршрутизация по дополнительным таблицам маршрутиза"
Отправлено kassy_k , 06-Янв-11 14:08 
В свете последних изысканий...

Если ввести:
> ip rule add from 192.168.192.0/24 table tbl_c

или
> ip rule add from 192.168.192.0/24 table tbl_d

малая подсеть начинает получать нормальный I'net.
Все остальные правила и скрипты оствил без изменений.

Из чего напрашивается малоутешительный вывод: не срабатывает либо маркировка пакетов в iptables, либо iproute2 плюет на правила:
32762:    from all fwmark 0xc lookup tbl_d
32763:    from all fwmark 0xd lookup tbl_c
32764:    from all fwmark 0xe lookup tbl_b
32765:    from all fwmark 0xf lookup tbl_a

Вопрос: как это можно выровнять?


"Не работает маршрутизация по дополнительным таблицам маршрутиза"
Отправлено kassy_k , 11-Янв-11 09:40 
В очередной раз сам спрашивал - сам отвечаю.

Решение проблемы оказалось как всегда простым:
> sysctl -w net.ipv4.conf.eth2.rp_filter=0

Более того, я лишний раз убедился, что в мануалах нужно внимательно читать не только основной текст, но и между строк. :-)

Всем спасибо.