LINUX.ORG.RU
ФорумAdmin

Linux Advanced Routing и сервера

 


0

1

Добрый день!

  1. есть интернет шлюз настроенный на openwrt.
  2. есть 2 провайдера.
  3. есть две локальные подсети

необходимо:

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

первую и четвертую задачу я решил:

[code]

#!/bin/sh

IF1=eth4 # внешний интерфейс провайдера № 1 prov_1

IF2=eth5 # внешний интерфейс провайдера № 2 prov_2

IF_LOCAL0=eth0

IF_LOCAL1=eth1

IP1=192.168.0.2 # внешний IP-адрес, который нам выдал провайдер №1 prov_1

IP2=192.168.10.2 # внешний IP-адрес, который нам выдал провайдер №2 prov_2

P1=192.168.0.1 #шлюз по умолчанию провайдера №1

P2=192.168.10.1 #шлюз по умолчанию провайдера №2

P1_NET=192.168.0.0/24 #подсеть провайдера prov_1

P2_NET=192.168.10.0/24 #подсеть провайдера prov_2

#SRV1=192.168.77.0/24 # блок ip адресов для серверов №1 for prov_1

#SRV2=192.168.88.0/24 # блок ip адресов для серверов №2 for prov_2

ip route add $P1_NET dev $IF1 src $IP1 table prov_1

ip route add $P2_NET dev $IF2 src $IP2 table prov_2

ip route add default via $P1 table prov_1 #шлюз по умолчанию для таблицы T1

ip route add default via $P2 table prov_2 #шлюз по умолчанию для таблицы T2

ip rule add from $IP1 table prov_1

ip rule add from $IP2 table prov_2

ip route add 127.0.0.0/8 dev lo table prov_1

ip route add 127.0.0.0/8 dev lo table prov_2

ip rule add iif $IF_LOCAL0 table prov_2 # с интерфейса IF_LOCAL0 уходит через prov_2

ip rule add iif IF_LOCAL1 table prov_1 # с интерфейса IF_LOCAL1 уходит через prov_1

[/code]

как реализовать доступ к серверам со всех провайдеров?

Это что за странность:

ip route add 127.0.0.0/8 dev lo table prov_1

Этот маршрут должен быть прописан в таблице local, которая обычно просматривается первой.

Задача 2 у вас возникает из-за отсутствия нужных маршрутов в таблицах prov_1 и prov_2. Раз вы одну локальную сеть отправлете в таблицу prov_1, то в ней должен быть маршрут ко второй локальной сети и наоборот. Или делайте, чтобы сначала просматривалась таблица main без default маршрута, а потом уже проматривалась таблица prov_1 или prov_2 — указывайте нужный порядок ″pref″ у добавляемых ″ip rule″.

Задача 3 решается через ″iptables CONNMARK + ip rule fwmark″, примеры гуглятся. Есть ли у openwrt поддержка CONNMARK вопрос отдельный.

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

fwmark разобрался.

127.0.0.0/8 -а разве его нет по умолчанию в local таблице? или Вы про то что необходимо 127.0.0.0/8 удалить из таблиц prov_1 и prov_2?

в таблицах prov_1 и prov_2 должны быть прописаны подсети SRV1 и SRV2?

ip route add $SRV1 dev $IF_local0 src 192.168.77.1 table prov_1

ip route add $SRV2 dev $IF_local1 src 192.168.88.1 table prov_1

ip route add $SRV1 dev $IF_local0 src 192.168.77.1 table prov_2

ip route add $SRV2 dev $IF_local1 src 192.168.88.1 table prov_3

я правильно понял?

PS почему у меня [code] … [/code] не работают?

john13 ()
Последнее исправление: john13 (всего исправлений: 1)
Ответ на: комментарий от john13

PS почему у меня [code] … [/code] не работают?

Потому, что ты не внимательный.

На форуме да разметки маркдаун и лоркоде.

Маркдаун по умолчанию.

А при добавлении комментария есть переключатель.

И ещё в настройках профиля можно сменить разметку для своей учётной записи.

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

Да, маршут к 127.0.0.0 не нужен в таблицах prov_X. Он в нормальной ситуации есть в таблице local, она просматривается первой. Причём этот маршрут имеет смысл только для пакетов src 127.0.0.0/8 (иначе марсианские). А таблицы prov_X просматриваются для пакетов с маршрутизируемым src адресом.

Относительно $SRV1 и $SRV2 правильно, только prov_2, а не prov_3 в последнем.

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

Спасибо большое за разъяснения. prov_3 просто опечатка при копировании. Все настроил, работает как задумано. Третий вопрос решил так:

iptables -t mangle -A PREROUTING -i $IF1 --dst $IP1 -m conntrack --ctstate NEW,RELATED -j CONNMARK --set-mark 10
iptables -t mangle -A PREROUTING -i $IF2 --dst $IP2 -m conntrack --ctstate NEW,RELATED -j CONNMARK --set-mark 11
iptables -t mangle -A PREROUTING -i $IF_LOCAL0 -m conntrack --ctstate ESTABLISHED -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -i $IF_LOCAL1 -m conntrack --ctstate ESTABLISHED -j CONNMARK --restore-mark

ip rule add iif $IF_LOCAL0 fwmark 10 table prov_1
ip rule add iif $IF_LOCAL0 fwmark 11 table prov_2
.......

надеюсь тема будет полезной

john13 ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.