Jump to content
Калькуляторы

Проблемы с несимметричным роутингом во FreeBSD.

Здравствуйте!

 

Схема подключения следующая: есть два гейта: gate1 и gate2. Веб-сервер в DMZ зоне имеет айпишник x.x.47.2. Веб-сервер подлкючен к обоим гейтам. IP сетевого интерфейса DMZ

на gate1 - x.x.47.254,

на gate2 - x.x.47.1 соотвественно.

 

Сеть 10.1.x.x ходит через gate1,

10.2.x.x - через gate2.

 

На веб-сервере прописаны роуты:

для сети 10.1.x.x - x.x.47.254

и для сети 10.2.x.x - x.x.47.1.

 

Схема 10.1.x.x->gate1->dmz->gate1->10.1.x.x работает. Схема 10.2.x.x->gate2->dmz->gate2->10.2.x.x тоже работает.

Хотелось бы, чтобы абоненты работали по такой схеме:

1) 10.1.x.x->gate1->dmz->gate2->10.1.x.x

2) 10.2.x.x->gate2->dmz->gate1->10.2.x.x соответственно.

 

Рассмотрим 1-ю схему: пытаюсь зайти на веб-сервер, но не получается.

При этом, на сетевом интерфейсе DMZ на gate2 вижу пакеты, но на внтуреннем интерфейсе gate2 в локалку пакетов уже нет. Аналогчино и для 2-го варианта - на сетевом интерфейсе DMZ на gate1 вижу пакеты, а на внутреннем нет.

Кусок pf gate1:

ext_if = "em0"
int_if = "em1"
dmz_if = "em2"

table <LAN> const { 192.168.0.0/16, 10.0.0.0/8, 197.0.0.0/8 }
pass quick from x.x.47.2 to <LAN> keep state
block on { $ext_if, $int_if } all

По идее pass quick выше - должно перекрывать block on, но сайт не работает.

Если закомментировать

#block on { $ext_if, $int_if } all

, то пакеты видим на внутреннем интерфейсе gate2, видим на сетевухе абонента wireshark`ом, но сайт при этом все равно не открывается.

ICMP и порт 53 ходят отлично.

Edited by nicol@s

Share this post


Link to post
Share on other sites
На веб-сервере прописаны роуты:

для сети 10.1.x.x - x.x.47.254 gate 1

и для сети 10.2.x.x - x.x.47.1. gate 2

 

Схема 10.1.x.x->gate1->dmz->gate1->10.1.x.x работает. Схема 10.2.x.x->gate2->dmz->gate2->10.2.x.x тоже работает.

Ну так как роутинг работает по адресам назначения, то так и будет работать. У вас маршрут к двум сетям через свои шлюзы, вот траффик и возвращается через свои шлюзы.

 

Хотелось бы, чтобы абоненты работали по такой схеме:

1) 10.1.x.x->gate1->dmz->gate2->10.1.x.x

2) 10.2.x.x->gate2->dmz->gate1->10.2.x.x соответственно.

Те вы хотите чтобы DMZ отдавал траффик исходящий через противоположный шлюз? Для этого вам надо прописать роутинг на нем,

для сети 10.1.x.x -  x.x.47.1
и для сети 10.2.x.x -  x.x.47.254

 

Share this post


Link to post
Share on other sites
Те вы хотите чтобы DMZ отдавал траффик исходящий через противоположный шлюз? Для этого вам надо прописать роутинг на нем,

для сети 10.1.x.x -  x.x.47.1
и для сети 10.2.x.x -  x.x.47.254

В том то все и дело, что мы прописывали так, но возникала проблема
При этом, на сетевом интерфейсе DMZ (em2) gate2 вижу пакеты, но на внтуреннем интерфейсе gate2 (em1) в локалку пакетов уже нет. Аналогчино и для 2-го варианта - на сетевом интерфейсе DMZ (em2) gate1 вижу пакеты, а на внутреннем (em1) - нет.

Кусок pf gate1:

Код

ext_if = "em0"

int_if = "em1"

dmz_if = "em2"

 

table <LAN> const { 192.168.0.0/16, 10.0.0.0/8, 197.0.0.0/8 }

pass quick from x.x.47.2 to <LAN> keep state

block on { $ext_if, $int_if } all

 

По идее pass quick выше - должно перекрывать block on, но сайт не работает.

Если закомментировать

Код

#block on { $ext_if, $int_if } all

 

, то пакеты видим на внутреннем интерфейсе gate2, видим на сетевухе абонента wireshark`ом, но сайт при этом все равно не открывается.

ICMP и порт 53 ходят отлично.

Если Вы имели ввиду, как зарулить трафик на самом DMZ - это не проблема. Вопрос в том, почему при схеме, скажем, 10.1.x.x->gate1->dmz->gate2->10.1.x.x трафик на gate2 не попадает с интерфейса DMZ (em2) на внутренний интерфейс (em1).

