Pull to refresh

Что нам стоит сеть построить

Reading time5 min
Views11K
&nbsp Думаю каждому (а если и не каждому, то многим) из нас (сисадминов) хоть раз, да ставилась задача об объединении нескольких удаленных офисов в единую корпоративную сеть, и каждый находил/выбирал свое решение.
&nbsp В настоящие время, существует множество различных решений, для реализации которых можно использовать как специальные аппаратные решения, так и обычные компьютеры, с любой ОС на борту.
&nbsp В данной статье, хочу рассказать о том, как объединить три удаленных офиса в одну корпоративную сеть, с разными подсетями для каждого подразделения. Все это я предлагаю поднять используя только дистрибутив OpenBSD.

Нам понадобится:
  • Три ПК средней конфигурации (CPU 1,7Ghz, RAM 512Mb, HDD 20Gb, 2x Lan100Mb)
  • Статические IP адреса на WAN портах
  • Дистриб OpenBSD
  • 40 минут вашего драгоценного времени (включая установку ОС)
Для начала давайте определим некоторые «переменные»:
  • gw1 — «центральный» гейт
  • gw2 — «дочерний» гейт №1
  • gw3 — «дочерний» гейт №2
  • vic0 — внешний интерфейс
  • vic1 — внутренний интерфейс
Добавим немного цветовой раскраски, дабы вам было понятней что к чему относится:
  • зелный шрифт gw1-gw2
  • синий шрифт gw1-gw3
&nbsp Установку системы я описывать не буду, тем более, в версии 4.8 (которая использовалась для написания этой статьи), есть скрипт автоматической разметки HDD, что очень упростит установку системы даже для начинающего пользователя.

&nbsp После успешной установки системы необходимо включить фаервол, форвардинг и прописать для исполнения файл с содержанием статических маршрутов:
# vi /etc/rc.conf (Включаем PF)
&nbsp pf=YES
# vi /etc/sysctl.conf (Включаем форвардинг)
&nbsp net.inet.ip.forwarding=1
# vi /etc/rc.local (Запускаем static_routes при включении)
&nbsp /etc/static_routes

Теперь определимся с будущим «центральным» гейтом, определились (у меня это будет GW1), отлично, перейдем к его конфигурации, изначально предположив что сетевые интерфейсы наших гейтов настроены примерно так:



GW1



Первым делом поднимем выделенный сетевой интерфейс lo1 который однозначно идентифицирует маршрутизатор и всегда поднят:
# vi /etc/hostname.lo1
&nbsp !ifconfig lo1 create
&nbsp !ifconfig lo1 192.168.254.1 netmask 255.255.255.255


Теперь очередь gif интерфейсов:
# vi /etc/hostname.gif0
&nbsp !ifconfig gif0 create
&nbsp !ifconfig gif0 192.168.255.1 netmask 255.255.255.252 192.168.255.2
&nbsp !ifconfig gif0 tunnel 11.11.11.1 22.22.22.2
&nbsp !ifconfig gif0 up

# vi /etc/hostname.gif1
&nbsp !ifconfig gif1 create
&nbsp !ifconfig gif1 192.168.255.3 netmask 255.255.255.252 192.168.255.4
&nbsp !ifconfig gif1 tunnel 11.11.11.1 33.33.33.3
&nbsp !ifconfig gif1 up


Устанавливаем права:
# chmod 640 /etc/hostname.*

Добавим маршруты:
# vi /etc/static_routes
&nbsp&nbsp/sbin/route add -host 192.168.254.2 192.168.255.2
&nbsp /sbin/route add -net 192.168.15.0/24 192.168.255.2

&nbsp&nbsp/sbin/route add -host 192.168.254.3 192.168.255.4
&nbsp /sbin/route add -net 192.168.16.0/24 192.168.255.4


И установим нужные права для запуска:
# chmod a+x /etc/static_routes

Теперь сконфигурируем фаервол:
# vi /etc/pf.conf
&nbsp ext_if="vic0"
&nbsp int_if="vic1"
&nbsp set skip on lo
&nbsp set skip on gif0
&nbsp set skip on gif1
&nbsp match in all scrub (no-df)
&nbsp match out all scrub (no-df)
&nbsp match on $ext_if from 192.168.0.0/16 to !192.168.0.0/16 binat-to ($ext_if:0)
&nbsp block in on $int_if
&nbsp pass in quick on $int_if from 192.168.0.0/16 to 192.168.0.0/16 keep state
&nbsp pass out quick on $int_if from 192.168.0.0/16 to 192.168.0.0/16 keep state


С настройкой gw1 закончили, перезагружаемся, и переходим к остальным
# reboot

gw1 готов, теперь переходим к gw2 и gw3

GW2



Здесь все аналогично, поэтому комментарии будут излишни.
# vi /etc/hostname.lo1
&nbsp !ifconfig lo1 create
&nbsp !ifconfig lo1 192.168.254.2 netmask 255.255.255.255


# vi /etc/hostname.gif0
&nbsp !ifconfig gif0 create
&nbsp !ifconfig gif0 192.168.255.2 netmask 255.255.255.252 192.168.255.1
&nbsp !ifconfig gif0 tunnel 22.22.22.2 11.11.11.1
&nbsp !ifconfig gif0 up


# chmod 640 /etc/hostname.*

# vi /etc/static_routes
&nbsp&nbsp/sbin/route add -net 192.168.0.0/16 192.168.255.2


# chmod a+x /etc/static_routes

