LINUX.ORG.RU
решено ФорумAdmin

Использование нескольких шлюзов


0

1

Всех приветствую.!
Итак столкнулся с достаточно (на мой взгляд) экзотической проблемой. Необходимо настроить сервер с 4-ми интерфейсами некоторым образом (немного ниже опишу каким)
Сейчас немного о сетях:
Сервер подключен по eth0 в сложную локальную сеть (несколько городов):

Город А имеет сеть типа 10.103.0.Х/16;
Город Б имеет сеть типа 10.102.0.Х/16;

В городе А находится сам сервер.

У сервера есть еще 3 сетевых, 2 из которых обслуживает сам сервер, по третьей получает личный интернет:

Eth1 - сервер раздает IP, интернет ( из eth3), обмен файлами, загрузка по PXE.
Eth2 - сервер раздает IP, интернет ( из eth3), обмен файлами, загрузка по PXE.
Eth3 - сервер получает интернет (DHCP) для себя и раздает его в сети eth1 и eth2.


В идеале должно быть так:

Клиенты сети eth0 должны получать возможность доступа к файлам на самом сервере, и web морде сервера.
Клиенты eth1 и eth2 должны получать интернет из eth3 и свободно общаться между собой и с клиентами сети eth0 только из города A.


Камни:

В сети eth0 имеющую сложную схему, все клиенты получают IP по DHCP.
1)Если я настраиваю на сервере в интерфейсе eth0 – DHCP. Сервер и все клиенты eth1 и eth2 сразу лезут за интернетом через шлюз интерфейса eth0. Клиенты двух городов видят мой сервер.

2) Если настраиваю статику на eth0 (без шлюза) eth1 и eth2 получают инет из eth3, но к серверу в данном случае нельзя достучаться из города Б (оно и понятно, шлюза нет)

Сейчас работает все по второй схеме.

Как быть, что посоветуете?

Данные сервера

interfaces:
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 10.103.0.120
netmask 255.255.0.0

auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0

auto eth2
iface eth2 inet static
address 192.168.2.1
netmask 255.255.255.0

auto eth3
iface eth3 inet dhcp

Таблицы маршрутов:

iptables -F
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth0 -j REJECT
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -t nat -A POSTROUTING -o eth3 -j MASQUERADE
iptables -A FORWARD -i eth3 -o eth3 -j REJECT
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu


Я так понимаю еще и с DNS надо разрулить, но если честно уже голова болит от прочитанного и нагугленного. Часть работает, другая отваливается и по кругу….
В качестве DNS сервера выбрал DNSmasq, он вполне пока со всем справляется.
Вот его конфиг:

# Add other name servers here, with domain specs if they are for non-public domains. server=/srv/192.168.1.1

# If you want dnsmasq to listen for DHCP and DNS requests only on specified interfaces (and the loopback) give the name of the interface (eg eth0) here. Rep$
interface=eth1
interface=eth2

# If you want dnsmasq to provide only DNS service on an interface, configure it as shown above, and then use the following line to disable DHCP and TFTP on $
no-dhcp-interface=eth0

# Set the domain for dnsmasq. this is optional, but if it is set, it does the following things. # 1) Allows DHCP hosts to have fully qualified domain names, as long as the domain part matches this setting. # 2) Sets the «domain» DHCP option thereby potentially setting the domain of all systems configured by DHCP # 3) Provides the domain part for «expand-hosts»
domain=srv

# This is an example of a DHCP range where the netmask is given. This is needed for networks we reach the dnsmasq DHCP server via a relay agent. If you don'$
dhcp-range=192.168.1.20,192.168.1.150,255.255.255.0,24h
dhcp-range=192.168.2.20,192.168.2.150,255.255.255.0,24h

# Override the default route supplied by dnsmasq, which assumes the router is the same machine as the one running dnsmasq.
dhcp-option=3,192.168.1.1

# The same as above, but use custom tftp-server instead machine running dnsmasq
dhcp-boot=pxelinux.0,srv,192.168.1.1,192.168.2.1

# The DHCP server needs somewhere on disk to keep its lease database. This defaults to a sane location, but if you want to change it, use the line below.
dhcp-leasefile=/var/lib/misc/dnsmasq.leases