shema.jpg

Edited by nicol@s

Share this post


Link to post
Share on other sites
Кусок pf gate1:

Код

ext_if = "em0"

int_if = "em1"

dmz_if = "em2"

 

table <LAN> const { 192.168.0.0/16, 10.0.0.0/8, 197.0.0.0/8 }

pass quick from x.x.47.2 to <LAN> keep state

block on { $ext_if, $int_if } all

При таком наборе правил клиенты не смогут сделать запрос к вебсерверу, так как он обработается block on. Лишь при исходящих запросах от сервера сработает pass, создастся состояние и пакеты пойдут на время конкретной сессии.

 

И какие пакеты вы видите у клиента? Телнет на 80 порт что говорит? МОжет у вас закрыт как-то tcp, 53 порт, это udp(dns).

Share this post


Link to post
Share on other sites

Прошу прощения, ошибся! Это кусочек конфига c gate2, а не с gate1.

Share this post


Link to post
Share on other sites

Что за пакеты вы видите?

HTTP? Телнетом пробовали забирать страничку?

 

Share this post


Link to post
Share on other sites

Да, http.

Если можно,я в понедельник утром выложу tcpdump пакетов.

При этом пинги идут отлично от клиента до x.x.47.2 и nslookup проходит.

Share this post


Link to post
Share on other sites

Еще раз потестировал схему

10.1.2.123->gate1->dmz->gate2->10.1.2.123

 

При такой схеме пакет идет от абонента через gate1, доходит до интерфейса веб-сервера, согласно внутреннему роутингу посылается на gate2 и обрывается на em2 gate2.

Если закомментить правила block, то пакеты проходят, через gate2, но летят без остановки до абонента, и соединение не устанавливается.

 

Покажу вывод tcpdump:

Строку pf на gate2

block on { $ext_if, $int_if } all

оставим незакомментированной.

 

Что вижу: пинги с абонента идут нормально, nslookup проходит, трассировка тоже. Пробую зайти на сайт от абонента - тишина. На интерфейсе абонента и на внутреннем интерфейсе gate2 (em1) пакетов не вижу. Пробую забирать телнетом - неудача:

$ telnet x.x.47.2 80
Trying x.x.47.2...
Connected to x.x.47.2
Escape character is '^]'.
get index.html
^]
telnet> quit
Connection closed.

 

Теперь закомментирую

block on { $ext_if, $int_if } all

Пинги, трассировка, nslookup проходят.

Пробую зайти на сайт и вижу просто кучу пакетов на интерфейсах em1, em2 ( на gate2 ) и на интерфейсе абонента. Вот tcpdump:

на интерфейсе em2 (gate2)

tcpdump -ni em2 host 10.1.2.123 and host x.x.47.2
11:45:36.445602 IP x.x.47.2.80 > 10.1.2.123.50462: S 3361253988:3361253988(0) ack 1389169065 win 65535 <mss 1460>
11:45:36.446266 IP x.x.47.2.80 > 10.1.2.123.50462: S 3361253988:3361253988(0) ack 1389169065 win 65535 <mss 1460>

 

То же самое вижу на внутреннем интерфейсе em1 gate2 (очень много):

11:45:38.930486 IP x.x.47.2.80 > 10.1.2.123.59275: S 3241377898:3241377898(0) ack 429987545 win 65535 <mss 1460>
11:45:38.930934 IP x.x.47.2.80 > 10.1.2.123.59275: S 3241377898:3241377898(0) ack 429987545 win 65535 <mss 1460>

На сетевом интерфейсе абонента вижу очень много:

tcpdump -ni eth0 host x.x.47.2
11:45:40.988540 IP 10.1.2.123.60970 > x.x.47.2.80: . ack 3983708364 win 5840
11:45:40.988919 IP x.x.47.2.80 > 10.1.2.123.60970: S 3471187685:3471187685(0) ack 4239563930 win 65535 <mss 1460>

И сайт не открывается.

Телнет тоже ничего не возвращает:

telnet x.x.47.2 80
Trying x.x.47.2...
Connected to x.x.47.2.
Escape character is '^]'.
get index.php
^]

telnet> quit
Connection closed.

 

 

Share this post


Link to post
Share on other sites

Отключите PF, проверьте голый роутинг.

Share this post


Link to post
Share on other sites

А можно вопрос по сути: зачем вообще строить такую схему?

Поддержу предыдущего оратора - начала настраивают без пакетного фильтра, потом шашечки.

 

Лично бы я строил бы на 2 шлюзах, но с использованием CARP - дешевое отказоустойчивое решение, а трафик резать файрволлом.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this