# vi /etc/pf.conf
&nbsp ext_if="vic0"
&nbsp int_if="vic1"
&nbsp set skip on lo
&nbsp set skip on gif0
&nbsp match in all scrub (no-df)
&nbsp match out all scrub (no-df)
&nbsp match on $ext_if from 192.168.0.0/16 to !192.168.0.0/16 binat-to ($ext_if:0)
&nbsp block in on $int_if
&nbsp pass in quick on $int_if from 192.168.0.0/16 to 192.168.0.0/16 keep state
&nbsp pass out quick on $int_if from 192.168.0.0/16 to 192.168.0.0/16 keep state


# reboot

GW3



# vi /etc/hostname.lo1
&nbsp !ifconfig lo1 create
&nbsp !ifconfig lo1 192.168.254.3 netmask 255.255.255.255


# vi /etc/hostname.gif0
&nbsp !ifconfig gif0 create
&nbsp !ifconfig gif0 192.168.255.4 netmask 255.255.255.252 192.168.255.3
&nbsp !ifconfig gif0 tunnel 33.33.33.3 11.11.11.1
&nbsp !ifconfig gif0 up


# chmod 640 /etc/hostname.*

# vi /etc/static_routes
&nbsp /sbin/route add -net 192.168.0.0/16 192.168.255.4


# chmod a+x /etc/static_routes

# vi /etc/pf.conf
&nbsp ext_if="vic0"
&nbsp int_if="vic1"
&nbsp set skip on lo
&nbsp set skip on gif0
&nbsp match in all scrub (no-df)
&nbsp match out all scrub (no-df)
&nbsp match on $ext_if from 192.168.0.0/16 to !192.168.0.0/16 binat-to ($ext_if:0)
&nbsp block in on $int_if
&nbsp pass in quick on $int_if from 192.168.0.0/16 to 192.168.0.0/16 keep state
&nbsp pass out quick on $int_if from 192.168.0.0/16 to 192.168.0.0/16 keep state


# reboot


В результате получаем следующую схему:



А теперь посмотрим как это работает:

Трассировка из сети 192.168.14.0/24
# traceroute 192.168.15.2
&nbsp traceroute to 192.168.15.2 (192.168.15.2), 64 hops max, 40 byte packets
&nbsp 1 192.168.14.1 (192.168.14.1) 0.437 ms 0.215 ms 0.294 ms
&nbsp 2 192.168.255.2 (192.168.255.2) 0.934 ms 0.674 ms 0.646 ms
&nbsp 3 192.168.15.2 (192.168.15.2) 1.107 ms 1.3 ms 0.920 ms
# traceroute 192.168.16.2
&nbsp traceroute to 192.168.16.2 (192.168.16.2), 64 hops max, 40 byte packets
&nbsp 1 192.168.14.1 (192.168.14.1) 0.356 ms 0.206 ms 0.192 ms
&nbsp 2 192.168.255.4 (192.168.255.4) 0.748 ms 0.666 ms 0.631 ms
&nbsp 3 192.168.16.2 (192.168.16.2) 0.940 ms 0.892 ms 0.843 ms


Трассировка из сети 192.168.15.0/24
# traceroute 192.168.14.2
&nbsp traceroute to 192.168.14.2 (192.168.14.2), 64 hops max, 40 byte packets
&nbsp 1 192.168.15.1 (192.168.15.1) 0.745 ms 0.208 ms 0.294 ms
&nbsp 2 192.168.255.1 (192.168.255.1) 0.768 ms 0.855 ms 0.677 ms
&nbsp 3 192.168.14.2 (192.168.14.2) 0.933 ms 0.830 ms 0.853 ms
# traceroute 192.168.16.2
&nbsp traceroute to 192.168.16.2 (192.168.16.2), 64 hops max, 40 byte packets
&nbsp 1 192.168.15.1 (192.168.15.1) 0.450 ms 0.207 ms 0.372 ms
&nbsp 2 192.168.255.1 (192.168.255.1) 0.710 ms 1.290 ms 0.711 ms
&nbsp 3 192.168.255.4 (192.168.255.4) 1.243 ms 1.194 ms 1.42 ms
&nbsp 4 192.168.16.2 (192.168.16.2) 1.341 ms 1.445 ms 1.315 ms


Трассировка из сети 192.168.16.0/24
# traceroute 192.168.14.2
&nbsp traceroute to 192.168.14.2 (192.168.14.2), 64 hops max, 40 byte packets
&nbsp 1 192.168.16.1 (192.168.16.1) 0.480 ms 0.222 ms 0.191 ms
&nbsp 2 192.168.255.3 (192.168.255.3) 0.814 ms 0.775 ms 0.715 ms
&nbsp 3 192.168.14.2 (192.168.14.2) 1.168 ms 1.43 ms 0.861 ms
# traceroute 192.168.15.2
traceroute to 192.168.15.2 (192.168.15.2), 64 hops max, 40 byte packets
&nbsp 1 192.168.16.1 (192.168.16.1) 0.458 ms 0.234 ms 0.269 ms
&nbsp 2 192.168.255.3 (192.168.255.3) 0.780 ms 0.642 ms 0.661 ms
&nbsp 3 192.168.255.2 (192.168.255.2) 1.171 ms 0.989 ms 1.11 ms
&nbsp 4 192.168.15.2 (192.168.15.2) 1.519 ms 1.595 ms 1.333 ms


Ну вот кажется и все, все работает. Конечно еще можно прикрутить IPsec, но эта тема уже для другой статьи.
Tags:
Hubs:
+50
Comments47

Articles