Кто подскажет/ткнет носом/направит???


Или я дурень, или это поток сознания..? Тебе нужно настраивать маршруты насколько я понимаю, а ты настраиваешь DHCP, DNS... iptables... - Это всё нужно конечно, но тебе надо вроде просто с маршрутизацией на шлюзах разобраться да всё.

DALDON ★★★★★
()

Разрисуй топологию для начала, а то вон даже Далдон в ступор впал из-за тебя

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

Простите за взрыв мозга вашего, товарищи гуру, сам понимаю, писал много текста.
Вот топология карты, рисовал «на коленках», так что сильно не пинайте.
На все вопросы постараюсь ответить)

http://pixs.ru/showimage/Untitledpn_8700966_12420896.png

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

Пока умные люди размышляют или просто заняты, попробую я вставить свои 5 копеек.

Поскольку я нифига не понимаю в DNSmasq, то попрошу просто написать конфигурации для сетей которые ты раздаёшь по DHCP. Т.е. куда какие адреса раздаются, их default gw и DNS. А то глядя на конфиг, у меня странное впечатление что ты во все сети один адрес роутера раздаёшь. Плюс не очень понятно, что значит вот эта фраза: «Если настраиваю статику на eth0 (без шлюза) eth1 и eth2 получают инет из eth3, но к серверу в данном случае нельзя достучаться из города Б (оно и понятно, шлюза нет)». У кого в этом случае шлюза нет и куда это он пропадает? (Как я понял это в том случае, если ты на eth0, настройки руками пишешь, напиши что ты туда пишешь). Так же у тебя ничего не сказано про сеть между серверами А и Б, она ведь там есть? Неплохо было бы сетку перерисовать, и отметить адреса на всех интерфейсах, всех серверов.

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

Ко второй схеме(статическая настройка eth0) нужно добавить машрут на подсеть города Б через шлюз города А. То есть шлюз, который получает eth0 по DHCP должен быть не default, а только конкретные сети.

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

Судя по картинке - тебе достаточно разобраться с маршрутами на твоих шлюзах.

DALDON ★★★★★
()

Имхо, не стоит смешивать в одну кучу

Eth3 - сервер получает интернет (DHCP) для себя и раздает его в сети eth1 и eth2.

и

Клиенты сети eth0 должны получать возможность доступа к файлам на самом сервере, и web морде сервера.

Если уж приспичило всё навесить на одну машину - чётко разграничь, каким множествам клиентов какие функции твоего комбайна должны быть доступны.

И только после этого сделай на их основе карту подсетей (можно включить туда и существующие). После этого вырисуется и необходимая маршрутизация.

blexey ★★★★★
()

Господа! сразу говорю Спасибо, всем кто хоть как-то заинтересовался моим постом.
Вот читаю я ваши коментарии, и понимаю, что написал винегрет, что в свою очередь мешает разобраться многим в сути проблемы.
Так что приношу свои извинения. Нет злова умысла путать ваши светлые умы). Постараюсь отписываться частями, так что бы максимально было все понятно.

Итак начнем с самого главного - глобальной локалки и моего чуда комбаина - сервера.
Сеть ( в моем случае интересны пока только два города А и Б) очень сложная (несколько доменов, прокси и куча другого), ее админят много людей. Люди занятые и серьезные, и спрашивать у них как и что, у меня вряд-ли получится. Мой сервер по сути в этой сети является лишь клиентом, как и многие другие машины пользователей.

Настройки сети для сервера на данном этапе я могу либо получить по DHCP, либо прописать ручками статику.
Совсем забыл упомянуть, что в этой большой сети естественно есть интернет (но он, для моего сервера не подходит по скорости), вот от сюда и было решено дать серверу собственный, независимый интернет (интернет к серверу приходит через eth3).
Далее.
Сервер смотрит в эту большую локалку интерфейсом eth0.
Пока, на сервере настройки для этого интерфейса такие***:

address 10.103.0.120
netmask 255.255.0.0

***С такими настройками eth0 сервер «видят» только клиенты города А (10.103.0.Х)


--------
Так же на сервере (для обслуживания интерфейсов eth1 и eth2) настроено:

  • DNS-сервер (dnsmasq)
  • DHCP-сервер (dnsmasq)
  • TFTP-сервер (tftpd-hpa)
  • Файл-сервер (Samba)
  • Web-сервер (Apache)


---
Интерфейсы моего сервера eth1 и eth2 смотрят в свои мини-локалки. Сервер эти сетевые интерфейсы должен обслуживать, а именно:
1) Раздавать IP по DHCP в эти две мини-сети;
2) Давать возможность клиентам eth1 и eth2 сетей загружаться по PXE;
3) Давать возможность клиентам eth1 и eth2 сетей пользоваться файловыми ресурсами сервера;
4) Раздавать клиентам eth1 и eth2 сетей интернет, взятый из eth3;
5) Клиенты сетей eth1 и eth2 должны иметь возможность «видеть» мою рабочую машину находящуюся в корпоративной сети города А (10.103.0.Х).
------
Настройки на сервере интерфейсов eth1 и eth2 следующие:

auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0

auto eth2
iface eth2 inet static
address 192.168.2.1
netmask 255.255.255.0


---
На сегодняшний день сервер работает следующем режиме (настройки eth0 -address 10.103.0.120 netmask 255.255.0.0):

1) Клиенты сети города А(10.103.0.Х) могут достучаться к клиентам мини-сетей (eth1 и eth2), которые обслуживает мой сервер.
* Этого добился путем прописывания маршрута на машинах сети города А (route -p add 192.168.0.0 mask 255.255.255.0 10.103.0.120).
2) Клиенты сети 192.168.1.Х(eth1) получают IP и интернет от моего сервера, могут заходить в сеть города А(10.103.0.Х) и в сеть eth2.
3) Клиенты сети 192.168.2.Х(eth2) получают IP и интернет от моего сервера, могут заходить в сеть города А(10.103.0.Х) и в сеть eth1.
4) Клиенты сетeй eth1 и eth2 грузятся по PXE с моего сервера.
5) Клиенты сети города Б(10.102.0.Х) вообще не «знают» о моем сервере (10.103.0.120).
6) Мой сервер берет интернет из eth3 и раздает его в сети eth1 и eth2.


---
Стоит мне только на моем сервере дописать шлюз и dns в настройках сетевого интерфейса eth0 (или получить все это по DHCP), сразу происходят метаморфозы:

  • мой сервер сразу начинает лезть за интернетом в сеть города А(10.103.0.Х). - мне это архиненужно.
  • клиенты города А и Б видят мой сервер.
  • все остальное продолжает работать штатно (я имею ввиду работу подсетей на eth1 и eth2).


Пока все это писал появилась идея, а не поменять ли местами названия сетевых интерфейсов eth0 и eth3?
Ведь по сути мой сервер ищет первый попавшийся шлюз, и через него направляет все остальные запросы не прописанные в таблице маршрутизации.
Уважаемые, подскажите, посоветуйте, что и как делать/менять? А то голова уже совсем запуталась от кучи мануалов и гугления.

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

Менять названия нафиг не нужно, это не при делах. По поводу того что город Б не знает про твой сервер - судя по описанию, это твой сервер не знает про город Б. И когда на него приходят запросы из города Б, он не зная что это за сеть и как на неё попасть отправляет все пакеты через eth3. Как люди писали выше - тебе надо на твоём сервере добавить маршрут, route -p add 10.102.0.0 mask 255.255.255.0 via (здесь адресс шлюза сети города А, я так понимаю, это сервер А). Так он будет знать куда слать ответы на запросы полученные от клиентов города Б

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

Да, наверно Вы уважаемый правы, я это и подразумевал, что сервер использует в качестве шлюза интерфейс eth3, и все пакеты отправляет туда. Сегодня постараюсь попробовать добавить маршрут. Однозначно благодарю за подсказки.

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

Прописал маршруты как вы советовали, и заработало!!!))) Я даже не поверил своим глазам по-началу.
В общем дописал в /etc/network/interfaces слудующее:
up route add -net 10.102.0.0 netmask 255.255.0.0 gw 10.103.0.1 eth0
Сейчас разбираюсь с DNS, так как попасть на мой сервер можно только по ip, по имени не находит.

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